Разработка и Конфигурация · 9 мин
Как сравнить макеты в 1С: практическое руководство
Как сравнить макеты табличных документов и печатных форм в 1С: штатные средства конфигуратора, сравнение версий, внешние инструменты и типичные ошибки.
Макеты в 1С — это шаблоны печатных форм, табличных документов, схем компоновки данных и других объектов, которые хранятся внутри конфигурации. При доработке печатных форм или обновлении конфигурации регулярно возникает задача понять, чем отличаются два макета: текущий и изменённый, свой и типовой, рабочий и архивный.
Штатный конфигуратор не содержит отдельной кнопки «сравнить макеты», поэтому сравнение выполняется обходными путями: через механизм сравнения конфигураций, через выгрузку в файлы, через внешние diff-инструменты или программно. Выбор способа зависит от типа макета и от того, что именно нужно найти — изменённые области, параметры, оформление или код обработки.
Ниже разобраны рабочие методы для макетов типа «Табличный документ», «Текстовый документ», «Схема компоновки данных» и «Двоичные данные», а также ограничения каждого подхода.
Какие макеты бывают и почему это важно для сравнения
Перед выбором инструмента определите тип макета, потому что формат хранения у них разный. В конфигураторе откройте нужный объект (документ, справочник, отчёт), перейдите на вкладку «Макеты» и посмотрите колонку «Тип макета».
Сравнивается через выгрузку в файл и внешний diff или программно
Сравнивается любым текстовым diff-инструментом
Сравнивается после выгрузки в XML-файл
Сравнивается средствами офисных программ или визуально
Самая частая задача — сравнение табличных документов (печатные формы ТОРГ-12, счетов, актов). Именно для них штатных средств меньше всего, поэтому дальше основное внимание уделено этому типу.
Сравнение через механизм сравнения конфигураций
Если макеты находятся в двух разных конфигурациях (например, ваша доработанная и новая типовая от поставщика), используйте штатное сравнение: меню «Конфигурация → Сравнить, объединить с конфигурацией из файла» или «Сравнить с конфигурацией базы данных».
Результат покажет, что макет изменён, но не покажет детальных отличий внутри табличного документа — конфигуратор отобразит только факт изменения. Для текстовых макетов и СКД детализация доступна: по двойному щелчку откроется построчное сравнение.
- 1Откройте конфигуратор и меню «Конфигурация → Сравнить, объединить с конфигурацией из файла»
- 2Укажите CF-файл второй конфигурации и дождитесь построения дерева отличий
- 3Найдите нужный объект и раскройте ветку «Макеты»
- 4Для текстовых макетов и СКД дважды щёлкните по элементу, чтобы увидеть построчные отличия
- 5Для табличных документов зафиксируйте факт изменения и переходите к выгрузке в MXL
Этот способ удобен при обновлении типовых конфигураций: вы сразу видите, какие макеты поставщик изменил, и можете решить, переносить ли свои доработки.
Сравнение табличных макетов через выгрузку в файлы
Основной рабочий метод для макетов типа «Табличный документ» — сохранить оба варианта в файлы MXL и сравнить их. Откройте макет в конфигураторе, затем «Файл → Сохранить копию» и укажите имя файла. Повторите для второго макета.
Файл MXL — это структурированный формат, и простой текстовый diff покажет отличия, но читать их неудобно. Практичнее открыть оба файла в двух окнах (в конфигураторе или в толстом клиенте через «Файл → Открыть») и визуально сверить области, либо использовать программное сравнение, описанное ниже.
Программное сравнение табличных документов
Для точного сравнения двух табличных документов напишите небольшую обработку на встроенном языке. Логика простая: загрузить оба MXL-файла в объекты «ТабличныйДокумент» и пройти циклом по ячейкам, сравнивая текст, параметры и формат.
ТабДок1 = Новый ТабличныйДокумент;
ТабДок1.Прочитать("C:\temp\макет_старый.mxl");
ТабДок2 = Новый ТабличныйДокумент;
ТабДок2.Прочитать("C:\temp\макет_новый.mxl");
Для Стр = 1 По Макс(ТабДок1.ВысотаТаблицы, ТабДок2.ВысотаТаблицы) Цикл
Для Кол = 1 По Макс(ТабДок1.ШиринаТаблицы, ТабДок2.ШиринаТаблицы) Цикл
Яч1 = ТабДок1.Область(Стр, Кол);
Яч2 = ТабДок2.Область(Стр, Кол);
Если Яч1.Текст <> Яч2.Текст
Или Яч1.Имя <> Яч2.Имя
Или Яч1.Параметр <> Яч2.Параметр Тогда
Сообщить("Отличие в " + Стр + ":" + Кол);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Такой подход выявляет различия, которые глазом не видны: переименованные параметры, изменённые имена областей, отличия в служебных текстах. Именно эти мелочи чаще всего ломают печатные формы после обновления.
Сравнение макетов СКД и текстовых макетов
Макет типа «Схема компоновки данных» хранится как XML. Чтобы сравнить две СКД, выгрузите конфигурацию в файлы («Конфигурация → Выгрузить конфигурацию в файлы») — каждый макет СКД будет сохранён как отдельный XML-файл, который сравнивается любым diff-инструментом (WinMerge, KDiff3, встроенное сравнение в EDT).
Текстовые макеты сравниваются ещё проще: скопируйте содержимое в два текстовых файла и сравните. Если текстовый макет содержит запрос или код, построчный diff покажет все отличия наглядно.
В 1C:EDT сравнение удобнее: среда разработки построена на Eclipse, и там доступно сравнение версий объектов через локальную историю и системы контроля версий, включая макеты.
Сравнение способов
Подходит при обновлении типовых; показывает детали только для текстов и СКД
Быстро для небольших макетов; легко пропустить скрытые отличия
Самый точный для табличных документов; требует написания обработки
Лучший вариант для СКД и текстов; неудобен для MXL
Удобно при командной разработке; требует перехода на EDT и Git
Как проверить результат после переноса изменений
После того как отличия найдены и нужные изменения перенесены в рабочий макет, обязательно проверьте печатную форму на реальных данных. Сформируйте документ, выведите печатную форму и сверьте: заполняются ли все параметры, не появились ли пустые блоки или текст вида «<Параметр>».
Как проверить результат
Все данные документа выведены, нет незаполненных плейсхолдеров
В форме видны имена параметров или пустые поля там, где должны быть данные
Код печати находит все области, ошибок в журнале регистрации нет
Ошибка «Область не найдена» при формировании печатной формы
Шрифты, границы и ширина колонок совпадают с эталоном
Таблица «разъехалась», текст обрезан при печати
Дополнительно проверьте печать на документах с разным объёмом данных: с одной строкой и с несколькими десятками строк, с длинными наименованиями. Отличия в областях повторения шапки и подвала проявляются только на многострочных документах.
Частые вопросы
Можно ли сравнить два макета прямо в конфигураторе без выгрузки?
Детального сравнения табличных макетов в конфигураторе нет. Можно открыть два окна конфигуратора (или конфигуратор и второй сеанс) и просматривать макеты параллельно, но точный результат даст только выгрузка в файлы или программное сравнение.
Чем открыть и сравнить файлы MXL вне 1С?
MXL — проприетарный формат платформы, сторонние программы его не читают. Открыть файл можно в конфигураторе или в режиме толстого клиента через «Файл → Открыть». Для сравнения содержимого используют обработку на встроенном языке.
Как сравнить макеты внешних печатных форм?
Если внешняя печатная форма — это обработка с макетом внутри, откройте её в конфигураторе («Файл → Открыть»), найдите макет и сохраните в MXL, затем сравните с эталоном любым описанным способом. Если форма формирует офисный документ (docx, xlsx), сравнивайте сами шаблоны средствами Word или Excel.
Что делать, если после обновления печатная форма перестала работать?
Сначала сравните текущий макет с тем, что был до обновления (из резервной копии или хранилища). Чаще всего причина — переименованная область или параметр: код печати обращается к старому имени. Найдите отличие программным сравнением и либо верните имя в макете, либо поправьте код.
Помогает ли хранилище конфигурации при сравнении макетов?
Да, частично. История версий в хранилище показывает, что макет изменился и кем, а для текстовых макетов и СКД доступно сравнение версий. Для табличных документов детальные отличия придётся смотреть, выгружая макеты из разных версий.
Есть ли готовые обработки для сравнения табличных документов?
На профильных ресурсах для разработчиков публикуются обработки сравнения табличных документов. Перед использованием проверяйте их на тестовой базе: сторонний код может не учитывать особенности вашей версии платформы.
Что важно запомнить
Прямого инструмента сравнения макетов в конфигураторе нет. Табличные макеты сравнивайте через выгрузку в MXL и программное сравнение, СКД и текстовые — через выгрузку в файлы и diff-инструменты. Перед заменой макета всегда сохраняйте исходную версию, а после переноса изменений проверяйте печатную форму на разных документах.