Подсчёт количества — одна из самых частых задач при работе с 1С:Предприятие.hether вы бухгалтер, который проверяет количество документов за месяц, кладовщик, инвентаризирующий товары, или программист, оптимизирующий отчёты — умение быстро и правильно посчитать строки, записи или элементы справочников сэкономит часы работы. В этой статье разберём 5 основных способов подсчёта в 1С: от ручных методов для пользователей до программных решений для разработчиков.

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

  • 📊 Встроенные функции платформы (например, Количество())
  • 🔍 Запросы на языке 1С (с группировкой и условиями)
  • 📑 Отчёты и обработки (включая стандартные и кастомизированные)
  • 🖥️ Программные методы для разработчиков (циклы, коллекции)
  • ⚠️ Типичные ошибки и как их избежать

Все примеры приведены для актуальных версий 1С:Предприятие 8.3 (включая последние релизы 2026 года). Если вы работаете со старой конфигурацией (например, 7.7), некоторые методы могут не поддерживаться — уточняйте синтаксис в документации вашей версии.

📊 Как часто вам приходится считать количество данных в 1С?
Ежедневно
Несколько раз в неделю
Редко, по необходимости
Никогда не приходилось

1. Подсчёт количества строк в табличных частях документов

Самая простая задача — узнать, сколько строк в табличной части документа (например, Товары в Реализации товаров и услуг). Здесь не нужны запросы или программирование: платформа предоставляет готовые методы.

Чтобы посчитать строки в открытом документе:

  1. Откройте документ (например, Поступление товаров).
  2. Перейдите на вкладку с табличной частью (например, Товары).
  3. Внизу таблицы вы увидите строку состояния с надписью «Итого: N», где N — количество строк.

Если нужно получить это значение программно (например, для проверки в обработке), используйте свойство Количество():

КоличествоСтрок = ДокументОбъект.Товары.Количество();
⚠️ Внимание: Свойство Количество() возвращает физическое число строк, включая пустые. Если вам нужны только заполненные строки, добавьте проверку на пустые значения:

КоличествоЗаполненныхСтрок = 0;

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

Если НЕ ПустаяСтрока(Строка.Номенклатура) Тогда

КоличествоЗаполненныхСтрок = КоличествоЗаполненныхСтрок + 1;

КонецЕсли;

КонецЦикла;

Для быстрого подсчёта в пользовательском режиме можно использовать контекстное меню табличной части: правая кнопка мыши → ИтогиКоличество.

☑️ Проверка количества строк в документе

Выполнено: 0 / 4

2. Использование функции Количество() для справочников и регистров

Функция Количество() работает не только с табличными частями, но и со справочниками, регистрами и другими объектами метаданных. Синтаксис зависит от контекста:

Объект Пример кода Что считает
Справочник Количество = Справочник.Номенклатура.Количество(); Все элементы справочника, включая группы
Регистр сведений Количество = РегистрыСведений.ЦеныНоменклатуры.Количество(); Все записи регистра (может быть ресурсоёмко!)
Документ (выборка) Количество = Документы.ПоступлениеТоваров.Выбрать().Количество(); Количество документов за весь период
Таблица значений Количество = МояТаблица.Количество(); Количество строк в таблице значений

Важный нюанс: для больших справочников (например, Номенклатура с 50 000 позиций) вызов Количество() может занять несколько секунд. В таких случаях лучше использовать запросы (раздел 3).

Пример с фильтром (подсчёт только активных номенклатурных позиций):

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ КОЛИЧЕСТВО(RAZNOST) КАК КоличествоАктивных

ИЗ

Справочник.Номенклатура КАК Номенклатура

ГДЕ

Номенклатура.ПометкаУдаления = ЛОЖЬ

И Номенклатура.ЭтоГруппа = ЛОЖЬ";

Результат = Запрос.Выполнить();

КоличествоАктивных = Результат.Выбрать().Следующий().КоличествоАктивных;

⚠️ Внимание: Если вы работаете с распределённой базой данных (РИБ), функция Количество() может возвращать неактуальные данные до синхронизации. В таких случаях используйте управляемые блокировки или запросы с явным указанием узла РИБ.

3. Подсчёт с помощью запросов (самый гибкий метод)

Запросы — самый мощный инструмент для подсчёта в 1С. Они позволяют:

  • 🔹 Считать с условиями (по дате, контрагенту, статусу)
  • 🔹 Группировать данные (например, количество документов по месяцам)
  • 🔹 Объединять несколько таблиц (связи СОЕДИНИТЬ)
  • 🔹 Оптимизировать производительность (индексы, временные таблицы)

Базовый синтаксис для подсчёта:

ВЫБРАТЬ

КОЛИЧЕСТВО(*) КАК ОбщееКоличество

ИЗ

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

Примеры практических запросов:

Запрос

Количество документов за текущий месяц:ВЫБРАТЬ

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

