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

Справочники и Данные · 10 мин

Как посчитать количество элементов в справочнике 1С

Способы посчитать количество элементов справочника 1С: через список, запрос, встроенный язык и консоль запросов. Примеры кода, типичные ошибки и проверка результата.

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

Важно понимать, что «количество элементов» — неоднозначная величина. В иерархическом справочнике группы (папки) тоже являются элементами, помеченные на удаление объекты физически остаются в базе, а предопределённые элементы могут учитываться или не учитываться в зависимости от метода подсчёта. Поэтому перед подсчётом стоит определить, какие именно записи нужно считать.

Что именно нужно посчитать: определяемся с критериями

Прежде чем выбирать инструмент, ответьте на несколько вопросов. Нужны ли группы в иерархическом справочнике или только элементы? Учитывать ли помеченные на удаление объекты? Нужен ли отбор по условию — например, только контрагенты с заполненным ИНН или номенклатура определённого вида?

От ответов зависит и формулировка запроса, и интерпретация результата. Например, в справочнике «Номенклатура» из 50 000 записей может оказаться 3 000 групп и 2 000 помеченных на удаление позиций — итоговые цифры будут отличаться в зависимости от критериев на тысячи.

ГруппыВ иерархических справочниках папки — тоже элементы

Уточните, нужно ли исключать их отбором ЭтоГруппа = ЛОЖЬ

Пометка удаленияПомеченные объекты физически остаются в базе

Обычно исключают условием ПометкаУдаления = ЛОЖЬ

Предопределённые элементыСоздаются конфигурацией автоматически

Их нельзя удалить, но они входят в общий подсчёт

Отборы по реквизитамПодсчёт по условию даёт другую цифру

Проверяйте корректность условия на маленькой выборке

Способ 1. Подсчёт через интерфейс списка без программирования

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

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

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

Способ 2. Подсчёт запросом на встроенном языке

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

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

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

Для подсчёта по произвольному условию дополните секцию ГДЕ нужными отборами по реквизитам. Например, количество контрагентов с заполненным ИНН: ГДЕ НЕ ПометкаУдаления И ИНН <> "".

Где выполнить код без изменения конфигурации

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

Способ 3. Консоль запросов

Консоль запросов — внешняя обработка, которая позволяет составить и выполнить запрос в интерактивном режиме. Это удобный вариант для администраторов и аналитиков: текст запроса можно менять и сразу видеть результат, не написав ни строки кода на встроенном языке.

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

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

Способ 4. Универсальный отчёт и динамический список

В типовых конфигурациях на управляемых формах часто доступен «Универсальный отчёт», который умеет строить отчёты по справочникам без программирования. Выберите вид объекта «Справочник», нужный справочник, добавьте группировку или ресурс с агрегатной функцией «Количество» — отчёт покажет число элементов, в том числе с разбивкой по группам или реквизитам.

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

Сравнение способов подсчёта

Форма списка / вывод списка

Подходит пользователю без прав разработчика; медленно на больших справочниках, нет гибких условий

Запрос на встроенном языке

Самый быстрый и гибкий; требует доступа к выполнению кода

Консоль запросов

Удобна для разовых проверок и отладки отборов; нужна внешняя обработка

Универсальный отчёт

Без кода, с группировками; зависит от наличия отчёта в конфигурации

Проверка результата и типичные ошибки

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

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

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

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

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

Сумма частей
Норма

Группы + элементы = общее число записей

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

Сумма не сходится — ошибка в отборе по ЭтоГруппа

Пометка удаления
Норма

Число с отбором и без него отличается объяснимо

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

Цифры одинаковые, хотя помеченные точно есть — отбор не применился

Просмотр выборки
Норма

Первые записи выборки соответствуют условию

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

В выборку попали лишние или не хватает ожидаемых элементов

Ограничения и меры предосторожности

Подсчёт количества — безопасная операция чтения, она не меняет данные. Однако на больших таблицах в многопользовательском режиме тяжёлые запросы без отборов могут создавать нагрузку на сервер. Выполняйте массовые проверки в периоды низкой активности, а запросы стройте с конкретными условиями.

Если цель подсчёта — последующая очистка справочника (удаление дублей, помеченных элементов), помните, что физическое удаление выполняется только через штатную операцию «Удаление помеченных объектов» с контролем ссылочной целостности. Прямое удаление записей запросом или обработкой нарушает целостность базы и недопустимо.

Итог

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

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

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

Как посчитать элементы справочника, не заходя в конфигуратор?

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

Чем отличается КОЛИЧЕСТВО() от КОЛИЧЕСТВО(Ссылка)?

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

Почему запрос показывает больше элементов, чем видно в списке?

Чаще всего потому, что в списке скрыты помеченные на удаление элементы или действует отбор, а запрос выполнен без условий. Приведите отборы к одинаковым критериям — цифры сойдутся.

Как посчитать элементы только внутри конкретной группы?

Добавьте в запрос условие по родителю: ГДЕ Родитель = &Группа, а группу передайте параметром. Если нужно учесть вложенные подгруппы, используйте условие Родитель В ИЕРАРХИИ(&Группа).

Можно ли посчитать элементы всех справочников сразу?

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

Влияет ли подсчёт количества на работу других пользователей?

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