← Назад к вопросам
Нарастающий итог в СКД
2.2 Middle🔥 181 комментариев
#СКД и отчёты
Условие
Создайте отчёт на СКД с нарастающим итогом.
Требования:
- Отчёт по продажам по дням
- Колонки: Дата, Сумма за день, Нарастающий итог с начала периода
Пример результата
| Дата | Сумма за день | Нарастающий итог |
|---|---|---|
| 01.01.2024 | 10 000 | 10 000 |
| 02.01.2024 | 15 000 | 25 000 |
| 03.01.2024 | 8 000 | 33 000 |
Подсказка
Используйте вычисляемое поле с выражением "НарастающийИтог" в настройках компоновки данных.
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Нарастающий итог в СКД
Нарастающий итог — встроенная функция СКД, которая автоматически рассчитывает кумулятивную сумму. Это мощный инструмент для создания отчётов аналитического типа.
Основные концепции
Функция НарастающийИтог() в системе компоновки данных:
- Автоматически рассчитывает текущее значение плюс сумму всех предыдущих значений
- Работает в контексте сортировки и группировки
- Сбрасывается при изменении группы
Решение 1: Вычисляемое поле в СКД (РЕКОМЕНДУЕТСЯ)
Процедура СоздатьКомпоновкуДанных()
КомпоновщикНастроек = Новый КомпоновщикНастроек;
КомпоновщикНастроек.ИсточникДанных = Новый ИсточникДанныхОбъект(СхемаДанных);
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
Настройки.СтруктураПолей.Очистить();
// Строки: Дата
ЭлементСтруктуры = Настройки.СтруктураПолей.Строки.Добавить();
ЭлементСтруктуры.Поле = "Дата";
// Данные: Сумма за день
ЭлементДанных = Настройки.СтруктураПолей.Данные.Добавить();
ЭлементДанных.Поле = "СуммаДня";
// Создаём вычисляемое поле для нарастающего итога
ВычисляемоеПоле = Настройки.ВычисляемыеПоля.Добавить();
ВычисляемоеПоле.Имя = "НарастающийИтог";
ВычисляемоеПоле.Выражение = "НарастающийИтог(СуммаДня)";
ВычисляемоеПоле.ТипДанных = Новый ОписаниеТипов("Число",, ОписаниеТипов(18, 2));
// Добавляем в данные
ЭлементДанных = Настройки.СтруктураПолей.Данные.Добавить();
ЭлементДанных.Поле = "НарастающийИтог";
// Сортируем по дате
ПорядокСортировки = Настройки.ПорядокСортировки.Добавить();
ПорядокСортировки.Поле = "Дата";
ПорядокСортировки.Направление = НаправлениеСортировки.Возрастание;
КонецПроцедуры
Решение 2: С группировкой (сброс по группам)
Процедура СоздатьОтчётПоМесяцам()
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
// Группировка по месяцам
Группировка = Настройки.СтруктураПолей.Строки.Добавить();
Группировка.Поле = "Месяц";
Группировка.ТипВывода = ТипВыводаПоля.ОбычноеПоле;
// Подробные строки — дни
ПолеДни = Группировка.Строки.Добавить();
ПолеДни.Поле = "Дата";
// Вычисляемое поле — нарастающий итог по месяцам
ВычисляемоеПоле = Настройки.ВычисляемыеПоля.Добавить();
ВычисляемоеПоле.Имя = "НарастающийИтогПоМесяцу";
ВычисляемоеПоле.Выражение = "НарастающийИтог(СуммаДня, Месяц)";
ВычисляемоеПоле.ТипДанных = Новый ОписаниеТипов("Число",, ОписаниеТипов(18, 2));
КонецПроцедуры
Ключевые моменты
- НарастающийИтог() — встроенная функция, работает только в контексте СКД
- Сброс по группам — можно указать, по какому полю сбрасывать итог
- Порядок сортировки — критичен! Итог считается в порядке сортировки
- Производительность — вычисляемые поля работают быстро на больших объёмах
Рекомендуемое решение
Используйте вычисляемое поле НарастающийИтог в СКД — это стандартный приём, обеспечивающий простоту, читаемость и хорошую производительность. Система компоновки данных оптимизирована под такие операции и является предпочтительным способом реализации нарастающих итогов в 1С:Предприятии.