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

Обновлено: 01.07.2024

Особенности сравнения и объединения конфигураций в режиме обновления

Для сопоставления объектов при объединении конфигурации в 1С:Предприятии 8 используются свойство "Имя" объекта метаданных и его внутренний идентификатор. Однако в различных вариантах сравнения алгоритм сопоставления объектов разный. Прежде чем подробно описать различные варианты, сначала опишем правила изменения внутреннего идентификатора. Идентификатор в пределах одной конфигурации никогда не изменяется. Идентификатор не изменяется при выгрузке конфигурации в cf или dt файлы (включая файлы поставки cf и обновления cfu ). Идентификатор не изменяется при использовании механизма групповой разработки (в процессе перемещений между конфигурацией и хранилищем). Идентификатор всегда изменяется при копировании объекта, в том числе в процессе объединения конфигураций. Поясним на примере. Создаем новую конфигурацию. Выполняем команду " Конфигурация - Сравнить, объединить с конфигурацией из файла. ". Программа обнаружит что текущая конфигурация пустая и предложит выполнить полную загрузку (аналогично команде " Конфигурация - Загрузить конфигурацию из файла "). Если согласится на предложенный вариант, то в результате все объекты сохранят свои идентификаторы. Если же отказаться и выполнить обычное объединение, то все объекты идентификаторы поменяют, хотя логически получатся две одинаковые конфигурации.

Теперь рассмотрим алгоритмы сопоставления объектов. Существуют три варианта.

  1. Сравнение произвольных конфигураций. Выполняется сопоставление по имени объекта. Если для каких-то объектов пару найти не удалось, выполняется сопоставление по идентификатору.
  2. Сравнение родственных конфигураций. Имеются ввиду конфигурации, про которые можно точно утверждать, что они являются различными версиями одной и той же конфигурации (примеры - сравнение основной конфигурации с конфигурацией базы данных или с конфигурацией хранилища). Выполняется сопоставление только по идентификатору объекта. Имя объекта не используется.
  3. Сравнение с конфигурацией поставщика. Выполняется сопоставление по идентификаторам, но при этом идентификаторы не обязательно должны быть одинаковы.

Третий вариант мы рассмотрим отдельно, но сначала некоторые уточнения про первые два. Сравнение конфигураций можно вызвать из различных режимов. Например, используя команды " Конфигурация - Сравнить, объединить с конфигурацией из файла. ", " Конфигурация - Конфигурация базы данных - Сравнить, объединить с конфигурацией базы данных ", из диалога настройки поддержки, и так далее. Во всех этих случаях вариант сопоставления выбирается автоматически. Есть также команда универсального сравнения конфигураций "Конфигурация - Сравнить конфигурации. ". Где можно выбрать любую пару (например конфигурацию базы данных с некоторой версией из хранилища конфигураций). В случае если будет указана пара конфигураций, связь между которыми известна, вариант сопоставления так же будет выбран автоматически. В противном случае, будет доступен флажок "Устанавливать соответствия по именам объектов", который позволяет в явном виде выбрать один из двух алгоритмов.

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

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

Влияние сопоставления объектов на скорость сравнения конфигураций

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

  1. Среди сопоставленных объектов нет пар с различными идентификаторами.
  2. Среди несопоставленных объектов нет возможных пар с одинаковыми идентификаторами.

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

Замечания по методике использования механизма

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

Удаление объектов поставщика

Рассмотрим варианты удаления объекта поставщика.

Удаление пользователем

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

Удаление поставщиком

Начиная с релиза платформы 8.0.7, при выполнении любого объединения конфигураций существует возможность удаления объектов основной конфигурации. По умолчанию эта возможность включена только в режиме обновления конфигурации поставщика. Для включения ее в других режимах следует установить флажок " Разрешить удаление объектов основной конфигурации " в диалоге настройки сравнения и объединения конфигураций.

Расстановка пометок удаления объектов поставщика по умолчанию производится по следующим правилам. Если пользователь изменял объект поставщика по сравнению с предыдущей версией конфигурации поставщика, то объект по умолчанию не помечается на удаление, если объект идентичен объекту поставщика предыдущей версии, то он на удаление помечается. Если объект был помечен на удаление (автоматически или вручную), то при нажатии кнопки "Выполнить" происходит контроль ссылочной целостности. При обнаружении неразрешимых ссылок на удаляемый объект, будет выдано окно показа таких ссылок но, в отличии от неразрешимых ссылок, образующихся в результате отказа от копирования какого либо объекта конфигурации поставщика (или любой другой конфигурации, участвующей в объединении), возможности продолжить объединение (и удаление объекта) в этом случае нет.

