Последнее время в работе с 1С я полностью перешла на сравнение конфигураций через текстовые файлы в Гит. Это оказалось гораздо удобнее, чем стандартное сравнение через хранилище. Основная проблемы была с управляемыми формами. Обычные формы ssf замечательно сравниваются через v8reader, управляемые приходилось сравнивать как текст. Стандартная выгрузка не очень наглядна, хоть и позволяет отследить изменения. Попробовав разные варианты, в конце концов остановилась на варианте преобразования xml-файла через xsl-шаблон + специализированная внешняя утилита для сравнения ExamXML.
Сначала о том, как это выглядит, потом как настроено.
В качестве Git-клиента у меня прижился Git Extensions. Он достаточно легкий, понятный и удобный. Для преобразования 1С-хранилища в Гит-репозиторий прижился Gitter - конфигурация с инфостарта, которая периодически проверяет новые изменения в 1с-хранилище и перекидывает их в Гит.
После синхронизации Гит-репозитория с 1С-хранилищем для сравнения конфигураций просто выбираем версии, которые хотим сравнить -> выбираем сравниваемый файл -> правый клик -> открыть в инструменте сравнения (либо просто F3). Все картинки в статье кликабельные.
Для примера сравним форму элемента справочника "Номенклатура" в УТ11.1.7 и УТ 11.1.9. У утилиты есть 2 режима сравнения "показывать весь файл" и "показывать только изменения".
Думаю, не нужно особо разбираться в xml, чтобы по этим картинкам увидеть отличия.
-у элемента "Наименование" убрали обработчик "НаименованиеПриИзменении";
-у группы "ГруппаКартинка" установили ширину 48;
-добавили новую страницу "СтраницаРабота";
-добавили элемент "РейтингПродаж";
-команду "Выбрать из присоединенных файлов" переименовали в "Из присоединенных файлов";
Пример сравнения структуры метаданных справочника "Номенклатура" можно посмотреть в скриншотах.
Удобства сравнения через xml в том, что xml-выгрузка содержит абсолютно всю информацию о форме или объекте. Т.е. мы на одном экране видим все изменения элементов, их свойств, команд, обработчиков и т.д.
Черным цветом указаны совпадающие элементы, зеленым - отличающиеся, красным - отсутствующие во втором файле. Причет, если в ветке есть отличия, то зеленым будет отмечена вся ветка до самого верха. Благодаря этому, даже в свернутом дереве мы видим, в каких ветках есть отличия.
По умолчанию сопоставляются элементы с одинаковым наименованием на одном уровне иерархии. Т.е. если изменено имя элемента либо элемент вынесен на другой уровень (например, перенесли во вложенную группу), то утилита автоматически его не сопоставит а отметит, что в одной папке элемент удалили, в другой добавили новый. Однако можно их сопоставить вручную. Выбираем соответствующий элемент в обоих файлах -> правый клик -> compare element. При этом утилита их отметит как один элемент и сравнит все вложенные уровни.
Из полезных фич можно отметить возможность игнорирования каких-либо атрибутов или элементов. Например, при добавлении элемента в форму, в xml для остальных элементов может сбиться номер элемента id. В этом случае индексы элементов будут разные, хоть и сами элементы одинаковые. Для того, чтобы эти отличия не мешали сравнению, становимся на любой элемент с атрибутом id -> правый клик -> ignore elements -> указываем, какие атрибуты хотим игнорировать для данного элемента или вцелом для файла.
Теперь о том, как это работает:
К сожалению, выгружаемый стандартно xml-файл не очень удобен для анализа из-за большого количества информации. Поэтому перед сравнением он преобразуется xsl-шаблоном для удобного просмотра. Шаблон выкидывает все пустые элементы, заменяет в элементах названия с типа элемента на имя элемента, сокращает по возможности глубину вложенности элементов, выкидывая все лишнее. В результате размер файла уменьшается примерно в 2 раза.
Преобразованный файл отдается утилите сравнения ExamXML.
Что в файлах:
sample.zip архив для того, чтобы понять, удобно ли такое сравнение лично вам:
- пример выгрузки из УТ11.1 формы элемента "Номенклатура". Версия файлов из релизов 11.1.7 и 11.1.9.
- Два варианта xml-файлов (до и после преобразования шаблоном).
- Сам шаблон form1c.xsl для преобразования. Можно самостоятельно внести любые изменения на свое усмотрение (вернуть то, что я выкинула, преобразовать свойства дополнительно). Для преобразования xml через xsl шаблон рекоммендую простой и удобный стандартный Notepad++.
-утилита ExamXML. Утилита, к сожалению, платная, хоть и не дорогая. Бесплатно проработает 30 дней, дальше либо покупать, либо менять на что-то другое.
diff1cXML.zip - готовый вариант для подключения к Гит. Для использования необходимо разархивировать в каталог c:\cmd\ (или любой другой, поменяв соответственно пути в скрипте) и настроить вызов скрипта diff-1c-xml.js как внешнего инструмента сравнения для файлов с расширением xml. Сам скрипт является модификацией скрипта diff-1c-cf.js из проекта v8Diff, использующего v8Reader и описанного в статье Системы контроля версии и 1С, подключается полностья аналогично подключению v8Reader через v8Diff. Структура файлов и пример настройки на скриншотах.
При необходимости можно использовать скрипт и без Git, просто запуская из командной строки "diff-1c-xml.js form1.xml form2.xml". Параметры скрипта - пути к файлам, выгруженным из конфигуратора режимом "Конфигурация" -> "Выгрузить конфигурацию в файлы"
v8xsl.epf Простенькая утилитка для преобразования xml-файлов по xsl-шаблонам. Удобна для отладки xsl-шаблонов. Выбираем файлы, нажимаем "Преобразовать". Также позволяет сразу из обработки вызвать любую внешнюю утилиту для сравнения преобразованных файлов.
Внешний вид и пример настройки:.