Как правильно дорабатывать конфигурацию 1С, чтобы упростить её последующее обновление и сопровождение?

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

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

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

1. Программная модификация управляемых форм вместо интерактивной

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

Рассмотрим правильный подход: форму следует оставлять на полной поддержке поставщика, а все новые элементы управления (поля ввода, кнопки, группы, команды) создавать и настраивать исключительно программным способом в обработчиках события ПриСозданииНаСервере.

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


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

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

2. Использование подписок на события и отдельных общих модулей

Внесение правок в модули объектов (документов, справочников) напрямую в типовые процедуры (например, ПередЗаписью или ОбработкаПроведения) приводит к возникновению дважды измененных процедур при каждом обновлении.

Проанализируем шаги по правильному выносу бизнес-логики:

  1. Создание собственных общих модулей: вся новая логика пишется в отдельных нетиповых модулях с уникальным префиксом. Модули поставщика не должны содержать громоздких алгоритмов.
  2. Использование подписок на события: для обработки записи, проведения, заполнения или проверки заполнения создаются объекты метаданных ПодпискаНаСобытие. Источником указывается нужный документ или справочник, а обработчиком — процедура из вашего собственного общего модуля. Модуль объекта в этом случае остается на типовой поддержке без единого изменения.
  3. Точечные врезки: если логику невозможно вынести в подписку (например, расчет в середине длинной типовой функции), в типовом коде оставляется только одна строка вызова вашей функции из общего модуля, без встраивания сложных конструкций прямо в тело типового метода.

3. Грамотное применение механизма расширений

Расширения конфигурации позволяют дорабатывать функционал вообще без снятия основной конфигурации с поддержки. Однако при некорректном использовании расширения могут выдавать ошибки при обновлении релиза (так называемое «отваливание» расширений). Чтобы этого избежать, соблюдаем следующие правила:

  1. Предпочтение директивам &Перед и &После: использование аннотации &Вместо опасно тем, что при изменении количества параметров или логики метода в новом релизе типовой конфигурации расширение перестанет работать. Если применение &Вместо необходимо, обязательно используем конструкцию ПродолжитьВызов().
  2. Минимизация заимствованных объектов: заимствовать в расширение следует только те свойства, формы и реквизиты, которые непосредственно модифицируются. Заимствование объекта целиком увеличивает риск конфликта типов данных при обновлении.
  3. Контроль режима совместимости: режим совместимости расширения должен строго соответствовать режиму совместимости основной конфигурации. После наката типового обновления проверяем и при необходимости корректируем этот параметр.

4. Подключение внешних инструментов трехстороннего сравнения (KDiff3)

Стандартный встроенный механизм сравнения и объединения модулей 1С сравнивает текущее состояние модуля с новым состоянием от поставщика, что часто порождает конфликты типа [mrg] внутри методов и требует ручной вычистки. Для автоматизации этого процесса платформа 1С:Предприятие 8.3 поддерживает интеграцию со сторонними утилитами трехстороннего слияния, такими как KDiff3.

Выясним, как работает трехстороннее сравнение (3-way merge):

  1. Утилита берет три версии файла: Базовая (старая конфигурация поставщика), Ваша (конфигурация с вашими доработками) и Новая (новый релиз от поставщика).
  2. KDiff3 автоматически понимает, какие строки изменили разработчики 1С, а какие — вы. Если изменения не пересекаются в одной строке, они объединяются в автоматическом режиме без участия человека.
  3. В результате разработчик вручную разрешает только те редкие участки, где одна и та же строка была изменена одновременно и вами, и фирмой 1С.

Для подключения утилиты перейдем в меню конфигуратора: Сервис — Параметры — Общие — Сравнение/объединение, где в качестве внешней программы сравнения модулей указывается путь к исполняемому файлу kdiff3.exe с соответствующими параметрами командной строки.

5. Префиксирование метаданных и использование возможностей БСП

Разберем базовые правила оформления метаданных, снижающие риски коллизий:

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

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

← На главную