При доработке типовых отчетов (например, Анализ доходов и расходов в 1С:Управление торговлей 11) часто возникает задача вывести дополнительную расчетную строку итогов. Типичный пример — необходимость рассчитать промежуточный финансовый результат или исключить определенные статьи (например, кредиты и расчеты по займам) из итоговой суммы, расположив результат до или после стандартного общего итога.
Проанализируем специфику платформы: механизм системы компоновки данных (СКД) штатно формирует только одну строку общих итогов таблицы или группировки. Если просто добавить новое вычисляемое поле или ресурс в список выбранных полей всего отчета, СКД начнет дублировать колонку во всех вложенных периодах и группировках, вместо создания отдельной итоговой строки. Разберем по шагам несколько надежных способов реализации нужной структуры.
Создание собственного макета оформления — один из наиболее гибких вариантов, позволяющий добавить дополнительную строку подвала без изменения структуры группировок данных.
Разберем по шагам настройку макета:
Подвал.ВычислитьВыражение.Если макеты использовать нежелательно, можно добавить синтетическую строку через структуру настроек отчета. Рассмотрим, как правильно настроить состав полей и формулы ресурсов, чтобы избежать дублирования колонок.
Сумма(ВЫБОР
КОГДА Статья В (&СписокИсключаемыхСтатей) ТОГДА 0
ИНАЧЕ СуммаОборот
КОНЕЦ)
Рассмотрим еще один подход, когда расчет итога переносится непосредственно в набор данных. Это удобно, если логика отбора исключаемых статей слишком сложна для языка выражений СКД.
Разберем пример запроса, использующего оператор ОБЪЕДИНИТЬ ВСЕ:
ВЫБРАТЬ
1 КАК ПорядокСортировки,
ДоходыРасходы.Статья КАК Статья,
ДоходыРасходы.Период КАК Период,
ДоходыРасходы.Сумма КАК Сумма
ИЗ
РегистрНакопления.ПрочиеДоходы КАК ДоходыРасходы
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2 КАК ПорядокСортировки,
"Итог без займов" КАК Статья,
ДоходыРасходы.Период КАК Период,
СУММА(ВЫБОР
КОГДА ДоходыРасходы.Статья В (&СтатьиЗаймов) ТОГДА 0
ИНАЧЕ ДоходыРасходы.Сумма
КОНЕЦ) КАК Сумма
ИЗ
РегистрНакопления.ПрочиеДоходы КАК ДоходыРасходы
СГРУППИРОВАТЬ ПО
ДоходыРасходы.Период
В настройках СКД останется настроить сортировку строк по служебному полю ПорядокСортировки, чтобы итоговая строка гарантированно оказалась в конце таблицы.
В случаях, когда отчет формируется программно или встроен в типовую конфигурацию на базе БСП, можно дополнить результат вывода через событие модуля объекта ПриКомпоновкеРезультата.
Посмотрим на пример переопределения вывода:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Стандартное формирование отчета в ТабличныйДокумент
СкомпоноватьРезультат(ДокументРезультат, ДанныеРасшифровки);
// Поиск области общих итогов
ОбластьИтога = ДокументРезультат.НайтиТекст("Общий итог");
Если ОбластьИтога <> Неопределено Тогда
НомерСтроки = ОбластьИтога.Верх;
ДокументРезультат.ВставитьОбласть(
ДокументРезультат.Область(НомерСтроки, 1, НомерСтроки, ДокументРезультат.ШиринаТаблицы),
ДокументРезультат.Область(НомерСтроки + 1, 1, НомерСтроки + 1, ДокументРезультат.ШиринаТаблицы)
);
// Заполнение расчетных значений в добавленной строке
ДокументРезультат.Область(НомерСтроки + 1, ОбластьИтога.Лево).Текст = "Итог без займов";
КонецЕсли;
КонецПроцедуры
Выбор конкретного метода зависит от требований к отчету: для простых случаев и типовых отчетов без изменения кода конфигурации оптимально подходит использование Макетов СКД или дополнительной группировки с переопределенным составом полей.