Парсинг технологического журнала 1С средствами SQL CLR

29.11.11

База данных - Технологический журнал

В статье рассказывается о том как реализовать парсинг (разбор) файлов технологического журнала c помощью SQL CLR, а также настроить хранение информации из него в базе данных. В статье приведен полный листинг функции, а также примеры использования.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Парсинг файлов технологического журнала 1С с помощью SQL CLR
.docx 70,69Kb
124 2 500 руб. Купить
Скомпилированная сборка
.dll 7,50Kb
64 2 500 руб. Купить
Листинг ParseLog.cs
.cs 11,84Kb
78 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Зачем нужен парсер файлов технологического журнала?

     Читать данные в текстовом виде не слишком удобно, особенно если нам нужно найти какое-либо определенное событие.  Например, текст SQL запроса среди тысяч записей в  десятках папок с идентификаторами рабочих процессов.

Кроме того иногда бывает необходимо автоматизировать сбор информации из логов ТЖ на периодической основе и проанализировать информацию из них за большой период времени.

В приложенных файлах приведен листинг функции, которая отбирает события DBMSSQL из логов ТЖ, остальные события пропускаются. Вы можете переопределить это в тексте модуля, учитывая что число колонок для различных событий может отличаться.

Функция написана на C# и может использовать все расширения классов .NET.

Как это работает ?

Вы открываете SQL Server Management Studio (SSMS), выбираете New Query и набираете следующий текст:

select * from  ParseLogFiles({сетевой каталог с файлами ТЖ})

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

Естественно что к результатам можно применять любой функционал T-SQL, например WHERE, ORDER BY или JOIN, например:

select distinct SqlText,CONTEXT from  ParseLogFiles({сетевой каталог с файлами ТЖ})

where BaseName= 'YourBaseName' and CONTEXT is not null

Таким образом поиск контекста исполнения любого запроса, попавшего в журнал становится делом нескольких секунд.

Кроме того, в статье подробно описано как сохранять результаты выполнения этой функции на периодической основе, чтобы в дальнейшем сделать консолидированный анализ за период. Например отобрав самые "проблемные" участки кода за неделю, как первые кандидаты на оптимизацию.

Полностью статья доступна в приложенном файле.  В дополнительных файлах можно скачать текст функции или уже откомпилированную сборку этой функции.

P. S. Можно пойти еще дальше и соединить результаты, возвращаемые функцией, с результатами некоторых DMV и получить максимально полную информацию в одной таблице. Например, на скриншоте приведено суммарное время выполнения запросов в SQL с контекстом исполнения в 1С (описание того как получить такой результат уже к сожалению выходит за рамки данной статьи).

 



Вступайте в нашу телеграмм-группу Инфостарт

См. также

HighLoad оптимизация Инструментарий разработчика Технологический журнал Разработчик 1С 8.3 Россия Абонемент ($m)

Скрипт tj_baseline.py собрал акт замеров из технологического журнала: 7 повторов до и 7 после замены запросов в цикле на «Нано-УТ 2.0». Справка на 150 строк ускорилась с 817,0 до 145,0 мс, проверка доступности с 301,3 до 2,2 мс. При 120 и 300 вызовах в день и ставке 800 руб. выгода 9353 руб. в год по журналу, 4939 руб. по секундомеру без журнала. В архивах скрипт, тесты, журналы опыта, образец приложения к договору и калькулятор.

7 стартмани

27.10.2026    299    Ninel_S    0    

1

HighLoad оптимизация Администрирование СУБД Технологический журнал Системный администратор Разработчик 1С 8.3 Абонемент ($m)

