Как при обновлении конфигурации 1С объединить только модуль формы, не затрагивая ее элементы?

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

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

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

Метод 1: Использование иерархического выбора в окне сравнения и объединения

Разберем самый простой и быстрый способ, который часто упускают из виду из-за невнимательности при анализе дерева объектов. В окне сравнения и объединения конфигураций каждый объект типа Форма не является неделимым элементом.

Проанализируем шаги, которые необходимо выполнить:

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

Таким образом, платформа заменит текст модуля на новый из обновления, но не тронет XML-описание элементов управления, которое отвечает за расположение кнопок и полей на экране.

Метод 2: Тонкая настройка через параметры объединения («Шестеренка»)

Рассмотрим ситуацию, когда изменений слишком много, и ручное проставление флажков для каждой формы занимает много времени. Мы можем воспользоваться автоматизированными правилами. Для этого в окне сравнения нажмем на иконку шестеренки (Параметры объединения).

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

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

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

Метод 3: Детальное сравнение состава формы (для версий 8.3.15 и выше)

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

В левой части отображается дерево элементов, реквизитов и команд. Платформа подсвечивает цветом, какие именно элементы были добавлены, удалены или изменены. Мы можем точечно выбрать перенос только одной новой кнопки, добавленной разработчиками «1С», сохранив при этом все свои изменения в остальных группах формы. Это избавляет от необходимости выбирать между «обновить всё» или «не обновлять ничего».

Метод 4: Использование расширений конфигурации

Посмотрим на проблему с другой стороны. Чтобы при обновлении вообще не возникало вопроса о сохранении элементов формы, рекомендуется переносить все доработки в Расширения конфигурации. Это наиболее современный и правильный подход.

Как это работает для модулей и элементов:

Пример кода в расширении для добавления логики при открытии формы:


&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Добавляем программно элемент, если не хотим менять визуальную схему
    НовыйЭлемент = Элементы.Добавить("МояСлужебнаяКнопка", Тип("КнопкаФормы"), Элементы.ГруппаКоманднаяПанель);
    НовыйЭлемент.Заголовок = "Дополнительное действие";
    НовыйЭлемент.ИмяКоманды = "МояКоманда";
КонецПроцедуры

Метод 5: Программное добавление элементов

Разберем ситуацию, когда использование расширений по каким-то причинам ограничено. Опытные разработчики часто прибегают к программному созданию элементов управления в коде модуля формы. Это гарантирует, что даже если «1С» полностью перерисует форму в новом релизе, ваши элементы появятся на ней автоматически, так как код создания выполнится в момент открытия.

Рассмотрим пример программного создания поля ввода:


&НаСервере
Процедура ДобавитьПолеПрограммно()
    ИмяРеквизита = "ДополнительнаяИнформация";
    МассивРеквизитов = Новый Массив;
    МассивРеквизитов.Добавить(Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов("Строка"), , "Инфо", Истина));
    
    ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов);
    
    НовыйЭлемент = Элементы.Добавить("ПолеИнфо", Тип("ПолеФормы"), ЭтаФорма);
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ПутьКДанным = ИмяРеквизита;
КонецПроцедуры

Хотя этот метод кажется трудоемким («гланды через задницу», как выразился один из участников обсуждения), он обеспечивает максимальную выживаемость доработок при агрессивных обновлениях поставщика.

Анализ рисков: «Битые» обработчики событий

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

Представим ситуацию:

  1. В новом релизе разработчики «1С» переименовали процедуру ПриИзмененииНоменклатуры() в НоменклатураПриИзменении().
  2. Вы обновили только модуль (текст процедур изменился).
  3. Вы не обновили форму (элемент «Поле ввода» всё еще ссылается на старое имя процедуры ПриИзмененииНоменклатуры).

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

Резюме

Для эффективного обновления 1С:Предприятие 8.3 придерживайтесь следующих правил:

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

← На главную