Сколько документов и действий проходит через базу 1С 8.3: способы подсчёта

· 10 мин

Содержание

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

Выбор зависит от вопроса. «Сколько реализаций за квартал» — это данные учёта. «Сколько раз Иванова перепроводила документы» — это история действий. «Почему база тормозит в 10 утра» — это техническая статистика. Под каждый вопрос свой инструмент, и ответы у них разные: число документов в базе не совпадёт с числом событий проведения.

Что считать операцией: документы, события и вызовы сервера

Слово «операция» в 1С означает три разные вещи. Перед подсчётом договоритесь, какую из них вы считаете.

Что считаемГде хранитсяЧем считать
📄 Документы (реализация, платёжка, операция вручную)Таблицы документов в базеЗапрос, список, универсальный отчёт
👤 Действия пользователей (записал, провёл, удалил, вошёл)Журнал регистрацииОтбор в журнале, ВыгрузитьЖурналРегистрации()
⚙️ Обращения к серверу и СУБДТехнологический журналНастройка logcfg.xml, разбор логов
🗄 Строки в таблицах базыСУБД (MS SQL, PostgreSQL)SQL-запрос только на чтение

Пример расхождения. В базе 1 200 реализаций за месяц. В журнале регистрации за тот же месяц 3 400 событий «Данные. Проведение» по этим документам: часть перепроводили после исправлений, часть — групповой обработкой при закрытии месяца. В технологическом журнале серверных вызовов будут десятки тысяч, потому что одно открытие формы — это уже несколько вызовов.

Для отчёта руководству обычно нужно число документов. Для оценки загрузки бухгалтера — события в журнале регистрации. Для сайзинга сервера — технологический журнал.

Подсчёт документов в списках, журналах и универсальном отчёте

Без программирования посчитать документы можно тремя способами.

Вывести список и посчитать в таблице

  1. Откройте список документов, например Продажи → Реализация (акты, накладные, УПД) в 1С:Бухгалтерии 3.0.
  2. Установите отбор по периоду и организации.
  3. Выполните Ещё → Вывести список..., оставьте нужные колонки.
  4. В полученном табличном документе выделите колонку с номерами или суммами. Сумму и количество выделенных ячеек платформа показывает в табличном документе. Если не видно — сохраните его в Excel и посчитайте там.

Способ хорош для одного вида документов и десятков тысяч строк. На сотнях тысяч вывод списка ощутимо грузит сервер.

Журналы документов

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

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

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

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть «Универсальный отчёт». Он строит выборку по любому объекту метаданных без программиста.

  1. Откройте отчёт из раздела отчётов (быстрее найти поиском по слову «Универсальный»).
  2. Выберите тип объекта «Документ» и нужный вид документа.
  3. Задайте период.
  4. В настройках сгруппируйте по полю «Ответственный» или «Организация» и добавьте ресурс «Количество».

Получится таблица «кто сколько создал документов» за период. Отчёт сохраняется как вариант и открывается повторно в один клик.

Запрос, который считает документы за период

Запрос — самый точный и быстрый способ. Его можно выполнить в любой консоли запросов (внешняя обработка, входит в набор стандартных обработок для платформы 8.3).

Число проведённых реализаций за период по ответственным:

ВЫБРАТЬ
    Док.Ответственный КАК Ответственный,
    КОЛИЧЕСТВО(Док.Ссылка) КАК Количество
ИЗ
    Документ.РеализацияТоваровУслуг КАК Док
ГДЕ
    Док.Проведен
    И Док.Дата МЕЖДУ &НачалоПериода И &КонецПериода
СГРУППИРОВАТЬ ПО
    Док.Ответственный
УПОРЯДОЧИТЬ ПО
    Количество УБЫВ

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

Все виды документов разом

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

Итог = Новый ТаблицаЗначений;
Итог.Колонки.Добавить("ВидДокумента", Новый ОписаниеТипов("Строка"));
Итог.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ТекущаяДата()));

