Имя: Пароль:
1C
1С v8
парсер запросов
,
0 Kurbash
 
14.02.14
08:06
собственно говоря сабж. Никто не знает есть ли такая тулза, чтобы отслеживать хотя бы текст запроса который вызывается 1с?
1 Defender aka LINN
 
14.02.14
08:07
Откуда вызывается?
2 Wobland
 
14.02.14
08:09
есть
3 ДенисЧ
 
14.02.14
08:11
техжурнал называется....
4 Kurbash
 
14.02.14
08:11
(1)в режиме предприятия например делаю любое действие, неважно, заполнить ТЧ или еще что то чтобы был виден текст запроса
(2)сажи пожалуйста где взять
5 Kurbash
 
14.02.14
08:12
техжурнал? он где находится?
6 Wobland
 
14.02.14
08:12
(4) я беру тут: C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\PROFILER.EXE
7 Kurbash
 
14.02.14
08:14
это работает только со скулем? а файловый вариант?
8 Kurbash
 
14.02.14
08:16
у меня просто этой тулзы нет, есть скульный тресер для ораклы но он не катит
9 ДенисЧ
 
14.02.14
08:18
10 Wobland
 
14.02.14
08:19
а теперь скажи, что ты с этаким делать собрался после таких вопросов

FROM
(
SELECT
_Document234_VT3386_Q_001_T_001._Fld3388RRef AS _Q_001_F_000RRef,
MAX(CASE
WHEN _Document234_VT3386_Q_001_T_001._Fld3389_TYPE = 0x08 AND _Document234_VT3386_Q_001_T_001._Fld3389_RTRef = 0x00000066 AND (_Document234_VT3386_Q_001_T_001._Fld3389_TYPE <> 0x08 OR
_Document234_VT3386_Q_001_T_001._Fld3389_RTRef <> 0x00000066 OR
_Document234_VT3386_Q_001_T_001._Fld3389_RRRef <> 0x00000000000000000000000000000000)
THEN CAST(1 AS NUMERIC(1,0))
ELSE CAST(0. AS NUMERIC(1,0))
END) AS _Q_001_F_001,
CASE
WHEN _Document234_VT3386_Q_001_T_001._Fld3389_TYPE = 0x01 AND _Document234_VT3386_Q_001_T_001._Fld3389_RTRef = 0x00000000 AND _Document234_VT3386_Q_001_T_001._Fld3389_RRRef = 0x00000000000000000000000000000000 OR
_Document234_VT3386_Q_001_T_001._Fld3389_TYPE = 0x08 AND _Document234_VT3386_Q_001_T_001._Fld3389_RTRef = 0x00000066 AND _Document234_VT3386_Q_001_T_001._Fld3389_RRRef = 0x00000000000000000000000000000000
THEN 0x08
ELSE CASE
WHEN _Document234_VT3386_Q_001_T_001._Fld3389_TYPE = 0x01 OR
_Document234_VT3386_Q_001_T_001._Fld3389_TYPE = 0x08 AND _Document234_VT3386_Q_001_T_001._Fld3389_RTRef IS NOT NULL AND _Document234_VT3386_Q_001_T_001._Fld3389_RRRef IS NOT NULL
THEN _Document234_VT3386_Q_001_T_001._Fld3389_TYPE
ELSE NULL
END
END AS _Q_001_F_002_TYPE,
11 Wobland
 
14.02.14
08:21
кстати, коллеги! не знаете, что это за пердимонокль?
CASE ...
THEN CAST(CAST(0. AS NUMERIC(1,0)) AS NUMERIC(35,3))
12 Kurbash
 
14.02.14
08:23
(10)- может я не так вопрос задал-такой результат и я получить смогу, мне интересно знать запрос на языке именно 1С, чтобы его текст можно было в консоль запросов вставить
13 ASU_Diamond
 
14.02.14
08:25
(12) отладчик не то?
14 Defender aka LINN
 
14.02.14
08:27
(12) Ну, это надо себя как-то заставить...
15 Kurbash
 
14.02.14
08:27
(13) долго
16 Defender aka LINN
 
14.02.14
08:27
(15) Ну... Иди в гонщики тогда, там быстро.
17 Wobland
 
14.02.14
08:33
подлежит допиливанию

Процедура ДействияФормыПеревести(Кнопка)    
    Попытка
        RegExp=Новый COMОбъект("VBScript.RegExp");
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    RegExp.IgnoreCase=True;
    RegExp.Global=True;
    RegExp.Multiline=True;
    
    RegExp.Pattern="_\S*";
    
    
    RegExp.Pattern="\w\d\d\d\w\w rus";
    Message(RegExp.Test("z123zЯ rus"));
    Return;
    
    
    
    ТекстЗапроса=ЭлементыФормы.ИсходныйТекстЗапроса.ПолучитьТекст();
    Matches=RegExp.Execute(ТекстЗапроса);
    For i=0 To Matches.Count()-1 do
        Match=Matches.Item(i);
        поз=Найти(Match.Value, ".");
        ИмяТаблицы=?(поз>0, Лев(Match.Value, поз-1), Match.Value);
        стрТаблица=ТЗ.Найти(ИмяТаблицы, "ИмяТаблицыХранения");
        Если стрТаблица<>Неопределено Тогда
            ТекстЗапроса=СтрЗаменить(ТекстЗапроса, ИмяТаблицы, стрТаблица.ИмяТаблицы);
            Если поз>0 Тогда
                ИмяПоля=Сред(Match.Value, поз+1);
                стрПоле=стрТаблица.Поля.Найти(ИмяПоля, "ИмяПоляХранения");
                Если стрПоле<>Неопределено Тогда
                    ТекстЗапроса=СтрЗаменить(ТекстЗапроса, ИмяПоля, стрПоле.ИмяПоля);
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    EndDo;
    
    ЭлементыФормы.ТекстЗапроса.УстановитьТекст(ТекстЗапроса);
КонецПроцедуры

Процедура ПриОткрытии()
    ТЗ=ПолучитьСтруктуруХраненияБазыДанных(, Истина);
КонецПроцедуры
18 Kurbash
 
14.02.14
08:36
ЭлементыФормы.ТекстЗапроса-текстовое поле я так понял?
19 Wobland
 
14.02.14
08:38
(18) ууг
20 Kurbash
 
14.02.14
08:40
спс, буду пилить
21 Wobland
 
14.02.14
08:43
расскажи потом, как ты будешь читать sqlный запрос, в котором имена таблиц и полей переведены на русский
22 ASU_Diamond
 
14.02.14
08:48
(21) а ты не читал (12)?
ему не SQL нужен
23 Wobland
 
14.02.14
08:49
(22) читал, не понял. а ты читал (20)? №)
24 ASU_Diamond
 
