Справочники и Данные · 10 мин
Как посчитать количество элементов в справочнике 1С
Способы посчитать количество элементов справочника 1С: через список, запрос, встроенный язык и консоль запросов. Примеры кода, типичные ошибки и проверка результата.
Посчитать количество элементов справочника в 1С можно несколькими способами: через интерфейс списка, запросом на встроенном языке, через консоль запросов или универсальные отчёты. Выбор зависит от того, кто выполняет задачу — пользователь без доступа к конфигуратору или разработчик, — и от того, нужно ли учитывать помеченные на удаление элементы, иерархию и отборы.
Важно понимать, что «количество элементов» — неоднозначная величина. В иерархическом справочнике группы (папки) тоже являются элементами, помеченные на удаление объекты физически остаются в базе, а предопределённые элементы могут учитываться или не учитываться в зависимости от метода подсчёта. Поэтому перед подсчётом стоит определить, какие именно записи нужно считать.
Что именно нужно посчитать: определяемся с критериями
Прежде чем выбирать инструмент, ответьте на несколько вопросов. Нужны ли группы в иерархическом справочнике или только элементы? Учитывать ли помеченные на удаление объекты? Нужен ли отбор по условию — например, только контрагенты с заполненным ИНН или номенклатура определённого вида?
От ответов зависит и формулировка запроса, и интерпретация результата. Например, в справочнике «Номенклатура» из 50 000 записей может оказаться 3 000 групп и 2 000 помеченных на удаление позиций — итоговые цифры будут отличаться в зависимости от критериев на тысячи.
Уточните, нужно ли исключать их отбором ЭтоГруппа = ЛОЖЬ
Обычно исключают условием ПометкаУдаления = ЛОЖЬ
Их нельзя удалить, но они входят в общий подсчёт
Проверяйте корректность условия на маленькой выборке
Способ 1. Подсчёт через интерфейс списка без программирования
Если под рукой нет конфигуратора и консоли запросов, оценить количество можно прямо в форме списка справочника. Откройте нужный справочник, убедитесь, что список отображается без иерархии (режим «Список» вместо «Дерево» или «Иерархический список»), и при необходимости установите отбор — например, снимите пометку «Показывать помеченные на удаление».
В ряде конфигураций и режимов работы количество строк списка отображается в строке состояния или доступно через меню «Ещё». Если такой информации нет, можно вывести список в табличный документ: «Ещё → Вывести список» — и посмотреть количество строк в полученном документе. Этот способ подходит для разовой оценки, но на очень больших справочниках вывод списка может занять заметное время.
Учтите ограничение: вывод списка формирует табличный документ целиком, и при сотнях тысяч записей операция может быть ресурсоёмкой. Для больших объёмов надёжнее использовать запрос.
Способ 2. Подсчёт запросом на встроенном языке
Универсальный и самый точный способ — запрос с функцией КОЛИЧЕСТВО. Он выполняется на сервере и не загружает сами данные в память, поэтому работает быстро даже на больших таблицах.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК КоличествоЭлементов
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ПометкаУдаления";
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
Сообщить("Элементов: " + Результат.КоличествоЭлементов);
КонецЕсли;Если справочник иерархический и группы считать не нужно, добавьте в условие отбор И НЕ Номенклатура.ЭтоГруппа. Если нужен подсчёт только групп — наоборот, оставьте Номенклатура.ЭтоГруппа без отрицания.
Для подсчёта по произвольному условию дополните секцию ГДЕ нужными отборами по реквизитам. Например, количество контрагентов с заполненным ИНН: ГДЕ НЕ ПометкаУдаления И ИНН <> "".
Где выполнить код без изменения конфигурации
Код можно выполнить через внешнюю обработку «Консоль кода» или аналогичный инструмент, либо временно добавить выполнение внешней обработки через «Файл → Открыть». Изменять конфигурацию ради разового подсчёта не требуется.
Способ 3. Консоль запросов
Консоль запросов — внешняя обработка, которая позволяет составить и выполнить запрос в интерактивном режиме. Это удобный вариант для администраторов и аналитиков: текст запроса можно менять и сразу видеть результат, не написав ни строки кода на встроенном языке.
- 1Откройте консоль запросов (внешняя обработка или встроенный инструмент в некоторых конфигурациях)
- 2Введите текст: ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.Номенклатура
- 3Добавьте условие ГДЕ НЕ ПометкаУдаления, если нужны только актуальные элементы
- 4Нажмите «Выполнить» и прочитайте значение в единственной строке результата
- 5При необходимости сохраните запрос для повторного использования
Консоль запросов также позволяет проверить отбор перед подсчётом: сначала выполните запрос с выбором ссылок и ограничением первых записей, убедитесь, что попадают именно нужные элементы, а затем замените выборку на КОЛИЧЕСТВО(*).
Способ 4. Универсальный отчёт и динамический список
В типовых конфигурациях на управляемых формах часто доступен «Универсальный отчёт», который умеет строить отчёты по справочникам без программирования. Выберите вид объекта «Справочник», нужный справочник, добавьте группировку или ресурс с агрегатной функцией «Количество» — отчёт покажет число элементов, в том числе с разбивкой по группам или реквизитам.
Альтернатива — динамический список с настройкой отбора: количество строк после применения отбора можно оценить через вывод в табличный документ. Этот путь удобен, когда нужен не подсчёт, а контроль: например, увидеть, сколько элементов не заполнено по конкретному реквизиту, и тут же открыть их для исправления.
Сравнение способов подсчёта
Подходит пользователю без прав разработчика; медленно на больших справочниках, нет гибких условий
Самый быстрый и гибкий; требует доступа к выполнению кода
Удобна для разовых проверок и отладки отборов; нужна внешняя обработка
Без кода, с группировками; зависит от наличия отчёта в конфигурации
Проверка результата и типичные ошибки
После подсчёта полезно убедиться, что цифра соответствует ожиданиям. Самая частая ошибка — забыть про помеченные на удаление элементы: их количество иногда составляет заметную долю справочника, и итоговое число оказывается завышенным. Вторая типичная ошибка — подсчёт групп вместе с элементами в иерархическом справочнике.
Для перекрёстной проверки выполните два независимых подсчёта: например, запросом и выводом списка с тем же отбором. Совпадение цифр — хороший признак корректности. Дополнительно можно посчитать разложение: количество групп плюс количество элементов должно равняться общему числу записей.
Как проверить корректность подсчёта
Группы + элементы = общее число записей
Сумма не сходится — ошибка в отборе по ЭтоГруппа
Число с отбором и без него отличается объяснимо
Цифры одинаковые, хотя помеченные точно есть — отбор не применился
Первые записи выборки соответствуют условию
В выборку попали лишние или не хватает ожидаемых элементов
Ограничения и меры предосторожности
Подсчёт количества — безопасная операция чтения, она не меняет данные. Однако на больших таблицах в многопользовательском режиме тяжёлые запросы без отборов могут создавать нагрузку на сервер. Выполняйте массовые проверки в периоды низкой активности, а запросы стройте с конкретными условиями.
Если цель подсчёта — последующая очистка справочника (удаление дублей, помеченных элементов), помните, что физическое удаление выполняется только через штатную операцию «Удаление помеченных объектов» с контролем ссылочной целостности. Прямое удаление записей запросом или обработкой нарушает целостность базы и недопустимо.
Что важно запомнить
Определите критерии (группы, пометка удаления, отборы), выберите инструмент под свои права: форма списка, консоль запросов, универсальный отчёт или запрос с КОЛИЧЕСТВО(*). Проверяйте результат перекрёстным подсчётом и не выполняйте непроверенный код в рабочей базе.
Частые вопросы
Как посчитать элементы справочника, не заходя в конфигуратор?
Используйте форму списка с отбором и вывод в табличный документ, универсальный отчёт или внешнюю консоль запросов. Все эти способы работают в режиме предприятия и не требуют изменения конфигурации.
Чем отличается КОЛИЧЕСТВО() от КОЛИЧЕСТВО(Ссылка)?
КОЛИЧЕСТВО() считает все строки результата, а КОЛИЧЕСТВО(поле) — только строки, где указанное поле не равно NULL. Для таблицы справочника ссылка заполнена всегда, поэтому в простом запросе результаты совпадут, но при соединениях таблиц разница может проявиться.
Почему запрос показывает больше элементов, чем видно в списке?
Чаще всего потому, что в списке скрыты помеченные на удаление элементы или действует отбор, а запрос выполнен без условий. Приведите отборы к одинаковым критериям — цифры сойдутся.
Как посчитать элементы только внутри конкретной группы?
Добавьте в запрос условие по родителю: ГДЕ Родитель = &Группа, а группу передайте параметром. Если нужно учесть вложенные подгруппы, используйте условие Родитель В ИЕРАРХИИ(&Группа).
Можно ли посчитать элементы всех справочников сразу?
Да, программно: перебрать коллекцию Метаданные.Справочники и для каждого вида выполнить запрос с КОЛИЧЕСТВО(*). Это удобно для оценки объёмов базы, но выполняйте такой перебор в период низкой нагрузки.
Влияет ли подсчёт количества на работу других пользователей?
Запрос с КОЛИЧЕСТВО(*) — лёгкая операция чтения, обычно незаметная для пользователей. Осторожность нужна только при массовых переборах по всем справочникам или при выводе больших списков в табличный документ.