Имя: Пароль:
1C
1С v8
(ЗУП 2.5) Рассчет НДФЛ
0 vechiy
 
19.10.11
12:56
Коллеги, подскажите, каким алгоритмом рассчитывается НДФЛ в зупе?
1 zak555
 
19.10.11
12:58
их два
2 almar
 
19.10.11
13:01
(0) Бывает 13 процентов, бывает 30, бывает 9
3 zak555
 
19.10.11
13:06
(2) есть исчисленный, есть удержанный
4 vechiy
 
19.10.11
13:08
(3) можно подробней?:) там же не просто на 0.13 умножается
5 zak555
 
19.10.11
13:09
(4) совершенно верно
6 zak555
 
19.10.11
13:09
причём копьё не учитывается
7 zak555
 
19.10.11
13:10
открой модуль и посмотри
8 vechiy
 
19.10.11
13:11
пытаюсь вот найти. в каком модуле хоть?)
9 zak555
 
19.10.11
13:11
модули расчёта из 77 комплексной :
10 vechiy
 
19.10.11
13:11
ну и в чем вообще суть алгоритма то..)
11 zak555
 
19.10.11
13:12
НДФЛ по ставке 13% (или 30% для нерезидентов) - исчисленный

//******************************************************************************
//    Предопределенная процедура
//
Процедура ПровестиРасчет()
   
   // если запись исправлена или фиксирована, то ее не рассчитываем
   Если (Исправлена=1) или (Фиксирована=1) Тогда
       глСообщениеТрассировки(глСообщенияТрассировки, "" + ?(Исправлена=1,"Результат записи исправлен вручную","Запись фиксирована") + ". Расчет не проводился.", , 1);
       Возврат
   КонецЕсли;
   
   Результат = 0;
   
   // в таблице ДоходыВычетыНалогиСотрудников могут находиться предварительно собранные
   // данные о доходах сотрудника, если это не так - соберем их заново
   ДоходыУжеСобраны=0;
   Если ДатаГод(ДатаОкончания) = ДатаГод(ПериодРегистрации.ДатаОкончания) Тогда // данные в групповых расчетах собираются только за год расчета
       Если ТипЗначения(глДоходыВычетыНалогиСотрудников)=100 Тогда
           Если глДоходыВычетыНалогиСотрудников.КоличествоСтрок() > 12 Тогда // доходы собирались в групповом расчете - и они актуальны
               ДоходыВычетыНалогиСотрудников = глДоходыВычетыНалогиСотрудников;
               ДоходыУжеСобраны=1;
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   
   Если ДоходыУжеСобраны = 0 Тогда
       глСообщениеТрассировки(глСообщенияТрассировки, "Сбор данных о доходах и вычетах за " + ДатаГод(ДатаОкончания) +" год", 0, 1);
       ДоходыВычетыНалогиСотрудников = "";
       Если глСобратьДанныеДляНДФЛВыбор(Объект.ЮрЛицо, ДоходыВычетыНалогиСотрудников,Объект,ДатаОкончания) = 0 Тогда
           глСообщениеТрассировки(глСообщенияТрассировки, "Не удалось обработать данные о доходах и вычетах!" , 1, 1);
           Возврат
       КонецЕсли;
   КонецЕсли;
   
   СтрокаИтоговойТаблицы="";
   ДоходыВычетыНалогиСотрудников.НайтиЗначение(глПолучитьУникальныйКодСотрудника(Объект)+"01",СтрокаИтоговойТаблицы,1);    
   Если СтрокаИтоговойТаблицы = 0 Тогда // работа процедуры глСобратьДанныеДляНДФЛ была прервана - делать больше нечего
       глСообщениеТрассировки(глСообщенияТрассировки, "Не удалось обработать данные о доходах и вычетах!" , 1, 1);
       Возврат
   КонецЕсли;
   
   ИтогиПоГодуСотра=СоздатьОбъект("Справочник.НКИтогиПоГоду");
   ИтогиПоГодуСотра.ИспользоватьВладельца(Объект);
   ИтогиПоГодуСотра.НайтиПоКоду(Строка(ДатаГод(ДатаОкончания)));
   СальдоСотра = ИтогиПоГодуСотра.ДолгНаНачалоГода.Получить(КонГода(ДатаОкончания));
   
   // определим месяц, по который доходы физлица менялись
   Месяц = ДатаМесяц(ДатаОкончания);
   ПоследнийМесяц = Месяц;
   СписокПредыдущегоМесяца = СоздатьОбъект("СписокЗначений");
   // во 2 колонке - таблица доходов
   ТаблицаДоходов = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+Месяц-1,2); // начнем с текущего месяца
   Если ТипЗначения(ТаблицаДоходов) = 100 Тогда  // доходы были
       ТаблицаДоходов.Выгрузить(СписокПредыдущегоМесяца,,,"1,2,3,4");
   КонецЕсли;
   Для Сч=Месяц+1 По 12 Цикл
       
       // во 2 колонке - таблица доходов
       ТаблицаДоходов = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+Сч-1,2);
       
       Если ТипЗначения(ТаблицаДоходов) <> 100 Тогда  // доходов не было
           Продолжить
       КонецЕсли;
       
       СписокДляСравнения = СоздатьОбъект("СписокЗначений");
       ТаблицаДоходов.Выгрузить(СписокДляСравнения,,,"1,2,3,4");
       
       Если  глСпискиИдентичны(СписокДляСравнения,СписокПредыдущегоМесяца) = 1 Тогда
           Продолжить
       КонецЕсли;
       
       СписокПредыдущегоМесяца = СписокДляСравнения;
       ПоследнийМесяц = Сч; // доходы за этот месяц не совпадают с доходами предыдущего месяца - запомним его
       
   КонецЦикла;
   
   Год = ДатаГод(ДатаОкончания);  
   
   Если Год>=2011 Тогда  
       
       СтатусНеРезидента=Объект.Физлицо.СтатусНеРезидента.Получить(КонГода(ДатаОкончания));
       Резидент=?(СтатусНеРезидента=0,1,0);
       
       Если Резидент = 1 Тогда
           // на конец года сотрудник - резидент, проверим статус в текущем месяце
           СтатусНеРезидента=Объект.Физлицо.СтатусНеРезидента.Получить(КонМесяца(ДатаОкончания));
           Резидент=?(СтатусНеРезидента=0,1,0);
           
       КонецЕсли;
       
       
       СтавкаНалога=?(Резидент=0,Константа.СтавкаНДФЛсДоходовНеРезидентов.Получить(КонГода(ДатаОкончания)),
       Константа.СтавкаНДФЛсЗарплатыРезидентов.Получить(КонГода(ДатаОкончания)))
       /100;
       глСообщениеТрассировки(глСообщенияТрассировки, "Работник" + ?(Резидент=0," не","") + " является налоговым резидентом РФ; ставка НДФЛ составила " + СтавкаНалога*100 +"%", 0, 1);
       
       
       // налоговая база - 13 колонка
       НалоговаяБаза=ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+ПоследнийМесяц-1,13);
       
       Если (Резидент = 1) Тогда // налог исчисляется по доходам нарастающим итогом за год
           
           МесяцСменыСтатусаРезидента = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы,"МесяцСменыСтатусаРезидента");
           
           Если МесяцСменыСтатусаРезидента=0 Тогда
               // не менялся статус
               ИсчисленоПоТекущийМесяц=Окр(НалоговаяБаза*СтавкаНалога);
               глСообщениеТрассировки(глСообщенияТрассировки, "Данные нарастающим итогом с начала года по _П01:" ,0 , 1, ДатаОкончания, "ДММММГГГГ");
               глСообщениеТрассировки(глСообщенияТрассировки, "Налоговая база:_П01; Исчислено налога:_П02", 0, -1, НалоговаяБаза, "Ч15.2", ИсчисленоПоТекущийМесяц, "Ч15.2");
               
               // данные за предыдущий месяц
               ИсчисленоПоПредыдущийМесяц = 0;
               Если Месяц>1 Тогда
                   // налог исчисленный собран по периоду действия в 4 колонке
                   ИсчисленоПоПредыдущийМесяц = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+Месяц-2,4);    
                   глСообщениеТрассировки(глСообщенияТрассировки, "Исчислено налога по предыдущий месяц:_П01", 0, 1, ИсчисленоПоПредыдущийМесяц, "Ч15.2");
               КонецЕсли;
               
               // налог за месяц исчисляется с зачетом исчисленной ранее суммы
               Результат = ИсчисленоПоТекущийМесяц-ИсчисленоПоПредыдущийМесяц-СальдоСотра;
               глСообщениеТрассировки(глСообщенияТрассировки, "Начислено налога за текущий месяц:_П01", 0, 0, ИсчисленоПоТекущийМесяц-ИсчисленоПоПредыдущийМесяц-СальдоСотра, "Ч15.2");
               
           Иначе // менялся статус резидента
               
               
               // расчет налога резидента за период с МесяцСменыСтатусаРезидента по  Месяц
               
               НалоговаяБаза = НалоговаяБаза - ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+МесяцСменыСтатусаРезидента-2,13);
               ИсчисленоПоТекущийМесяц=Окр(НалоговаяБаза*СтавкаНалога);
               глСообщениеТрассировки(глСообщенияТрассировки, "Данные нарастающим итогом с начала года по _П01:" ,0 , 1, ДатаОкончания, "ДММММГГГГ");
               глСообщениеТрассировки(глСообщенияТрассировки, "Налоговая база:_П01; Исчислено налога:_П02", 0, -1, НалоговаяБаза, "Ч15.2", ИсчисленоПоТекущийМесяц, "Ч15.2");
               
               // данные за предыдущий месяц
               ИсчисленоПоПредыдущийМесяц = 0;
               Если Месяц>1 Тогда
                   // налог исчисленный собран по периоду действия в 4 колонке
                   ИсчисленоПоПредыдущийМесяц = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+Месяц-2,4);
                   //Вычтем исчисленный налог, когда сотрудник был нерезидентом
                   ИсчисленоПоПредыдущийМесяц = ИсчисленоПоПредыдущийМесяц - ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+МесяцСменыСтатусаРезидента-2,4);    
                   глСообщениеТрассировки(глСообщенияТрассировки, "Исчислено налога по предыдущий месяц:_П01", 0, 1, ИсчисленоПоПредыдущийМесяц, "Ч15.2");
               КонецЕсли;
               
               // налог за месяц исчисляется с зачетом исчисленной ранее суммы
               Результат13 = ИсчисленоПоТекущийМесяц-ИсчисленоПоПредыдущийМесяц-СальдоСотра;
               
               
               // расчет налога нерезидента за период с 1 меняца по МесяцСменыСтатусаРезидента-1
               СтавкаНалога= Константа.СтавкаНДФЛсДоходовНеРезидентов.Получить(КонГода(ДатаОкончания))/100;
               ИсчисленоПоТекущийМесяц = 0;
               Если МесяцСменыСтатусаРезидента>2 Тогда
                   
                   Для Сч = 1 По МесяцСменыСтатусаРезидента-1 Цикл
                       НалоговаяБаза=ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы-1+Сч,13);
                       Если Сч > 1 Тогда
                           НалоговаяБаза = НалоговаяБаза - ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+Сч-2,13);
                       КонецЕсли;
                       ИсчисленоПоТекущийМесяц = ИсчисленоПоТекущийМесяц + Окр(НалоговаяБаза * СтавкаНалога);
                   КонецЦикла;
                   
               Иначе
                   //первый месяц
                   НалоговаяБаза=ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы,13);
                   ИсчисленоПоТекущийМесяц = Окр(НалоговаяБаза * СтавкаНалога);
                   
               КонецЕсли;
               УщеИсчислено = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+МесяцСменыСтатусаРезидента-2,4);
               
               ДоначисленоНерезиден = ИсчисленоПоТекущийМесяц - УщеИсчислено;
               Если (Результат13>0) и (ДоначисленоНерезиден<0) Тогда
                   Результат = Результат13;
               Иначе
                   Результат = Результат13 + ДоначисленоНерезиден;
               КонецЕсли;    
               
               глСообщениеТрассировки(глСообщенияТрассировки, "Начислено налога за текущий месяц:_П01", 0, 0, Результат, "Ч15.2");
               
           КонецЕсли;
           
       Иначе
           
           // налог исчисляется по каждому месяцу отдельно - вычетаем доход, полученный по предыдущий месяц
           Если ПоследнийМесяц>1 Тогда
               
               ИсчисленоПоТекущийМесяц = 0;
               Для Сч = 1 По ПоследнийМесяц Цикл
                   НалоговаяБаза=ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы-1+Сч,13);
                   Если Сч > 1 Тогда
                       НалоговаяБаза = НалоговаяБаза - ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+Сч-2,13);
                   КонецЕсли;
                   ИсчисленоПоТекущийМесяц = ИсчисленоПоТекущийМесяц + Окр(НалоговаяБаза * СтавкаНалога);
               КонецЦикла;
               
               // данные за предыдущий месяц
               // налог исчисленный собран по периоду действия в 4 колонке
               ИсчисленоПоПредыдущийМесяц = 0;
               Если Месяц>1 Тогда
                   ИсчисленоПоПредыдущийМесяц = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+Месяц-2,4);    
               КонецЕсли;
               
               ИсчисленоНалога = ИсчисленоПоТекущийМесяц-ИсчисленоПоПредыдущийМесяц-СальдоСотра;
               
           Иначе
               
               ИсчисленоНалога = Окр(НалоговаяБаза * СтавкаНалога)-СальдоСотра;
               
           КонецЕсли;
           
           глСообщениеТрассировки(глСообщенияТрассировки, "Данные за _П01:" ,0 , 1, ДатаОкончания, "ДММММГГГГ");
           глСообщениеТрассировки(глСообщенияТрассировки, "Налоговая база:_П01; Исчислено налога:_П02", 0, -1, НалоговаяБаза,"Ч15.2", Окр(НалоговаяБаза * СтавкаНалога),"Ч15.2");
           глСообщениеТрассировки(глСообщенияТрассировки, "Начислено налога за текущий месяц:_П01", 0, 0, ИсчисленоНалога,"Ч15.2");
           
           Результат = ИсчисленоНалога;
       КонецЕсли;
       
   Иначе
       
       // ставка налога зависит от резидентства физлица (пп. 1 и 3 ст. 224 НК РФ)
       СтатусНеРезидента=Объект.Физлицо.СтатусНеРезидента.Получить(КонГода(ДатаОкончания));
       Резидент=?(СтатусНеРезидента=0,1,0);
       СтавкаНалога=?(Резидент=0,Константа.СтавкаНДФЛсДоходовНеРезидентов.Получить(КонГода(ДатаОкончания)),
       Константа.СтавкаНДФЛсЗарплатыРезидентов.Получить(КонГода(ДатаОкончания)))    /100;
   
       глСообщениеТрассировки(глСообщенияТрассировки, "Работник" + ?(Резидент=0," не","") + " является налоговым резидентом РФ; ставка НДФЛ составила " + СтавкаНалога*100 +"%", 0, 1);
       
       // налоговая база - 13 колонка
       НалоговаяБаза=ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+ПоследнийМесяц-1,13);
       
       Если (Резидент = 1) Тогда // налог исчисляется по доходам нарастающим итогом за год
           
           ИсчисленоПоТекущийМесяц=Окр(НалоговаяБаза*СтавкаНалога);
           глСообщениеТрассировки(глСообщенияТрассировки, "Данные нарастающим итогом с начала года по _П01:" ,0 , 1, ДатаОкончания, "ДММММГГГГ");
           глСообщениеТрассировки(глСообщенияТрассировки, "Налоговая база:_П01; Исчислено налога:_П02", 0, -1, НалоговаяБаза, "Ч15.2", ИсчисленоПоТекущийМесяц, "Ч15.2");
           
           // данные за предыдущий месяц
           ИсчисленоПоПредыдущийМесяц = 0;
           Если Месяц>1 Тогда
               // налог исчисленный собран по периоду действия в 4 колонке
               ИсчисленоПоПредыдущийМесяц = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+Месяц-2,4);    
               глСообщениеТрассировки(глСообщенияТрассировки, "Исчислено налога по предыдущий месяц:_П01", 0, 1, ИсчисленоПоПредыдущийМесяц, "Ч15.2");
           КонецЕсли;
           
           // налог за месяц исчисляется с зачетом исчисленной ранее суммы
           Результат = ИсчисленоПоТекущийМесяц-ИсчисленоПоПредыдущийМесяц-СальдоСотра;
           глСообщениеТрассировки(глСообщенияТрассировки, "Начислено налога за текущий месяц:_П01", 0, 0, ИсчисленоПоТекущийМесяц-ИсчисленоПоПредыдущийМесяц-СальдоСотра, "Ч15.2");
           
       Иначе
           
           // налог исчисляется по каждому месяцу отдельно - вычетаем доход, полученный по предыдущий месяц
           Если ПоследнийМесяц>1 Тогда
               
               ИсчисленоПоТекущийМесяц = 0;
               Для Сч = 1 По ПоследнийМесяц Цикл
                   НалоговаяБаза=ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы-1+Сч,13);
                   Если Сч > 1 Тогда
                       НалоговаяБаза = НалоговаяБаза - ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+Сч-2,13);
                   КонецЕсли;
                   ИсчисленоПоТекущийМесяц = ИсчисленоПоТекущийМесяц + Окр(НалоговаяБаза * СтавкаНалога);
               КонецЦикла;
               
               // данные за предыдущий месяц
               // налог исчисленный собран по периоду действия в 4 колонке
               ИсчисленоПоПредыдущийМесяц = 0;
               Если Месяц>1 Тогда
                   ИсчисленоПоПредыдущийМесяц = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+Месяц-2,4);    
               КонецЕсли;
               
               ИсчисленоНалога = ИсчисленоПоТекущийМесяц-ИсчисленоПоПредыдущийМесяц-СальдоСотра;
               
           Иначе
               
               ИсчисленоНалога = Окр(НалоговаяБаза * СтавкаНалога)-СальдоСотра;
               
           КонецЕсли;
           
           глСообщениеТрассировки(глСообщенияТрассировки, "Данные за _П01:" ,0 , 1, ДатаОкончания, "ДММММГГГГ");
           глСообщениеТрассировки(глСообщенияТрассировки, "Налоговая база:_П01; Исчислено налога:_П02", 0, -1, НалоговаяБаза,"Ч15.2", Окр(НалоговаяБаза * СтавкаНалога),"Ч15.2");
           глСообщениеТрассировки(глСообщенияТрассировки, "Начислено налога за текущий месяц:_П01", 0, 0, ИсчисленоНалога,"Ч15.2");
           
           Результат = ИсчисленоНалога;
       КонецЕсли;
       
   КонецЕсли;

   