Проверила на стенде совет «сортируйте строки перед записью»: 1С 8.3.27 на PostgreSQL, учебная «Нано-УТ», 20 потоков и по 2000 документов на каждый способ записи движений. Взаимоблокировки дают построчный захват (99 % ошибок) и повышение разделяемой блокировки до исключительной (95 %, сортировка не помогает); одна блокировка на весь набор работает без сортировки. Плюс механика PostgreSQL, дерево ожиданий через pg_blocking_pids, TDEADLOCK в журнале и единицы порога TLOCK в logcfg.xml. В архиве стенд, выгрузка конфигурации и журналы прогона.

5 стартмани

22.10.2026    429    Ninel_S    10    

1

Журнал регистрации Инструменты администратора БД Технологический журнал Мониторинг Системный администратор Разработчик 1С 8.3 1С 8.5 1С:Управление торговлей 11 Абонемент ($m)

Расширение для любой конфигурации на БСП: замеры, ошибки, задания, обмены, блокировки, диски, сеансы и техжурнал в одном окне, с уведомлениями в Telegram и на почту.

3 стартмани

19.10.2026    499    6    windsurf    0    

3

HighLoad оптимизация Технологический журнал Сервера Запросы Системный администратор Разработчик 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 Бесплатно (free)

Составной отчет формировался 15 минут. Вместо перебора разделов одна команда rac показала, что сеанс занят запросом к СУБД, а временный техжурнал с порогом 20 секунд за один прогон назвал виновника: один SQL на 240 секунд и точную строку модуля. В статье четыре разные картины «висит» и как их различить: идет запрос в СУБД, клиент ждет невидимое модальное окно, зомби-вызов после закрытого клиента, зависшее фоновое задание. Пример logcfg.xml, разбор события DBMSSQL с полем Context, замер пакета запросов по временным таблицам, регламентное задание, которое «выполнено», а данные стоят, и шпаргалка по диагностике.

16.10.2026    1109    Konstmax13    6    

2

Технологический журнал Сервера EDT Обновление 1С Системный администратор Разработчик 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 Бесплатно (free)

Конфигуратор и агент EDT тихо вылетают на 0 % «Обработки структуры базы данных», EDT пишет «Потеряно соединение с агентом конфигуратора», а модель проекта при этом чистая. Разбор двух аварий на большой серверной базе БП КОРП: какие факты снимать (журнал Windows, техжурнал нужной версии, хвост лога процесса), почему инкрементальная выгрузка EDT ломается после сбоев, как довести обновление пакетно через /UpdateDBCfg -Server, как опознать свои rphost среди нескольких кластеров и снять агент EDT, который сам поднимается и держит базу. Протокол одного дня по минутам и порядок диагностики из восьми шагов.

15.10.2026    487    Konstmax13    0    

0

HighLoad оптимизация Технологический журнал Разработчик 1С:Предприятие 8 Бесплатно (free)

В этой статье рассматривается только первый этап диагностики производительности: как получить длительный SQL-запрос из технологического журнала, связать его с прикладным кодом 1С и точно локализовать место выполнения. Причины длительности и оптимизация самого запроса разбираются уже после локализации.

21.09.2026    1387    markbraer    1    

5

Технологический журнал Системный администратор Разработчик 1С 8.3 Бесплатно (free)

База ERP, 400 пользователей, сервер загружен, 1С подвисает, доступа к SQL Server нет. Оптимизировать можно бесконечно, вопрос в том, с чего начать. ЦУП это платная лицензия и отдельная стройка, а технологический журнал встроен в платформу, включается одним файлом и на боевой базе в рабочее время не вызвал ни одной жалобы от пользователей. Разбираю, что он собой представляет, где лежит настройка, как читается строка события и что означает каждое из одиннадцати событий, которые я видел в журналах боевой ERP. Плюс рабочий logcfg.xml, три ловушки, на которых отчёт получается красивым и неверным, и шесть находок за один прогон.

07.09.2026    2455    nedomolkov.ivan    0    

3

Технологический журнал Системный администратор Разработчик 1С 8.3 Абонемент ($m)

Обработка включает технологический журнал, читает его и отвечает на 13 вопросов человеческим языком: кто блокирует базу, какой запрос к СУБД самый тяжёлый, какой код суммарно грузит СУБД больше всех, какой вызов съедает память. Настройка идёт галочками с человеческими формулировками, logcfg.xml обработка пишет сама, права администратора для этого обычно не нужны. Отдельная кнопка сводит журнал в один markdown-файл: на боевой ERP 288 МБ и 2 055 229 строк ужались в 17 459 знаков, файл кладётся в чат с нейросетью и разбирается за минуту. Имена баз и пользователей в нём заменены псевдонимами. Без внешних компонент, к СУБД обращений нет.

10 стартмани

07.09.2026    1492    6    nedomolkov.ivan    0    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
0. squad 182 29.11.11 16:00 Сейчас в теме
В статье рассказывается о том как реализовать парсинг (разбор) файлов технологического журнала c помощью SQL CLR, а также настроить хранение информации из него в базе данных.
В статье приведен полный листинг функции, а также примеры использования.

Перейти к публикации

1. cool.vlad4 2 29.11.11 16:00 Сейчас в теме
укажи, как включать sql clr
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO
если это есть в статье - извиняй, не увидел
ЗЫ sql clr кстати по сравнению с обычным t-sql по производительности превосходит в случаях разбора строк и текстов
ЗЫ да и заслуженный +
ЗЫЗЫ Как-то некрасивенько
 while (1 == 1) 
           {
           str = sr.ReadLine();
           sContext = sContext + " " + str;
           if (str.Contains("'")) break;
       }

но ничего еще раз спс,
mant; cleaner_it; squad; +3 – Ответить
2. squad 182 29.11.11 17:15 Сейчас в теме
(1) cool.vlad4, Да, в статье про то как "включается" CLR написано. Вот кстати небольшое дополнение: если Reconfigure будет выдавать ошибку можно попробовать Reconfigure With Override.

Приведенный фрагмент кода некрасивый - с этим согласен, но тут уж скорее вопросы к формату текстового файла 1С. Ловить так кроме этой кавычки нечего :)

Был бы лог в виде структурированного текста, например в формате XML - был бы красивый код.
3. Sunhare 4 08.12.11 17:22 Сейчас в теме
спасибо, попробую.
4. vbuots 20 15.02.12 13:16 Сейчас в теме
Если всё прошло удачно, то вне зависимости от способа которым мы погружали сборку, можно увидеть нашу новую функцию открыв SMSS на ветке Functions>Table-valued Functions, примерно как показано на рисунке:

У меня он создал в ветке "Programmability" - "Assemblies", с именем "parselog". Вопрос, что дальше, создавать функцию руками?(как?) или как к ней обращаться в таком случае?
5. vbuots 20 15.02.12 14:13 Сейчас в теме
(4) vbuots,
а саму функцию не создал
Invalid object name 'dbo.ParseLogFiles'.
9. squad 182 18.06.12 16:01 Сейчас в теме
(5) vbuots,
Имя вашей базы указали ?
6. opiumdx 17.02.12 10:46 Сейчас в теме
Спасибо, очень емкая и интересная статья, я понял что шел неверной дорогой.))
7. ozaycev 146 18.06.12 15:51 Сейчас в теме
У меня он создал в ветке "Programmability" - "Assemblies", с именем "parselog". Вопрос, что дальше, создавать функцию руками?(как?) или как к ней обращаться в таком случае?

У меня та же ситуация. Где код SQL функции???
8. squad 182 18.06.12 16:00 Сейчас в теме
Откройте SSMS-New Query
Вставьте ваш код, например select * from <ИмяВашейБазы>.dbo.ParseLogFiles('<ИмяКаталогаФайловТЖ>','*.*')
10. It-developer 26 19.09.12 12:59 Сейчас в теме
Добрый день!
Делаю все по статье. Создалась функция "Programmability" - "Assemblies", с именем "parselog". Пытаюсь выполнить запрос select * from <ИмяВашейБазы>.dbo.ParseLogFiles('<ИмяКаталогаФайловТЖ>','*.*'). Но у меня нет таблицы dbo.ParseLogFiles. Что делать подскажите, пожалуйста
11. squad 182 19.09.12 13:14 Сейчас в теме
Собственно таблицы ParseLogFiles и не должно быть - это функция, которая возвращает таблицу, поэтому мы можем обратиться к ней с помощью select
Функция создалась в Assemblies выбранной вами базы или в другой базе ?
12. It-developer 26 19.09.12 13:21 Сейчас в теме
Да, создалась в Assemblies в выбранной мной базе
13. squad 182 19.09.12 13:44 Сейчас в теме
В таком случае должно работать.
Ошибку какую выдает ?
14. It-developer 26 19.09.12 14:21 Сейчас в теме
Код запроса:
use test2
select * from dbo.parselog('z:\\Bases\\Project_Parse1c\\rphost_1972\\', '*.log')
Ошибка:
Msg 208, Level 16, State 1, Line 2
Invalid object name 'dbo.parselog'.
15. squad 182 19.09.12 14:31 Сейчас в теме
Попробуйте прямо указать:

select * from test2.dbo.parselog('z:\\Bases\\Project_Parse1c\\rphost_1972\\', '*.log')
16. It-developer 26 19.09.12 14:36 Сейчас в теме
(15)
Тоже ошибка
Msg 208, Level 16, State 1, Line 1
Invalid object name 'test2.dbo.parselog'.
17. squad 182 19.09.12 14:43 Сейчас в теме
В свойствах сборки (на сборке - правой кнопкой Properties),
General - Permission Set что указано ?
18. It-developer 26 19.09.12 14:47 Сейчас в теме
19. It-developer 26 20.09.12 16:16 Сейчас в теме
Не знаете что еще может быть?
20. squad 182 21.09.12 07:26 Сейчас в теме
Попробуйте создать новую пустую базу данных и погрузить сборку в неё.
Этим покрайней мере исключим возможные проблемы с нехваткой прав на существующей БД и проблемами при погружении сборки в неё.
21. It-developer 26 21.09.12 18:30 Сейчас в теме
У меня Table-value Function создалась только после создания таблицы TechJournal и
запуска такого кода:

CREATE FUNCTION [dbo].[ParseLogFiles] ( @str nvarchar(4000), @str2 nvarchar(4000) )
RETURNS table
AS return (
select * from pustaya.dbo.TechJournal
)
GO

затем я сделал select * from dbo.ParseLogFiles ('z:\Bases\Project_Parse1c\rphost_1972', '*.log') - ошибок не выдало (Уффф... - не так просто было получить, я ж со всем этим в 1-й раз работаю, но хелпы помогают хорошо).
На выходе - пустая таблица. Вопрос в связи с этим: какая должна быть структура *.log файла 1с(можно пример, который загрузится)? Или как настроить технологический журнал?
22. squad 182 24.09.12 10:49 Сейчас в теме
Я чего-то не пойму, вы описали функцию которая выбирает записи из таблицы TechJournal ?
Что кроме содержимого TechJournal может вернуть вам эта функция ?
23. zels 175 30.08.16 11:59 Сейчас в теме
Что означает фраза (сборка с VS2010)
10. Выберите Build > Deploy (yourProjectName). Этим вы погрузите ваш класс и все его функции в базу данных, которую указали в п. 3

Я собирал в соотвествии с "как создать CLR функцию без Visual Studio", там подобного пункта нет.
Может? поэтому ParseLog появился в сборках, а не в функциях и ничего не работает:

ошибка Сообщение 208, уровень 16, состояние 1, строка 1
Недопустимое имя объекта "test.dbo.parselog".

Если test / dbo убрать, будет то же самое
Прикрепленные файлы:
Для отправки сообщения требуется регистрация/авторизация