Как реализовать подсчет и вывод количества позиций в справочниках 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки интерфейсов часто возникает задача наглядно показать пользователю объем данных, с которыми он работает. Например, вывести общее количество документов или элементов справочника прямо на главной странице или в заголовке списка. Рассмотрим подробнее несколько способов реализации этой задачи: от простого вывода в заголовок формы до создания полноценной информационной панели (дашборда).

Способ 1. Вывод количества элементов в заголовок формы списка

Самый простой и быстрый способ — программно подсчитать количество записей при открытии формы и изменить её заголовок. Проанализируем, как это сделать правильно, чтобы не замедлять работу системы. Мы будем использовать событие ПриСозданииНаСервере.

Разберем пример кода, который выполняет запрос к базе данных и обновляет заголовок формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Формируем запрос к нужному справочнику
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	КОЛИЧЕСТВО(*) КАК ВсегоЭлементов
        |ИЗ
        |	Справочник.АктыНесоответствия КАК АктыНесоответствия";
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        Колво = Выборка.ВсегоЭлементов;
        // Устанавливаем новый заголовок формы
        ЭтаФорма.Заголовок = "Акты несоответствия (всего: " + Колво + " шт.)";
    КонецЕсли;
    
КонецПроцедуры

Этот метод хорош тем, что пользователь сразу видит итоговую цифру, как только открывает справочник. Однако помните, что КОЛИЧЕСТВО(*) подсчитает абсолютно все записи, включая помеченные на удаление и группы (папки), если справочник иерархический.

Способ 2. Создание информационной панели (рабочего стола)

Если нам нужно видеть итоги сразу по нескольким справочникам на главной странице, лучше всего создать отдельную обработку. Выясним причину, почему это удобнее: мы можем собрать данные из разных источников в одном месте, не перегружая стандартные формы списка.

Выполним следующие шаги для реализации:

  1. Создадим новую обработку, например, РабочийСтолРуководителя.
  2. Добавим на форму реквизиты с типом Строка или Число для отображения итогов.
  3. В событии ПриСозданииНаСервере напишем код, который соберет данные по всем интересующим нас справочникам.

Посмотрим на пример реализации запроса для нескольких справочников одновременно:


&НаСервере
Процедура ОбновитьСтатистикуНаСервере()
    
    ТекстЗапроса = 
        "ВЫБРАТЬ
        |	КОЛИЧЕСТВО(*) КАК Колво,
        |	""Акты"" КАК Тип
        |ИЗ
        |	Справочник.АктыНесоответствия
        |ОБЪЕДИНИТЬ ВСЕ
        |ВЫБРАТЬ
        |	КОЛИЧЕСТВО(*),
        |	""Номенклатура""
        |ИЗ
        |	Справочник.Номенклатура";
    
    Запрос = Новый Запрос(ТекстЗапроса);
    Результат = Запрос.Выполнить().Выбрать();
    
    Пока Результат.Следующий() Цикл
        Если Результат.Тип = "Акты" Тогда
            Элементы.НадписьАкты.Заголовок = "Актов в базе: " + Результат.Колво;
        ИначеЕсли Результат.Тип = "Номенклатура" Тогда
            Элементы.НадписьНоменклатура.Заголовок = "Товаров: " + Результат.Колво;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

После создания обработки её необходимо назначить Рабочей областью начальной страницы в свойствах конфигурации. Таким образом, при входе в программу пользователь сразу будет видеть актуальные итоги.

Способ 3. Использование встроенных итогов Динамического списка

Начиная с версии платформы 8.3.15, у разработчиков появилась возможность выводить итоги непосредственно в подвале ДинамическийСписок. Это избавляет от необходимости писать ручные запросы и позволяет автоматически пересчитывать количество, если пользователь применил фильтры (поиск) в списке.

Проанализируем алгоритм настройки:

  1. Откроем форму списка справочника в конфигураторе.
  2. Выберем элемент формы, связанный с динамическим списком (таблицу).
  3. В свойствах таблицы установим галочку Подвал (Footer).
  4. Для конкретной колонки (например, "Наименование") в свойствах установим Текст подвала или настроим программное отображение агрегатной функции.

Программная настройка итогов в ДинамическийСписок выглядит так:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Включаем отображение количества элементов в подвале колонки "Наименование"
    ЭлементИтога = Список.НастройкиКомпоновкиДанных.Настройки.Структура[0].ПоляИтогов.Элементы.Добавить();
    ЭлементИтога.Поле = Новый ПолеКомпоновкиДанных("Наименование");
    ЭлементИтога.ТипАгрегатнойФункции = ТипАгрегатнойФункцииКомпоновкиДанных.Количество;
    
КонецПроцедуры

Важные нюансы: иерархия и удаление

При подсчете данных важно учитывать бизнес-логику. Рассмотрим подробнее, какие фильтры стоит добавить в запрос, чтобы цифры были корректными:

  1. Исключение групп: Если справочник иерархический, папки обычно считать не нужно. Используйте условие ГДЕ НЕ ЭтоГруппа.
  2. Пометка на удаление: Объекты в корзине часто искажают статистику. Используйте условие ГДЕ НЕ ПометкаУдаления.
  3. Производительность: Если в справочнике миллионы записей, запрос КОЛИЧЕСТВО(*) может выполняться долго. В таких случаях рекомендуется сохранять результат подсчета в специальный РегистрСведений и обновлять его регламентным заданием раз в час, а на форму выводить уже готовое значение из регистра.

Пример правильного запроса с учетом этих фильтров:


ВЫБРАТЬ
    КОЛИЧЕСТВО(*) КАК ТочноеКоличество
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    НЕ Номенклатура.ПометкаУдаления
    И НЕ Номенклатура.ЭтоГруппа

Использование расширений конфигурации

Чтобы не снимать типовую конфигурацию с поддержки, мы рекомендуем внедрять эти изменения через Расширение. Создайте расширение, добавьте в него нужную форму справочника и создайте обработчик-последовательность (&После) для процедуры ПриСозданииНаСервере. Это позволит сохранить возможность легкого обновления программы в будущем, при этом добавив необходимый функционал подсчета.

Таким образом, мы рассмотрели различные подходы к визуализации итогов. Выбор метода зависит от ваших задач: для оперативной работы в списке подойдет настройка подвала динамического списка, а для управленческого контроля лучше создать информативный дашборд на начальной странице.

← На главную