К статье
Практический материал

Отчеты и Аналитика · 9 мин

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

Как посчитать количество в 1С: в отчётах, списках, запросах и на встроенном языке. Пошаговые инструкции, функции Количество() и СУММА, типичные ошибки.

Задача «посчитать количество» в 1С встречается постоянно: нужно узнать, сколько строк в документе, сколько записей в справочнике, сколько единиц товара прошло по накладным или сколько сотрудников числится в подразделении. В зависимости от ситуации применяются разные инструменты — от стандартного поиска в списке до агрегатных функций в запросах.

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

Как посчитать количество записей в списке без программирования

Самый простой случай — узнать, сколько элементов содержит справочник или сколько документов соответствует условию. Откройте нужный список (например, «Номенклатура» или «Реализация товаров и услуг»), установите отбор по нужному условию через кнопку «Найти» или «Ещё — Настроить список». После применения отбора в списке останутся только подходящие записи.

Чтобы увидеть их число, выделите все строки (Ctrl+A) — в большинстве конфигураций внизу окна или в строке состояния отобразится количество выделенных элементов. Альтернатива — команда «Вывести список» (Ещё — Вывести список): в табличном документе будет видно итоговое число строк.

Этот способ подходит для разовой проверки, но неудобен для регулярной работы и не позволяет суммировать количество по числовым полям — только считать строки.

Как быстро посчитать строки в списке
  1. 1
    Откройте список документов или справочника
  2. 2
    Установите отбор по нужному условию (период, организация, контрагент)
  3. 3
    Выделите все строки клавишами Ctrl+A
  4. 4
    Посмотрите количество в строке состояния или выведите список в табличный документ

Как посчитать количество в отчётах и через настройку варианта

Типовые отчёты («Остатки товаров», «Продажи», «Оборотно-сальдовая ведомость») уже содержат поле «Количество» как ресурс. Откройте отчёт, зайдите в «Настройки» и убедитесь, что в списке выбранных полей присутствует «Количество», а в группировках стоит нужное измерение — номенклатура, склад, контрагент. После нажатия «Сформировать» отчёт покажет количество в разрезе группировок и общий итог.

Если нужно посчитать не сумму количеств, а число разных значений (например, сколько различных товаров продавалось), в расширенных настройках СКД для ресурса можно выбрать агрегатную функцию «Количество (различные)». Это избавляет от дублирования: один и тот же товар в сотне документов будет посчитан один раз.

Подсчёт количества запросом: КОЛИЧЕСТВО и СУММА

Консоль запросов (в типовых конфигурациях доступна разработчикам и администраторам, существуют и внешние обработки) даёт полный контроль над подсчётом. Запрос с агрегатной функцией возвращает точное число за доли секунды даже на больших объёмах данных.

// Сколько документов поступления за период

ВЫБРАТЬ

КОЛИЧЕСТВО(*) КАК ЧислоДокументов

ИЗ

Документ.ПоступлениеТоваровУслуг КАК Поступление

ГДЕ

Поступление.Дата МЕЖДУ &НачалоПериода И &КонецПериода

И Поступление.Проведен

Для подсчёта суммарного количества товара по табличной части используется СУММА:

ВЫБРАТЬ

Товары.Номенклатура КАК Номенклатура,

СУММА(Товары.Количество) КАК ВсегоКоличество

ИЗ

Документ.РеализацияТоваровУслуг.Товары КАК Товары

СГРУППИРОВАТЬ ПО

Товары.Номенклатура

Обратите внимание: при группировке все неагрегатные поля должны быть перечислены в предложении СГРУППИРОВАТЬ ПО, иначе запрос вернёт ошибку. Для подсчёта уникальных значений используйте КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Поле).

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

Как посчитать количество в коде на встроенном языке

В модуле формы или обработке количество считается двумя путями: запросом (см. пример выше) или перебором коллекции. Для табличной части документа число строк доступно напрямую через метод Количество():

ЧислоСтрок = Объект.Товары.Количество();

ВсегоЕдиниц = 0;

Для Каждого СтрокаТовара Из Объект.Товары Цикл

ВсегоЕдиниц = ВсегоЕдиниц + СтрокаТовара.Количество;

КонецЦикла;

Для таблицы значений есть метод Итог("Количество"), который суммирует колонку без цикла: ВсегоЕдиниц = ТаблицаТоваров.Итог("Количество");. Это быстрее и короче ручного перебора.

