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

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

Как сравнить две структуры 1С

Практические способы сравнить две структуры 1С: конфигуратор, сравнение конфигураций, COM-объекты, сторонние инструменты. Пошаговые инструкции и типичные ошибки.

Под сравнением двух структур 1С обычно понимают три разные задачи: сравнение метаданных двух конфигураций (объекты, реквизиты, модули), сравнение данных двух информационных баз и сравнение состава таблиц на уровне СУБД. Инструмент для каждой задачи свой, и попытка решить одну задачу инструментом другой приводит к потере времени и ошибкам.

Чаще всего вопрос возникает при обновлении доработанной конфигурации, при слиянии изменений от двух разработчиков, при переносе данных между базами или при проверке того, что тестовая и рабочая базы действительно идентичны по структуре. Во всех этих случаях есть штатные механизмы платформы, а где их не хватает — программные методы и внешние обработки.

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

Определите, что именно нужно сравнить

Прежде чем открывать инструменты, зафиксируйте цель. От неё зависит и метод, и глубина сравнения. Сравнение «для галочки» и сравнение перед объединением конфигураций — разные по трудоёмкости задачи.

Типичные сценарии: проверить расхождения между основной конфигурацией и конфигурацией поставщика перед обновлением; сравнить рабочую базу с копией после доработок; найти различия в данных справочников между двумя базами; проконтролировать, что расширение не изменило типовые объекты.

Маршрут решения

Как выбрать метод сравнения

Нужно сравнить метаданные двух конфигураций или конфигурацию с файлом поставщикаИспользуйте штатное сравнение в конфигураторе: Конфигурация → Сравнить, объединить
Нужно сравнить данные справочников или документов двух базИспользуйте COM-соединение, HTTP-сервис или типовую обработку «Сравнение данных» из состава БСП
Нужно сравнить структуру таблиц на уровне SQL Server или PostgreSQLСнимите структуру хранения через «ПолучитьСтруктуруХраненияБазыДанных» и сравните тексты
Нужно быстро проверить, отличаются ли конфигурации вообщеСравните версии конфигураций и контрольные суммы выгрузок в файлы .cf

Сравнение конфигураций штатными средствами конфигуратора

Основной инструмент — пункт меню «Конфигурация → Сравнить, объединить с конфигурацией из файла» или «Сравнить, объединить с конфигурацией базы данных». Платформа строит дерево различий по всем объектам метаданных: справочникам, документам, регистрам, реквизитам, формам, модулям, ролям.

Порядок действий для типового сценария — сравнения рабочей базы с файлом новой версии поставщика. Откройте конфигуратор под пользователем с правами администратора, выполните выгрузку информационной базы в .dt как резервную копию, затем вызовите сравнение с файлом .cf новой версии. В окне сравнения отключите режим объединения, если нужен только отчёт, и снимите флажки с объектов — тогда платформа покажет различия без попытки слияния.

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

Сравнение конфигурации с файлом поставщика
  1. 1
    Откройте конфигуратор и сделайте выгрузку базы в .dt через Администрирование → Выгрузить информационную базу
  2. 2
    Выберите Конфигурация → Поддержка → Сравнить, объединить с конфигурацией из файла и укажите .cf новой версии
  3. 3
    В окне сравнения изучите дерево различий, раскрывая изменённые объекты
  4. 4
    Для модулей нажмите «Показать различия в модулях» и просмотрите построчные изменения
  5. 5
    Сохраните отчёт о различиях в файл через кнопку сохранения — он пригодится при объединении
  6. 6
    Только после анализа запускайте объединение, отметив нужные объекты флажками

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

Сравнение через выгрузку в файлы конфигурации

Когда нужно сравнить конфигурации вне конфигуратора — например, в системе контроля версий или скриптом — используется выгрузка в файлы XML: «Конфигурация → Выгрузить конфигурацию в файлы». Каждый объект метаданных выгружается в отдельный файл, и дальше каталоги двух выгрузок сравниваются любым инструментом diff: WinMerge, Beyond Compare, KDiff3 или штатным сравнением Git.

Этот способ удобен для автоматизации: выгрузку можно запустить из командной строки конфигуратора с параметрами /DumpConfigToFiles, а сравнение выполнить скриптом. Так строятся регламентные проверки «не отличается ли рабочая база от эталона».

