Сравнение конфигураций в 1С — задача тривиальная, решаемая штатными средствами через «Сравнение и объединение». Однако, когда возникает необходимость убедиться в полной идентичности именно данных (справочников, документов, регистров) в двух файловых базах, мы сталкиваемся с серьезными техническими сложностями. Ситуация осложняется тем, что бинарное сравнение файлов баз данных не дает результата, даже если данные логически одинаковы.
В этой статье мы подробно разберем, почему простые способы сравнения файлов не работают, и проанализируем проверенные методики сопоставления содержимого информационных баз.
Начнем с того, почему классические методы сравнения файлов, такие как команда fc (file compare) или вычисление контрольной суммы (MD5, SHA), оказываются бесполезными. Проведем эксперимент: возьмем одну базу, сделаем ее копию, просто зайдем в каждую из них и выйдем. При сравнении файлов 1Cv8.1CD мы увидим, что они разные. Разберем причины этого явления:
.dt также не является стабильным для сравнения. Порядок сериализации объектов в архив может меняться, что приводит к разным размерам и хеш-суммам файлов выгрузки.Один из самых надежных технических способов — перевод файловых баз в клиент-серверный вариант (на MS SQL Server или PostgreSQL) и сравнение таблиц средствами СУБД. Проанализируем этот путь:
Для реализации этого метода загрузим обе базы на SQL-сервер под разными именами (например, Base_Etalon и Base_Test). После этого мы можем использовать специализированные инструменты типа SQL Data Compare или бесплатные аналоги для сравнения содержимого таблиц. Рассмотрим преимущества:
1CD.ID объектов).Важное примечание: При сравнении через SQL следует обращать внимание на таблицы с именами типа _Reference (справочники), _Document (документы) и _InfoReg (регистры сведений). Помните, что внутренние идентификаторы (GUID) должны совпадать, иначе прямое сравнение по ключевым полям будет затруднено.
Если мы хотим избежать использования SQL-сервера, воспользуемся механизмом сериализации. Рассмотрим алгоритм выгрузки данных в XML для последующего сравнения:
Используем встроенную обработку «Универсальный обмен данными в формате XML». Важно настроить выгрузку таким образом, чтобы объекты записывались в файл в строго определенном порядке. Разберем по шагам:
Чтобы этот метод сработал, нам нужно исключить из сравнения поля, которые гарантированно будут отличаться, например, ВерсияДанных. Также стоит учитывать, что для больших баз объем XML-файла может исчисляться гигабайтами, что затруднит работу текстовых редакторов.
Мы можем написать собственную обработку, которая будет последовательно обходить метаданные и сравнивать их в реальном времени. Рассмотрим пример логики такой обработки:
Создадим алгоритм, который подключается из «Эталонной» базы к «Тестируемой» через COMConnector. Проанализируем пример кода для сравнения остатков по справочнику:
// Пример упрощенной логики сравнения количества записей
МетаданныеОбъекта = Метаданные.Справочники.Номенклатура;
Запрос = Новый Запрос("ВЫБРАТЬ ПРЕДСТАВЛЕНИЕ(Ссылка) КАК Наим, Ссылка.УникальныйИдентификатор КАК УИД ИЗ " + МетаданныеОбъекта.ПолноеИмя());
ТЗ_Эталон = Запрос.Выполнить().Выгрузить();
// Подключение к другой базе
COMСоединение = Новый COMОбъект("V83.COMConnector");
База2 = COMСоединение.Connect("File=""C:\Bases\TestBase"";Usr=""Admin"";");
// Выполнение аналогичного запроса в другой базе и сопоставление по GUID
// ... логика сравнения ТЗ ...
Преимущество этого метода в том, что мы можем программно игнорировать ненужные реквизиты и сравнивать только бизнес-значимую информацию.
Для бухгалтерских и управленческих систем наиболее эффективным является «логическое» сравнение. Если итоги в отчетах совпадают, то с высокой долей вероятности данные идентичны. Рассмотрим, как автоматизировать этот процесс:
Выгружаем Оборотно-сальдовую ведомость (ОСВ) по всем счетам из обеих баз в формат .mxl или .xlsx. Существуют готовые обработки (например, доступные в сообществах программистов 1С), которые позволяют сравнить два табличных документа и подсветить расхождения в суммах или группировках. Это самый быстрый способ убедиться, что обновление базы не «покосило» учетные данные.
Для глубокого анализа файловых баз профессионалы используют утилиту Tool_1CD. Она позволяет открывать файл .1CD напрямую без запуска платформы 1С. Разберем возможности:
CSV или XML.Этот метод подходит для системных администраторов и разработчиков, которым нужно понять причину расхождения баз на низком уровне, например, после сбоя файловой системы.
Подводя итог, выберем оптимальную стратегию в зависимости от задачи:
Data Compare.diff-сравнением, предварительно отсортировав данные по GUID.Помните, что достичь 100% бинарной идентичности файлов 1Cv8.1CD практически невозможно из-за особенностей работы платформы с индексами и фоновыми процессами. Фокусируйтесь на логической целостности данных.