К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как сравнить макеты в 1С: практическое руководство

Как сравнить макеты табличных документов и печатных форм в 1С: штатные средства конфигуратора, сравнение версий, внешние инструменты и типичные ошибки.

Макеты в 1С — это шаблоны печатных форм, табличных документов, схем компоновки данных и других объектов, которые хранятся внутри конфигурации. При доработке печатных форм или обновлении конфигурации регулярно возникает задача понять, чем отличаются два макета: текущий и изменённый, свой и типовой, рабочий и архивный.

Штатный конфигуратор не содержит отдельной кнопки «сравнить макеты», поэтому сравнение выполняется обходными путями: через механизм сравнения конфигураций, через выгрузку в файлы, через внешние diff-инструменты или программно. Выбор способа зависит от типа макета и от того, что именно нужно найти — изменённые области, параметры, оформление или код обработки.

Ниже разобраны рабочие методы для макетов типа «Табличный документ», «Текстовый документ», «Схема компоновки данных» и «Двоичные данные», а также ограничения каждого подхода.

Какие макеты бывают и почему это важно для сравнения

Перед выбором инструмента определите тип макета, потому что формат хранения у них разный. В конфигураторе откройте нужный объект (документ, справочник, отчёт), перейдите на вкладку «Макеты» и посмотрите колонку «Тип макета».

Табличный документФормат MXL

Сравнивается через выгрузку в файл и внешний diff или программно

Текстовый документОбычный текст

Сравнивается любым текстовым diff-инструментом

Схема компоновки данныхXML-структура

Сравнивается после выгрузки в XML-файл

Двоичные данные / ActiveDocumentWord, Excel, картинки

Сравнивается средствами офисных программ или визуально

Самая частая задача — сравнение табличных документов (печатные формы ТОРГ-12, счетов, актов). Именно для них штатных средств меньше всего, поэтому дальше основное внимание уделено этому типу.

Сравнение через механизм сравнения конфигураций

Если макеты находятся в двух разных конфигурациях (например, ваша доработанная и новая типовая от поставщика), используйте штатное сравнение: меню «Конфигурация → Сравнить, объединить с конфигурацией из файла» или «Сравнить с конфигурацией базы данных».

Результат покажет, что макет изменён, но не покажет детальных отличий внутри табличного документа — конфигуратор отобразит только факт изменения. Для текстовых макетов и СКД детализация доступна: по двойному щелчку откроется построчное сравнение.

Сравнение макетов через конфигурации
  1. 1
    Откройте конфигуратор и меню «Конфигурация → Сравнить, объединить с конфигурацией из файла»
  2. 2
    Укажите CF-файл второй конфигурации и дождитесь построения дерева отличий
  3. 3
    Найдите нужный объект и раскройте ветку «Макеты»
  4. 4
    Для текстовых макетов и СКД дважды щёлкните по элементу, чтобы увидеть построчные отличия
  5. 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 + визуальный просмотр

Быстро для небольших макетов; легко пропустить скрытые отличия

Программное сравнение

Самый точный для табличных документов; требует написания обработки

Выгрузка в файлы + diff

Лучший вариант для СКД и текстов; неудобен для MXL

EDT и контроль версий

Удобно при командной разработке; требует перехода на EDT и Git

Как проверить результат после переноса изменений

После того как отличия найдены и нужные изменения перенесены в рабочий макет, обязательно проверьте печатную форму на реальных данных. Сформируйте документ, выведите печатную форму и сверьте: заполняются ли все параметры, не появились ли пустые блоки или текст вида «<Параметр>».

Контрольные точки

Как проверить результат

Заполнение параметров
Норма

Все данные документа выведены, нет незаполненных плейсхолдеров

Тревожный признак

В форме видны имена параметров или пустые поля там, где должны быть данные

Имена областей
Норма

Код печати находит все области, ошибок в журнале регистрации нет

Тревожный признак

Ошибка «Область не найдена» при формировании печатной формы

Оформление
Норма

Шрифты, границы и ширина колонок совпадают с эталоном

Тревожный признак

Таблица «разъехалась», текст обрезан при печати

Дополнительно проверьте печать на документах с разным объёмом данных: с одной строкой и с несколькими десятками строк, с длинными наименованиями. Отличия в областях повторения шапки и подвала проявляются только на многострочных документах.

Типичные ошибки
01
Сравнение макетов «на глаз» в конфигураторе — пропускаются отличия в форматах и именах параметров
02
Замена макета без сохранения исходной версии — откат невозможен без копии
03
Перенос типового макета целиком — стираются собственные доработки печатной формы
04
Проверка только на одном тестовом документе — ошибки областей всплывают на других данных
05
Игнорирование отличий в СКД-макетах отчётов — отчёт падает или выводит неверные итоги

Частые вопросы

Можно ли сравнить два макета прямо в конфигураторе без выгрузки?

Детального сравнения табличных макетов в конфигураторе нет. Можно открыть два окна конфигуратора (или конфигуратор и второй сеанс) и просматривать макеты параллельно, но точный результат даст только выгрузка в файлы или программное сравнение.

Чем открыть и сравнить файлы MXL вне 1С?

MXL — проприетарный формат платформы, сторонние программы его не читают. Открыть файл можно в конфигураторе или в режиме толстого клиента через «Файл → Открыть». Для сравнения содержимого используют обработку на встроенном языке.

Как сравнить макеты внешних печатных форм?

Если внешняя печатная форма — это обработка с макетом внутри, откройте её в конфигураторе («Файл → Открыть»), найдите макет и сохраните в MXL, затем сравните с эталоном любым описанным способом. Если форма формирует офисный документ (docx, xlsx), сравнивайте сами шаблоны средствами Word или Excel.

Что делать, если после обновления печатная форма перестала работать?

Сначала сравните текущий макет с тем, что был до обновления (из резервной копии или хранилища). Чаще всего причина — переименованная область или параметр: код печати обращается к старому имени. Найдите отличие программным сравнением и либо верните имя в макете, либо поправьте код.

Помогает ли хранилище конфигурации при сравнении макетов?

Да, частично. История версий в хранилище показывает, что макет изменился и кем, а для текстовых макетов и СКД доступно сравнение версий. Для табличных документов детальные отличия придётся смотреть, выгружая макеты из разных версий.

Есть ли готовые обработки для сравнения табличных документов?

На профильных ресурсах для разработчиков публикуются обработки сравнения табличных документов. Перед использованием проверяйте их на тестовой базе: сторонний код может не учитывать особенности вашей версии платформы.

Итог

Что важно запомнить

Прямого инструмента сравнения макетов в конфигураторе нет. Табличные макеты сравнивайте через выгрузку в MXL и программное сравнение, СКД и текстовые — через выгрузку в файлы и diff-инструменты. Перед заменой макета всегда сохраняйте исходную версию, а после переноса изменений проверяйте печатную форму на разных документах.