Как исправить ошибку «Значение поля Код вычета не может быть пустым» при переносе данных из ЗиК 7.7 в ЗУП 8?

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

При выполнении типового переноса данных из конфигурации «1С:Зарплата и Кадры 7.7» в «1С:Зарплата и Управление Персоналом 8» (редакция 2.5) специалисты часто сталкиваются с ошибкой записи наборов записей регистров в документе Перенос данных. Процесс обмена прерывается системным сообщением:

Ошибка записи объекта: Значение поля "Код вычета" не может быть пустым! (Регистр накопления: Предоставленные стандартные и социальные вычеты по НДФЛ)

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

Причины возникновения ошибки

Выясним причину сбоя, проанализировав работу механизма конвертации данных:

  1. Несоответствие классификаторов кодов вычетов по НДФЛ. В связи с изменениями законодательства состав и кодировка стандартных вычетов на детей в актуальных релизах 1С 8 были изменены (например, вместо прежних кодов 114, 115 введены коды вида 126/114, 127/115). В правилах переноса поиск элемента выполняется по строгому соответствию кода. Если старый код из 7.7 не найден в справочнике 8-ки, метод поиска возвращает пустую ссылку (СправочникСсылка.ВычетыНДФЛ.ПустаяСсылка()). Измерение регистра накопления Предоставленные стандартные и социальные вычеты по НДФЛ имеет запрет на пустые значения, из-за чего платформа блокирует запись объекта.
  2. Ошибки в исходных данных 7.7. В справочнике видов вычетов или в подчиненном сотрудникам справочнике вычетов по НДФЛ присутствуют элементы или периодические реквизиты с незаполненным кодом на расчетную дату.
  3. Синтаксические ошибки в типовых правилах обмена. В некоторых релизах правил переноса (в обработчике ПослеЗагрузкиОбъекта для ПКО ГрафикиРаботыВсеДанные) присутствует синтаксическая ошибка форматирования запроса из-за разорванного строкового литерала, что также прерывает загрузку.

Способ 1. Двухэтапный перенос через промежуточный релиз ЗУП (Рекомендуемый)

Рассмотрим наиболее надежный и простой метод, не требующий ручного программирования правил конвертации. Поскольку правила обмена не обновлялись под новые форматы кодов вычетов, перенос выполняется в конфигурацию-приемник того релиза, под который создавались правила, с последующим штатным обновлением информационной базы.

  1. Развернем чистую информационную базу 1С:ЗУП 2.5 старого релиза (например, 2.5.100.1 или для бюджетных учреждений ЗКБУ 1.0.102.1).
  2. Выполним штатную выгрузку данных из ЗиК 7.7 и загрузим их в подготовленную промежуточную базу ЗУП 8. Данные переносятся без ошибок, так как справочник вычетов в старом релизе полностью совпадает со структурой ЗиК 7.7.
  3. После успешной загрузки выполним последовательное обновление информационной базы типовыми файлами обновлений (.cfu или .cf) до актуального рабочего релиза.
  4. В процессе штатного обновления встроенные процедуры конфигурации (ОбработкаОбновленияИБ) автоматически перенесут старые коды вычетов на новые актуальные значения во всех регистрах и документах Перенос данных.

Способ 2. Временная корректировка кодов вычетов в ЗУП 8 перед загрузкой

Если разворачивать промежуточный релиз неудобно, применим способ сопоставления кодов вычетов непосредственно в рабочей или чистой целевой базе актуального релиза перед стартом обмена.

  1. Откроем в конфигурации ЗУП 2.5 справочник Вычеты по НДФЛ (меню Предприятие — Справочники — Вычеты по НДФЛ).
  2. Найдем элементы, которые применялись к сотрудникам в ЗиК 7.7, и временно изменим их коды:
    — код 126/114 изменим на 114;
    — код 127/115 изменим на 115;
    — аналогично скорректируем остальные детские и социальные вычеты.
  3. Выполним выгрузку из 7.7 и загрузку данных в 8.x. Механизм обмена успешно найдет элементы по прямым кодам и заполнит регистры накопления.
  4. После завершения переноса вернем коды в справочнике Вычеты по НДФЛ в исходное состояние (126/114, 127/115 и т.д.).

Способ 3. Проверка и очистка исходных данных в 1С 7.7

Проанализируем информационную базу ЗиК 7.7 на наличие некорректных записей перед выполнением выгрузки:

  1. Перейдем в меню Операции — Справочники — Виды вычетов. Убедимся, что у всех используемых элементов корректно проставлен код вычета и нет пустых строк. Помним, что реквизиты в 7.7 являются периодическими, поэтому код должен быть задан на весь период выгрузки.
  2. Откроем справочник Сотрудники и параллельно откроем подчиненный справочник вычетов сотрудника по НДФЛ. Проверим сотрудников, у которых есть право на стандартные вычеты: у них должен быть выбран конкретный вычет и задана дата начала действия (дата окончания может оставаться пустой).
  3. Убедимся, что для выгрузки используются внешняя обработка ZiK_ZUP.ert и файл правил ZiK_ZUP.xml из одного и того же комплекта поставки релиза. Использование разнородных версий приводит к ошибкам вида {Глобальный модуль}: Неверный идентификатор колонки! при вызове методов поиска по таблицам значений.

Способ 4. Доработка обработчиков в правилах обмена (Конвертация данных)

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

В конфигурации «1С:Конвертация данных 2.1» или непосредственно в правилах обмена перед выгрузкой строк коллекции для регистров НДФЛСведенияОДоходах и НДФЛПредоставленныеСтандартныеВычетыФизЛиц добавим проверку:


Если СокрЛП(ОбъектКоллекции.КодВычета) = "" Тогда
    // Заменяем пустое значение кодом по умолчанию или служебным вычетом
    ОбъектКоллекции.КодВычета = "114";
КонецЕсли;

В обработчике события ПослеЗагрузки для регистра накопления также можно прописать программную установку ссылки на элемент справочника:


Если Не ЗначениеЗаполнено(Объект.КодВычета) Тогда
    Объект.КодВычета = Справочники.ВычетыНДФЛ.НайтиПоКоду("114");
КонецЕсли;

Исправление синтаксической ошибки в правиле ГрафикиРаботыВсеДанные

Если в процессе загрузки возникает ошибка вида:

Ошибка при вызове метода контекста (Выполнить): {(1, 18)}: Синтаксическая ошибка "| ГрафикиРаботыПоВидамВремени.Месяц"

Причина заключается в наличии лишнего символа вертикальной черты | в начале текста запроса внутри обработчика события ПослеЗагрузкиОбъекта для ПКО ГрафикиРаботыВсеДанные.

Для исправления откроем файл правил ZiK_ZUP.xml в текстовом редакторе, найдем блок обработчика указанного правила и приведем строку запроса к корректному синтаксису 1С:


ВЫБРАТЬ ПЕРВЫЕ 1
    ГрафикиРаботыПоВидамВремени.Месяц КАК Месяц
ИЗ
    РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
ГДЕ
    ГрафикиРаботыПоВидамВремени.ГрафикРаботы = &ГрафикРаботы
    И ГрафикиРаботыПоВидамВремени.План
    И ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоДням)
УПОРЯДОЧИТЬ ПО
    Месяц УБЫВ

После сохранения исправленного XML-файла повторим операцию загрузки данных.

← На главную