Учтите ограничение: выгрузка в файлы большой конфигурации занимает заметное время и создаёт тысячи файлов, поэтому для разовой проверки штатное сравнение в конфигураторе быстрее. Файловый способ оправдан при регулярном контроле или работе в команде через Git.

batch
Designer.exe /F "C:\Bases\Base1" /N "Администратор" /DumpConfigToFiles "C:\Dump\Base1" -format Hierarchical

Сравнение данных двух информационных баз

Сравнение данных — отдельная задача. Штатного универсального инструмента в платформе нет, но есть типовая обработка «Сравнение данных» в составе Библиотеки стандартных подсистем, а также известные отраслевые обработки, которые подключаются к двум базам и сопоставляют объекты по GUID или по ключевым полям.

Ручной программный способ — COM-соединение (V83.COMConnector) с второй базой и сравнение выборок запросом. Подход рабочий, но медленный на больших объёмах: COM-обмен переносит объекты по одному, и сравнение сотен тысяч записей займёт часы. Для больших таблиц эффективнее выгрузить хеши (контрольные суммы) строк из обеих баз и сравнить уже их.

Для баз на SQL Server есть альтернатива: сравнение на уровне СУБД запросами к таблицам напрямую. Это быстро, но требует понимания структуры хранения 1С: имена таблиц и полей не совпадают с именами метаданных, их сопоставление получают функцией ПолучитьСтруктуруХраненияБазыДанных(). Прямое чтение из SQL безопасно, а вот любая запись в таблицы в обход платформы категорически недопустима — она нарушает целостность базы.

Сравнение структуры хранения на уровне СУБД

Иногда требуется убедиться, что две базы идентичны именно по физической структуре: составу таблиц, полей, индексов. Это актуально после ручных манипуляций с реструктуризацией или при переносе базы между СУБД.

Метод: в каждой базе выполнить ПолучитьСтруктуруХраненияБазыДанных() — функция возвращает таблицу значений с сопоставлением метаданных и физических имён. Выгрузите результат в текстовый или табличный файл из обеих баз и сравните. Расхождения покажут, какие объекты отличаются по структуре или присутствуют только в одной базе.

Проверка результата и типичные ошибки

После сравнения и возможного объединения проверьте результат штатными средствами: выполните «Конфигурация → Проверка конфигурации» с включёнными проверками логической целостности, затем «Тестирование и исправление» на копии базы. Для рабочей базы после объединения обязателен контроль реструктуризации: платформа при обновлении конфигурации базы данных показывает список изменяемых таблиц — сверьте его с ожиданиями.

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

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

Отчёт о различиях после объединения
Норма

Содержит только ожидаемые изменения от новой версии

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

Появились объекты, которые вы не планировали менять

Проверка конфигурации
Норма

Нет ошибок логической целостности

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

Ошибки ссылок на удалённые объекты или дублирование имён

Реструктуризация при обновлении
Норма

Список таблиц соответствует изменённым объектам

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

В списке таблицы, которые вы не трогали

Работа пользователей после обновления
Норма

Типовые операции выполняются без ошибок

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

Ошибки «Поле не найдено» или «Метод не обнаружен»

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

Часто задаваемые вопросы

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

Да. Выгрузите обе конфигурации в файлы XML (через конфигуратор или пакетный режим /DumpConfigToFiles) и сравните каталоги любым diff-инструментом. Это стандартный подход при работе с Git и в CI-конвейерах. Для бинарных файлов .cf прямое сравнение бесполезно — нужна именно выгрузка в файлы.

Как сравнить только модули, а не всю конфигурацию?

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

Чем сравнить данные двух баз, если они в разных сетях?

COM-соединение не подойдёт — оно требует сетевой доступности. Используйте выгрузку данных в файл (типовой обмен XML, выгрузка хешей записей в CSV) и сравнение файлов на одной стороне. Либо разверните HTTP-сервис в одной из баз, возвращающий контрольные суммы по запросу.

Почему отчёт о сравнении показывает различия в объектах, которые никто не менял?

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

Можно ли сравнить расширение конфигурации с основной конфигурацией?

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

Безопасно ли выполнять сравнение на рабочей базе в рабочее время?

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

Итог

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

Метаданные сравнивайте штатным механизмом «Сравнить, объединить» в конфигураторе или через выгрузку в файлы и diff-инструменты. Данные двух баз сопоставляйте через COM, типовые обработки или хеши записей — и только в режиме чтения. Перед любым объединением делайте выгрузку .dt, а результат проверяйте проверкой конфигурации и контролем списка реструктуризации.