Как сравнить содержимое и данные в двух файловых базах 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

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

Почему нельзя просто сравнить файлы 1Cv8.1CD или выгрузки DT

Начнем с того, почему классические методы сравнения файлов, такие как команда fc (file compare) или вычисление контрольной суммы (MD5, SHA), оказываются бесполезными. Проведем эксперимент: возьмем одну базу, сделаем ее копию, просто зайдем в каждую из них и выйдем. При сравнении файлов 1Cv8.1CD мы увидим, что они разные. Разберем причины этого явления:

  1. Внутренняя структура СУБД 1С: Файловая база — это сложная структура из страниц данных. При удалении или изменении записей страницы не затираются физически, они помечаются как свободные. Порядок заполнения этих страниц в двух разных сеансах может отличаться.
  2. Служебная информация: При каждом открытии базы платформа обновляет внутренние индексы, транзакционные логи и таблицы блокировок. Даже если пользователь ничего не менял, файл базы физически модифицируется.
  3. Фоновые задания: Сразу после запуска базы могут стартовать регламентные задания (обновление полнотекстового поиска, агрегаты оборотов и т.д.), которые вносят изменения в служебные таблицы.
  4. Выгрузки DT: Формат .dt также не является стабильным для сравнения. Порядок сериализации объектов в архив может меняться, что приводит к разным размерам и хеш-суммам файлов выгрузки.

Метод 1: Сравнение на уровне SQL-таблиц

Один из самых надежных технических способов — перевод файловых баз в клиент-серверный вариант (на MS SQL Server или PostgreSQL) и сравнение таблиц средствами СУБД. Проанализируем этот путь:

Для реализации этого метода загрузим обе базы на SQL-сервер под разными именами (например, Base_Etalon и Base_Test). После этого мы можем использовать специализированные инструменты типа SQL Data Compare или бесплатные аналоги для сравнения содержимого таблиц. Рассмотрим преимущества:

Важное примечание: При сравнении через SQL следует обращать внимание на таблицы с именами типа _Reference (справочники), _Document (документы) и _InfoReg (регистры сведений). Помните, что внутренние идентификаторы (GUID) должны совпадать, иначе прямое сравнение по ключевым полям будет затруднено.

Метод 2: Универсальная выгрузка в XML и текстовое сравнение

Если мы хотим избежать использования SQL-сервера, воспользуемся механизмом сериализации. Рассмотрим алгоритм выгрузки данных в XML для последующего сравнения:

Используем встроенную обработку «Универсальный обмен данными в формате XML». Важно настроить выгрузку таким образом, чтобы объекты записывались в файл в строго определенном порядке. Разберем по шагам:

  1. Выгружаем все метаданные из первой базы.
  2. Повторяем операцию для второй базы с теми же правилами обмена.
  3. Используем инструменты сравнения текстовых файлов (например, WinMerge, Beyond Compare или Git Diff).

Чтобы этот метод сработал, нам нужно исключить из сравнения поля, которые гарантированно будут отличаться, например, ВерсияДанных. Также стоит учитывать, что для больших баз объем XML-файла может исчисляться гигабайтами, что затруднит работу текстовых редакторов.

Метод 3: Сравнение через COM-соединение или внешние источники данных

Мы можем написать собственную обработку, которая будет последовательно обходить метаданные и сравнивать их в реальном времени. Рассмотрим пример логики такой обработки:

Создадим алгоритм, который подключается из «Эталонной» базы к «Тестируемой» через COMConnector. Проанализируем пример кода для сравнения остатков по справочнику:


// Пример упрощенной логики сравнения количества записей
МетаданныеОбъекта = Метаданные.Справочники.Номенклатура;
Запрос = Новый Запрос("ВЫБРАТЬ ПРЕДСТАВЛЕНИЕ(Ссылка) КАК Наим, Ссылка.УникальныйИдентификатор КАК УИД ИЗ " + МетаданныеОбъекта.ПолноеИмя());
ТЗ_Эталон = Запрос.Выполнить().Выгрузить();

// Подключение к другой базе
COMСоединение = Новый COMОбъект("V83.COMConnector");
База2 = COMСоединение.Connect("File=""C:\Bases\TestBase"";Usr=""Admin"";");

// Выполнение аналогичного запроса в другой базе и сопоставление по GUID
// ... логика сравнения ТЗ ...

Преимущество этого метода в том, что мы можем программно игнорировать ненужные реквизиты и сравнивать только бизнес-значимую информацию.

Метод 4: Сравнение аналитических отчетов (ОСВ)

Для бухгалтерских и управленческих систем наиболее эффективным является «логическое» сравнение. Если итоги в отчетах совпадают, то с высокой долей вероятности данные идентичны. Рассмотрим, как автоматизировать этот процесс:

Выгружаем Оборотно-сальдовую ведомость (ОСВ) по всем счетам из обеих баз в формат .mxl или .xlsx. Существуют готовые обработки (например, доступные в сообществах программистов 1С), которые позволяют сравнить два табличных документа и подсветить расхождения в суммах или группировках. Это самый быстрый способ убедиться, что обновление базы не «покосило» учетные данные.

Метод 5: Использование инструмента Tool_1CD

Для глубокого анализа файловых баз профессионалы используют утилиту Tool_1CD. Она позволяет открывать файл .1CD напрямую без запуска платформы 1С. Разберем возможности:

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

Итоги и рекомендации

Подводя итог, выберем оптимальную стратегию в зависимости от задачи:

  1. Если нужно проверить результат обновления: Лучше всего сравнить ОСВ и ключевые управленческие отчеты. Если цифры сходятся — базы идентичны с точки зрения бизнеса.
  2. Если нужно техническое подтверждение: Используйте загрузку в SQL и инструменты Data Compare.
  3. Для небольших баз: Подойдет выгрузка в XML с последующим diff-сравнением, предварительно отсортировав данные по GUID.

Помните, что достичь 100% бинарной идентичности файлов 1Cv8.1CD практически невозможно из-за особенностей работы платформы с индексами и фоновыми процессами. Фокусируйтесь на логической целостности данных.

← На главную