ИЗ

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

ГДЕ

МЕСЯЦ(Поступление.Дата) = МЕСЯЦ(&ТекущаяДата)

И ГОД(Поступление.Дата) = ГОД(&ТекущаяДата)

Запрос с группировкой (количество документов по контрагентам):

ВЫБРАТЬ

Реализация.Контрагент КАК Контрагент,

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

ИЗ

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

ГДЕ

Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода

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

Реализация.Контрагент

Запрос сjoin условием (количество номенклатуры в остатках):

ВЫБРАТЬ

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

СУММА(ОстаткиТоваров.КоличествоОстатков) КАК Остаток

ИЗ

РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров

ГДЕ

ОстаткиТоваров.КоличествоОстатков > 0

⚠️ Внимание: При работе с большими выборками (более 100 000 строк) избегайте конструкции КОЛИЧЕСТВО(*) без условий. Это может заблокировать базу. Используйте фильтры по дате или другим индексированным полям.
💡

Для ускорения запросов добавляйте условие по периоду, даже если вам нужны "все данные". Например, вместо ГДЕ ИСТИНА используйте ГДЕ Дата > '01.01.2000' — это заставит СУБД использовать индексы.

4. Стандартные отчёты 1С для подсчёта

Если вы не программист, многие задачи по подсчёту можно решить с помощью встроенных отчётов. Они уже оптимизированы и учитывают особенности конфигурации.

Где искать:

  • 📌 Отчёты по продажам/закупкам: Отчёты → Продажи → Анализ продаж (количество документов, строк, сумм)
  • 📌 Остатки товаров: Отчёты → Склад → Остатки товаров (количество номенклатуры в остатках)
  • 📌 Ведомость по документам: Отчёты → Ведомость по документам (количество документов по типам)
  • 📌 Анализ субконто: для подсчёта записей по регистрам бухгалтерии

Пример: чтобы посчитать количество реализаций за квартал:

  1. Перейдите в Отчёты → Продажи → Ведомость по реализациям.
  2. Установите период (например, 01.01.2026 — 31.03.2026).
  3. В настройках отчёта добавьте группировку по Тип документа.
  4. В результатах будет колонка «Кол.» с количеством документов.

Для бухгалтерских задач (например, количество проводок по счёту) используйте отчёт Оборотно-сальдовая ведомость с детализацией по субконто.

⚠️ Внимание: В некоторых конфигурациях (например, 1С:Бухгалтерия 3.0) стандартные отчёты могут не показывать количество строк, а только суммы. В этом случае добавьте в настройки отчёта колонку Количество или используйте запрос (раздел 3).

5. Программный подсчёт в циклах (для разработчиков)

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

Примеры:

1. Подсчёт элементов справочника с проверкой:

Количество = 0;

Выборка = Справочники.Номенклатура.Выбрать();

Пока Выборка.Следующий() Цикл

Если Выборка.ЭтоГруппа = ЛОЖЬ И Выборка.Артикул <> "" Тогда

Количество = Количество + 1;

КонецЕсли;

КонецЦикла;

2. Подсчёт уникальных значений в таблице:

УникальныеКонтрагенты = Новый Массив;

Для Каждого Строка Из МояТаблица Цикл

Если НЕ УникальныеКонтрагенты.Найти(Строка.Контрагент) Тогда

УникальныеКонтрагенты.Добавить(Строка.Контрагент);

КонецЕсли;

КонецЦикла;

КоличествоУникальных = УникальныеКонтрагенты.Количество();

3. Рекурсивный подсчёт элементов в иерархическом справочнике:

Функция ПодсчитатьЭлементыВГруппе(Группа)

Количество = 0;

Выборка = Справочники.Номенклатура.Выбрать(Группа);

Пока Выборка.Следующий() Цикл

Если Выборка.ЭтоГруппа Тогда

Количество = Количество + ПодсчитатьЭлементыВГруппе(Выборка.Ссылка);

Иначе

Количество = Количество + 1;

КонецЕсли;

КонецЦикла;

Возврат Количество;

КонецФункции;

Для больших массивов данных (более 10 000 элементов) циклы могут работать медленно. В таких случаях:

  • 🔹 Используйте запросы (раздел 3).
  • 🔹 Применяйте промежуточные таблицы для хранения результатов.
  • 🔹 Разбивайте обработку на пакеты (например, по 1000 элементов).
⚠️ Внимание: При работе с транзакциями не выполняйте длительные подсчёты в циклах внутри транзакции — это может заблокировать другие сеансы. Выносите такие операции за пределы транзакций или используйте Попытка...Исключение для обработки таймаутов.
💡

Циклы удобны для сложной логики, но для простого подсчёта лучше использовать запросы или встроенные функции — они работают быстрее и не блокируют базу.

6. Типичные ошибки и как их избежать

