Как исправить ошибку сравнения типов при создании СЗВ-ТД и проведении документов в 1С:Бухгалтерия 3.0

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия
← На главную

В процессе работы с конфигурацией 1С:Бухгалтерия предприятия 3.0 пользователи могут столкнуться с критической ошибкой при попытке зарегистрировать сведения о трудовой деятельности (создать документ СЗВ-ТД или ЕФС-1) из документа Прием на работу. Проблема также может проявляться при проведении документов Начисление зарплаты.

Текст ошибки выглядит следующим образом: «Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)». В этой статье мы подробно разберем, почему возникает эта ситуация, как проанализировать код и какими способами можно восстановить работоспособность базы.

Разберем причину возникновения ошибки

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

В частности, проблема кроется в пустом регистре сведений Даты вступления в силу нормативных актов (в конфигураторе — ДатыВступленияВСилуНА). В программном коде 1С существует множество проверок, которые сравнивают текущую дату документа с датами из этого регистра, чтобы определить, какие законодательные нормы (или форматы файлов) применять на текущий момент.

Если в регистре нет нужной записи, функция получения даты возвращает значение Неопределено. Платформа 1С (особенно версии 8.3.22 и выше) при попытке сравнить значение типа Дата со значением Неопределено прерывает работу и выдает ошибку о несовпадении типов.

Проанализируем программный код

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

Пример 1: Проверка изменений по 353-ФЗ

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


Функция ВступилиВСилуИзменения353ФЗ(Период) Экспорт
    Возврат Период >= ЗарплатаКадрыПовтИсп.ДатаВступленияВСилуНА("ИзмененияК353ФЗ");
КонецФункции

Здесь переменная Период содержит дату (например, 31.05.2022), а вызов функции ЗарплатаКадрыПовтИсп.ДатаВступленияВСилуНА("ИзмененияК353ФЗ") возвращает Неопределено, так как в регистре отсутствует соответствующая запись.

Пример 2: Формирование файла СЗВ-ТД

При формировании электронного документа система должна выбрать формат выгрузки (старый или новый). Это происходит в процедуре формирования выходного файла:


Если ВыборкаПоШапкеДокумента.Дата < РегистрыСведений.ДатыВступленияВСилуНА.ДатаВступленияВСилуНА("ОбновлениеФорматаСЗВ_ТДСогласноПостановлению730п") Тогда
    Возврат ВыходнойФайл20200101(ВыборкаПоШапкеДокумента, ВыборкаПоРаботникам);
КонецЕсли;

Если в регистре нет ключа ОбновлениеФорматаСЗВ_ТДСогласноПостановлению730п, условие сравнения вызывает исключение.

Способ 1: Использование стандартных механизмов обновления

Первым делом попробуем решить проблему штатными средствами системы. Часто достаточно инициировать процедуру обновления служебных данных.

  1. Перейдем в раздел Администрирование — Обслуживание.
  2. Развернем пункт Обновление программы и выберем ссылку Описание изменений программы. Иногда простой переход в это окно заставляет систему выполнить проверку заполнения констант и регистров.
  3. Если это не помогло, попробуем запустить базу с параметром /С ЗапуститьОбновлениеИнформационнойБазы. Это принудительно запустит все процедуры обновления, предусмотренные в БСП (Библиотеке стандартных подсистем).

Способ 2: Программное заполнение регистра (через консоль кода)

Если автоматическое обновление не заполнило регистр ДатыВступленияВСилуНА, мы можем сделать это принудительно. Для этого воспользуемся консолью разработчика или внешней обработкой для выполнения кода.

Выполним следующий фрагмент кода:


// Инициализация заполнения служебного регистра
ЗарплатаКадрыОбновлениеInternal.ОбновитьДатыВступленияВСилуНПА();

Важно: Имя метода может незначительно меняться в зависимости от версии конфигурации. Также можно попробовать обновить идентификаторы объектов метаданных, так как записи в регистре часто привязаны к ним:

Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанные();

Способ 3: Ручная проверка и исправление данных

Если вы являетесь опытным пользователем или администратором, выясним причину отсутствия записей через интерфейс «Функции для технического специалиста».

  1. Откроем Функции для технического специалиста (в старых версиях — «Все функции»).
  2. Найдем регистр сведений Даты вступления в силу нормативных актов.
  3. Убедимся, что он пуст. Если это так, значит, данные действительно не мигрировали из старой базы.
  4. Проанализируем наличие критически важных идентификаторов. Для корректной работы должны присутствовать:
    • ОбновлениеФорматаСЗВ_ТДСогласноПостановлению730п (обычно дата 01.07.2021).
    • ИзмененияК353ФЗ.
    • ПрименяетсяПостановление1181.

После того как вы нажмете кнопку Перечитать или выполните процедуру обновления из Способа 2, список должен заполниться актуальными датами из программного кода (макетов конфигурации).

Особенности платформы и дополнительные рекомендации

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

Также стоит отметить интересный нюанс: иногда ошибка пропадает, если у сотрудника очистить дату рождения (как заметили пользователи в обсуждении). Это связано с тем, что некоторые проверки возраста сотрудника также используют алгоритмы сравнения дат, завязанные на законодательные периоды. Однако удаление даты рождения не является решением, так как эти данные обязательны для отчетности.

Резюме по решению проблемы

Подведем итог. Ошибка сравнения примитивных типов при работе с кадровыми документами в БП 3.0 — это следствие отсутствия записей в служебном регистре Даты вступления в силу НА. Для исправления ситуации:

После заполнения регистра документы Начисление зарплаты начнут проводиться, а СЗВ-ТД будет создаваться без ошибок.

← На главную