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

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

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

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

Суть проблемы и диагностика

Рассмотрим стандартную ситуацию: вы обновляете конфигурацию, в которой расширен состав определяемого типа, например ОпределяемыйТип.ВладелецФайлов или ОпределяемыйТип.ВерсионируемыйОбъект. Эти типы активно используются в Библиотеке стандартных подсистем (БСП). При сравнении основной конфигурации с новым файлом поставщика (.cf или .cfu) вы открываете окно настройки, находите нужный объект и вручную корректируете состав типов, чтобы не затереть свои добавленные объекты.

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

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

Метод 1: Использование временной информационной базы

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

  1. Создадим новую пустую информационную базу той же версии платформы.
  2. Загрузим в нее конфигурацию поставщика (файл .cf), на которую вы планируете обновиться.
  3. Выполним сравнение и объединение этой «чистой» базы с вашей текущей рабочей конфигурацией.
  4. В окне сравнения настроим ОпределяемыеТипы так, как они должны выглядеть в итоге. Даже если здесь произойдет сброс, у вас будет возможность повторить операцию на маленьком объеме данных.
  5. После того как во временной базе получен идеальный состав объектов, выгружаем эту конфигурацию в файл.
  6. Возвращаемся в рабочую базу и объединяем её уже с этим подготовленным файлом, устанавливая режим «Взять из файла» для нужных объектов.

Метод 2: Настройка правил объединения через контекстное меню

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

Найдем в дереве объектов ОпределяемыеТипы или ПодпискиНаСобытия. Вместо того чтобы просто снимать галки с отдельных элементов состава, нажмем правую кнопку мыши на самом объекте. В контекстном меню выберем пункт «Установить режим объединения». Если платформа позволяет, выберем вариант «Взять из конфигурации поставщика с приоритетом объектов основной конфигурации». Это заставляет алгоритм слияния более внимательно относиться к тем типам, которые уже присутствуют в вашей базе.

Метод 3: Использование режима «Полного дерева»

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

  1. Снимем все фильтры в нижней части окна сравнения.
  2. Найдем вручную нужные объекты.
  3. Проставим настройки объединения.
  4. Перед нажатием кнопки «Выполнить» обязательно сохраните настройки объединения в файл (кнопка «Сохранить настройки»). Это позволит вам быстро восстановить конфигурацию окна, если объединение завершится неудачей.

Технические нюансы работы с типами в коде

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

Вместо жесткой привязки в метаданных, мы можем использовать программные интерфейсы БСП. Например, для проверки возможности версионирования объекта:


// Пример программной проверки типа вместо использования ОпределяемыйТип
Функция ОбъектПоддерживаетВерсионирование(ДанныеОбъекта) Экспорт
    ТипОбъекта = ТипЗнч(ДанныеОбъекта);
    // Проверяем наличие типа в массиве разрешенных, который можно формировать динамически
    Возврат ОбщегоНазначения.ЕстьТипВМассиве(ТипОбъекта, ПолучитьДопустимыеТипыВерсионирования());
КонецФункции

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

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

Если вы столкнулись с описанной проблемой, рекомендуем проверить номер сборки вашей платформы. На текущий момент стабильная работа механизма объединения коллекций заявлена в следующих версиях:

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

Подведем итог: баг со сбросом настроек объединения — это известная проблема платформы, а не ошибка вашей конфигурации. Используя метод «промежуточной базы» или программные способы расширения типов, вы сможете успешно обновлять даже такие сложные системы, как 1С:ERP, сохраняя стабильность системы.

← На главную