Как исправить ошибку "Значение не является значением объектного типа (Количество)" при обмене РИБ в 1С:ЗУП 3.1?

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

Рассмотрим ситуацию, с которой часто сталкиваются при работе с распределенными информационными базами (РИБ) в конфигурации 1С:Зарплата и Управление Персоналом, начиная с релизов 3.1.25.37. При попытке выполнить обмен данными из главной базы в подчиненную процесс прерывается критической ошибкой: Значение не является значением объектного типа (Количество). Ошибка возникает в обработчике ПередЗаписью при чтении файла сообщения обмена.

Проанализируем причину возникновения этой проблемы и разберем по шагам несколько эффективных способов ее решения.

Выясним причину ошибки

В версиях ЗУП 3.1.25 разработчики фирмы 1С существенно доработали механизмы отражения зарплаты в бухгалтерском учете. В системе появился новый периодический регистр сведений БухучетНачисленийСотрудников. Теперь при проведении ряда кадровых и расчетных документов, в частности документа Увольнение, формируются новые движения по этому регистру.

Проблема кроется в механизме загрузки данных в подчиненном узле РИБ. При обмене вызывается системная процедура ОбновитьИнтервальныйРегистрПослеЗагрузкиПервичныхДанных из общего модуля ЗарплатаКадрыПериодическиеРегистры. Из-за недоработки типового кода в этом релизе, при чтении XML-сообщения обмена для набора записей нового регистра система возвращает тип Неопределено вместо ожидаемой пустой таблицы значений.

Далее в коде происходит попытка проверить количество строк:


ТаблицаИзменившихсяДанныхНабора = НаборЗаписей.ТаблицаИзменившихсяДанныхНабора;
Если ТаблицаИзменившихсяДанныхНабора.Количество() = 0 Тогда
    Продолжить;
КонецЕсли;

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

Решение 1: Исправление программного кода через расширение

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

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


ТаблицаИзменившихсяДанныхНабора = НаборЗаписей.ТаблицаИзменившихсяДанныхНабора;
// Добавляем проверку на Неопределено
Если ТаблицаИзменившихсяДанныхНабора = Неопределено ИЛИ ТаблицаИзменившихсяДанныхНабора.Количество() = 0 Тогда
    Продолжить;
КонецЕсли;

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

Решение 2: Установка официального патча или обновление

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

  1. Зайдите в базу данных под пользователем с полными правами.
  2. Перейдите в раздел Администрирование -> Обслуживание.
  3. Откройте пункт Обновление программы -> Исправления (патчи).
  4. Выполните поиск актуальных исправлений. Система обнаружит патч для механизма РИБ и предложит его установить.

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

Решение 3: Временный обходной путь без программирования

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

  1. В центральной базе откройте типовую обработку Регистрация изменений для обмена.
  2. Выберите проблемный узел РИБ.
  3. В дереве объектов метаданных найдите регистр сведений БухучетНачисленийСотрудников.
  4. Снимите регистрацию изменений для этого регистра (удалите все зарегистрированные изменения для выбранного узла).
  5. Выполните обмен заново.

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

← На главную