← Назад к вопросам
Что такое итоги периодического регистра сведений?
1.0 Junior🔥 61 комментариев
#Регистры
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Итоги периодического регистра сведений в 1С
Итоги периодического регистра сведений это специальная виртуальная таблица, которая предназначена для агрегирования данных периодического регистра за определённый период времени.
Определение
Итоги периодического регистра это:
- Таблица, содержащая суммированные данные регистра
- Вычисляется на основе записей за период
- Автоматически группируется по измерениям
- Используется для аналитики и отчётов
Структура итогов
// Периодический регистр сведений: "Заработная плата сотрудников"
// Содержит записи с полями:
// - Период: дата записи
// - Сотрудник: ссылка на сотрудника
// - Должность: должность
// - Оклад: сумма оклада
// - Премия: размер премии
// Таблица итогов показывает суммированные данные
// по сотрудникам за период
Как работают итоги
// Исходные записи в регистре:
// | Период | Сотрудник | Оклад | Премия |
// | 01.01 | Иван | 50000 | 5000 |
// | 15.01 | Иван | 50000 | 7000 | // изменилась премия
// | 01.01 | Мария | 45000 | 4000 |
// | 20.01 | Мария | 45000 | 4500 |
// Итоги за январь (GROUP BY Сотрудник, SUM по ресурсам):
// | Сотрудник | Оклад | Премия |
// | Иван | 100000 | 12000 | (50000*2 + 5000+7000)
// | Мария | 90000 | 8500 | (45000*2 + 4000+4500)
Синтаксис использования итогов
// Использование итогов в запросе
Запрос = Новый Запрос(
"SELECT
Сотрудник,
SUM(Оклад) as ИтогоОклад,
SUM(Премия) as ИтогоПремия
FROM РегистрыСведений.ЗарплатаСотрудников
WHERE Период >= &ДатаНач AND Период <= &ДатаКон
GROUP BY Сотрудник"
);
Запрос.УстановитьПараметр("ДатаНач", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("ДатаКон", КонецМесяца(ТекущаяДата()));
Результат = Запрос.Выполнить();
Виды итогов
1. Итоги с GROUP BY
// Группировка по одному или нескольким полям
Запрос = Новый Запрос(
"SELECT
Сотрудник,
Должность,
SUM(Оклад) as ИтогоОклад
FROM РегистрыСведений.ЗарплатаСотрудников
WHERE Период >= &ДатаНач
GROUP BY Сотрудник, Должность"
);
2. Итоги с несколькими функциями агрегации
// Вычисление нескольких итоговых значений
Запрос = Новый Запрос(
"SELECT
Сотрудник,
SUM(Оклад) as ИтогоОклад,
SUM(Премия) as ИтогоПремия,
COUNT(*) as КоличествоЗаписей,
MAX(Оклад) as МаксОклад,
MIN(Оклад) as МинОклад
FROM РегистрыСведений.ЗарплатаСотрудников
WHERE Период >= &ДатаНач
GROUP BY Сотрудник"
);
3. Итоги с фильтрацией (HAVING)
// Фильтрация по итогам
Запрос = Новый Запрос(
"SELECT
Сотрудник,
SUM(Оклад) as ИтогоОклад,
SUM(Премия) as ИтогоПремия
FROM РегистрыСведений.ЗарплатаСотрудников
WHERE Период >= &ДатаНач
GROUP BY Сотрудник
HAVING SUM(Оклад) > &МинимальныйОклад"
);
Запрос.УстановитьПараметр("МинимальныйОклад", 100000);
// Вернёт только сотрудников с суммой оклада > 100000
Практический пример
Процедура АнализЗарплаты() Экспорт
// Задача: получить итоги зарплаты по отделам за квартал
Запрос = Новый Запрос(
"SELECT
Сотрудник.Отдел,
COUNT(*) as КоличествоСотрудников,
SUM(Оклад) as ИтогоОклад,
SUM(Премия) as ИтогоПремия,
SUM(Оклад) + SUM(Премия) as ИтогоВсего,
CAST(AVG(Оклад) as NUMBER(15,2)) as СредОклад
FROM РегистрыСведений.ЗарплатаСотрудников as ЗП
LEFT JOIN Справочник_Сотрудники as Сотрудник
ON ЗП.Сотрудник = Сотрудник.Ссылка
WHERE ЗП.Период >= &ДатаНач AND ЗП.Период <= &ДатаКон
GROUP BY Сотрудник.Отдел
ORDER BY ИтогоВсего DESC"
);
Запрос.УстановитьПараметр("ДатаНач", НачалоКвартала(ТекущаяДата()));
Запрос.УстановитьПараметр("ДатаКон", КонецКвартала(ТекущаяДата()));
Результат = Запрос.Выполнить();
// Результат содержит итоги по отделам:
// Отдел | Кол-во | Оклад | Премия | Всего | Средний
// ИТ | 5 | 400k | 50k | 450k | 80k
// ХР | 3 | 240k | 30k | 270k | 80k
КонецПроцедуры
Отличие от обычного запроса к регистру
// БЕЗ итогов (простой запрос):
Запрос = Новый Запрос("SELECT * FROM РегистрыСведений.ЗарплатаСотрудников");
Результат = Запрос.Выполнить();
// Вернёт: все записи за весь период
// | Дата | Сотрудник | Оклад |
// | 01.01 | Иван | 50000 |
// | 15.01 | Иван | 50000 |
// | 01.01 | Мария | 45000 |
// | 20.01 | Мария | 45000 |
// С итогами (GROUP BY):
Запрос = Новый Запрос(
"SELECT Сотрудник, SUM(Оклад)
FROM РегистрыСведений.ЗарплатаСотрудников
GROUP BY Сотрудник"
);
Результат = Запрос.Выполнить();
// Вернёт: суммированные значения
// | Сотрудник | SUM(Оклад) |
// | Иван | 100000 |
// | Мария | 90000 |
Функции агрегации (итоговые функции)
// Основные функции для вычисления итогов:
SUM(Поле) // Сумма
COUNT(Поле) // Количество записей
AVG(Поле) // Среднее значение
MIN(Поле) // Минимальное значение
MAX(Поле) // Максимальное значение
STDDEV(Поле) // Стандартное отклонение
// Пример использования всех сразу:
Запрос = Новый Запрос(
"SELECT
Сотрудник,
SUM(Оклад) as Сумма,
COUNT(*) as Количество,
AVG(Оклад) as Среднее,
MIN(Оклад) as Минимум,
MAX(Оклад) as Максимум
FROM РегистрыСведений.ЗарплатаСотрудников
GROUP BY Сотрудник"
);
Применение итогов
Финансовые отчёты
// Остатки по счетам
Остатки = Новая ТаблицаЗначений();
Остатки.Колонки.Добавить("Счет");
Остатки.Колонки.Добавить("Остаток");
Запрос = Новый Запрос(
"SELECT Счет, SUM(Сумма) as Остаток
FROM РегистрыСведений.ОстаткиСчетов
GROUP BY Счет"
);
Остатки = Запрос.Выполнить().Выгрузить();
Аналитика продаж
// Продажи по менеджерам
Запрос = Новый Запрос(
"SELECT
Менеджер,
COUNT(*) as КоличествоПродаж,
SUM(Сумма) as ИтогоПродаж,
AVG(Сумма) as СредняяПродажа
FROM РегистрыСведений.ПродажиМенеджеров
WHERE Дата >= &ДатаНач
GROUP BY Менеджер
ORDER BY ИтогоПродаж DESC"
);
Кадровая аналитика
// Численность по отделам
Запрос = Новый Запрос(
"SELECT
Отдел,
COUNT(DISTINCT Сотрудник) as Численность,
SUM(Оклад) as ОнергетРасходы
FROM РегистрыСведений.ЗарплатаСотрудников
WHERE Дата >= &ДатаНач
GROUP BY Отдел"
);
Оптимизация итогов
// Плохо: считать много итогов в отдельных запросах
Запрос1 = ... SELECT SUM(Оклад) ...;
Запрос2 = ... SELECT COUNT(*) ...;
Запрос3 = ... SELECT AVG(Оклад) ...;
// Хорошо: все итоги в одном запросе
Запрос = Новый Запрос(
"SELECT
SUM(Оклад) as ИтогоОклад,
COUNT(*) as Количество,
AVG(Оклад) as СредОклад"
);
// Быстрее в 3 раза!
Чеклист использования итогов
- Выбран правильный регистр
- Задан период для фильтрации (WHERE Период >= ...)
- Выбраны поля для GROUP BY
- Использованы подходящие функции агрегации
- Добавлены условия фильтрации результатов (HAVING)
- Добавлена сортировка (ORDER BY)
- Протестирован запрос
Итого: итоги периодического регистра сведений это способ агрегирования данных регистра за период с использованием функций SUM, COUNT, AVG и др., необходимый для аналитики и отчётности.