Задача тривиальная: сравнить два табличных раздела или таблицы значений с действием и отобразить позиции в разных числах. В моем случае я сравниваю заказ на покупку и квитанцию.
Это простое действие выполняется с помощью простого запроса, которому передаются два параметра: две ссылки на сравниваемые документы.
Сам текст запроса для сравнения табличных разделов:
ВЫБИРАТЬ
Номенклатура заказов,
СУММА (Заказы.Количество) КАК Количество
Делаем заказы
ИЗ
Document.Order to Supplier.Goods AS Заказы
ГДЕ ЭТО НАХОДИТСЯ
Orders.Ref = & Заказ
ЗАГРУЗИТЬ ОТ
Номенклатура заказов
;
////////////////////////////////////////////////////////////////////////////////
ВЫБИРАТЬ
Номенклатура чеков,
СУММА (Поступления.Количество) КАК Количество
POST прибытия
ИЗ
Документ.Поступление товаровУслуги.Товары как поступления
ГДЕ ЭТО НАХОДИТСЯ
Receipts.Ref = & Квитанции
Получите бесплатные видеоуроки по 267 1С:
ЗАГРУЗИТЬ ОТ
Номенклатура чеков
;
////////////////////////////////////////////////////////////////////////////////
ВЫБИРАТЬ
Номенклатура заказа AS Номенклатура,
ЕСТЬ NULL (Order.Quantity, 0) AS QuantityOrdered,
ЕСТЬ NULL (Счет-фактура.Количество, 0) КАК Полученное количество
Финальное МЕСТО
ИЗ
Заказать КАК Заказать
ЛЕВАЯ ПОДПИСКА Квитанция как счет-фактура
ON Order.Nomenclature = Счет-фактура.Номенклатура
ВЫБИРАТЬ
Номенклатура счетов,
ISNULL (количество заказа, 0),
YESNULL (количество накладной, 0)
ИЗ
Получено как счет-фактура
LEFT JOIN Заказать как заказать
Программное обеспечение (Order.Nomenclature = Invoice.Nomenclature)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБИРАТЬ
Окончательная номенклатура,
Общее заказанное количество,
Общее количество получено,
Общее количество заказанных — Общее количество, полученное как разница в количестве
ИЗ
Финал AS Final
ГДЕ ЭТО НАХОДИТСЯ
Количество.Общее заказано — Количество.Общее получено 0
В результате выполнения этого запроса мы получим только строки, в которых количество различается, или элемент, который не существует вообще.
Если ваша задача — сравнить две таблицы значений, я рекомендую передать в запрос две таблицы и создать аналогичный запрос.
Если вы начинаете изучать кодирование в 1С, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — новые ролики выкладывают регулярно):
Задача 1. Проверить равенство таблиц.
Дано: две таблицы с идентичной структурой.
Обязательно: убедитесь, что все значения в одной таблице совпадают со значениями в другой таблице. В этом случае другой порядок строк и / или столбцов не считается разницей.
1. Объедините обе таблицы в одну
2. Добавьте столбец сверки. Заполните его значением 1 для первых строк таблицы и -1 для строк второй таблицы.
3. Сжать, добавив соответствующий столбец.
4. Если таблицы идентичны, после складывания всех строк значение в соответствующем столбце будет
Задача 2. Найти различия в таблицах.
Код приводить не буду, потому что основная часть находится в предыдущей задаче. Очевидно, различия будут содержаться в таблице, сжатой в строки, где значение в столбце сверки не будет равно 0. Также, если значение отрицательное, то строки содержатся только в первой таблице, положительные — только во второй таблице.
Задача 3. Найти различия в таблицах при помощи запроса.
Тот же принцип можно применить к запросам.
Примечание: имейте в виду, что запрос не чувствителен к регистру в строковых значениях.