Статьи‎ > ‎

Трассировка


Начиная с версии 2.52 данная форма исключена из Ei, используйте новый объект ProFiler

Немного истории

Трассировка до версии 1.09, представляла собой механизм основанный на возможностях MSSQL, на тот момент это была единственна возможность посмотреть на события происходящие в СУБД. У данного подхода разумеется были свои - и +.
 - +
  • Нельзя получить запросы на языке 1С;
  • Непонятно откуда вообще у этого запроса "ноги растут", какие инструкции или действия его сгенерировали.
  • Невозможно было определить пользователя, в сеансе которого произошел данный запрос.
  • Только для MSSQL
  • Скорость и надежность формирования трассировки;
таким образом трассировка на основе СУБД MSSQL идеально подходила только для преобразования запроса на языке 1С к инструкции на языке MSSQL. Из результатов трассировки встроенного языка (сотен трехэтажных запросов), можно было извлечь очень мало полезной информации.
Все остальные СУБД как говорится "пролетали", хотя и они обладали своими возможностями трассировки, но очень они уж были не удобны. по сравнению с возможностями MSSQL.

Что теперь?


Однако разработчики 1С, не стоят на месте. И  мы вместе с ними,  маленькими шажками движемся к платформе от которой разработчик или внедренец, сможет получить  избыточную информацию. В версии 8.1.11 платформы появился технологический журнал, о том что это за "зверь" можно почитать:
в двух словах, трассировка на уровне платформы 1Cv8. По реализации механизма, чем то напоминает трассировку DB2.

Начиная с версии 1.09 Ei использует трассировку исключительно, на основе технологического журнала. Только такие кардинальные перемены в Ei, позволили превратить минусы предыдущей таблицы в + существующего решения.
Итак:
  1. Выводятся запросы на языке SQL и SDBL;
  2. Запрос на языке SDBL возможно преобразовать в запрос на языке 1С;
  3. Выводится контекст встроенного языка сформировавшего обращение к СУБД;
  4. Выводится номер соединения 1С;
  5. Как и раньше возможна трассировка запроса и встроенного языка (проведения документа и пр.)

Использование

Настройки

Как понятно уже из контекста будет работать только на серверной версии, в любой СУБД.  Если вы ознакомились с документацией то понимаете, что все настройки технологического журнала хранятся в определенном xml файле, который должен находится в паке conf  платформы. Вот для того чтобы знать куда положить этот файл настройки и откуда прочитать потом события записанные файлом, необходимо в таблице указать папку с исполняемыми файлами серверов.
Данную папку необходимо сделать общей или использовать административные шары (должны быть как минимум локальным администратором).
  • \\serv\C$\Program Files\1cv81\bin\
На данную папку(и все вложенные) должны быть установлены права на чтение и запись.

Конфигурационный файл logcfg.xml копируемый на сервер располагается в том же каталоге ге находится обработка Ei.

Содержание файла по умолчанию

<ns:config xmlns:ns="http://v8.1c.ru/v8/tech-log">
    <ns:log history="1" location="C:\Program Files\1cv81\bin\Ei_logs\">
        <ns:event>
            <ns:eq property="Name" value="SDBL"/>
            <ns:eq property="t:connectID" value = "100"/>
            <ns:eq property="p:processName" value = "db"/>
        </ns:event>
        <ns:event>
            <ns:eq property="Name" value = "DBMSSQL"/>
            <ns:eq property="t:connectID" value = "100"/>
            <ns:eq property="p:processName" value = "db"/>
        </ns:event>
        <ns:property name="Context"/>
        <ns:property name="SDBL"/>
        <ns:property name="Sql"/>
        <ns:property name="Rows"/>
        <ns:property name="RowsAffected"/>
        <ns:property name="Func"/>
        <ns:property name="t:connectID"/>
    </ns:log>
</ns:config>
Параметры выделенные жирным будут заменены текущими перед запуском трассировки, после чего файл будет скопирован в каталоги серверов.
  • t:connectID - номер соединения 1С события который необходимо фиксировать. Если вы хотите фиксировать события всех соединений просто закоментируйте или удалите эту строку в конфигурационном файле logcfg.xml (в каталоге обработки)
  • p:processName - имя базы данных. Рекомендуется использовать поскольку при логировании событий других БД (не текущей) может быть невозможно:
    • преобразование запросов SDBL в запросы SQL;
    • открытие модулей конфигурации; 
  • DBMSSQL - событие запроса на MSSQL сервере на других СУБД другие обозначений

