Обновление предопределенных значений при обновлении конфигурации

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

При обновлении на релиз 3.0.103.12 при выполнении процедур обновления в режиме 1с:Предприятия на одной из баз возникала следующая ошибка: Справочник.КодыОперацийПрослеживаемости.УКДНаУменьшениеВыданный Предопределенный элемент отсутствует в данных.

На всякий случай проверяем, что в конфигурации предопределенное значение УКДНаУменьшениеВыданный справочника КодыОперацийПрослеживаемости на месте, хотя ошибка в случае отсутствия предопределенного имени была бы «Поле оъекта не обнаружено», значит, действительно по каким-то причинам нового значения не оказалось на уровне базы данных.

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

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

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

  • для таблицы базы данных,
  • для объекта метаданных в конфигураторе
  • для всей информационной базы.

 

Итоговое значение настройки, которое и влияет на результат обновления, вычисляется по следующему алгоритму. Сначала проверяется настройка для таблицы базы данных (это настройка на уровне базы данных, она зависит от конкретного экземпляра базы данных, а не от релиза конфигурации). Если она не равна Авто, то используется именно она. Если на уровне таблицы установлено Авто, то проверяется настройка для объекта метаданных в конфигураторе (эта настройка зависит от релиза, она находится в метаданных).

В конфигурации настройка — это свойство справочника «Обновление предопределенных данных».

Если она тоже Авто, то проверяется настройка для всей информационной базы (так же эта настройка хранится в данных информационной базы и не зависит от релиза). Если и она равна Авто, то смотрим, является ли данная база периферийным узлом распределенной информационной базы. Если да, то используется НеОбновлятьАвтоматически. В противном случае настройка будет ОбновлятьАвтоматически.

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

В данном случае мы видим, что на уровне всей базы установлена глобальная настройка  НеОбновлятьАвтоматически и поскольку и на уровне таблицы, и на уровне метаданных стоит Авто, то именно она и была применена в процессе обновления, вызывая ошибку отсутствия предопределенного элемента!

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

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

Если под рукой нет Портативных инструментов разработчика, эти настройки легко установить самостоятельно. Для установки данной настройки на уровне таблицы базы данных используется метод УстановитьОбновлениеПредопределенныхДанных.

Значение = ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически;

Справочники.КодыОперацийПрослеживаемости.УстановитьОбновлениеПредопределенныхДанных(Значение);

Установка настройка для всей информационной базы делается с помощью метода УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы.

Значение = ОбновлениеПредопределенныхДанных.НеОбновлятьАвтоматически;

УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы(Значение);

 

Осталось тайной, как в рассмотренном случае в базе оказались именно такие настройки. Будут идеи — пишите свои версии, обсудим!

 

Анна Коваленко,
специалист отдела
автоматизации и сопровождения
информационных систем
ООО «Байт»
ООО "Байт"

© 2021 ООО «БАЙТ»