14.02.14
08:52
(23) ага, пятнично тут
25 TormozIT
 
гуру
14.02.14
08:56
Запрос 1С ничем пока не перехватывается штатно. Есть только одна дорогая коммерческая разработка PerfExpert, которая перехватывает работу виртуальной машины и ловит их.

В продукте "Инструменты разработчика" из анализа техножурнала можно SDBL запрос восстанавливать в запрос 1С. Как это выглядит можно посмотреть в конце этого ролика http://www.youtube.com/watch?v=0YrEHuMmd3g. Таким образом можно ловить SDBL запросы и большинство из них, если они типа SELECT, то можно восстановить в обычный запрос, но с потерей исходных псевдонимов конечно.
26 Wobland
 
14.02.14
08:58
(25) ТормозИТ, ты лучший!
27 Wobland
 
14.02.14
08:58
так не хватало этой штуки недавно. так страдал, так страдал ;)
28 TormozIT
 
гуру
14.02.14
09:00
Также отмечу, что производитель платформы в курсе на счет наших желаний ловить в техножурнале тексты и параметры запросов 1С, но планов по реализации этой фичи естественно не озвучивал.
29 mistеr
 
14.02.14
09:42
(28) Если хотят в облаках всерьез развернуться - придется реализовать. Иначе как облачному админу находить, кто "все мясо съел"?
30 Ferz
 
14.02.14
09:50
(28)1C запрос преобразовывается в SDBL на клиенте, не представляю как они это собираются сделать.
(27)преобразование в SDBL -> 1C  впервые было реализовано аж в начале 2009 года
31 Ferz
 
14.02.14
09:52