Как запросе получить итог по табличной части

Бесплатная консультация юриста

+7 (800) 302-87-29

Реклама jurik.ru

Одна из типовых задач при разработке на платформе 1С:Предприятие — получение итогов (сумм) по колонкам табличной части документа. Например, нужно узнать общую сумму НДС, итоговое количество товаров или сумму документа, рассчитанную по строкам. В этой статье разберём основные способы решения задачи: через язык запросов, через встроенные функции и через настройки формы.

Способ 1. Использование агрегатной функции СУММА в запросе

Самый универсальный способ, обратиться к табличной части документа в запросе и применить агрегатную функцию СУММА. Табличная часть в запросе указывается через точку после имени документа:

Пример запроса:

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

Здесь:

  • Документ.ПоступлениеТоваровУслуг.Товары — обращение к табличной части «Товары» документа;
  • СУММА(…) — агрегатная функция, суммирующая значения колонки;
  • Ссылка = &Ссылка — отбор по конкретному документу (можно указать список документов через «В (&СписокДокументов)»).

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

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

В результате для каждого документа будет рассчитана сумма по колонкам табличной части.

Способ 3. Секция ИТОГИ в запросе

Для получения итогов по группам и общего итога удобно использовать конструкцию ИТОГИ:

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

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


КонецЕсли;

Этот способ самый быстрый для работы с объектом в памяти, но не подходит, когда нужно обработать сразу много документов — тогда эффективнее запрос.

Если задача — показать итог пользователю на форме документа, запрос вообще не нужен:

Для управляемых форм (8.2, 8.3):

  1. Откройте форму документа в конфигураторе.
  2. Выделите таблицу (элемент формы, связанный с табличной частью).
  3. В свойствах установите Подвал = Истина.
  4. Для колонки, по которой нужен итог, укажите свойство ПутьКДаннымПодвала — например, путь к реквизиту формы, либо включите автоматический расчёт через свойство табличной части.
  5. Для реквизита табличной части в конфигураторе можно установить признак итога по колонке.

Для обычных форм (8.1):

Достаточно в свойствах табличного поля включить «Подвал», а для колонки установить флажок отображения итога — платформа рассчитает сумму автоматически.

Типичные ошибки и рекомендации

  • NULL в результате. Если документ не содержит строк, СУММА вернёт NULL. Используйте функцию ЕСТЬNULL(СУММА(…), 0).
  • Задвоение сумм. При соединении табличной части с шапкой документа или другой табличной частью строки перемножаются. Суммируйте до соединения (во вложенном запросе или временной таблице).
  • Проведённые документы. Не забывайте добавлять отбор Ссылка.Проведен, если нужны только проведённые документы.