Запуск

Трассировка запускается  из конструктора. Просто нажимаем Выполнить-Трассировать, эти действия повлекут за собой:
  1. Запуск технологического журнала;
  2. Выполнение запроса или выстроенного языка;
  3. Остановка журнала регистрации и получение событий;
  4. Вывод результатов запроса или встроенного языка
Конечно по сравнению с  трассировкой MSSQL трассировка платформы очень неудобна. Нет никаких программных средств для того что бы инициировать запуск трассировки, сервер с периодичность 60 сек. перечитывает свой каталог если конфигурационный файл есть, тогда ведется запись трассировки, если нет тогда трассировка останавливается (если велась). Поэтому придется немного подождать.

 Результатом трассировки  будет следующая форма. Данная форма содержит 3 элемента управления:
  • Табличная часть, в строках которой собраны все события зафиксированные трассировкой. Колонки:
        • Дата - Момент фиксирования события;
        • Продолжительность - сек. Продолжительность события. Установлен отбор продолжительность >0.
        • SDBL запрос;
        • SQL  запрос;
        • Получено строк - количество записей полученных запросом;
        • Изменено записей - количество измененных записей;
        • Номер соединения - номер соединения 1С.
    • Панель запросов;
    • Дерево контекста выполнения. При двойном шелчке по строке (выборе) контекста, открывается модуль конфигурации. 
Однако не так сложно получить события как извлечь из них максимальную пользу.
"Максимальной пользой" в данном контексте я считаю:
  • преобразование запросов SDBL в запросы на языке 1С;
  • извлечение параметров из языка SDBL;
Получая эти возможности вы можете например провести документ и посмотреть, те данные которые повлияли на его проведение, не погружаясь в безграничные дебри отладчика. 

Вы можете увидеть как на языке запросов интерпретируются:
  • те или иные методы прикладных объектов;
  • интерфейсные действия пользователя;

Преобразование SDBL в запросы 1С.

Сразу оговорюсь, что первое преобразование будет значительно дольше чем последующие. Поскольку нужно:
  1. Загрузить грамматику языка запросов;
  2. Получить структуру хранения;
Преобразование осуществляется по нажатию кнопки в "В конструктор". В конструктор будет добавлена строка запросов. Данная строка будет  содержать:
  • запрос или пакет (если было обращение запроса SDBL к временным таблицам) на языке 1С;
  • параметры запроса;
  • запрос на языке SQL;

Проблеммы

Как не странно, но не все конструкции языка SDBL  могут преобразованы в 1С, по опыту работы могу даже сказать что SDBL  запросы по своей грамматике похожы больше на SQL  чем на запросы 1С.

Информация к размышлению.

В SDBL запросах есть инструкция Insert. Так почему же ее нет в запросах на языке 1С;
Итак проблемы будут со следующими конструкциями:
  1. DATEPART  -  в 1С используются конструкции из встроенного языка :) Год(...), Месяц(....) и т.д.
  2. MAKEDATE - ее даже незнаю чем заменить, может только ДатаВремя(  );
  3. DATEADD - тут просто 1 и 2 параметр перепутаны;
  4. Ну и конечно же виртуальные таблицы и их параметры, в SDBL запросах все параметры расположены в инструкции ГДЕ.
Предположительно в следующих версиях все эти проблемы будут в прошлом :)

FAQ

  1. Как посмотреть события происходящие при проведении документа?

    Ответ

    В данном случае нужно использовать трассировку на встроенном языке.
    1. В параметры добавляем нужный нам документ.
    2. Во встроенном языке прописываем примерно вот такую конструкцию: Форма= Параметры.Документ.ПолучитьФорму();
      Форма.ОткрытьМодально();
    3. Нажимаем Выполнить-Трассировать. В открывающейся форме документа жмем ОК.
  2. Как увидеть все события происходящие в базе данных? 

    Ответ

    Для этих целей необходимо так же использовать трассировку встроенного языка:
    1. Для начала нужно закомментировать или удалить в конфигурационном logcfg.xml фале строки с упоминанием t:ConnectID.
    2. Во встроенном языке записать конструкцию 

      Предупреждение("Закройте для остановки");

    3. Нажимаем Выполнить-Трассировать.
    4. После того как необходимо время, в течении которого вы хотите фиксировать события пройдет, просто закройте окно предупреждения.
  3. Не запускается трассировка, что делать?

    Ответ






   
Comments