Запрос предпочтительнее, когда данные нужно отфильтровать на стороне СУБД: перебор выборки из тысяч записей с проверкой условия в цикле работает заметно медленнее, чем агрегатный запрос с предложением ГДЕ.

Какой способ выбрать

Отбор в списке

Разовая проверка пользователем без прав разработчика. Не суммирует числовые поля.

Отчёт с настройкой

Регулярная аналитика по готовым данным. Ограничен составом полей схемы отчёта.

Запрос с КОЛИЧЕСТВО/СУММА

Точные выборки любой сложности, высокая скорость. Требует навыка языка запросов.

Цикл в коде

Гибкая логика с условиями внутри перебора. Медленнее на больших объёмах.

Как проверить правильность подсчёта

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

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

Контрольные точки

Контрольные точки

Условия отбора
Норма

Период, организация и признак проведения совпадают в обоих способах подсчёта

Тревожный признак

Запрос фильтрует проведённые, а список показывает все документы

Тип подсчёта
Норма

СУММА для единиц товара, КОЛИЧЕСТВО РАЗЛИЧНЫЕ для уникальных позиций

Тревожный признак

Количество строк выдано за сумму единиц товара

Границы периода
Норма

Конечная дата включает конец дня (23:59:59) или используется конец периода

Тревожный признак

Документы последнего дня не попали в выборку

Типичные ошибки при подсчёте количества

Первая ошибка — неправильная граница периода. Условие «Дата МЕЖДУ &Начало И &Конец» с конечной датой 00:00:00 отсекает все документы последнего дня. Передавайте конец дня или используйте функцию КОНЕЦПЕРИОДА(&Конец, ДЕНЬ).

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

Третья ошибка — подсчёт по помеченным на удаление объектам. Справочники и документы, помеченные на удаление, остаются в базе и попадают в выборку, если явно не указать условие «НЕ ПометкаУдаления».

Типичные ошибки
01
Конечная дата без времени — теряются документы последнего дня периода
02
КОЛИЧЕСТВО(*) после соединения с табличной частью — строки умножаются, итог завышен
03
Игнорирование пометки удаления — в подсчёт попадают «мёртвые» объекты
04
Смешение СУММА и КОЛИЧЕСТВО — единицы товара подменяются числом строк

Когда без программиста не обойтись

Пользовательские средства (отборы, настройки отчётов) закрывают большинство задач подсчёта. Обращаться к разработчику стоит, когда нужен произвольный запрос к нескольким таблицам, расчёт количества в динамическом списке формы, собственная агрегатная функция в СКД или регулярный автоматический подсчёт по расписанию.

Перед постановкой задачи зафиксируйте: что именно считаем (строки, документы, единицы товара, уникальные значения), по каким условиям фильтруем и с чем сверяем результат. Такая формулировка экономит время и исключает споры о правильности итога.

Итог

Что важно запомнить

Для разовой проверки достаточно отбора в списке, для аналитики — отчёта с группировкой, для точных выборок — запроса с КОЛИЧЕСТВО и СУММА. Всегда проверяйте границы периода, пометку удаления и то, что считаете: строки, единицы или уникальные значения.

Частые вопросы

Как посчитать количество строк в табличной части документа?

Откройте документ и посмотрите на табличную часть — во многих конфигурациях число строк видно в заголовке вкладки или через «Ещё — Вывести список». В коде используйте выражение Объект.Товары.Количество().

Чем отличается КОЛИЧЕСТВО от СУММА в запросе?

КОЛИЧЕСТВО считает число записей (строк) в выборке, СУММА складывает значения числового поля. Если в документе 3 строки по 5 единиц товара, КОЛИЧЕСТВО даст 3, а СУММА(Количество) — 15.

Как посчитать только уникальные значения?

Используйте конструкцию КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Поле) в запросе. В отчётах на СКД выберите для ресурса агрегатную функцию «Количество (различные)» в расширенных настройках.

Почему запрос и список документов показывают разное число?

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

Можно ли посчитать количество без прав разработчика?

Да. Отбор в списке с выделением строк, вывод списка в табличный документ и настройка типовых отчётов доступны обычному пользователю. Консоль запросов и встроенный язык требуют соответствующих прав.

Как посчитать количество по нескольким условиям одновременно?

В запросе перечислите условия через И в предложении ГДЕ, а для раздельных итогов добавьте группировку СГРУППИРОВАТЬ ПО нужному полю. В отчёте добавьте несколько отборов и группировок в настройках варианта.