Запити 1с 8

Бувають ситуації коли в одному запиті необхідно об'єднати кілька запитів, причому з'єднання таблиць ніяк не можуть в цьому допомогти. Найпростіше показати на прикладі.

Припустимо в нашій системі факти купівлі та продажу товару реєструються документами Прихід і Витрата відповідно. Контрагент може бути як покупцем, так і постачальником. Залік заборгованості може здійснюватися постачанням товару:

Щоб підрахувати загальну заборгованість контрагента необхідно скласти суму всіх витрат за цим контрагенту і відняти суму всіх парафій від цього ж контрагента, найпростіше це зробити за допомогою оператора ОБ'ЄДНАТИ ВСІ:

Запити 1с 8

У першому запиті ми вважаємо суму витрат по кожному контрагенту, в другому - суму на яку нам поставив товар кожен з контрагентів. Сума в другому запиті береться зі знаком мінус, що б при згортку результуючої таблиці, вона відняла з суми відвантаження даного контрагенту. В результаті отримаємо таблицю виду:

Це не зовсім те, що ми хотіли, але вже близько. Для досягнення необхідного результату залишилося згрупувати по контрагенту. Для цього запит необхідно помістити в тимчасову таблицю (робота з тимчасовими таблицями розглядається в закритій частині курсу) і вже з неї вибрати і згрупувати поля:

Вимоги до об'єднання запитів

При об'єднанні двох запитів кількість полів у них повинно бути однаковим, якщо в будь-якому із запитів не вистачає полів, то їх треба додати в вигляді констант. Звернемося до прикладу вище, нехай в документі витрата також є поле знижка, яке зменшує суму боргу контрагента, але в документі прихід немає ніяких знижок. Як бути в цьому випадку? так:

Залишилося відняти знижку і згрупувати.

Також важливий порядок. Поля будуть об'єднаються саме в тому порядку в якому вони вказані в секціях ВИБРАТИ обох запитів. Стосовно до попереднього прикладу - поміняємо місцями поля знижка і сума в вибірці парафій:

Схожі статті