Разработка и поддержка расширений в системе 1С:Предприятие 8.3 часто сопряжена с трудностями при попытке сравнить две версии одного и того же расширения или объединить изменения. Многие разработчики сталкиваются с тем, что стандартный Конфигуратор не предоставляет такой же глубины анализа для расширений, как для основной конфигурации. В этой статье мы разберем причины такого положения дел и рассмотрим конкретные инструменты, которые помогут сделать процесс разработки более комфортным.
Для начала проанализируем ситуацию: почему привычное сравнение и объединение в расширениях работает иначе? Основная причина кроется в самой природе Расширения. В отличие от основной конфигурации, расширение не является самодостаточной структурой. Это, по сути, "дифференциальный патч" или дополнительный слой, который накладывается на основную конфигурацию в момент исполнения.
Рассмотрим основные сложности, с которыми сталкивается платформа при сравнении:
Конфигуратора, который фирма "1С" постепенно признает устаревшим в пользу новых инструментов.Начиная с версии платформы 8.3.15, разработчики получили официальную возможность подключать внешние инструменты для сравнения и объединения модулей. Это признание того, что специализированные программы справляются с текстовым анализом кода эффективнее встроенных средств.
Разберем по шагам, как настроить использование внешней программы (например, KDiff3, P4Merge или Beyond Compare):
Конфигуратор и перейдем в меню Сервис — Параметры.&Вместо, &После или &Перед.Проанализируем преимущества такого подхода: внешние инструменты используют продвинутые алгоритмы (например, алгоритм Майерса), которые лучше определяют перемещенные блоки кода и не сбиваются при добавлении пустых строк или изменении комментариев.
Выясним причину, по которой Конфигуратор получает меньше обновлений в части инструментов сравнения. Основная стратегия развития инструментов разработки сейчас сосредоточена в 1C:EDT. Это среда на базе Eclipse, которая в корне меняет подход к работе с расширениями.
В чем заключаются преимущества EDT для работы с расширениями?
EDT все расширение представлено в виде набора XML и BSL файлов. Это позволяет использовать стандартные системы контроля версий, такие как Git.Git позволяет видеть изменения на уровне отдельных свойств объектов метаданных, что в обычном Конфигураторе реализовано крайне ограниченно.EDT гораздо лучше понимает структуру расширений и корректно подсвечивает ошибки применимости расширения еще до момента его загрузки в информационную базу.Многие опытные разработчики используют "ванскриптовские" решения для автоматизации рутинных операций. Проанализируем ситуацию: если нам нужно сравнить сотни объектов, делать это вручную в интерфейсе Конфигуратора неэффективно.
Посмотрим на примеры инструментов:
Git-репозиторий. После этого любое сравнение версий превращается в стандартную задачу просмотра коммитов..cf и .cfe в исходные коды. Это незаменимо, когда нужно быстро сравнить два расширения, не загружая их в базу.Рассмотрим, как может выглядеть процесс автоматизированного анализа ролей в расширении, о котором упоминалось на форуме. Если стандартный интерфейс не позволяет удобно фильтровать измененные объекты, можно воспользоваться программным доступом к метаданным. Хотя в Конфигураторе это сделать сложно, в пользовательском режиме можно написать простую обработку:
Для Каждого ТекущееРасширение Из РасширенияКонфигурации.Получить() Цикл
Сообщить("Анализ расширения: " + ТекущееРасширение.Имя);
// Здесь можно программно перебрать объекты, если они доступны через Метаданные
КонецЦикла;
Если вы все же ограничены использованием только стандартного Конфигуратора, воспользуйтесь следующими приемами для упрощения сравнения:
_Изменено_1_0_1) и включайте в нее все созданные или измененные объекты. При объединении расширений это позволит быстро установить флаги по конкретной подсистеме.Подведем итог: Отсутствие "идеального" встроенного инструмента сравнения расширений — это не просто недоработка, а следствие перехода платформы на более современные инструменты разработки (EDT) и поддержку внешних профессиональных дифференциаторов. Для эффективной работы рекомендуется либо настроить внешнюю программу сравнения (например, KDiff3), либо полностью перейти на разработку в 1C:EDT.