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