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