Для Каждого МД Из Метаданные.Документы Цикл
    Запрос.Текст = СтрШаблон(
        "ВЫБРАТЬ КОЛИЧЕСТВО(Т.Ссылка) КАК Количество
        |ИЗ Документ.%1 КАК Т
        |ГДЕ Т.Дата МЕЖДУ &НачалоПериода И &КонецПериода", МД.Имя);
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() И Выборка.Количество > 0 Тогда
        Строка = Итог.Добавить();
        Строка.ВидДокумента = МД.Синоним;
        Строка.Количество = Выборка.Количество;
    КонецЕсли;
КонецЦикла;

Итог.Сортировать("Количество Убыв");

Отдельный запрос на каждый вид проще и надёжнее одного огромного запроса с ОБЪЕДИНИТЬ ВСЕ на двести таблиц. Результат — топ видов документов за месяц: видно, что, например, 70% потока — это поступления и реализации.

Запросы к документам читают данные и ничего не меняют. Но перебор всех видов за несколько лет на большой базе нагружает СУБД. Запускайте его вне рабочего пика.

Журнал регистрации: кто, когда и сколько провёл

Журнал регистрации хранит действия пользователей: вход, запись, проведение, удаление объектов. По нему отвечают на вопрос «сколько операций сделал сотрудник за день».

Где открыть

  • 🖥 В пользовательском режиме: Администрирование → Обслуживание → Журнал регистрации (Бухгалтерия 3.0, ЗУП 3.1 и другие конфигурации на БСП). Нужны административные права.
  • 🛠 В Конфигураторе: Администрирование → Журнал регистрации.

Как посчитать

  1. Нажмите «Установить отбор».
  2. Задайте интервал дат.
  3. В поле событий отметьте «Данные. Проведение» (или «Данные. Добавление», «Данные. Изменение», «Данные. Удаление» — что именно считаете).
  4. При необходимости ограничьте пользователем и объектом метаданных.
  5. Количество строк после отбора и есть число событий. Для группировки сохраните журнал в табличный документ и сверните в 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. Изменение данных в обход платформы ломает целостность базы: платформа не узнает о правке, итоги регистров и ссылки разъедутся. Тяжёлые запросы запускайте на копии базы или в нерабочее время.

Автоматический сбор статистики

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

  1. 📅 Сохранённый вариант универсального отчёта с рассылкой. В конфигурациях на БСП отчёты можно рассылать по расписанию на почту. Раз в неделю руководитель получает «документы по ответственным».
  2. 🧩 Регламентное задание в расширении. Расширение конфигурации (не трогает основную конфигурацию и не снимает её с поддержки) с регламентным заданием: раз в сутки выполняет запрос по видам документов и ВыгрузитьЖурналРегистрации(), складывает итоги в свой регистр сведений . Получается история «операций в день» за годы.
  3. 📈 Подсистема «Оценка производительности» БСП. Замеряет время ключевых операций и считает APDEX. Включается в разделе администрирования, в группе обслуживания. Полезна, когда вопрос не «сколько», а «насколько быстро».
  4. 🖥 Скрипт по технологическому журналу. Планировщик Windows или cron раз в час считает события по прошлому часу и пишет в CSV или базу мониторинга.
Какой у вас вопрос?

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

Почему число документов в отчёте не совпадает с журналом регистрации?
Отчёт считает документы, которые есть в базе сейчас. Журнал считает события: один документ могли проводить пять раз, а удалённые документы в базе уже не видны.
Можно ли посчитать операции за прошлый год по журналу регистрации?
Только если журнал не сокращали. Проверьте дату самого раннего события в журнале. Документы за прошлый год всегда можно посчитать запросом.
Сколько места занимает технологический журнал?
Зависит от событий и нагрузки. Только CALL на базе в 50 пользователей — сотни мегабайт в час, с DBMSSQL и всеми свойствами — гигабайты. Ставьте history и отдельный диск.
Как посчитать операции в файловой базе?
Запрос и журнал регистрации работают так же. Технологический журнал тоже включается через logcfg.xml на компьютере, где запускается клиент. SQL недоступен: файловая база хранится в одном файле 1Cv8.1CD.
Влияет ли подсчёт на работу пользователей?
Запрос по одному виду документов за месяц — почти нет. Перебор всех видов за годы, выгрузка большого журнала и полный ТЖ нагружают сервер, их запускают вне пика.