Даже опытные пользователи и разработчики допускают ошибки при подсчёте в 1С. Вот самые распространённые:

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

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

Пример неправильного запроса (долго выполняется):

ВЫБРАТЬ

КОЛИЧЕСТВО(RAZNOST(Контрагент)) КАК УникальныеКонтрагенты

ИЗ

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

Исправленный вариант (с условием по дате для использования индекса):

ВЫБРАТЬ

КОЛИЧЕСТВО(RAZNOST(Контрагент)) КАК УникальныеКонтрагенты

ИЗ

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

ГДЕ

Дата > '01.01.2023'

7. Автоматизация подсчёта: обработки и регламентные задания

Если подсчёт нужно выполнять регулярно (например, ежедневно считать количество новых заказов), автоматизируйте процесс:

1. Создание обработки:

  • 🔧 Используйте конструктор обработок для визуального создания формы.
  • 🔧 Добавьте кнопку Подсчитать с кодом из разделов 3 или 5.
  • 🔧 Сохраните обработку в базу или как внешний файл (.epf).

2. Регламентные задания:

  • 🕒 Настройте автоматический запуск подсчёта по расписанию (Администрирование → Регламентные задания).
  • 📊 Результаты можно сохранять в регистр сведений для истории.
  • 📧 Настройте оповещения по email при превышении пороговых значений.

Пример кода для регламентного задания (подсчёт новых клиентов за день):

Процедура Выполнить() Экспорт

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ КОЛИЧЕСТВО(RAZNOST(Контрагент)) КАК НовыеКлиенты

ИЗ Документ.ЗаказКлиента

ГДЕ Дата = &ТекущаяДата";

Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());

Результат = Запрос.Выполнить().Выбрать().Следующий().НовыеКлиенты;

// Сохранение результата в регистр

Запись = РегистрыСведений.СтатистикаКлиентов.СоздатьМенеджерЗаписи();

Запись.Дата = ТекущаяДата();

Запись.Количество = Результат;

Запись.Записать();

// Оповещение

Если Результат > 10 Тогда

ОтправитьEmail("admin@company.ru", "Новые клиенты", "Зарегистрировано " + Результат + " новых клиентов");

КонецЕсли;

КонецПроцедуры

Для отображения результатов пользователям можно создать дашборд на основе регистра сведений или использовать 1С:Drive для визуализации данных.

⚠️ Внимание: При настройке регламентных заданий учитывайте нагрузку на сервер. Если подсчёт занимает более 5 минут, разбейте задачу на части или перенесите её на ночное время.

FAQ: Частые вопросы по подсчёту в 1С

Как посчитать количество уникальных значений в таблице?

Используйте запрос с КОЛИЧЕСТВО(RAZNOST):

ВЫБРАТЬ

КОЛИЧЕСТВО(RAZNOST(Поле)) КАК УникальныеЗначения

ИЗ

ВашаТаблица

Для больших таблиц добавьте условие по индексированному полю (например, дате), чтобы ускорить выполнение.

Почему функция Количество() возвращает неверное значение?

Вероятные причины:

  • 🔸 Учтёны помеченные на удаление элементы (добавьте фильтр ПометкаУдаления = ЛОЖЬ).
  • 🔸 Не обновлён кэш метаданных (перезапустите 1С или обновите конфигурацию).
  • 🔸 Работаете с подчинённым справочником (например, Номенклатура в Управлении торговлей), где есть дополнительные фильтры.

Проверьте запросом:

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

Используйте запрос с группировкой по ДЕНЬНЕДЕЛИ():

ВЫБРАТЬ

ДЕНЬНЕДЕЛИ(Дата) КАК ДеньНедели,

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

ИЗ

Документ.ВашДокумент

ГДЕ

Дата МЕЖДУ &Начало И &Конец

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

ДЕНЬНЕДЕЛИ(Дата)

Для русскоязычных названий дней используйте ВЫРАЗИТЬ(ДЕНЬНЕДЕЛИ(Дата) КАК Строка).

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

Да, используйте:

  • 📄 Стандартные отчёты (раздел 4).
  • 🔍 Расширенный фильтр в списках документов (кнопка Ещё → Фильтр).
  • 📊 Сводные таблицы в 1С:Аналитике (если подключена).

Для Управления торговлей 11 и ERP 2 есть встроенные дашборды с виджетом «Количество документов».

Как ускорить подсчёт в большой базе (100 000+ записей)?

Рекомендации:

  • 🚀 Используйте индексированные поля в условиях (Дата, Ссылка).
  • 🚀 Заменяйте циклы на запросы.
  • 🚀 Разбивайте данные на периоды (например, считайте помесячно).
  • 🚀 Используйте временные таблицы для промежуточных результатов.
  • 🚀 Настройте сервер 1С на оптимальное использование памяти (параметр /MemLimit в ragent.conf).

Для критичных задач рассмотрите вынос исторических данных в архивную базу.