Сколько документов и действий проходит через базу 1С 8.3: способы подсчёта
Содержание
Быстрее всего посчитать операции в 1С запросом КОЛИЧЕСТВО(...) к нужному виду документа за период: одна строка ответа, секунды работы. Если нужно понять, кто и сколько проводил, берите журнал регистрации. Если интересует нагрузка на сервер (вызовы, запросы к СУБД, блокировки) — технологический журнал. SQL к таблицам базы оставьте для случаев, когда сама 1С недоступна или нужна статистика по всем таблицам сразу.
Выбор зависит от вопроса. «Сколько реализаций за квартал» — это данные учёта. «Сколько раз Иванова перепроводила документы» — это история действий. «Почему база тормозит в 10 утра» — это техническая статистика. Под каждый вопрос свой инструмент, и ответы у них разные: число документов в базе не совпадёт с числом событий проведения.
Что считать операцией: документы, события и вызовы сервера
Слово «операция» в 1С означает три разные вещи. Перед подсчётом договоритесь, какую из них вы считаете.
| Что считаем | Где хранится | Чем считать |
|---|---|---|
| 📄 Документы (реализация, платёжка, операция вручную) | Таблицы документов в базе | Запрос, список, универсальный отчёт |
| 👤 Действия пользователей (записал, провёл, удалил, вошёл) | Журнал регистрации | Отбор в журнале, ВыгрузитьЖурналРегистрации() |
| ⚙️ Обращения к серверу и СУБД | Технологический журнал | Настройка logcfg.xml, разбор логов |
| 🗄 Строки в таблицах базы | СУБД (MS SQL, PostgreSQL) | SQL-запрос только на чтение |
Пример расхождения. В базе 1 200 реализаций за месяц. В журнале регистрации за тот же месяц 3 400 событий «Данные. Проведение» по этим документам: часть перепроводили после исправлений, часть — групповой обработкой при закрытии месяца. В технологическом журнале серверных вызовов будут десятки тысяч, потому что одно открытие формы — это уже несколько вызовов.
Для отчёта руководству обычно нужно число документов. Для оценки загрузки бухгалтера — события в журнале регистрации. Для сайзинга сервера — технологический журнал.
Подсчёт документов в списках, журналах и универсальном отчёте
Без программирования посчитать документы можно тремя способами.
Вывести список и посчитать в таблице
- Откройте список документов, например
Продажи → Реализация (акты, накладные, УПД)в 1С:Бухгалтерии 3.0. - Установите отбор по периоду и организации.
- Выполните
Ещё → Вывести список..., оставьте нужные колонки. - В полученном табличном документе выделите колонку с номерами или суммами. Сумму и количество выделенных ячеек платформа показывает в табличном документе. Если не видно — сохраните его в Excel и посчитайте там.
Способ хорош для одного вида документов и десятков тысяч строк. На сотнях тысяч вывод списка ощутимо грузит сервер.
Журналы документов
Журнал документов
в конфигурации — это общий список, в котором собраны документы нескольких видов. Все журналы, которые есть в вашей конфигурации, видны через Все функции → Журналы документов (команду «Все функции» включают в Сервис и настройки → Параметры, флаг «Отображать команду Все функции»).
В журнале удобно ставить отбор по периоду и видеть документы разных видов вперемешку. Для подсчёта применяйте тот же Ещё → Вывести список.... Учтите: в журнал попадают только те виды документов, которые разработчик в него включил.
Универсальный отчёт
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть «Универсальный отчёт». Он строит выборку по любому объекту метаданных без программиста.
- Откройте отчёт из раздела отчётов (быстрее найти поиском по слову «Универсальный»).
- Выберите тип объекта «Документ» и нужный вид документа.
- Задайте период.
- В настройках сгруппируйте по полю «Ответственный» или «Организация» и добавьте ресурс «Количество».
Получится таблица «кто сколько создал документов» за период. Отчёт сохраняется как вариант и открывается повторно в один клик.
Запрос, который считает документы за период
Запрос — самый точный и быстрый способ. Его можно выполнить в любой консоли запросов (внешняя обработка, входит в набор стандартных обработок для платформы 8.3).
Число проведённых реализаций за период по ответственным:
ВЫБРАТЬ
Док.Ответственный КАК Ответственный,
КОЛИЧЕСТВО(Док.Ссылка) КАК Количество
ИЗ
Документ.РеализацияТоваровУслуг КАК Док
ГДЕ
Док.Проведен
И Док.Дата МЕЖДУ &НачалоПериода И &КонецПериода
СГРУППИРОВАТЬ ПО
Док.Ответственный
УПОРЯДОЧИТЬ ПО
Количество УБЫВ
Параметры &НачалоПериода и &КонецПериода задайте в консоли. Чтобы посчитать и непроведённые, уберите условие Док.Проведен. Чтобы исключить помеченные на удаление, добавьте И НЕ Док.ПометкаУдаления.
Все виды документов разом
Когда нужно понять общий поток документов в базе, переберите метаданные и выполните запрос по каждому виду. Код ниже выполняется на сервере (например, во внешней обработке):
Итог = Новый ТаблицаЗначений;
Итог.Колонки.Добавить("ВидДокумента", Новый ОписаниеТипов("Строка"));
Итог.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ТекущаяДата()));
Для Каждого МД Из Метаданные.Документы Цикл
Запрос.Текст = СтрШаблон(
"ВЫБРАТЬ КОЛИЧЕСТВО(Т.Ссылка) КАК Количество
|ИЗ Документ.%1 КАК Т
|ГДЕ Т.Дата МЕЖДУ &НачалоПериода И &КонецПериода", МД.Имя);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() И Выборка.Количество > 0 Тогда
Строка = Итог.Добавить();
Строка.ВидДокумента = МД.Синоним;
Строка.Количество = Выборка.Количество;
КонецЕсли;
КонецЦикла;
Итог.Сортировать("Количество Убыв");
Отдельный запрос на каждый вид проще и надёжнее одного огромного запроса с ОБЪЕДИНИТЬ ВСЕ на двести таблиц. Результат — топ видов документов за месяц: видно, что, например, 70% потока — это поступления и реализации.
Запросы к документам читают данные и ничего не меняют. Но перебор всех видов за несколько лет на большой базе нагружает СУБД. Запускайте его вне рабочего пика.
Журнал регистрации: кто, когда и сколько провёл
Журнал регистрации хранит действия пользователей: вход, запись, проведение, удаление объектов. По нему отвечают на вопрос «сколько операций сделал сотрудник за день».
Где открыть
- 🖥 В пользовательском режиме:
Администрирование → Обслуживание → Журнал регистрации(Бухгалтерия 3.0, ЗУП 3.1 и другие конфигурации на БСП). Нужны административные права. - 🛠 В Конфигураторе:
Администрирование → Журнал регистрации.
Как посчитать
- Нажмите «Установить отбор».
- Задайте интервал дат.
- В поле событий отметьте «Данные. Проведение» (или «Данные. Добавление», «Данные. Изменение», «Данные. Удаление» — что именно считаете).
- При необходимости ограничьте пользователем и объектом метаданных.
- Количество строк после отбора и есть число событий. Для группировки сохраните журнал в табличный документ и сверните в Excel.
Программная выгрузка
Ручной отбор неудобен, когда событий десятки тысяч. Метод ВыгрузитьЖурналРегистрации() отдаёт события в таблицу значений, дальше её сворачиваем:
Таблица = Новый ТаблицаЗначений;
Отбор = Новый Структура;
Отбор.Вставить("ДатаНачала", НачалоДня(ТекущаяДата()));
Отбор.Вставить("ДатаОкончания", КонецДня(ТекущаяДата()));
Отбор.Вставить("Событие", "_$Data$_.Post");
ВыгрузитьЖурналРегистрации(Таблица, Отбор);
Таблица.Колонки.Добавить("Счетчик", Новый ОписаниеТипов("Число"));
Таблица.ЗаполнитьЗначения(1, "Счетчик");
Таблица.Свернуть("ИмяПользователя", "Счетчик");
Таблица.Сортировать("Счетчик Убыв");
_$Data$_.Post — системное имя события «Данные. Проведение». Аналогично: _$Data$_.New (добавление), _$Data$_.Update (изменение), _$Data$_.Delete (удаление), _$Session$_.Start (начало сеанса). Метод работает на сервере и требует административных прав.
Почему журнал может «недосчитать»
- 📉 Уровень регистрации понижен. Проверьте в Конфигураторе:
Администрирование → Настройка журнала регистрации. При уровне «Регистрировать ошибки» обычные действия не пишутся. - 🧹 Журнал сокращали. В той же настройке есть сокращение журнала: старые события удаляются, и посчитать их уже нельзя.
- 🔄 Групповое перепроведение пишет события за пользователя, который его запустил. У главбуха в день закрытия месяца будет «пять тысяч операций».
Журнал регистрации хранится в каталоге 1Cv8Log: у файловой базы — внутри каталога базы, у серверной — в каталоге кластера (srvinfo\reg_1541\<идентификатор базы>\1Cv8Log). Формат .lgd — это файл SQLite, его можно открыть сторонним просмотрщиком SQLite только для чтения.
Технологический журнал: статистика нагрузки на сервер
Технологический журнал (ТЖ) пишет события платформы: серверные вызовы, запросы к СУБД, управляемые блокировки, исключения. Это единственный способ посчитать «операции» в техническом смысле — сколько вызовов и запросов выполнил сервер за час.
Включение
ТЖ включается файлом logcfg.xml в каталоге conf платформы (например, C:\Program Files\1cv8\conf\). Платформа подхватывает изменения файла без перезапуска, обычно в течение минуты. Пример для подсчёта серверных вызовов и запросов к СУБД:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="D:\techlog" history="24">
<event>
<eq property="name" value="CALL"/>
</event>
<event>
<eq property="name" value="DBMSSQL"/>
</event>
<property name="all"/>
</log>
</config>
history="24" — хранить 24 часа логов. События, которые чаще всего считают:
| Событие | Что означает |
|---|---|
CALL | Входящий серверный вызов |
DBMSSQL / DBPOSTGRS | Запрос к MS SQL / PostgreSQL |
TLOCK | Управляемая блокировка |
EXCP | Исключение (ошибка) |
CONN, SESN | Соединения и сеансы |
Не включайте полный ТЖ (все события, все свойства) на рабочем сервере надолго. За час он может вырасти до десятков гигабайт и забить диск, после чего встанет и сервер 1С.
Подсчёт по логам
Логи раскладываются по папкам процессов (rphost_1234, rmngr_5678), внутри — файлы по часам вида 26100710.log. Каждое событие начинается с метки времени, затем длительности и имени события через запятую. Посчитать вызовы за час в PowerShell:
(Select-String -Path "D:\techlog\rphost_*\26100710.log" -Pattern ",CALL,").Count
На Linux то же самое делается grep -c ",CALL," по файлам. Для разбивки по пользователям вытаскивайте свойство Usr= и группируйте. Для регулярного анализа удобнее штатный разбор средствами вроде ELK или ClickHouse, но для разовой оценки хватает командной строки.
Отдельно для отладки есть «Замер производительности» в Конфигураторе (Отладка → Замер производительности). Он считает число выполнений каждой строки кода, но работает только в отладочном сеансе, а не для всей базы.
SQL-запросы к таблицам базы
Если база серверная, количество записей можно посмотреть прямо в СУБД. Таблицы там называются служебно: _Document123, _AccumRg456. Соответствие имён показывает функция платформы:
Структура = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
// Колонки: ИмяТаблицыХранения, ИмяТаблицы, Метаданные, Назначение, Поля
Найдите в результате строку с метаданными Документ.РеализацияТоваровУслуг и назначением «Основная» — это и есть имя таблицы.
Подсчёт документов за месяц в MS SQL:
SELECT COUNT(*) AS Cnt
FROM dbo._Document123 WITH (NOLOCK)
WHERE _Date_Time >= '4026-10-01' AND _Date_Time < '4026-11-01'
AND _Posted = 0x01;
Год 4026 вместо 2026 — не опечатка. В MS SQL базы 1С обычно создаются со смещением дат 2000 лет. Проверьте на одной записи, есть ли смещение в вашей базе. В PostgreSQL смещения нет, а имена полей пишутся в нижнем регистре (_date_time, _posted).
Размер всех таблиц разом в MS SQL — без перебора:
SELECT t.name AS TableName, SUM(p.row_count) AS RowsCount
FROM sys.dm_db_partition_stats p
JOIN sys.tables t ON t.object_id = p.object_id
WHERE p.index_id IN (0, 1)
GROUP BY t.name
ORDER BY RowsCount DESC;
Так за секунду видно, какие регистры и документы разрослись больше всего.
Только SELECT. Изменение данных в обход платформы ломает целостность базы: платформа не узнает о правке, итоги регистров и ссылки разъедутся. Тяжёлые запросы запускайте на копии базы или в нерабочее время.
Автоматический сбор статистики
Разовый подсчёт полезен, но динамику видно только при регулярном сборе. Варианты от простого к сложному:
- 📅 Сохранённый вариант универсального отчёта с рассылкой. В конфигурациях на БСП отчёты можно рассылать по расписанию на почту. Раз в неделю руководитель получает «документы по ответственным».
- 🧩 Регламентное задание в расширении. Расширение конфигурации
(не трогает основную конфигурацию и не снимает её с поддержки) с регламентным заданием: раз в сутки выполняет запрос по видам документов и
ВыгрузитьЖурналРегистрации(), складывает итоги в свой регистр сведений . Получается история «операций в день» за годы. - 📈 Подсистема «Оценка производительности» БСП. Замеряет время ключевых операций и считает APDEX. Включается в разделе администрирования, в группе обслуживания. Полезна, когда вопрос не «сколько», а «насколько быстро».
- 🖥 Скрипт по технологическому журналу. Планировщик Windows или cron раз в час считает события по прошлому часу и пишет в CSV или базу мониторинга.