gifts2017

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

Опубликовал Maxim Maxim (miavolas) в раздел Программирование - Инструментарий

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Скачать файлы

Наименование Файл Версия Размер
Текст запроса и внешняя обработка получения таблицы из другой базы 18
.zip 8,19Kb
11.08.16
18
.zip 8,19Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Вадим Купинов (izofen) 11.08.16 09:20
В конце публикации не хватает наглядного отображения результата сравнения(результата выполнения запроса), не понятно неужели автор предлагает передавать подобный инструмент пользователю?
maxim1c; miavolas; chernyshova_darya; +3 Ответить 2
2. parts trader Surname (partstrader) 11.08.16 09:24
(1) izofen, по моему в публикации речь идет об инструментах разработчика, а не о готовой обработке для пользователя
3. Дарья Чернышова (chernyshova_darya) 11.08.16 09:30
(1) izofen, присоединюсь к вопросу отображения результата сравнения... в тексте публикации затронут вопрос о сравнении данных между системой бухгалтерского и оперативного учета, хотелось бы более развернуто по этому вопросу
vikupinov; +1 Ответить
4. Вадим Купинов (vikupinov) 11.08.16 09:38
Действительно готовый инструмент для сравнения данных бухгалтерии и торговли был бы более интересной темой и хотелось бы более подробно
5. Василий Тёркин (1С_Мастер) 11.08.16 09:42
Сравнение баз запросом с наглядным отображением результата - http://infostart.ru/public/319016/
6. Трейдер Трейдерович (trader7777777) 11.08.16 10:08
(5) 1С_Мастер, интересно почему вы выбрали именно такую консоль запросов, а не инструменты разработчика как автор статьи?
miavolas; +1 Ответить
7. Maxim Maxim (miavolas) 11.08.16 10:15
(5) 1С_Мастер, спасибо за комментарий, я видел вашу публикацию и "плюсанул" за то что делитесь опытом по интересной теме.. в своей публикации хотел рассказать про то что стараюсь использовать инструмент (инструменты разработчика) с большим количеством дополнительных возможностей для последующей обработки данных... хотя уверен, что используемый нами принцип может не только количественные расхождения (как в вашей статье) отображать, но и поэлементно показать разницу... чтобы например зарегистрировать изменения в плане обмена и устранить различие( в случае использования планов обмена)
8. Maxim MaximSur (maxim1c) 11.08.16 10:45
Может ли вопросу сравнения данных в разных базах помочь возможность в инструментах разработчика выводить уникальные идентификаторы?
9. Андрей Камынин (AndrewK990) 11.08.16 10:46
Добрый день! А можно более наглядно отобразить схему работы?
10. Info reader (inforeader) 11.08.16 11:37
(8) maxim1c, 1с не позволяет запросом получить уникальные идентификаторы, в ИР после получения результата запроса получаем данные UUID, скорее всего эта возможность не получится использовать для сравнения данных запросом
11. aspirator 23 (aspirator23) 11.08.16 14:24
Прикладное решение по этой теме http://infostart.ru/public/442398/ Сравнение номенклатур в двух базах данных.
В предыдущих версиях использовал Гуид. Это работает, если базы свои и ты понимаешь где эти гуиды пишутся при обмены, как их исправить, если необходимо.
Если базы чужие и обработка "тянет" на универсальность, то от гуидов лучше отказаться. Квалификация потребителей не такова, чтобы понимать что и как связано.
12. Яков Коган (Yashazz) 11.08.16 17:52
Не-е-е. Это прошлый век. По скорости в первую очередь. Я бы такую задачу решал через подключение внешними источниками и СКД, натянутой на них.
13. Сергей (necropunk) 11.08.16 18:09
(10) inforeader, там в самих Инструментах разработчика, над выводом результата запроса есть кнопочка "Отображать GUID" или как-то так. Просто ее нажимаешь и в таблице появляются идентификаторы.
14. Info reader (inforeader) 11.08.16 18:51
(13) necropunk, ну и какой толк для целей сравнения данных от вывода уникальных идентификаторов уже после выполнения запроса? где эта кнопочка находится известно, только это не поможет решению задачи сравнения данных запросом
15. Читатель Инфостарта (maximklementiev) 11.08.16 19:19
Тема интересная ... и интересно сможет ли автор реализовать подобную схему через подключение внешних источников данных таким образом предложить развитие публикации
16. writer info (writer_info) 12.08.16 16:01
(11) aspirator23, как думаете есть более интересный инструмент, чем ИР для такой задачи?
17. Maxim Maxim (miavolas) 17.08.16 22:38
(9) AndrewK990, доброго времени суток, что касается более наглядного отображения процесса соединения и сравнения... при написании данной публикации думал нарисовать ментальную карту с выделением основных моментов (чтобы картинка красивая была) или маленькую диаграмму в visio, но особой наглядности это не дает.. да и идея супер простая слишком мало шагов и все итак прозрачным кажется
18. Сергей Старых (tormozit) 21.08.16 14:53
(14) В консоли запросов (ИР) можно вывести результат отсортированного по ключу (для ссылочных полей по значениям, а не по представлениям) запроса. Затем открыть таблицу результата в отдельном окне. Там включить режим отображения идентификаторов ссылок, два раза нажав на кнопку с перечеркнутым зеленым кольцом. Затем вывести содержимое таблицы результата в табличный документ через команду "Передать/в MXL" и сохранить его в файл. Далее повторить все тоже самое в другой базе и затем сравнить полученные 2 табличных документа стандартными средствами платформы. При этом при двойном клике на ссылочных ячейках будут открываться соответствующие объекты данных.
19. Info reader (inforeader) 21.08.16 15:18
(18) tormozit, очень интересно увидеть комментарий своего поста от разработчика инструментов. Тех самых Инструментов разработчика, которые помогают нам каждый день, но касаемо содержания публикации и моего предыдущего сообщения продолжаю считать.

Что для целей программной обработки данных, сравнение двух табличных документов средствами платформы особой ценности не представляет
20. Вадим Купинов (izofen) 24.08.16 09:17
Если совпадение справочников и документов проверять в запросе строя ПОЛНОЕ СОЕДИНЕНИЕ и то расхождение регистров накопления остатков наверное проще было бы контролировать по остаткам?
21. Maxim Maxim (miavolas) 24.08.16 09:28
(20) izofen, наверное в зависимости от решаемой задачи может быть и такой критерий соответствия данных при сравнении. В частности в приводимом примере такое условие:
22. Владимир Чаклин (vec435) 24.10.16 14:13
(18) tormozit, было бы красиво добавить сравнение ссылочных данных разных баз по ГУИД программно в самой консоли запросов (ИР).
23. Николай Гончаров (JohnConnor) 29.11.16 08:22
ругается на {ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(74)}: Ошибка при вызове метода контекста (Добавить)
24. Maxim Maxim (miavolas) 29.11.16 11:12
(23) Добрый день, Николай, из вашего сообщения можно предположить, что фрагмент кода внешней обработки, которая открывается с использованием com-соединения при попытке добавить колонку выдает сообщение с ошибкой.
Мне не очевидно какие информационные базы между собой сравниваете, и что именно пытаетесь сравнить(документы, справочники или остатки регистров накопления) опишите подробнее и я попробую вам помочь воспользоваться идеей описанной в данной публикации
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа