Разработка и Конфигурация · 11 мин
Как сравнить две базы 1С и найти различия
Как сравнить две базы 1С: штатные механизмы, выгрузка в файлы, сторонние обработки и SQL. Различия данных и конфигураций, типичные ошибки и проверка результата.
Сравнение двух баз 1С требуется в типичных ситуациях: перед объединением рабочей и тестовой базы, при поиске расхождений между филиалами, при переносе данных после доработки конфигурации или при проверке корректности обмена. Задача распадается на две независимые части: сравнение структуры конфигураций и сравнение самих данных — документов, справочников, регистров. Инструменты для этих задач разные, и путать их — частая причина потерянного времени.
Важно сразу определить, что именно сравнивается. Если базы работают на разных версиях конфигурации, сначала сопоставляют метаданные, иначе сравнение данных даст ложные расхождения из-за разных реквизитов и табличных частей. Если конфигурации идентичны, задача сводится к поиску различий в содержимом объектов по ключевым полям: ссылкам, номерам, датам, суммам.
Определите, что именно нужно сравнить
Первый шаг — классификация задачи. Сравнение конфигураций отвечает на вопрос «чем отличается программный код и структура метаданных»: состав объектов, реквизитов, модулей, прав, форм. Сравнение данных отвечает на вопрос «какие записи есть в одной базе и отсутствуют или изменены в другой». Это разные процедуры с разными инструментами и разными рисками.
Практический признак: если после обновления или доработки «что-то перестало работать» — сравнивайте конфигурации. Если бухгалтерия сообщает, что «в двух базах разные обороты» или «документ есть там, но нет здесь» — сравнивайте данные. Смешанный сценарий тоже встречается: например, перед объединением баз филиалов сначала приводят конфигурации к одной версии, а затем сопоставляют данные.
Как выбрать действие
Сравнение конфигураций штатными средствами
Основной инструмент — механизм «Сравнение и объединение конфигураций» в конфигураторе. Он доступен через меню «Конфигурация» и позволяет сравнить текущую конфигурацию базы данных с конфигурацией поставщика, с файлом конфигурации (.cf) или с конфигурацией другой базы, если организовано подключение. Результат выводится в виде дерева объектов с отметками о различиях: изменённые, добавленные и удалённые элементы подсвечиваются отдельно.
Для сравнения двух независимых баз удобно выгрузить конфигурацию каждой в файл .cf (меню «Конфигурация» → «Сохранить конфигурацию в файл»), а затем открыть одну из баз в конфигураторе и сравнить её конфигурацию с файлом второй. В окне сравнения можно детализировать различия вплоть до текста модулей: двойной щелчок по объекту открывает построчное сравнение кода.
Если объединение не требуется и нужен только отчёт о различиях, снимите все флажки в окне объединения и используйте кнопку формирования отчёта. Это безопасный режим: структура базы не изменится. Опасность представляет именно кнопка «Выполнить» с установленными флажками — она применяет изменения к конфигурации базы данных.
Сравнение данных через выгрузку и загрузку
Для файловых и клиент-серверных баз с идентичными конфигурациями удобен типовой подход через обработку «Выгрузка и загрузка данных XML» (она входит в состав дистрибутивов многих типовых конфигураций и доступна на диске ИТС). Обработка выгружает данные в XML-файл, сохраняя ссылки, что позволяет переносить объекты между базами без потери связей.
Сам по себе перенос не сравнивает базы, но даёт рабочий приём: выгрузите из каждой базы один и тот же набор объектов (например, все документы за период или конкретный справочник) в отдельные файлы, а затем сравните файлы любым инструментом сравнения текста — встроенным в 1С сравнением текстовых файлов, Notepad++ с плагином Compare или WinMerge. Различия в XML покажут, какие объекты и реквизиты расходятся.
Метод подходит для баз небольшого и среднего объёма. Для больших баз полная выгрузка занимает часы и создаёт файлы гигабайтного размера — в этом случае выгружайте выборочно по видам объектов и периодам, либо переходите к сравнению запросами.
- 1Сделайте резервные копии обеих баз и зафиксируйте версии конфигураций
- 2Убедитесь, что конфигурации идентичны, иначе выгрузка может не загрузиться корректно
- 3Выгрузите из первой базы нужный набор объектов в XML-файл
- 4Выгрузите тот же набор из второй базы в отдельный файл с теми же настройками
- 5Сравните файлы инструментом сравнения текста и проанализируйте различия
- 6Проверьте найденные расхождения вручную в интерфейсе обеих баз
Сравнение данных обработками и запросами
Более гибкий путь — специализированные обработки сравнения данных. Распространённый подход: обработка подключается к двум базам (одна открыта в текущем сеансе, вторая — через COM-соединение или внешний источник данных) и сопоставляет объекты по ключевым полям. Для справочников ключом обычно служит код или GUID, для документов — номер и дата, для регистров — набор измерений и период.
Если готовой обработки нет, задачу решают запросом. Практическая схема: из каждой базы выгружают в таблицу значений или файл сводные данные по проверяемым объектам — например, номер документа, дату, сумму и контрагента. Затем эти выборки сопоставляют: записи, присутствующие только в одной выборке, — это отсутствующие документы; записи с совпадающим ключом, но разными суммами — изменённые документы.
Для контроля итогов удобны агрегатные проверки: сравните обороты по счетам, итоги по регистрам накопления, количество документов по видам за период. Если агрегаты совпадают, вероятность расхождений в деталях невысока; если различаются — детализируйте проверку до уровня конкретных документов.
Сравнение на уровне SQL для клиент-серверных баз
Для клиент-серверных баз на MS SQL Server или PostgreSQL доступен самый быстрый метод больших объёмов — сравнение таблиц напрямую средствами СУБД. Типовой приём: выгрузить ключевые поля таблиц обеих баз в CSV или временные таблицы и выполнить соединение с поиском несовпадений. Для быстрой проверки идентичности таблиц используют агрегированные контрольные суммы, например хеш от конкатенации строк.
Главная сложность метода — сопоставление имён таблиц SQL с объектами метаданных 1С: физические имена таблиц (_Document123, _Reference45) не совпадают с логическими именами в конфигураторе. Соответствие получают через функцию ПолучитьСтруктуруХраненияБазыДанных() в конфигураторе. Кроме того, прямые запросы к SQL допустимы только на чтение: любая запись в обход платформы нарушает целостность данных и лишает поддержки.
Проверка результата сравнения
Найденные различия нужно верифицировать, прежде чем принимать решения о переносе или синхронизации. Часть расхождений окажется легитимной: документы, созданные после момента расхождения баз, осознанно изменённые элементы справочников, различия в настройках. Полезно зафиксировать дату и время, на которые выполнялось сравнение, — в работающих базах данные меняются постоянно, и повторная проверка даст уже другую картину.
Контрольные точки для оценки качества сравнения: совпадают ли агрегатные итоги (обороты, остатки, количество объектов), объяснимы ли найденные различия, воспроизводится ли результат при повторном запуске с теми же параметрами. Если повторное сравнение даёт другой набор расхождений без видимой причины — ищите ошибку в методике: некорректные ключи сопоставления, разные отборы, разные версии конфигураций.
Как проверить результат
Итоги совпадают или разница объяснена конкретными документами
Разница есть, но найти документы-источники не удаётся
Набор расхождений воспроизводится
Каждый запуск даёт разный результат
Каждый объект сопоставлен однозначно
Есть дубли ключей или несопоставленные группы записей
Версии идентичны или различия учтены
Сравнение данных шло при разных конфигурациях
Типичные ошибки и ограничения
Самая частая ошибка — сравнение данных при разных версиях конфигураций. Новый реквизит в одной базе даст массовые «расхождения», не имеющие отношения к реальным данным. Вторая типичная проблема — сопоставление по неустойчивым ключам: наименование элемента справочника легко изменить, и такой элемент будет ошибочно посчитан отсутствующим в другой базе.
Третья группа ошибок связана с моментом снятия данных. Если выгрузку из первой базы сделали утром, а из второй — вечером, различия частично отражают просто текущую работу пользователей. Для корректного сравнения либо фиксируйте обе базы на один момент (в нерабочее время, с блокировкой сеансов), либо сравнивайте данные на закрытую дату, исключая текущий период.
Наконец, учитывайте ограничения инструментов: штатное сравнение конфигураций не показывает различия в данных, обработка выгрузки XML не сравнивает, а только переносит, а сравнение текстовых файлов выгрузки чувствительно к порядку объектов в файле. Выбирайте инструмент под конкретную задачу и не ждите от одного приёма ответа на все вопросы сразу.
Частые вопросы
Можно ли сравнить базы с разными конфигурациями?
Да, но результаты по данным будут искажены: разный состав реквизитов и табличных частей даст ложные расхождения. Корректный порядок — сначала сравнить конфигурации и привести их к одной версии, затем сравнивать данные. Если привести версии нельзя, сравнивайте только те объекты и реквизиты, которые существуют в обеих базах.
Как сравнить базы, если нет доступа к конфигуратору?
Используйте встроенные в типовые конфигурации отчёты и обработки: универсальный отчёт, консоль запросов из подсистемы инструментов разработчика, выгрузку списков в табличный документ. Сопоставить выгруженные списки можно в Excel через ВПР или Power Query.
Что делать, если базы очень большие и выгрузка занимает часы?
Сравнивайте порциями: по видам объектов и периодам. Начните с агрегатных проверок — оборотов и остатков; детальное сравнение выполняйте только там, где агрегаты разошлись. Для клиент-серверных баз быстрее всего работает сравнение на уровне SQL-запросов на чтение.
Чем сравнить файлы выгрузки XML, если они большие?
Текстовые редакторы с большими файлами справляются плохо. Используйте WinMerge, kdiff3 или штатное сравнение текстовых файлов в 1С (меню «Файл» → «Сравнить файлы»). Для очень больших файлов предварительно разбейте выгрузку по типам объектов.
Как сравнить движения документов, а не сами документы?
Выгрузите из обеих баз содержимое соответствующего регистра с отбором по периоду и сопоставьте записи по набору измерений и регистратору. Практичнее сравнивать не каждую запись, а итоги по регистру в разрезе регистраторов — так быстрее локализуются документы с расхождениями.
Что важно запомнить
Сравнение конфигураций и сравнение данных — разные задачи с разными инструментами. Конфигурации сопоставляйте штатным механизмом конфигуратора, данные — выгрузкой в файлы, обработками сопоставления или запросами. Работайте только на копиях, сопоставляйте объекты по устойчивым ключам и проверяйте результат агрегатными итогами.