Мне часто приходится заниматься переносом данных из одной базы в другую. После переноса неизбежно возникает задача сравнить две базы друг с другом, выявить возможные ошибки. Для сравнения, как правило, формируются подобные отчеты в двух базах. Эти отчеты потом сравниваются друг с другом. Бывает так, что формат отчетов не всегда совпадает. У них может различаться структура отчета, использоваться разная сортировка, выводиться разные показатели. Среди коллег преобладает подход, который можно свести к созданию одинаковых отчетов в 1с, чтобы их было легче сравнивать друг с другом. Есть еще варианты, связанные с прямым подключением по com соединению ко второй базе, и получением данных с его помощью. Это все работает, но у этого всего есть один существенный недостаток,- это очень ВРЕМЯЗАТРАТНО.

Я предлагаю вам посмотреть на то, как эту задачу решает «продвинутый» бухгалтер, менеджер, расчетчик. Решают они такого рода задачи при помощи старого доброго Экселя. В качестве примера, мы возьмем сравнение баз «ЗУП» редакции 25 и 31 после переноса данных. Точно так же сравниваются разного рода оборотки, отчеты о продажах и прочее. Итак, мы начисляем зарплату в двух базах и сравниваем между собой расчетную ведомость версии 2.5 и Анализ зарплаты по сотрудникам (помесячно) версии 3.1 за один и тот же месяц. С первого взгляда понятно, что у этих отчетов разный порядок сортировки и структуры.

Расчетная ведомость ЗУП 2.5

ЗУП 31

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

листы

В третьем листе мы будем выводить результаты сравнения.

Нам будет удобно пронумеровать строки исходных отчетов. В этом нам поможет функция

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

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

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

=ВПР(<Ячейка значение которой ищем>;<где ищем>;<номер столбца в массиве «где ищем»>;0)

ВПР

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

=ИНДЕКС(<таблица откуда берем цифры>;<Номер строки>;<Номер столбца в исходной таблице>)


Теперь мы вывели нужные показатели по сотрудникам из разных отчетов и можем их сравнивать друг с другом.

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

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

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

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

Все результаты сравнения можно просмотреть в детальном виде.

Установка соответствия объектов

При запуске режима сравнения система анализирует сравниваемые конфигурации и устанавливает соответствие между объектами конфигураций, исходя из их имен:

Сравнение и объединение конфигураций

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

Сравнение и объединение конфигураций

Сравнение конфигураций

Результат сравнения конфигураций отображается в специальном окне:

Сравнение и объединение конфигураций

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

Для каждого отличающегося объекта можно просмотреть детальную информацию об отличиях:

Сравнение и объединение конфигураций

Кроме того, информация об отличиях может быть получена в виде отчета:

Сравнение и объединение конфигураций

Объединение конфигураций

Для выполнения объединения конфигураций следует отметить те объекты прикладного решения, которые будут участвовать в объединении и установить режим объединения конфигураций.

Сравнение и объединение конфигураций

Установка режима объединения конфигураций возможна как для всей конфигурации в целом, так и для каждого элемента прикладного решения в отдельности:

Сравнение и объединение конфигураций

Варианты сравнения и объединения конфигураций

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

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

Сохранение / загрузка настроек объединения конфигураций

Настройки объединения конфигураций (или настройки обновления конфигурации на поддержке) можно сохранять в xml файл. Также доступна и обратная операция — загрузка этих настроек из файла.

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

Использование внешней программы

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

Для самых распространённых программ в конфигураторе 1С:Предприятия уже содержатся параметры командной строки для их запуска в различных режимах:

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

Задача сравнения данных в различных информационных базах не является новой, что подтверждается большим количеством обработок на infostart-e, описывающих способ этого сравнения через com - соединение.

В данной публикации будет рассмотрен способ сравнения данных двух информационных баз посредством консоли запросов из Инструментов разработчика

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

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

В составе описываемых инструментов имеется консоль запросов, позволяющая перед выполнением запроса вставить произвольный код.


В результате появляется возможность осуществить сравнение по следующей схеме

1. Перед выполнением запроса:

а. Устанавливаем соединение с внешней информационной базой;

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

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

в. Размещаем данные таблицы com-объекта из другой информационной базы во временную таблицу запроса;

2. Выполняем запрос с полным соединением для выявления разницы таблиц

3. В случае необходимости обрабатываем результат запроса


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


Результат сравнения можно для наглядности сгруппировать, выводя в дерево результата итоговое поле, как на рисунке ниже


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

Читайте также: