При разработке тиражных решений на платформе 1С:Предприятие часто возникает ситуация, когда один и тот же функционал должен существовать и развиваться параллельно: как в виде отдельной самописной конфигурации (файл .cf), так и в виде расширения (файл .cfe) для встраивания в типовые базы. Основная сложность заключается в том, что стандартный конфигуратор 1С не умеет напрямую сравнивать объекты разных типов. Разберем детально, как решить эту задачу, используя современные инструменты разработки и технические хитрости.
На сегодняшний день EDT (Enterprise Development Tools) является наиболее мощным и официальным инструментом для решения подобных задач. Платформа EDT построена на базе Eclipse и предлагает совершенно иной подход к работе с метаданными. В отличие от стандартного конфигуратора, EDT оперирует проектами, которые представляют собой наборы XML-файлов.
Рассмотрим, как организовать процесс сравнения в EDT:
.cf, и второй — для расширения, импортировав его из .cfe.Важно отметить, что механизм сравнения в EDT понимает структуру объектов 1С и корректно подсвечивает различия в свойствах метаданных, что практически невозможно сделать в обычном текстовом diff.
Если использование EDT по каким-то причинам невозможно, мы можем прибегнуть к методу «обмана» конфигуратора через подмену заголовков в файлах выгрузки. Этот способ требует внимательности, но он крайне эффективен для разовых сравнений большого объема метаданных.
Разберем этот метод по шагам:
Configuration.xml. Нам нужно изменить его структуру так, чтобы конфигуратор воспринял эти файлы как расширение.Configuration.xml в текстовом редакторе. Нам необходимо заменить корневой тег Configuration на Extension. Рассмотрим пример структуры:
<?xml version="1.0" encoding="UTF-8"?>
<Extension xmlns="http://v8.1c.ru/8.3/MDClasses" ...>
<Name>МоеРасширение</Name>
<Purpose>Customization</Purpose>
<UsePurposes>
<v8:Value>PlatformApplication</v8:Value>
</UsePurposes>
</Extension>
После внесения правок мы можем попробовать загрузить модифицированную выгрузку в пустое расширение. Теперь, когда у нас есть два расширения в одной или разных базах, мы можем использовать стандартное окно Сравнить, объединить с конфигурацией из файла, выбрав формат .cfe. Выясним причину, почему это работает: платформа видит идентичные типы контейнеров и разрешает сопоставление объектов.
Для автоматизации процесса существуют сторонние инструменты, такие как cfe2cf. Это консольные утилиты, часто написанные на языке OneScript, которые выполняют трансформацию файлов расширения в формат основной конфигурации и наоборот.
Проанализируем сценарий работы с такой утилитой:
.cfe и распаковывает его содержимое.MDObject.Existence или ExtendedObject)..cf.После такой конвертации мы получаем два файла .cf, которые можно сравнить любым стандартным способом, включая встроенный в 1С механизм или внешние инструменты сравнения файлов (например, WinMerge или Beyond Compare), предварительно выгрузив их в исходные коды.
Часто основная задача — синхронизировать только программный код, не затрагивая структуру метаданных. В этом случае мы можем применить упрощенный подход. Выделим общие модули или модули объектов, которые идентичны в обеих версиях.
Рассмотрим алгоритм действий:
ОбщийМодуль.РаботаСКлиентами) в основной конфигурации..bsl или .txt через меню Файл — Сохранить как.Платформа подсветит добавленные, измененные и удаленные строки кода. Этот метод особенно удобен, если вы используете директивы компиляции или специфические аннотации расширений (например, &перед, &вместо, &после), так как они будут наглядно видны при сравнении с чистым кодом основной конфигурации. Для автоматизации этой задачи можно использовать инструмент для переноса изменений и генерации кода модулей расширений.
При синхронизации расширения и конфигурации важно помнить о UUID (уникальных идентификаторах) объектов. Если вы просто копируете объекты между базами, их идентификаторы могут различаться, даже если имена совпадают.
Проанализируем последствия:
Для корректной работы рекомендуем всегда начинать создание расширения с заимствования объектов из основной конфигурации, чтобы сохранить преемственность идентификаторов.
Выясним, какой метод лучше выбрать в зависимости от ситуации:
Помните, что расширения имеют ограничения по типам объектов, которые они могут содержать. При переносе изменений из конфигурации в расширение всегда проверяйте режим совместимости вашей конфигурации, так как он напрямую влияет на доступные возможности расширений.