Сравнение двух баз запросом с использованием Инструментов разработчика и COM-соединения




Как сравнить различные информационные базы запросом?
Как обработать результат сравнения удобным и гибким инструментом?

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

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

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

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

Понимание того, что обмен между двумя различными информационными базами практически никогда не работает абсолютно идеально, не единожды заставляло автора этой публикации писать «одноразовые» обработки. И это происходило до тех пор, пока в нашем распоряжении не появились очень удобные инструменты //infostart.ru/public/15126/.

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

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

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

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

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

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

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

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

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

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

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

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

24 Comments

  1. izofen

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

    Reply ↓
  2. partstrader

    (1) izofen, по моему в публикации речь идет об инструментах разработчика, а не о готовой обработке для пользователя

    Reply ↓
  3. chernyshova_darya

    (1) izofen, присоединюсь к вопросу отображения результата сравнения… в тексте публикации затронут вопрос о сравнении данных между системой бухгалтерского и оперативного учета, хотелось бы более развернуто по этому вопросу

    Reply ↓
  4. vikupinov

    Действительно готовый инструмент для сравнения данных бухгалтерии и торговли был бы более интересной темой и хотелось бы более подробно

    Reply ↓
  5. 1С_Мастер

    Сравнение баз запросом с наглядным отображением результата — http://infostart.ru/public/319016/

    Reply ↓
  6. trader7777777

    (5) 1С_Мастер, интересно почему вы выбрали именно такую консоль запросов, а не инструменты разработчика как автор статьи?

    Reply ↓
  7. miavolas

    (5) 1С_Мастер, спасибо за комментарий, я видел вашу публикацию и «плюсанул» за то что делитесь опытом по интересной теме.. в своей публикации хотел рассказать про то что стараюсь использовать инструмент (инструменты разработчика) с большим количеством дополнительных возможностей для последующей обработки данных… хотя уверен, что используемый нами принцип может не только количественные расхождения (как в вашей статье) отображать, но и поэлементно показать разницу… чтобы например зарегистрировать изменения в плане обмена и устранить различие( в случае использования планов обмена)

    Reply ↓
  8. maxim1c

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

    Reply ↓
  9. AndrewK990

    Добрый день! А можно более наглядно отобразить схему работы?

    Reply ↓
  10. inforeader

    (8) maxim1c, 1с не позволяет запросом получить уникальные идентификаторы, в ИР после получения результата запроса получаем данные UUID, скорее всего эта возможность не получится использовать для сравнения данных запросом

    Reply ↓
  11. aspirator23

    Прикладное решение по этой теме http://infostart.ru/public/442398/ Сравнение номенклатур в двух базах данных.

    В предыдущих версиях использовал Гуид. Это работает, если базы свои и ты понимаешь где эти гуиды пишутся при обмены, как их исправить, если необходимо.

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

    Reply ↓
  12. Yashazz

    Не-е-е. Это прошлый век. По скорости в первую очередь. Я бы такую задачу решал через подключение внешними источниками и СКД, натянутой на них.

    Reply ↓
  13. necropunk

    (10) inforeader, там в самих Инструментах разработчика, над выводом результата запроса есть кнопочка «Отображать GUID» или как-то так. Просто ее нажимаешь и в таблице появляются идентификаторы.

    Reply ↓
  14. inforeader

    (13) necropunk, ну и какой толк для целей сравнения данных от вывода уникальных идентификаторов уже после выполнения запроса? где эта кнопочка находится известно, только это не поможет решению задачи сравнения данных запросом

    Reply ↓
  15. maximklementiev

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

    Reply ↓
  16. writer_info

    (11) aspirator23, как думаете есть более интересный инструмент, чем ИР для такой задачи?

    Reply ↓
  17. miavolas

    (9) AndrewK990, доброго времени суток, что касается более наглядного отображения процесса соединения и сравнения… при написании данной публикации думал нарисовать ментальную карту с выделением основных моментов (чтобы картинка красивая была) или маленькую диаграмму в visio, но особой наглядности это не дает.. да и идея супер простая слишком мало шагов и все итак прозрачным кажется

    Reply ↓
  18. tormozit

    (14) В консоли запросов (ИР) можно вывести результат отсортированного по ключу (для ссылочных полей по значениям, а не по представлениям) запроса. Затем открыть таблицу результата в отдельном окне. Там включить режим отображения идентификаторов ссылок, два раза нажав на кнопку с перечеркнутым зеленым кольцом. Затем вывести содержимое таблицы результата в табличный документ через команду «Передать/в MXL» и сохранить его в файл. Далее повторить все тоже самое в другой базе и затем сравнить полученные 2 табличных документа стандартными средствами платформы. При этом при двойном клике на ссылочных ячейках будут открываться соответствующие объекты данных.

    Reply ↓
  19. inforeader

    (18) tormozit, очень интересно увидеть комментарий своего поста от разработчика инструментов. Тех самых Инструментов разработчика, которые помогают нам каждый день, но касаемо содержания публикации и моего предыдущего сообщения продолжаю считать.

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

    Reply ↓
  20. izofen

    Если совпадение справочников и документов проверять в запросе строя ПОЛНОЕ СОЕДИНЕНИЕ и то расхождение регистров накопления остатков наверное проще было бы контролировать по остаткам?

    Reply ↓
  21. miavolas

    (20) izofen, наверное в зависимости от решаемой задачи может быть и такой критерий соответствия данных при сравнении. В частности в приводимом примере такое условие:

    Reply ↓
  22. vec435

    (18) tormozit, было бы красиво добавить сравнение ссылочных данных разных баз по ГУИД программно в самой консоли запросов (ИР).

    Reply ↓
  23. JohnConnor

    ругается на {ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(74)}: Ошибка при вызове метода контекста (Добавить)

    Reply ↓
  24. miavolas

    (23) Добрый день, Николай, из вашего сообщения можно предположить, что фрагмент кода внешней обработки, которая открывается с использованием com-соединения при попытке добавить колонку выдает сообщение с ошибкой.

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

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *