Как правильно анализировать и разбирать чужие расширения в 1С:Предприятии

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

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

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

Шаг 1. Метод «чистки» расширения от избыточных объектов

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

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

Шаг 2. Как анализировать изменения в заимствованных формах

Анализ форм в расширениях — одна из самых трудоемких задач. Нам необходимо понять, что именно изменил предыдущий разработчик: добавил ли он новые элементы, скрыл ли старые или изменил обработчики событий. Разберем механизм работы платформы с заимствованными формами подробнее.

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

Рассмотрим два основных способа сопоставления форм:

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

Шаг 3. Выгрузка расширения в текстовые файлы для детального сравнения

Когда визуальный анализ в Конфигураторе не дает полной картины или приводит к зависаниям интерфейса, применим профессиональный метод — выгрузку конфигурации расширения в файлы. Это позволит нам проанализировать структуру XML-описаний форм и элементов управления.

Выполним следующие шаги:

  1. В главном меню Конфигуратора выберем пункт «Конфигурация» -> «Разработка конфигурации» -> «Выгрузить конфигурацию в файлы...» (предварительно выделив окно нужного нам расширения).
  2. Укажем пустой каталог на диске для выгрузки.
  3. После завершения процесса мы получим набор файлов, где модули представлены в виде обычных текстовых файлов (с расширением .bsl), а формы и структуры данных — в формате .xml.

Имея текстовые файлы, мы можем использовать любую внешнюю утилиту сравнения файлов и папок (например, WinMerge, KDiff3 или Beyond Compare). Мы сможем сравнить выгруженные файлы расширения с чистой выгрузкой аналогичных объектов из типовой конфигурации. Любые расхождения в XML-структуре сразу покажут нам измененные свойства элементов формы:


<!-- Пример фрагмента XML-структуры заимствованной формы, показывающий изменение видимости элемента -->
<Button name="ФормаЗаписатьИЗакрыть" id="1">
    <Visible>false</Visible> <!-- Свойство изменено в расширении -->
</Button>

Шаг 4. Анализ программного кода и рефакторинг директив

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


&Вместо("РассчитатьСуммуДокумента")
&ИзменениеИКонтроль("РассчитатьСуммуДокумента")
Процедура Расш1_РассчитатьСуммуДокумента(СтрокаТабличнойЧасти)
    
    // Сохраняем оригинальный расчет, но добавляем свою специфику для определенного вида номенклатуры
    СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
    
    #Вставка
    // Наша доработка: учет дополнительной скидки для оптовиков
    Если ПолучитьФункциональнуюОпцию("ИспользоватьСпецСкидки") Тогда
        СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Сумма * (1 - СтрокаТабличнойЧасти.Скидка / 100);
    КонецЕсли;
    #КонецВставки
    
КонецПроцедуры

Шаг 5. Работа в среде разработки 1С:EDT (Enterprise Development Tools)

Если проект содержит объемные расширения, работа в классическом Конфигураторе становится неэффективной. Современный подход предполагает импорт проекта в среду разработки 1С:EDT, которая базируется на Eclipse и штатно интегрирована с системой контроля версий Git.

Какие преимущества мы получаем при анализе расширения в EDT?

  1. Поиск «мертвого» кода и неиспользуемых заимствований. EDT автоматически анализирует связи между объектами и подсвечивает заимствованные метаданные, к которым нет обращений в коде расширения. Мы сможем удалить их одной кнопкой.
  2. Интерактивная история изменений. Если мы ведем разработку в Git, мы всегда можем посмотреть построчную историю изменения каждого метода (команда git blame) и понять, кто, когда и зачем добавил ту или иную строку кода в расширение.
  3. Быстрый поиск ссылок. Поиск ссылок на любой метод или переменную в EDT происходит мгновенно по всему проекту, включая основную конфигурацию и все подключенные расширения.

Шаг 6. Борьба с платформенными багами и падениями Конфигуратора

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

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

← На главную