Как отключить автоматическое обновление предопределенных элементов в 1С?

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

При работе с 1С часто возникает ситуация, когда необходимо внести изменения в предопределенные элементы, созданные разработчиком в конфигураторе. Например, изменить реквизиты у системного пользователя "Администратор" или добавить новые свойства предопределенным счетам учета. Основная проблема заключается в том, что при последующем обновлении конфигурации из файла .cfu платформа может перезаписать все ваши изменения, вернув предопределенные элементы к состоянию из конфигурации поставщика. Разберем, как этого избежать и заставить систему сохранять ваши правки.

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

Многие разработчики, столкнувшись с этой задачей, первым делом обращаются к свойствам корневого объекта конфигурации. Там есть свойство ОбновлениеПредопределенныхДанных, которое, казалось бы, должно управлять всем процессом. Часто ему устанавливают значение НеОбновлятьАвтоматически в надежде, что это запретит любые обновления предопределенных данных во всей системе.

Однако на практике это не дает ожидаемого результата. После загрузки обновления (.cfu) все ручные изменения в предопределенных элементах все равно затираются.

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

  1. Оно срабатывает только при создании новой информационной базы из файла конфигурации (.cf).
  2. Оно работает как значение по умолчанию для новых объектов метаданных, которые вы создаете в этой конфигурации.

Таким образом, эта настройка не влияет на процесс обновления уже существующей информационной базы. Платформа 1С при обновлении руководствуется настройками каждого конкретного объекта метаданных, а не общей настройкой конфигурации.

Правильное решение: настройка конкретных объектов метаданных

Чтобы гарантированно защитить предопределенные элементы от перезаписи, необходимо настроить каждый объект метаданных (справочник, план счетов, план видов характеристик и т.д.) по отдельности. Рассмотрим этот процесс по шагам.

  1. Откройте конфигурацию в режиме Конфигуратора.
  2. В дереве метаданных найдите объект, предопределенные элементы которого вы хотите защитить. Например, это может быть справочник Пользователи.
  3. Выделите этот справочник и откройте палитру его свойств (можно нажать Alt + Enter или выбрать в контекстном меню "Свойства").
  4. В палитре свойств найдите свойство ОбновлениеПредопределенныхДанных.
  5. Нажмите на выпадающий список и измените значение с установленного по умолчанию Авто на НеОбновлятьАвтоматически.
  6. Повторите эту операцию для всех объектов, изменения в предопределенных элементах которых нужно сохранить.
  7. После внесения изменений сохраните конфигурацию (F7).

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

Разбираемся со значениями свойства "ОбновлениеПредопределенныхДанных"

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

Дополнительный совет: как автоматизировать процесс

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


Процедура УстановитьСвойствоОбновления(ИмяМетаданного, Значение)
    
    МетаданныеОбъекта = Метаданные[ИмяМетаданного];
    
    Если МетаданныеОбъекта = Неопределено Тогда
        Сообщить("Объект метаданных '" + ИмяМетаданного + "' не найден!");
        Возврат;
    КонецЕсли;

    Попытка
        // Для платформы 8.3.6 и выше
        ОбъектКонфигурации = Конфигурация.Получить(МетаданныеОбъекта);
        ОбъектКонфигурации.ОбновлениеПредопределенныхДанных = Значение;
        Конфигурация.Записать();
        Сообщить("Свойство для объекта '" + ИмяМетаданного + "' успешно установлено.");
    Исключение
        Сообщить("Не удалось изменить свойство для объекта '" + ИмяМетаданного + "'. " + ОписаниеОшибки());
    КонецПопытки;
    
КонецПроцедуры

// Пример вызова для справочника "Пользователи"
// Возможные значения: Авто, НеОбновлятьАвтоматически, ОбновлятьАвтоматически
УстановитьСвойствоОбновления("Справочники.Пользователи", "НеОбновлятьАвтоматически");

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

Подводя итог, запомним простое правило: для защиты предопределенных данных от обновления при реструктуризации базы данных всегда используйте свойство ОбновлениеПредопределенныхДанных на уровне конкретного объекта метаданных, устанавливая его в значение НеОбновлятьАвтоматически.

← На главную