КонецПроцедуры //ПровестиРасчет()
12 zak555
 
19.10.11
13:12
НДФЛ по ставке 13% (или 30% для нерезидентов) - удержанный

//******************************************************************************
//    Предопределенная процедура
//
Процедура ПровестиРасчет()

   // если запись исправлена или фиксирована, то ее не рассчитываем
   Если (Исправлена=1) или (Фиксирована=1) Тогда
       глСообщениеТрассировки(глСообщенияТрассировки, "" + ?(Исправлена=1,"Результат записи исправлен вручную","Запись фиксирована") + ". Расчет не проводился.", 0, 1);
       Возврат
   КонецЕсли;
   
   Результат = 0;
   
   НалогКУдержанию = 0;
   БылоУдержано = 0;
   УдержаноДругихНалогов=0;

   // данные по предыдущий месяц
   Месяц = ДатаМесяц(ДатаОкончания)-1;
   Если Месяц>0 Тогда
       // в таблице ДоходыВычетыНалогиСотрудников могут находиться предварительно собранные
       // данные о доходах сотрудника, если это не так - соберем их заново
       ДоходыУжеСобраны=0;
       Если ДатаГод(ДатаОкончания) = ДатаГод(ПериодРегистрации.ДатаОкончания) Тогда // данные в групповых расчетах собираются только за год расчета
           Если ТипЗначения(глДоходыВычетыНалогиСотрудников)=100 Тогда
               Если глДоходыВычетыНалогиСотрудников.КоличествоСтрок() > 12 Тогда // доходы собирались в групповом расчете - и они актуальны
                   ДоходыУжеСобраны=1;
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
       
       ДоходыВычетыНалогиСотрудников = "";
       Если ДоходыУжеСобраны = 0 Тогда
           глСообщениеТрассировки(глСообщенияТрассировки, "Сбор данных о доходах и вычетах за " + ДатаГод(ДатаОкончания) +" год", 0, 1);
           Если глСобратьДанныеДляНДФЛВыбор(Объект.ЮрЛицо, ДоходыВычетыНалогиСотрудников,Объект,ДатаОкончания) = 0 Тогда
               глСообщениеТрассировки(глСообщенияТрассировки, "Не удалось обработать данные о доходах и вычетах!" , 1, 1);
               Возврат
           КонецЕсли;;
       Иначе
           ДоходыВычетыНалогиСотрудников = глДоходыВычетыНалогиСотрудников;
       КонецЕсли;
       
       СтрокаИтоговойТаблицы="";
       ДоходыВычетыНалогиСотрудников.НайтиЗначение(глПолучитьУникальныйКодСотрудника(Объект)+глДополнитьСтроку(Месяц,2),СтрокаИтоговойТаблицы,1);
       Если СтрокаИтоговойТаблицы = 0 Тогда // работа процедуры глСобратьДанныеДляНДФЛ была прервана - делать больше нечего
           глСообщениеТрассировки(глСообщенияТрассировки, "Не удалось обработать данные о доходах и вычетах!" , 1, 1);
           Возврат
       КонецЕсли;
       // налог исчисленный собран по периоду регистрации в 7 колонке
       НалогКУдержанию = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы,7);    
       глСообщениеТрассировки(глСообщенияТрассировки, "Исчислено НДФЛ с января по " + Формат(НачМесяца(ДатаОкончания)-1,"ДММММГГГГ") + ": " + НалогКУдержанию, 0, 1);
       // налог удержанный собран в 10 колонке
       Если ДатаГод(ПериодРегистрации.ДатаНачала) > ДатаГод(ДатаНачала) Тогда  
           // если это перерасчет НДФЛ с прошлого года
           БылоУдержано = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+1,10);    
       Иначе
           БылоУдержано = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы,10);    
       КонецЕсли;        
       
       глСообщениеТрассировки(глСообщенияТрассировки, "Удержано НДФЛ с января по " + Формат(НачМесяца(ДатаОкончания)-1,"ДММММГГГГ") + ": " + БылоУдержано, 0, -1);
   КонецЕсли;
     
   ЖурналРасчетов = СоздатьОбъект("ЖурналРасчетов.Зарплата");
                 
   Если ПериодРегистрации.ДатаНачала > ПериодДействия.ДатаНачала Тогда
       НачПериода = ПериодДействия;
   Иначе
       НачПериода = ПериодРегистрации;
   КонецЕсли;
                     
   Выплачено=0;
   ВыплаченоЗаМесяц=0;    
   НалогКУдержаниюЗаМесяц=0;
   УдержаноДругихНалоговЗаМесяц=0;
   НужныйПериод = 0;
   ТекущийПериодРегистрации = НачПериода;    
   ЖурналРасчетов.ВыбратьПоЗначению("ФизЛицо", Объект.ФизЛицо, ПериодРегистрации, ПериодРегистрации);
   Пока ЖурналРасчетов.ПолучитьЗапись()=1 Цикл
       Если ЖурналРасчетов.Объект.ЮрЛицо <> Объект.ЮрЛицо Тогда
           Продолжить;
       КонецЕсли;
       ВР=ЖурналРасчетов.ВидРасч;
       Если (ВР = ВидРасчета.НДФЛУдержанный)и(ЖурналРасчетов.ДатаОкончания = ДатаОкончания) Тогда
           НужныйПериод = 1;      
       КонецЕсли;    
       Если (ВР=ВидРасчета.ПеречислениеВБанк) или (ВР = ВидРасчета.ВыплатаЗарплаты) или (ВР = ВидРасчета.УдержаниеПоИсполнительномуЛисту) Тогда            
           ВыплаченоЗамесяц = ВыплаченоЗамесяц + ЖурналРасчетов.Результат            
       ИначеЕсли (ВР=ВидРасчета.НДФЛ)и(ЖурналРасчетов.ДатаОкончания = ДатаОкончания) Тогда
           НалогКУдержаниюЗаМесяц = НалогКУдержаниюЗаМесяц + ЖурналРасчетов.Результат        
       ИначеЕсли ((ВР = ВидРасчета.НДФЛУдержанный)или (ВР=ВидРасчета.НДФЛсДивидендовУдержанный) или (ВР=ВидРасчета.НДФЛпо35процентовУдержанный))и(ЖурналРасчетов.ДатаОкончания < ДатаОкончания) Тогда
           УдержаноДругихНалоговЗаМесяц = УдержаноДругихНалоговЗаМесяц + ЖурналРасчетов.Результат;    
       КонецЕсли;      
       Если ТекущийПериодРегистрации.ДатаОкончания <> ЖурналРасчетов.ПериодРегистрации.ДатаОкончания Тогда
           ТекущийПериодРегистрации = ЖурналРасчетов.ПериодРегистрации;
           Если НужныйПериод = 1 Тогда
               НужныйПериод = 0;
               Выплачено = Выплачено + ВыплаченоЗаМесяц;
               НалогКУдержанию = НалогКУдержанию + НалогКУдержаниюЗаМесяц;
               УдержаноДругихНалогов = УдержаноДругихНалогов + УдержаноДругихНалоговЗаМесяц;
               ВыплаченоЗаМесяц = 0;                                          
               НалогКУдержаниюЗаМесяц = 0;
               УдержаноДругихНалоговЗаМесяц = 0;
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;  
     
   Если НужныйПериод = 1 Тогда
       Выплачено = Выплачено + ВыплаченоЗаМесяц;
       НалогКУдержанию = НалогКУдержанию + НалогКУдержаниюЗаМесяц;
       УдержаноДругихНалогов = УдержаноДругихНалогов + УдержаноДругихНалоговЗаМесяц;
   КонецЕсли;
   
   глСообщениеТрассировки(глСообщенияТрассировки, "Выплачено (перечислено на счета в банках) в " + Формат(ДатаОкончания,"ДММММГГГГ") + ": " + ВыплаченоЗамесяц, 0, 0);
   // ограничим сумму удержанного налога накопленной за месяц суммой выплаты
   // такова наша интерпретация п.4 ст. 226 НК РФ
   Результат=Макс(Мин(НалогКУдержанию-БылоУдержано,Цел(Выплачено-УдержаноДругихНалогов)),0);
   глСообщениеТрассировки(глСообщенияТрассировки, "К удержанию в " + Формат(ДатаОкончания,"ДММММГГГГ") + ": " + Результат, 0, 0);

КонецПроцедуры // ПровестиРасчет()
13 vechiy
 
19.10.11
13:14
пестец. сел курить.
14 almar
 
19.10.11
13:16
(13) Главное, когда покуришь, руками эти процедуры не трогай
15 ZanderZ
 
19.10.11
13:18
(14) я думаю в ЗУП 2,5 он их и не найдет
(13) кури ПроведениеРасчетов.ПолучитьДанныеНДФЛПоРегистратору
16 vechiy
 
19.10.11
13:19
мне нужно понимание алгоритма, менять ничо не надо.
эти алгоритмы ведь заданы законодательно? правильно?
17 almar
 
19.10.11
13:21
(16) Почитай налоговый кодекс, главу про НДФЛ, там проще, чем изучать законодательство по коду 1С
Ошибка? Это не ошибка, это системная функция.