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

Разработка и Конфигурация · 9 мин

Как узнать, сколько записей в регистре сведений 1С

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

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

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

Что такое запись регистра сведений и почему её количество важно

Запись регистра сведений — это строка таблицы, состоящая из измерений (ключей), ресурсов (значений) и, для периодических регистров, поля периода. В независимом регистре каждая комбинация измерений образует отдельную запись; в подчинённом регистратору записи дополнительно привязаны к документу-регистратору, и их число равно сумме движений всех документов.

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

Способ 1. Подсчёт запросом через КОЛИЧЕСТВО

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

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

Для периодического регистра можно посчитать записи за конкретный интервал, добавив условие ГДЕ Период МЕЖДУ &Начало И &Конец. Для регистра с отбором по измерению — например, количество цен по конкретному виду цен — добавьте условие на измерение.

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

Способ 2. Подсчёт через набор записей и метод Выбрать

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

bsl
Счетчик = 0;
Выборка = РегистрыСведений.ШтрихкодыНоменклатуры.Выбрать();
Пока Выборка.Следующий() Цикл
 Счетчик = Счетчик + 1;
КонецЦикла;
Сообщить("Записей: " + Счетчик);

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

Способ 3. Подсчёт без программирования в режиме предприятия

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

Динамический список регистра

Откройте регистр через раздел «Все функции» (или «Операции» → «Регистры сведений» в некоторых интерфейсах). Список покажет записи, а в некоторых конфигурациях доступен вывод количества строк через настройку списка или клавиши вывода итогов. Если такой опции нет, список всё равно полезен: по нему видно, пуст регистр или нет, и какие измерения заполнены.

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

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

Порядок действий в универсальном отчёте
  1. 1
    Откройте универсальный отчёт и выберите тип объекта «Регистр сведений»
  2. 2
    Укажите нужный регистр из списка
  3. 3
    Добавьте группировку по любому измерению или оставьте общий итог
  4. 4
    Сформируйте отчёт и посмотрите итоговое количество строк
  5. 5
    При необходимости установите отбор по периоду или измерению и сформируйте заново

Способ 4. Консоль запросов и внешние инструменты

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

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

Если база клиент-серверная, грубую оценку объёма дают средства СУБД: размер таблицы и количество строк видны в административных консолях. Но учитывайте, что физическая таблица регистра может называться неочевидно, а у виртуальных таблиц (срез первых, срез последних) записей как таковых нет — это вычисляемые представления.

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

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

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

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

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

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

Как проверить результат

Сравнение двух способов
Норма

Запрос КОЛИЧЕСТВО и универсальный отчёт дают одинаковое число

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

Числа расходятся — проверьте отборы и виртуальные таблицы

Отбор по периоду
Норма

Сумма записей по месяцам равна общему итогу

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

Сумма частей не сходится с итогом — потерян или дублирован отбор

Повторный запуск
Норма

При неизменных данных число стабильно

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

Число «плавает» без документов-изменений — возможны фоновые обмены

FAQ

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

Для подчинённого регистра выполните запрос с условием ГДЕ Регистратор = &Ссылка и функцией КОЛИЧЕСТВО(*). Ссылку на документ передайте параметром. В режиме предприятия можно открыть регистр и установить отбор по полю «Регистратор».

Почему запрос КОЛИЧЕСТВО(*) выполняется долго?

На очень больших таблицах даже подсчёт строк требует полного сканирования, если нет подходящего индекса под условия отбора. Упростите отбор, ограничьте период или выполняйте подсчёт вне пиковой нагрузки. В клиент-серверной базе причину стоит искать в плане запроса на стороне СУБД.

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

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

Чем отличается количество записей в срезе последних от общего количества?

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

Как быстро проверить, пуст ли регистр сведений?

Выполните запрос ВЫБРАТЬ ПЕРВЫЕ 1 * ИЗ РегистрСведений.ИмяРегистра: если результат пустой — записей нет. Это быстрее, чем КОЛИЧЕСТВО, когда нужен только факт наличия данных, а не точное число.

Влияет ли режим записи регистра на подсчёт?

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

Итог

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

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