1С запрос сравнить две таблицы

1С запрос сравнить две таблицы

Задача банальная — сравнить одним действием две табличные части или таблицы значений и вывести различающиеся по количеству позиции. В моем случае я сравниваю заказ поставщику и документ поступления.

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

Сам текст запроса для сравнения табличных частей:

ВЫБРАТЬ
Заказы.Номенклатура,
СУММА(Заказы.Количество) КАК Количество
ПОМЕСТИТЬ Заказы
ИЗ
Документ.ЗаказПоставщику.Товары КАК Заказы
ГДЕ
Заказы.Ссылка = &Заказ

СГРУППИРОВАТЬ ПО
Заказы.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Поступления.Номенклатура,
СУММА(Поступления.Количество) КАК Количество
ПОМЕСТИТЬ Поступления
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК Поступления
ГДЕ
Поступления.Ссылка = &Поступление

Получите 267 видеоуроков по 1С бесплатно:

СГРУППИРОВАТЬ ПО
Поступления.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Заказ.Номенклатура КАК Номенклатура,
ЕСТЬNULL(Заказ.Количество, 0) КАК КоличествоЗаказано,
ЕСТЬNULL(Накладная.Количество, 0) КАК КоличествоПоступило
ПОМЕСТИТЬ Итоговая
ИЗ
Заказы КАК Заказ
ЛЕВОЕ СОЕДИНЕНИЕ Поступления КАК Накладная
ПО Заказ.Номенклатура = Накладная.Номенклатура

ВЫБРАТЬ
Накладная.Номенклатура,
ЕСТЬNULL(Заказ.Количество, 0),
ЕСТЬNULL(Накладная.Количество, 0)
ИЗ
Поступления КАК Накладная
ЛЕВОЕ СОЕДИНЕНИЕ Заказы КАК Заказ
ПО (Заказ.Номенклатура = Накладная.Номенклатура)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Итоговая.Номенклатура,
Итоговая.КоличествоЗаказано,
Итоговая.КоличествоПоступило,
Итоговая.КоличествоЗаказано — Итоговая.КоличествоПоступило КАК КоличествоРазница
ИЗ
Итоговая КАК Итоговая
ГДЕ
Итоговая.КоличествоЗаказано — Итоговая.КоличествоПоступило <> 0

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

Если Ваша задача — сравнить две таблицы значений, то я рекомендую передать в запрос две таблицы и составить аналогичный запрос.

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Задача 1. Проверить равенство таблиц.

Дано: две таблицы с идентичной структурой.

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

1. Слить обе таблицы в одну

Читайте также:  Как решать квадратные уравнения в excel

2. Добавить сверочную колонку. Заполнить ее числом 1 для строк первой таблицы и -1 для строк второй таблицы.

3. Свернуть, просуммировав сверочную колонку.

4. Если таблицы идентичны, то после свертки во всех строках значение в сверочной колонке будет

Задача 2. Найти различия в таблицах.

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

Задача 3. Найти различия в таблицах при помощи запроса.

Этот же принцип можно применять в запросах.

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

Функциональность

Данная внешняя обработка позволяет выполнить запросы в двух разных базах 1С 8.х (текущей и подключенной через COM-соединение), сравнить полученные из результатов запросов таблицы значений и вывести различия в них. При сравнении таблиц значений обработка может сравнивать как примитивные, так и ссылочные типы (по ГУИДу). Для ссылочных типов возможно сравнение ссылок с учетом данных регистра сведений "Соответствия объектов информационных баз". Обработка автоматически сохраняет все настройки и восстанавливает их при следующем открытии в этой базе. Также можно сохранять разные наборы запросов и открывать их из списка.

Примеры использования

Случаи, когда данная обработка облегчает работу:

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

Как пользоваться обработкой

Открываем как внешний отчет.На первой закладке указываем параметры базы, к которой нужно подключиться через COM-соединение и тестируем подключение. Самый простой способ указать параметры базы: просто скопировать строку подключения базы в поле "Строка подключения базы", тип базы, имя сервера/баз, путь для файловой базы определятся автоматически.

Читайте также:  Как скопировать текст без колонтитулов

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

После создания запроса в текущей базе переходим на закладку "Запрос к подключаемой базе". Вы можете скопировать текст и параметры запроса из запроса к текущей базе, нажав на соответствующую кнопку. Но если в подключаемой базе структура метаданных отличается, возможно потребуется отредактировать запрос. Обязательное условие: набор полей в обоих запросах должен совпадать. Также в подключаемой базе параметры запроса могут быть только примитивных типов, поэтому рекомендуется в текущей базе сразу писать запрос, параметры которого будут только примитивных типов.

Если сравниваемый объект метаданных учавствует в обмене через план обмена (с использованием БСП), то возможно сравнение ссылок с учетом данных регистра сведений "Соответствия объектов информационных баз". Для каждой ссылки ищется запись в этом регистре для указанного узла и если такая запись есть, то берется не ГУИД ссылки этой базы, а ГУИД приемника из регистра.

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

Как сравниваются таблицы значений

При создании запроса должна быть определена одна или несколько ключевых колонок получаемой таблицы значений путем добавления строки _Ключ к псевдониму поля запроса. Такие колонки считаются ключевыми. Сравнение таблиц значений производится по совпадению ключевых колонок: строки считаются сопоставленными друг другу, если у них совпадают все ключевые колонки. Для сопоставленных строк производится сравнение остальных колонок, если значения всех колонок совпадают, строки считаются одинаковыми и исключаются из вывода результатов сравнения. Таким образом получаются 4 группы строк:

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

Результаты сравнения

Перед сравнением можно выбрать флажками какие таблицы нас интересуют. При установленном флажке таблица выводится полностью, при снятом — только количество строк.

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

Для строк, отличающихся значениями неключевых колонок желтым цветом выделяются колонки, значения в которых различаются.

Если выведенное поле является ссылкой этой базы, можно открыть этот объект двойным щелчком мыши по нужной ячейке.

Вы можете сохранить параметры подключения и тексты запросов с параметрами кнопкой "Сохранить" под произвольным именем, чтобы в дальнейшем открыть их и повторно запустить сравнение.

Тестовое окружение

Обработка тестировалась на платформе 8.3.10.2667 с конфигурациями БП 3.0 и БП 2.0 в качестве подключаемой базы.

Ограничения использования

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

Версия 1.1 от 06.09.2018

1. Добавлено автоматическое определение параметров базы по строке соединения: достаточно скопировать и вставить строку соединения.

2. Добавлен вывод количества полностью совпавших строк.

3. Добавлена возможность вывода полностью совпавших строк. Для этого на закладке "Сравнение" нужно установить флажок "Вывести совпавшие".

Версия 1.2 от 21.09.2018

1. Добавлено сопоставление ссылок с использованием регистра сведений "Соответствия объектов информационных баз".

2. Добавлена возможность выбора режима вывода каждой из результирующих таблиц: только количество строк или все строки.

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

Ссылка на основную публикацию
Adblock detector