← Назад к вопросам

Что такое итоги периодического регистра сведений?

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 и др., необходимый для аналитики и отчётности.

Что такое итоги периодического регистра сведений? | PrepBro