Сравнение двух баз запросом с использованием Инструментов разработчика и 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 не будет опубликован. Обязательные поля помечены *