В процессе обновления доработанной конфигурации 1С разработчики нередко сталкиваются с ситуацией: в основном окне сравнения и объединения изменений либо нет, либо они кажутся незначительными, однако при нажатии на кнопку Выполнить платформа открывает модальное окно со списком связанных объектов и предупреждением о наличии неразрешимых ссылок. Разберем подробно, почему возникает такое окно, к каким последствиям приводит выбор различных вариантов объединения и как правильно обновить информационную базу без потери кастомных доработок.
Причины появления окна контроля ссылок при объединении
Окно неразрешимых ссылок состоит из двух взаимосвязанных областей: в верхнем списке отображаются объекты метаданных, на которые ссылаются выбранные для объединения элементы, а в нижнем списке — зависимые объекты, использующие выбранный сверху элемент. Платформа выводит это предупреждение в следующих случаях:
Удаление или переименование объектов поставщиком. В новой версии конфигурации поставщика был удален или переименован реквизит, табличная часть, форма или общий модуль, к которому обращается программный код доработанных объектов.
Изменение состава типов данных. Поставщик сузил или изменил составной тип реквизита, убрав тип, на который опирается логика кастомного функционала.
Снятие отметок с зависимых объектов. В окне сравнения и объединения вручную был снят флажок с объекта, необходимого для корректной работы других отмеченных к обновлению метаданных.
Конфликт модификаций форм и модулей. На управляемой форме документа (например, ОприходованиеТоваров) или справочника Номенклатура были удалены или перепривязаны элементы, в то время как кастомный алгоритм обращается к старым элементам формы.
Разбор последствий: «Пометить все для объединения» или «Продолжить»
Платформа предлагает два принципиально разных сценария продолжения операции. Выясним последствия каждого из них:
Вариант «Пометить все для объединения»: платформа автоматически проставит флажки объединения на все зависимые объекты из новой конфигурации поставщика. Внимание: если эти объекты ранее содержали ваши доработки (сняты с поддержки или стоят на поддержке с возможностью редактирования), типовая конфигурация поставщика полностью перезапишет их. Весь кастомный код, новые реквизиты или доработки форм будут безвозвратно затерты.
Вариант «Продолжить»: платформа выполнит объединение только тех объектов, которые были отмечены пользователем вручную, игнорируя возникшие зависимости. В этом случае ответственность полностью ложится на разработчика: ссылки на удаленные поставщиком типы данных или реквизиты станут «битыми», типы могут сброситься в Неопределено, а при выполнении программного кода возникнут ошибки вида Поле объекта не обнаружено.
Рассмотрим правильный порядок действий, позволяющий сохранить кастомный функционал и корректно применить типовое обновление.
Создание резервной копии. Перед любыми манипуляциями обязательно выгружаем информационную базу в файл выгрузки (.dt) или сохраняем файл конфигурации базы данных (.cf).
Анализ доработок с помощью трехстороннего сравнения. В окне Сравнение, объединение с конфигурацией при обновлении нажимаем кнопку Настройка фильтра (или Фильтр) и последовательно анализируем:
Фильтр Показывать дважды измененные свойства — покажет только те объекты, которые были изменены и вами, и разработчиками типового решения в новом релизе.
Фильтр Показывать изменения основной конфигурации по отношению к старой конфигурации поставщика — выведет полный перечень всех когда-либо внесенных доработок в вашу базу.
Детальный анализ связей. В появившемся окне неразрешимых ссылок разворачиваем иерархическое дерево и находим конкретные элементы (например, реквизиты справочника Номенклатура или элементы формы документа ОприходованиеТоваров), вызвавшие конфликт.
Ручное объединение модулей и форм. Для дважды измененных объектов выбираем режим объединения с ручным переносом кода или режим Объединить с приоритетом основной конфигурации, если типовые изменения данного узла не критичны, с последующим ручным внедрением нового типового кода.
Синтаксический контроль и поиск битых ссылок. После завершения объединения, до сохранения конфигурации базы данных (до нажатия F5 или клавиши обновления БД), обязательно запускаем встроенный инструмент: главное меню Конфигурация — Проверка конфигурации.... Устанавливаем флаги Поиск некорректных ссылок, Синтаксический контроль модулей и Проверка логической целостности.
Рекомендации по переводу кастомного кода в расширения
Чтобы избежать подобных конфликтов при последующих обновлениях, проанализируем возможность выноса кастомной логики в расширения конфигурации (.cfe). Это позволит перевести основную конфигурацию на полную поддержку поставщика (установить «на замок»).
Посмотрим на пример перехвата логики формы через аннотацию &После в модуле расширения вместо прямого редактирования типовой формы:
&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Добавляем кастомную логику без снятия типовой формы с поддержки
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
Элементы.ГруппаДополнительно.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
Вынос доработок в модули расширений с использованием инструкций &Вместо, &ИзменениеИКонтроль, &Перед и &После полностью исключает появление окна неразрешимых ссылок при штатном обновлении конфигурации поставщика.