Замер длительности проведения документов по журналу регистрации без изменения конфигурации
База данных - Журнал регистрации
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
К сожалению, 1С дает информацию о транзакции в строковом виде, поэтому на разбор этой строки в дату и метку транзакции потребуется время.
Рассмотрим вариант извлечения этой информации из SQL-базы, куда события журнала регистрации были записаны с помощью этого инструмента.
Какие ограничения стоит учесть при выборке данных:
1) Нужно отсечь отмененные транзакции, а информация об отмене транзакции есть только в последней записи. Т.е., если в рамках одной отмененной транзакции в ЖР было записано 5 строк, то в 4 из них будет признак "Транзакция зафиксирована", а в последней строке уже "Транзакция отменена".
2) Нужно отсечь длинные транзакции, в рамках которых были перепроведены несколько документов. В этом случае нужна другая методика подсчета времени, которую мы здесь не рассматриваем.
Учитывая эти ограничения, запрос получается сложным:
SELECT
DateTime AS [DateTime],
DATEDIFF (SECOND,TransactionStartTime,DateTime) as [DIFF],
Users.Name as [UserName],
Metadata.Name as [MetadataName],
DataStructure as [Data]
FROM Events
INNER JOIN Metadata ON Events.MetadataID = Metadata.Code
INNER JOIN Users ON Events.UserName = Users.Code
Where
DataStructure like '{"R",%}'
AND EventID IN (SELECT Code FROM EventsType WHERE (Name = '_$Data$_.Post') AND (InfobaseCode = 1))
AND TransactionStatus = 'U'
AND DateTime >= '20130401'
AND DateTime <= '20130415'
AND Events.InfobaseCode = 1
AND NOT TransactionMark IN (SELECT TransactionMark FROM
(SELECT TransactionMark, SUM(1) AS Count
FROM Events
WHERE (EventID IN (SELECT Code
FROM EventsType
WHERE Name = '_$Data$_.Post'
AND InfobaseCode = 1))
AND DateTime >= '20130401'
AND DateTime <= '20130415'
AND InfobaseCode = 1
GROUP BY TransactionMark) AS T
WHERE (Count > 1))
AND NOT TransactionMark IN (SELECT TransactionMark
FROM Events
WHERE TransactionStatus = 'R'
AND DateTime >= '20130401'
AND DateTime <= '20130415'
AND Events.InfobaseCode = 1)
ORDER BY DateTime desc
Выполняться он будет достаточно долго, поэтому лучше заблаговременно создать для него 2 индекса, которые предлагает MS SQL Server:
CREATE NONCLUSTERED INDEX [Missing Index 2] ON [dbo].[Events]
(
[InfobaseCode] ASC,
[EventID] ASC,
[DateTime] ASC
)
INCLUDE ( [TransactionMark],
[DataStructure])
GO
CREATE NONCLUSTERED INDEX [Missing Index 1] ON [dbo].[Events]
(
[InfobaseCode] ASC,
[TransactionStatus] ASC,
[DateTime] ASC
)
INCLUDE ( [TransactionMark])
Для удобства во вложении небольшая обработка, которая автоматизирует формирование и выполнение запроса:
Порядок работы:
1) Указать строку соединения: например, Driver={SQL Server};Server=SRV1007;Database=Eventlog;
2) Нажать "Обновить список ИБ" и выбрать из списку нужную информационую базу.
3) Указать период и нажать "Получить таблицу длительности проведения документов".


P.S. - Для преобразования строкового идентификатора в ссылку использован кусок кода из этой разработки - Анализ и редактирование файлов журнала регистрации 1С 8.1/8.2 - ELF/LOG/LGF/LGP (Антон Ширяев)
Вступайте в нашу телеграмм-группу Инфостарт