Quantcast
Channel: 1С СКД
Viewing all articles
Browse latest Browse all 891

Как получить корректную сумму ресурса у задвоенных записей. Использование новых агрегатных функций. Доступно, по-моему с 14 релиза 8.2.

$
0
0

Предположим клиент хочет видеть в отчете табличную часть документа и отдельной колонкой сумму всего документа. Тут проблемы нету: соединяем две таблицы и вперед. Проблема возникает когда надо получить итоги в отчете. Стандартная функция СУММА – будет возвращать сумму всех записей по колонке, соответственно сумма документа будет умножена на количество строк в табличной части. Для того чтобы избежать этого можно воспользоваться новыми агрегатными функциями, их было добавлено достаточно много, но нам понадобится функции ТаблицаЗначений, Массив и Сумма. Итак:
ТаблицаЗначений – формирует таблицу значений (сюрприз, сюрприз :) из колонок которые содержатся в итоговой таблицы после того как отработал процессор компоновки.
МАССИВ – формирует массив записей от группировок или берет 1-ую колонку таблицы значений

Для решения проблемы в выражении вычислении итогового ресурса суммы всех документов (Вкладка Ресурсы, поле Выражение) запишем:

Сумма(МАССИВ ( ТаблицаЗначений( Различные СуммаДокумента, Ссылка)))

,где: Ссылка – колонка ссылок на документ, а СуммаДокумента – это его сумма. Что у нас происходит в тот момент когда СКД пытается вычислить итог:

  1. Сначала формируется таблица значений из ссылки и суммы по детальным записям нижестоящих группировок. Модификатор Различные гарантирует, что в таблицу попадут только уникальные значения ссылок, что решает вопрос с задвоенными суммами. Обратите внимание на порядок следования колонок: сначала СуммаДокумента, потом Ссылка. Это важно для работы функции Массив!
  2. Формируется массив из отфильтрованных сумм. В данном случае берется первая колонка таблицы (см. документацию по этой функции), поэтому важно перечислить колонки именно в том порядке как указано в примере:  сначала сумма, потом группировка
  3. Стандартная функция Сумма – вычисляет сумму колонки по нижестоящим детальным записям или итоговую сумму подставленного массива чисел.

Все. То что раньше решалось сложными запросами, ограничениями типа “рассчитывать по” или “ручным” дозаполнением итогов в коде после отработки СКД, теперь решает СКД. Более того использование новых агрегатных функций позволяет снять ограничение на использование любых группировок и отдать их формирование на откуп пользователя.


Viewing all articles
Browse latest Browse all 891

Latest Images

Trending Articles