В Документе "Справка 2-НДФЛ для передачи в ИФНС" при отгулянном отпуске больше, чем нужно, и в последующем увольнении проставляется доход 2012 со знаком минус.
Контур такой отчёт не принимает. Необходимо, чтобы этот минус учитывался в последнем месяце начислений по коду 2012.
Также я учёл нюанс, когда в последнем положительном месяце не хватает денег, чтобы учесть минус.
Ещё момент: Справка 2-НДФЛ для сотрудника должна печататься так, как было.
Решение:
1. Документ "СправкаПоНДФЛВНалоговыйОрган", ФормаДокумента
Процедура КнопкаОбновитьДанныеОДоходахНажатие(Элемент)
..........
СправкиПоНДФЛ.УдалитьДанныеСправки(ТекущийНомерСправки, СведенияОДоходах);
СправкиПоНДФЛ.УдалитьДанныеСправки(ТекущийНомерСправки, СведенияОВычетах);
СправкиПоНДФЛ.УдалитьДанныеСправки(ТекущийНомерСправки, СуммыНалогов);
///
СправкиПоНДФЛ.ПрочитатьДанныеСправки(ТекущаяСтрока, СведенияОДоходах, СведенияОВычетах, СуммыНалогов, НалоговыйПериод, Организация, мГоловнаяОрганизация, ОКАТО_КПП, НачалоМесяца(Дата), Истина); //(Добавил для отсечки данной процедуры от другого документа)
// TVA/>
КонецЕсли;
КонецПроцедуры
2. Документ "СправкаПоНДФЛВНалоговыйОрган", Модуль объекта
Процедура Автозаполнение() Экспорт
..........
(там формируется большой запрос в "Если ... Иначе", после этого я добавил строку)
..........
СотрудникиОрганизации.Загрузить(СправкиПоНДФЛ.ДанныеСотрудников(Запрос.Выполнить().Выгрузить(), Дата, НалоговыйПериод));
Для каждого СтрокаТЧ Из СотрудникиОрганизации Цикл
СтрокаТЧ.НомерСправки = НомерПервойСправки + СотрудникиОрганизации.Индекс(СтрокаТЧ)
КонецЦикла;
СтруктураДанных = СправкиПоНДФЛ.ДанныеОДоходах(СотрудникиОрганизации.Выгрузить(), НалоговыйПериод, Организация, ОбщегоНазначения.ГоловнаяОрганизация(Организация), ОКАТО_КПП, НачалоМесяца(Дата));
///
СправкиПоНДФЛ.ПереносОтрицательногоОстаткаНДФЛПоКоду2012(СтруктураДанных.Доходы);
// TVA/>
СведенияОДоходах.Загрузить(СтруктураДанных.Доходы);
СведенияОВычетах.Загрузить(СтруктураДанных.Вычеты);
..........
КонецПроцедуры // Автозаполнение()
3. Общий модуль "СправкиПоНДФЛ".
///
Процедура ПрочитатьДанныеСправки(ОписаниеСправки, СведенияОДоходах, СведенияОВычетах, СуммыНалогов, НалоговыйПериод, Организация, ГоловнаяОрганизация, ОКАТО_КПП, Дата, ЭтоИсправление = Ложь) Экспорт //(Добавил для отсечки данной процедуры от другого документа)
// TVA/>
ФизЛицо = ОписаниеСправки.Сотрудник;
Ставка = ОписаниеСправки.Ставка;
Если Не ЗначениеЗаполнено(Организация) Или Не ЗначениеЗаполнено(ФизЛицо) Или (НалоговыйПериод < 2011 и Не ЗначениеЗаполнено(Ставка)) Тогда
Возврат
КонецЕсли;
ТаблицаСотрудников = Новый ТаблицаЗначений;
ТаблицаСотрудников.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица"));
ТаблицаСотрудников.Колонки.Добавить("Ставка", Новый ОписаниеТипов("ПеречислениеСсылка.НДФЛСтавки"));
ТаблицаСотрудников.Колонки.Добавить("НомерСправки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(8, 0)));
ЗаполнитьЗначенияСвойств(ТаблицаСотрудников.Добавить(), ОписаниеСправки);
СтруктураДанных = ДанныеОДоходах(ТаблицаСотрудников, НалоговыйПериод, Организация, ГоловнаяОрганизация, ОКАТО_КПП, Дата);
///
Если ЭтоИсправление Тогда
ПереносОтрицательногоОстаткаНДФЛПоКоду2012(СтруктураДанных.Доходы);
КонецЕсли;
// TVA/>
Для каждого СтрокаТЗ Из СтруктураДанных.Доходы Цикл
..........
КонецПроцедуры
..........
(И в этом же общем модуле полностью новая процедура)
..........
///
//В Документе СправкаПоНДФЛВНалоговыйОрган при отгуленном отпуске больше, чем нужно и
//последующем увольнении проставляется доход 2012 со знаком минус.
//Контур такой отчёт не принимает. Необходимо, чтобы этот минус учитывался в последнем месяце
//начислений по коду 2012.
Процедура ПереносОтрицательногоОстаткаНДФЛПоКоду2012(ТЗ) Экспорт
ДоходНДФЛ2012 = Справочники.ДоходыНДФЛ.Код2012;
ДоходыСКодом2012 = Новый ТаблицаЗначений;
ДоходыСКодом2012.Колонки.Добавить("НомерСтроки");
ДоходыСКодом2012.Колонки.Добавить("НомерСправки");
ДоходыСКодом2012.Колонки.Добавить("СуммаДохода");
ДоходыСКодом2012.Колонки.Добавить("СуммаВычета");
Для Каждого СтрокаТЗ Из ТЗ Цикл
Если СтрокаТЗ.КодДохода = ДоходНДФЛ2012 Тогда
НоваяСтрока = ДоходыСКодом2012.Добавить();
НоваяСтрока.НомерСтроки = ТЗ.Индекс(СтрокаТЗ);
НоваяСтрока.НомерСправки = СтрокаТЗ.НомерСправки;
НоваяСтрока.СуммаДохода = СтрокаТЗ.СуммаДохода;
НоваяСтрока.СуммаВычета = СтрокаТЗ.СуммаВычета;
КонецЕсли;
КонецЦикла;
ъ = ДоходыСКодом2012.Количество() - 1;
СуммаДоходаДляПравки = 0;
СуммаВычетаДляПравки = 0;
НомерСправки = -1;
Пока ъ >= 0 Цикл
Если (НомерСправки <> ДоходыСКодом2012[ъ].НомерСправки) И (НомерСправки <> -1) Тогда
СуммаДоходаДляПравки = 0;
СуммаВычетаДляПравки = 0;
КонецЕсли;
НомерСправки = ДоходыСКодом2012[ъ].НомерСправки;
Если ДоходыСКодом2012[ъ].СуммаДохода < 0 Тогда
СуммаДоходаДляПравки = СуммаДоходаДляПравки + ДоходыСКодом2012[ъ].СуммаДохода;
СуммаВычетаДляПравки = СуммаВычетаДляПравки + ДоходыСКодом2012[ъ].СуммаВычета;
ТЗ.Удалить(ДоходыСКодом2012[ъ].НомерСтроки);
Иначе
Если (СуммаДоходаДляПравки <> 0) Или (СуммаВычетаДляПравки <> 0) Тогда
Если (ДоходыСКодом2012[ъ].СуммаДохода + СуммаДоходаДляПравки) > 0 Тогда
ТЗ[ДоходыСКодом2012[ъ].НомерСтроки].СуммаДохода = ТЗ[ДоходыСКодом2012[ъ].НомерСтроки].СуммаДохода + СуммаДоходаДляПравки;
СуммаДоходаДляПравки = 0;
ТЗ[ДоходыСКодом2012[ъ].НомерСтроки].СуммаВычета = ТЗ[ДоходыСКодом2012[ъ].НомерСтроки].СуммаВычета + СуммаВычетаДляПравки;
СуммаВычетаДляПравки = 0;
Иначе
СуммаДоходаДляПравки = СуммаДоходаДляПравки + ТЗ[ДоходыСКодом2012[ъ].НомерСтроки].СуммаДохода;
ТЗ.Удалить(ДоходыСКодом2012[ъ].НомерСтроки);
КонецЕсли;
КонецЕсли;
КонецЕсли;
ъ = ъ - 1;
КонецЦикла;
КонецПроцедуры
// TVA/>