Как исправить ошибку обработчика обновления дополнительных реквизитов и сведений в 1С:КА?

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

При переходе конфигурации 1С:Комплексная автоматизация с устаревших редакций (например, с версии 2.5.8 сразу на 2.5.12) нередко возникает аварийное завершение отложенных процедур обновления. Типичный сценарий — обработчик под номером 209 (перенос дополнительных сведений в новый набор справочника дополнительных отчетов и обработок) прерывается с ошибкой: Значение не является значением объектного типа (ДополнительныеСведения).

Разберем детально, почему возникает данный сбой, какие изменения произошли в архитектуре подсистемы свойств БСП и как корректно восстановить работу базы данных, не нарушив отображение дополнительных реквизитов в карточках справочников.

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

Проанализируем текст исключения из журнала регистрации. Ошибка возникает в общем модуле УправлениеСвойствамиУТ в строке вызова метода поиска строк табличной части:

КоличествоСведений = НовыйНаборОбъект.ДополнительныеСведения.НайтиСтроки(...);

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

Рассмотрим предпосылки такого поведения системы:

  1. Изменение концепции предопределенных элементов в Библиотеке стандартных подсистем (БСП). В версиях конфигураций линейки 2.5 разработчики перевели инициализацию наборов свойств из объектов метаданных конфигуратора в программный код. Старым элементам метаданных был добавлен префикс Удалить..., а новые наборы создаются программно с жестко заданными уникальными идентификаторами.
  2. Пропуск промежуточных релизов при обновлении. Прямой скачок через несколько подверсий нарушает штатный порядок выполнения процедур обновления. Регламентный обработчик № 209 предполагает, что целевой набор свойств уже был корректно сгенерирован предшествующими процедурами, чего не происходит при резком обновлении.
  3. Нарушение автообновления предопределенных данных. Если в свойствах справочника или конфигурации отключено автоматическое обновление предопределенных элементов либо объединение конфигураций выполнялось без приоритета конфигурации поставщика, сопоставление данных нарушается.

Шаг 1. Программное создание недостающих наборов свойств

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

УправлениеСвойствамиСлужебный.СоздатьПредопределенныеНаборыСвойств();

Данная команда прочитает метаданные и программные описания во всех модулях конфигурации и добавит отсутствующие элементы в справочник НаборыДополнительныхРеквизитовИСведений с требуемыми идентификаторами.

Шаг 2. Устранение побочных эффектов: почему пропадают вкладки дополнительных реквизитов

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

  1. Флаг активности набора. Создание набора без сопутствующей инициализации оставляет реквизит Используется в значении Ложь. Механизмы формы при вызове процедуры УправлениеСвойствами.ПриСозданииНаСервере проверяют этот признак и программно гасят видимость группы элементов, если реквизит отключен.
  2. Пустой состав реквизитов. Созданный программно набор пуст. Все пользовательские дополнительные реквизиты остались в старом наборе с префиксом УдалитьСправочник_.... Если в наборе нет активных свойств, интерфейсная подсистема скрывает пустую вкладку.

Чтобы завершить переход и полностью синхронизировать подсистему свойств, выполним на сервере комплексный сценарий инициализации:


// 1. Создаем недостающие программные наборы свойств
УправлениеСвойствамиСлужебный.СоздатьПредопределенныеНаборыСвойств();

// 2. Рассчитываем и устанавливаем признаки использования наборов
УправлениеСвойствамиСлужебный.УстановитьЗначениеПризнакаИспользуется();

// 3. Запускаем процедуру переноса состава свойств из устаревших наборов
Справочники.НаборыДополнительныхРеквизитовИСведений.ОбработатьНаборыСвойствДляПереходаНаНовуюВерсию();

// 4. Актуализируем наименования предопределенных элементов
Справочники.НаборыДополнительныхРеквизитовИСведений.ОбновитьСоставНаименованийПредопределенныхНаборов();

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

Шаг 3. Очистка кэша и сброс настроек формы

Если после выполнения серверных процедур вкладка по-прежнему не отображается у конкретного пользователя, проанализируем состояние кэшированных настроек:

  1. В открытой форме справочника (например, «Контрагенты») откроем меню Еще → Изменить форму....
  2. В открывшемся окне настройки выберем пункт Еще → Установить стандартные настройки. Это устранит конфликт между сохраненной разметкой старой версии и новой динамической группой свойств.
  3. При необходимости выполним перезапуск клиентского сеанса с очисткой локального кэша платформы (параметр запуска /ClearCache).

Рекомендации по последовательности обновлений

Рассмотренный случай наглядно показывает риски пропуска промежуточных релизов. Чтобы избежать ручной доработки регистров и справочников при переходе на новые архитектурные решения БСП, рекомендуется:

  1. Выполнять обновление базы строго по цепочке релизов, указанной в порядке обновления от разработчиков 1С (через контрольные релизы 2.5.9, 2.5.10 и 2.5.11).
  2. После каждого этапа запускать базу в режиме 1С:Предприятие и дожидаться полного завершения всех регламентных и отложенных процедур в обработке «Результаты обновления программы».
  3. При сравнении и объединении конфигураций следить за сохранением предопределенных значений и приоритетом конфигурации поставщика для служебных справочников подсистем БСП.
← На главную