1с как сравнить макеты
Последнее время в работе с 1С я полностью перешла на сравнение конфигураций через текстовые файлы в Гит. Это оказалось гораздо удобнее, чем стандартное сравнение через хранилище. Основная проблемы была с управляемыми формами. Обычные формы ssf замечательно сравниваются через v8reader, управляемые приходилось сравнивать как текст. Стандартная выгрузка не очень наглядна, хоть и позволяет отследить изменения. Попробовав разные варианты, в конце концов остановилась на варианте преобразования xml-файла через xsl-шаблон + специализированная внешняя утилита для сравнения ExamXML.
Сначала о том, как это выглядит, потом как настроено.
В качестве Git-клиента у меня прижился Git Extensions. Он достаточно легкий, понятный и удобный. Для преобразования 1С-хранилища в Гит-репозиторий прижился Gitter - конфигурация с инфостарта, которая периодически проверяет новые изменения в 1с-хранилище и перекидывает их в Гит.
После синхронизации Гит-репозитория с 1С-хранилищем для сравнения конфигураций просто выбираем версии, которые хотим сравнить -> выбираем сравниваемый файл -> правый клик -> открыть в инструменте сравнения (либо просто F3). Все картинки в статье кликабельные.
Для примера сравним форму элемента справочника "Номенклатура" в УТ11.1.7 и УТ 11.1.9. У утилиты есть 2 режима сравнения "показывать весь файл" и "показывать только изменения".
Пример сравнения структуры метаданных справочника "Номенклатура" можно посмотреть в скриншотах.
Удобства сравнения через xml в том, что xml-выгрузка содержит абсолютно всю информацию о форме или объекте. Т.е. мы на одном экране видим все изменения элементов, их свойств, команд, обработчиков и т.д.
Черным цветом указаны совпадающие элементы, зеленым - отличающиеся, красным - отсутствующие во втором файле. Причет, если в ветке есть отличия, то зеленым будет отмечена вся ветка до самого верха. Благодаря этому, даже в свернутом дереве мы видим, в каких ветках есть отличия.
По умолчанию сопоставляются элементы с одинаковым наименованием на одном уровне иерархии. Т.е. если изменено имя элемента либо элемент вынесен на другой уровень (например, перенесли во вложенную группу), то утилита автоматически его не сопоставит а отметит, что в одной папке элемент удалили, в другой добавили новый. Однако можно их сопоставить вручную. Выбираем соответствующий элемент в обоих файлах -> правый клик -> compare element. При этом утилита их отметит как один элемент и сравнит все вложенные уровни.
Из полезных фич можно отметить возможность игнорирования каких-либо атрибутов или элементов. Например, при добавлении элемента в форму, в xml для остальных элементов может сбиться номер элемента id. В этом случае индексы элементов будут разные, хоть и сами элементы одинаковые. Для того, чтобы эти отличия не мешали сравнению, становимся на любой элемент с атрибутом id -> правый клик -> ignore elements -> указываем, какие атрибуты хотим игнорировать для данного элемента или вцелом для файла.
Теперь о том, как это работает:
К сожалению, выгружаемый стандартно xml-файл не очень удобен для анализа из-за большого количества информации. Поэтому перед сравнением он преобразуется xsl-шаблоном для удобного просмотра . Шаблон выкидывает все пустые элементы, заменяет в элементах названия с типа элемента на имя элемента, сокращает по возможности глубину вложенности элементов, выкидывая все лишнее. В результате размер файла уменьшается примерно в 2 раза.
Раньше сравнение и объединение программных модулей могло быть довольно трудоёмкой операцией, если приходилось объединять два модуля, в каждом из которых есть разные изменения относительно исходной конфигурации. Перед объединением можно было посмотреть различия в модулях, но внести изменения в получившийся код можно было только после объединения модулей. При большом количестве изменений в модулях такой подход отнимал очень много времени и мог приводить к ошибкам.
Чтобы облегчить сравнение и объединение модулей, мы добавили в платформу две новые возможности. Во-первых - возможность редактировать результат объединения модулей сразу же в том окне, в котором отображаются их отличия. Во-вторых - возможность использовать для сравнения и объединения модулей не средства платформы 1С:Предприятие, а одну из специализированных сторонних программ.
Редактирование результата объединения в окне настройки объединения модулей
Прежде всего мы немного изменили окно объединения конфигураций. Появилась дополнительная колонка, в которой пиктограммой отображается возможность настройки объединения для данного свойства.
А в окне настройки объединения модулей теперь всегда показывается результат будущего объединения. И вы можете сразу же изменить будущий текст модуля так, как этого требует логика вашего приложения:
Использование внешней программы
Существует целый ряд сторонних специализированных программ, с помощью которых можно выполнять объединение модулей. Если вам недостаточно встроенных возможностей 1С:Предприятия, или если вы привыкли использовать одну из сторонних программ, вы можете подключить её в настройках конфигуратора и использовать для сравнения, настройки объединения и собственно объединения модулей конфигурации.
Для самых распространённых программ в конфигураторе 1С:Предприятия уже содержатся параметры командной строки для их запуска в различных режимах:
При желании вы можете использовать и другие программы, которые поддерживают запуск из командной строки. Их параметры вам нужно будет добавить в настройки конфигуратора самостоятельно.
Преимущества использования внешних программ
В процессе сравнения/объединения конфигураций существуют три основные операции:
- Показ различий без учета структуры (сравнение двух файлов);
- Объединение двух конфигураций (объединение двух файлов);
- Обновление конфигурации, находящейся на поддержке (трехстороннее объединение).
Для п.п. 1 и 2 использование внешних программ имеет только «вкусовые» преимущества. Кому-то больше нравится работать с той или иной программой, нежели со встроенным в платформу инструментом.
Однако в п.3 использование внешних программ позволяет значительно сократить ваше участие в обновлении конфигурации.
В случае 1С:Предприятия в трёхстороннем объединении участвуют: основная конфигурация, старая конфигурация поставщика и новая конфигурация поставщика. Алгоритм, который используют внешние программы для такого объединения, отличается от алгоритма, используемого встроенными инструментами платформы. Файл, являющийся общим предком (старая конфигурация поставщика), они сравнивают с двумя другими файлами (основной конфигурацией и новой конфигурацией поставщика). Из основной конфигурации и новой конфигурации поставщика они берут изменения, если эти изменения не пересекаются. А если они пересекаются, то это конфликт, который вы должны разрешить вручную.
Благодаря такому подходу значительно сокращается необходимость ручной правки объединённого кода. Кроме этого внешние программы анализируют код без разбивки на отдельные процедуры и умеют автоматически обрабатывать ситуации, когда меняется только имя процедуры или функции.
В конфигураторе для каждой операции сравнения/объединения существует отдельная настройка. Ниже мы расскажем об этом более подробно.
Показ различий в модулях
С помощью внешней программы вы можете просматривать различия в модулях. Для этого в настройках конфигуратора эта программа должна быть выбрана в свойстве Показать различия без учета структуры:
Если после этого в окне сравнения/объединения выбрать какой-нибудь модуль и выполнить команду Показать различия в модулях без учета структуры . то для выполнения этой операции будет использована выбранная вами внешняя программа:
Настройка объединения модулей
Внешнюю программу вы можете использовать для настройки объединения модулей. Для этого в настройках конфигуратора эта программа должна быть выбрана в свойстве Настройка объединения двух конфигураций:
Если после этого в окне сравнения/объединения выбрать какой-нибудь модуль и выполнить команду Настройка объединения . (или нажать на шестерёнку, что то же самое), то для выполнения этой операции будет использована выбранная вами внешняя программа:
Обновление конфигурации на поддержке
Ещё одна операция, которую можно выполнять с помощью внешней программы - обновление конфигурации, находящейся на поддержке. Для этого в настройках конфигуратора эта программа должна быть выбрана в группе свойств Обновление конфигурации на поддержке:
Если после этого выполнить команду Конфигурация - Поддержка - Обновить конфигурацию, или попытаться настроить объединение модулей, для которых установлен режим объединения с помощью внешней программы, то для выполнения этих операций будет использована выбранная вами внешняя программа:
Читайте также: