"Однажды переписал огромный запрос на новый запрос с новыми таблицами и связями, при этом сохранив итоговый результат. Сдачу работ проводил через представленную в публикации обработку "Сравнение запросов". Заказчик работу принял. В ходе сдачи работ выявили особенность механизма запросов - запросы округляют не так как функции платформы - но это другая история.
Затем неоднократно использовал обработку "Сравнение запросов" в других подобных задачах совместно со стандартной типовой консолью запросов (самой простой без наворотов). В консоли создавал и отлаживал запрос, в обработке "Сравнение запросов" сравнивал исходный запрос с новым (из консоли)."
В итоге пришло понимание, что при внедрении новых механизмов приходится переделывать существующие запросы: к примеру, доработать исходный запрос, добавив новое соединение и условие. Получится ли на выходе тот же прежний результат - под вопросом. Для сравнения результатов исходного и нового запроса была разработана данная обработка.
Обработка тестировалась на платформе 1С:Предприятие 8.3 (8.3.13.1644), на конфигурации Управление торговлей, редакция 10.3 (10.3.47.3).
Обработка универсально подойдет для всех конфигураций на обычных формах.
* * *
Обязательные условия:
1) сравниваются только таблицы значений, а не деревья значений - поэтому выражения "Итогов" следует убрать из запросов;
2) ВНУТРЕННЕЕ соединение таблиц (результатов запроса) происходит по полям именованным "для связки", а сравнение таблиц происходит по полям именованным "для сравнения".
3) стоит следить за параметрами и текстами запросов - иначе при запуске сравнения (выполнении запросов) выйдет ошибка СУБД.
Для демонстрации обработки сравниваются простые запросы - Срез первых и Срез последних по ценам номенклатуры. Для выделения расхождений созданы кнопки "Выделить расхождения" и "Отбор по расхождениям" - см. рис. ниже.
Параметры запросов по факту могут быть разными, потому что запросы могут отличаться. А вот поля для связки у двух результирующих таблиц и поля для сравнения у двух результирующих таблиц (после выполнения запросов) должны быть одинаковыми - см. рис. ниже.
Имеется сохранение и открытие запросов - сохраняются тексты запросов, параметры запросов, поля связывания и сравнения. Работает только в ручном режиме (то есть не в автоматическом) - то есть для сохранения надо нажать кнопку "Сохранить" (Ctrl+S), для открытия (восстановления) нажать кнопку "Открыть файл" (см. рис. ниже).
Также можно использовать сохранение и восстановление запросов с помощью кнопок с зеленой стрелкой.
Если при сравнении запросов расхождений нет, то выходит сообщение "Расхождений не найдено". Если расхождения найдены, то выходит сообщение о тех полях, по которым найдены расхождения.
"При тестировании очередной задачи и нового запроса стал сравнивать с прежним. Сравнение запросов показало расхождения. Стал анализировать с первой временной таблицы, в итоге на третьей временной таблице проявилось расхождение. Понял, что для быстрой и удобной локализации расхождений в представленной обработке необходим раздел сравнения временных таблиц. Так он и появился."
Имеется раздел сравнения временных таблиц - выбираете временные таблицы, которые необходимо сравнить => далее указываете для них поля связывания и поля сравнения => далее выполняете запросы ВТ (временных таблиц).
Временные таблицы определяются (инициализируются) по кнопке "Настроить запросы и врем. таблицы" с учетом заданных Параметров (кнопка "Параметры").
Не забудьте изменить поля связывания и поля сравнения после выбора временных таблиц для сравнения (см. рис. ниже).
Временные таблицы могут иметь разные названия. Названия можно сопоставить в таблице временных таблиц из выпадающего списка выбора (см. рис. ниже).
Версия 2.2 - соединение таблиц ВНУТРЕННЕЕ.
Версия 2.3 - соединение таблиц ПОЛНОЕ.
Доработал обработку для ПОЛНОГО соединения (версия 2.3) - то есть в результате получим все записи первой ("левой") таблицы и все записи второй ("правой") таблицы. Такое необходимо, если вы ищите обширную разницу между двумя таблицами (результатами запросов). На основе результирующих расхождений можно увидеть, какие записи не попадают в первый или во второй запрос.
Для понимания порядка работы с обработкой дополнительно пронумерованы пошагово все кнопки - (см. рис. ниже).
Разработанный алгоритм сравнения двух таблиц значений также применяется при сравнении остатков по регистрам накопления между двумя базами (после свертки между рабочей базой и базой архивной копией, или между торговлей и бухгалтерией) - но это уже другая история...
Всем добра!
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 10.3, релизы 10.3.47.3