Почему функция РедактируемоеТабличоеПолеДоходов в справке по НДФЛ ничего не возвращает и как это исправить?

Программист 1С v8.3 (Обычные формы) 1С:Зарплата и Управление Персоналом Налоговый учет IT и автоматизация бизнеса
← На главную

При подготовке отчетности по форме 2-НДФЛ в конфигурации 1С:Зарплата и Управление Персоналом 2.5 (в частности, в релизе 2.5.114.1) разработчики и пользователи сталкиваются с неприятной ситуацией: при выборе кода дохода в документе СправкаПоНДФЛВНалоговыйОрганС2015 перестает автоматически подставляться соответствующий код вычета. Например, для дохода с кодом 2770 не подставляется предусмотренный налоговый вычет 504 (суммы возмещения стоимости медикаментов).

Проанализируем программный код документа, выясним точную причину такого поведения платформы и разберем способы устранения проблемы.

Анализ исходного кода и поведение платформы 1С

Рассмотрим функцию-обертку в модуле формы документа СправкаПоНДФЛВНалоговыйОрганС2015, которая отвечает за определение активной таблицы доходов на открытой вкладке:


Функция РедактируемоеТабличоеПолеДоходов()
    
    СправкиПоНДФЛ.РедактируемоеТабличоеПолеДоходов(ЭлементыФормы.ПанельСодержимогоСправки, ЭлементыФормы)
    
КонецФункции

Посмотрим на особенности реализации этой процедуры:

  1. В наименовании функции присутствует типовая опечатка разработчиков конфигурации — РедактируемоеТабличоеПолеДоходов (пропущена буква «н»), однако это внутреннее имя вызова, которое само по себе работу не нарушает.
  2. Внутри функции выполняется обращение к общему модулю СправкиПоНДФЛ, где функция действительно находит и возвращает элемент управления — табличное поле доходов, соответствующее текущей закладке ставки налога.
  3. В самой форме документа перед вызовом функции общего модуля пропущен оператор Возврат.

Разберем, как на такую конструкцию реагирует платформа 1С:Предприятие. В синтаксисе языка 1С отсутствие оператора Возврат внутри блока Функция ... КонецФункции не считается синтаксической ошибкой и успешно проходит синтаксический контроль при проверке конфигурации. Если поток выполнения доходит до конструкции КонецФункции без явного вызова Возврат <Значение>, платформа не выдает аварийного завершения, а неявно возвращает значение типа Неопределено.

Далее при интерактивном выборе кода дохода алгоритм пытается обратиться к текущей строке табличной части через вызов РедактируемоеТабличоеПолеДоходов().ТекущиеДанные. Так как функция вернула Неопределено, обращение к свойству либо игнорируется условием проверки, либо вызывает ошибку выполнения. В результате механизм сопоставления доходов и вычетов (хранящийся в коллекции СоответствиеДоходовИВычетов) попросту не срабатывает, и вычет не заполняется автоматически.

Способ 1. Исправление ошибки в модуле формы документа

Если конфигурация уже находится на поддержке с возможностью изменения (или полностью снята с поддержки), исправим ошибку вручную. Разберем по шагам, что необходимо сделать:

  1. Откроем конфигуратор и найдем документ СправкаПоНДФЛВНалоговыйОрганС2015.
  2. Перейдем к основной форме документа и откроем ее модуль.
  3. Найдем функцию РедактируемоеТабличоеПолеДоходов().
  4. Добавим пропущенный оператор Возврат перед обращением к общему модулю.

Исправленный фрагмент кода должен выглядеть следующим образом:


Функция РедактируемоеТабличоеПолеДоходов()
    
    Возврат СправкиПоНДФЛ.РедактируемоеТабличоеПолеДоходов(ЭлементыФормы.ПанельСодержимогоСправки, ЭлементыФормы);
    
КонецФункции

После сохранения изменений функция начнет возвращать ссылку на нужный элемент управления. В результате соответствие кодов будет отрабатывать штатно:


СоответствиеДоходовИВычетов.Вставить(Справочники.ДоходыНДФЛ.Код2770, Справочники.ВычетыНДФЛ.Код504);

Способ 2. Обновление конфигурации до актуального релиза

Данная ситуация является зарегистрированной релизной ошибкой фирмы «1С». В последующих сборках ветки 1С:ЗУП 2.5 разработчики устранили эту проблему. Если конфигурация находится на типовой поддержке и включение возможности редактирования нежелательно, правильным решением будет обновление конфигурации на следующий стабильный релиз.

Действия при невозможности изменения конфигурации

Если база находится на строго типовой поддержке («замок»), а оперативно установить обновление нет возможности, обратим внимание на следующие нюансы:

  1. Механизм расширений конфигурации в обычных формах (режим совместимости 8.2) недоступен, поэтому перехватить вызов через аннотации &Вместо не получится.
  2. В таком случае пользователям необходимо заполнять код вычета и сумму вычета вручную непосредственно в табличном поле соответствующей ставки налога справки 2-НДФЛ.
← На главную