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

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

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

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

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

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

Как посчитать строки запросом через КОЛИЧЕСТВО

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

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

ВЫБРАТЬ

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

ИЗ

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

ГДЕ

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

И Реализация.Проведен

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

Как узнать число строк в готовом табличном документе

Когда отчет уже сформирован и выведен в табличный документ, количество строк определяется свойством ВысотаТаблицы. Оно возвращает номер последней заполненной строки области данных табличного документа.

ТабДок = Новый ТабличныйДокумент;

// ... формирование отчета ...

ЧислоСтрок = ТабДок.ВысотаТаблицы();

Сообщить("Строк в отчете: " + ЧислоСтрок);

Учтите ограничение: ВысотаТаблицы считает все строки табличного документа, включая шапку, заголовки группировок и итоговые строки. Если нужна только детальная часть, вычтите известное число служебных строк либо считайте их программно при выводе, инкрементируя счетчик в момент вывода каждой строки данных.

В пользовательском режиме, когда отчет открыт на экране, точного счетчика строк нет — но можно выделить колонку с данными и посмотреть статистику выделения, если она включена, либо сохранить документ в MXL/Excel и посчитать строки там.

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

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

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

ТаблицаДанных = Результат.Выгрузить();

ЧислоСтрок = ТаблицаДанных.Количество();

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

Порядок действий при программном подсчете
  1. 1
    Сформируйте запрос с теми же отборами, что в отчете
  2. 2
    Выполните запрос и выгрузите результат в таблицу значений
  3. 3
    Вызовите метод Количество() у таблицы значений
  4. 4
    Выведите значение через Сообщить() или в служебное поле отчета
  5. 5
    Сверьте число с визуальным количеством строк в сформированном отчете

Как вывести количество строк в отчете на СКД

В отчетах на системе компоновки данных (СКД) подсчет строк делается через ресурсы. Добавьте ресурс с выражением Количество(1) или Количество(Ссылка) по ключевому полю — СКД автоматически посчитает число строк в каждой группировке и в общем итоге.

Если нужно показать число строк в шапке отчета, выведите ресурс в отдельной группировке без детальных записей либо настройте вывод общих итогов: «Настройки → Группировка → Общие итоги». Пользователь увидит итоговое число без изменения кода.

Для подсчета уникальных значений в СКД используйте выражение Количество(Различные Поле) в ресурсе. Это стандартный прием, когда требуется узнать, например, сколько различных клиентов фигурирует в отчете по продажам.

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

КОЛИЧЕСТВО(*) в запросе

Самый быстрый и точный способ до формирования отчета; требует доступа к консоли запросов или коду

ВысотаТаблицы()

Подходит для готового табличного документа; считает и служебные строки, нужна корректировка

Ресурс СКД Количество(1)

Лучший вариант для пользовательских отчетов: итог виден прямо в форме без программирования

ТаблицаЗначений.Количество()

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

Как посчитать строки с условиями и в группировках

Часто нужно не общее число строк, а количество по условию: сколько строк с ненулевой суммой, сколько по конкретному складу. В запросе это решается через СУММА(ВЫБОР ... КОГДА ... ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) либо через отбор в секции ГДЕ с последующим КОЛИЧЕСТВО(*).

ВЫБРАТЬ

СУММА(ВЫБОР

КОГДА Товары.Сумма > 0

ТОГДА 1

ИНАЧЕ 0

КОНЕЦ) КАК СтрокССуммой

ИЗ

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

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

Частые ошибки и как проверить результат

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

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

Типичные ошибки
01
Подсчет через ВысотаТаблицы без вычета шапки и итогов — результат завышен на несколько строк
02
Использование КОЛИЧЕСТВО(Поле) при NULL в поле — часть строк теряется
03
Сверка с отчетом при других значениях параметров — числа не сходятся, хотя оба результата корректны
04
Перебор выборки для подсчета, после которого выборка используется повторно без Сбросить() — данные пропадают
Контрольные точки

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

Число из запроса и число детальных строк отчета
Норма

Значения совпадают при одинаковых отборах

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

Расхождение — проверьте параметры, группировки и NULL-поля

Итог по ресурсу СКД
Норма

Итог равен числу строк детальной части

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

Итог больше — возможно, считаются строки группировок

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

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

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

Число меняется — данные редактируются или отбор зависит от текущей даты

Для контроля больших отчетов полезно выводить счетчик строк прямо в подвал табличного документа при программном формировании. Это избавляет пользователя от ручного подсчета и сразу показывает расхождения при сверке.

Итог

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

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

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

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

Добавьте в настройках отчета на СКД ресурс с выражением Количество(1) и включите общие итоги — число строк появится в итоговой строке. Если отчет не на СКД, сохраните его в Excel и посмотрите число заполненных строк там.

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

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

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

КОЛИЧЕСТВО() считает все строки результата. КОЛИЧЕСТВО(Поле) пропускает строки, где указанное поле равно NULL. Для полного подсчета записей всегда используйте вариант со звездочкой.

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

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

Можно ли вывести количество строк в заголовок отчета?

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

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

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