При подготовке отчетности по форме 2-НДФЛ в конфигурации 1С:Зарплата и Управление Персоналом 2.5 (в частности, в релизе 2.5.114.1) разработчики и пользователи сталкиваются с неприятной ситуацией: при выборе кода дохода в документе СправкаПоНДФЛВНалоговыйОрганС2015 перестает автоматически подставляться соответствующий код вычета. Например, для дохода с кодом 2770 не подставляется предусмотренный налоговый вычет 504 (суммы возмещения стоимости медикаментов).
Проанализируем программный код документа, выясним точную причину такого поведения платформы и разберем способы устранения проблемы.
Рассмотрим функцию-обертку в модуле формы документа СправкаПоНДФЛВНалоговыйОрганС2015, которая отвечает за определение активной таблицы доходов на открытой вкладке:
Функция РедактируемоеТабличоеПолеДоходов()
СправкиПоНДФЛ.РедактируемоеТабличоеПолеДоходов(ЭлементыФормы.ПанельСодержимогоСправки, ЭлементыФормы)
КонецФункции
Посмотрим на особенности реализации этой процедуры:
РедактируемоеТабличоеПолеДоходов (пропущена буква «н»), однако это внутреннее имя вызова, которое само по себе работу не нарушает.СправкиПоНДФЛ, где функция действительно находит и возвращает элемент управления — табличное поле доходов, соответствующее текущей закладке ставки налога.Возврат.Разберем, как на такую конструкцию реагирует платформа 1С:Предприятие. В синтаксисе языка 1С отсутствие оператора Возврат внутри блока Функция ... КонецФункции не считается синтаксической ошибкой и успешно проходит синтаксический контроль при проверке конфигурации. Если поток выполнения доходит до конструкции КонецФункции без явного вызова Возврат <Значение>, платформа не выдает аварийного завершения, а неявно возвращает значение типа Неопределено.
Далее при интерактивном выборе кода дохода алгоритм пытается обратиться к текущей строке табличной части через вызов РедактируемоеТабличоеПолеДоходов().ТекущиеДанные. Так как функция вернула Неопределено, обращение к свойству либо игнорируется условием проверки, либо вызывает ошибку выполнения. В результате механизм сопоставления доходов и вычетов (хранящийся в коллекции СоответствиеДоходовИВычетов) попросту не срабатывает, и вычет не заполняется автоматически.
Если конфигурация уже находится на поддержке с возможностью изменения (или полностью снята с поддержки), исправим ошибку вручную. Разберем по шагам, что необходимо сделать:
СправкаПоНДФЛВНалоговыйОрганС2015.РедактируемоеТабличоеПолеДоходов().Возврат перед обращением к общему модулю.Исправленный фрагмент кода должен выглядеть следующим образом:
Функция РедактируемоеТабличоеПолеДоходов()
Возврат СправкиПоНДФЛ.РедактируемоеТабличоеПолеДоходов(ЭлементыФормы.ПанельСодержимогоСправки, ЭлементыФормы);
КонецФункции
После сохранения изменений функция начнет возвращать ссылку на нужный элемент управления. В результате соответствие кодов будет отрабатывать штатно:
СоответствиеДоходовИВычетов.Вставить(Справочники.ДоходыНДФЛ.Код2770, Справочники.ВычетыНДФЛ.Код504);
Данная ситуация является зарегистрированной релизной ошибкой фирмы «1С». В последующих сборках ветки 1С:ЗУП 2.5 разработчики устранили эту проблему. Если конфигурация находится на типовой поддержке и включение возможности редактирования нежелательно, правильным решением будет обновление конфигурации на следующий стабильный релиз.
Если база находится на строго типовой поддержке («замок»), а оперативно установить обновление нет возможности, обратим внимание на следующие нюансы:
&Вместо не получится.