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

Отзывов (6)FavoriteLoadingВ закладки

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

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

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

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

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

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

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

6 Коммент.

  1. Хорошая статья, вот только если в таблице будут присутствовать несколько значений почитается только 1но.. Например 2ве единицы одной номенклатуре в сумме выдаст только одну единицу.

  2. Приведу пример для понятности:), Есть товар1 с ценой 10 и товар 2ва с ценой 10. В сумме будет так же будет 10.

  3. Вообще в заметке ничего про цену не сказано. Описывается формирование корректного итога по всем документам, а не отдельно по позициям в документе. При этом корректная сумма документа известна. Ваш пример не относится к сути заметки.

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

Оставить комментарий

RSSКомментарии в RSS

Авторизация

Логин:
Пароль:
Регистрация

Архивы

Закладки

  • Your favorites will be here.