При переходе конфигурации 1С:Комплексная автоматизация с устаревших редакций (например, с версии 2.5.8 сразу на 2.5.12) нередко возникает аварийное завершение отложенных процедур обновления. Типичный сценарий — обработчик под номером 209 (перенос дополнительных сведений в новый набор справочника дополнительных отчетов и обработок) прерывается с ошибкой: Значение не является значением объектного типа (ДополнительныеСведения).
Разберем детально, почему возникает данный сбой, какие изменения произошли в архитектуре подсистемы свойств БСП и как корректно восстановить работу базы данных, не нарушив отображение дополнительных реквизитов в карточках справочников.
Проанализируем текст исключения из журнала регистрации. Ошибка возникает в общем модуле УправлениеСвойствамиУТ в строке вызова метода поиска строк табличной части:
КоличествоСведений = НовыйНаборОбъект.ДополнительныеСведения.НайтиСтроки(...);
Переменная НовыйНаборОбъект принимает значение Неопределено. Происходит это потому, что попытка получить объект справочника НаборыДополнительныхРеквизитовИСведений по предопределенному идентификатору UUID (в процедуре ПриПолученииПредопределенныхНаборовСвойств модуля ДополнительныеОтчетыИОбработки) возвращает пустую ссылку.
Рассмотрим предпосылки такого поведения системы:
Удалить..., а новые наборы создаются программно с жестко заданными уникальными идентификаторами.Для того чтобы система зарегистрировала новые предопределенные наборы свойств вместе с их идентификаторами, вызовем процедуру служебного модуля БСП. Откроем внешнюю обработку «Консоль кода» (или аналогичную обработку для выполнения произвольного кода на сервере) в режиме 1С:Предприятие с административными правами и выполним следующую команду:
УправлениеСвойствамиСлужебный.СоздатьПредопределенныеНаборыСвойств();
Данная команда прочитает метаданные и программные описания во всех модулях конфигурации и добавит отсутствующие элементы в справочник НаборыДополнительныхРеквизитовИСведений с требуемыми идентификаторами.
После единичного вызова процедуры создания наборов отложенный обработчик успешно завершается, однако пользователи могут столкнуться со скрытием панели или вкладки «Дополнительно» (например, в форме справочника контрагентов или партнеров). Разберем причины этой проблемы:
Используется в значении Ложь. Механизмы формы при вызове процедуры УправлениеСвойствами.ПриСозданииНаСервере проверяют этот признак и программно гасят видимость группы элементов, если реквизит отключен.УдалитьСправочник_.... Если в наборе нет активных свойств, интерфейсная подсистема скрывает пустую вкладку.Чтобы завершить переход и полностью синхронизировать подсистему свойств, выполним на сервере комплексный сценарий инициализации:
// 1. Создаем недостающие программные наборы свойств
УправлениеСвойствамиСлужебный.СоздатьПредопределенныеНаборыСвойств();
// 2. Рассчитываем и устанавливаем признаки использования наборов
УправлениеСвойствамиСлужебный.УстановитьЗначениеПризнакаИспользуется();
// 3. Запускаем процедуру переноса состава свойств из устаревших наборов
Справочники.НаборыДополнительныхРеквизитовИСведений.ОбработатьНаборыСвойствДляПереходаНаНовуюВерсию();
// 4. Актуализируем наименования предопределенных элементов
Справочники.НаборыДополнительныхРеквизитовИСведений.ОбновитьСоставНаименованийПредопределенныхНаборов();
После выполнения данного скрипта все дополнительные реквизиты перемещаются из элементов с префиксом Удалить в новые рабочие наборы, реквизит Используется пересчитывается в истинное значение, и видимость вкладок в карточках объектов восстанавливается.
Если после выполнения серверных процедур вкладка по-прежнему не отображается у конкретного пользователя, проанализируем состояние кэшированных настроек:
/ClearCache).Рассмотренный случай наглядно показывает риски пропуска промежуточных релизов. Чтобы избежать ручной доработки регистров и справочников при переходе на новые архитектурные решения БСП, рекомендуется: