1с как узнать idrref
Когда мы встречаемся с битой ссылкой в Предприятии 8, иногда возникает необхоимость создать объект с её идентификатором. Однако строка идентификатора и текст битой ссылки в предприятии различаются, но легко восстановить одно зная другое.
Определимся с обозначениями:
UUID - это подстрока, которую мы видим в режиме предприятия в представлении битой ссылки
Объект не найден (N: UUID );
где N - номер таблицы таблицы в базе данных, например, _ReferenceN - это таблица справочника в базе данных.
Для документа такая таблица будет иметь имя _Document N , разглядеть имена этих таблиц можно, если имеется клиент-серверный вариант информационной базы 1С:Предприятия (см. рис.).
GUID - это строка, которую мы используем для создания объекта "УникальныйИдентификатор":
Вот две простые функции, которые легко составить по предложенному рисунку:
Функция UUIDToGUID ( UUID ) Экспорт
Возврат Прав ( UUID , 8 ) + "-" + Сред ( UUID , 21 , 4 ) + "-" + Сред ( UUID , 17 , 4 ) + "-" + Лев ( UUID , 4 ) + "-" + Сред ( UUID , 5 , 12 );
Функция GUIDToUUID ( GUID ) Экспорт
Возврат Сред ( GUID , 20 , 4 ) + Прав ( GUID , 12 ) + Сред ( GUID , 15 , 4 ) + Сред ( GUID , 10 , 4 ) + Лев ( GUID , 8 );
Исходя из смысла числа N в строке битой ссылки Объект не найден (N:UUID), это число можно считать идентификатором типа.
Для определения типа можно заполнить заранее, например, соответствие (Число N - ТипОбъекта). А N определять из представления битой ссылки.
Вот функции модуля обработки для определения типа (всего одна экспортная функция для рашифровки битой ссылки):
// Представление битой ссылки: Объект не найден (TypeID:UUID)
// TypeID - идентификатор типа
// UUID - глобальный идентификатор
Функция СтруктураПредставленияБитойСсылки ( ПредставлениеБитойСсылки )
// Ищем позицию скбоки
Поз1 = Найти ( ПредставлениеБитойСсылки , "(" );
Поз2 = Найти ( ПредставлениеБитойСсылки , ":" );
Если Поз1 > 0 И Поз2 > 0 И Поз2 > Поз1 Тогда
TypeID = Сред ( ПредставлениеБитойСсылки , Поз1 + 1 , Поз2 - Поз1 - 1 );
UUID = Сред ( ПредставлениеБитойСсылки , Поз2 + 1 , 32 );
Иначе
TypeID = "" ;
UUID = ПредставлениеБитойСсылки ;
КонецЕсли;
Возврат Новый Структура ( "TypeID, UUID" , TypeID , UUID );
КонецФункции
// Возвращает соответствие: Идентификатор типа (строка) - Строка определения типа
Функция СоответствиеИдентификаторовТипов ()
Соответствие = Новый Соответствие ;
МассивКоллекцийМенеджеровСсылочныхОбъектов = Новый Массив ;
МассивКоллекцийМенеджеровСсылочныхОбъектов . Добавить ( Справочники );
МассивКоллекцийМенеджеровСсылочныхОбъектов . Добавить ( Документы );
МассивКоллекцийМенеджеровСсылочныхОбъектов . Добавить ( ПланыВидовХарактеристик );
МассивКоллекцийМенеджеровСсылочныхОбъектов . Добавить ( ПланыСчетов );
МассивКоллекцийМенеджеровСсылочныхОбъектов . Добавить ( БизнесПроцессы );
МассивКоллекцийМенеджеровСсылочныхОбъектов . Добавить ( Задачи );
МассивКоллекцийМенеджеровСсылочныхОбъектов . Добавить ( ПланыОбмена );
Для Каждого КоллекцияМенеджеровСсылочныхОбъектов Из МассивКоллекцийМенеджеровСсылочныхОбъектов Цикл
Для Каждого МенеджерСсылоногоОбъекта Из КоллекцияМенеджеровСсылочныхОбъектов Цикл
БитаяСсылка = МенеджерСсылоногоОбъекта . ПолучитьСсылку (Новый УникальныйИдентификатор );
Соответствие . Вставить ( СтруктураПредставленияБитойСсылки ( Строка ( БитаяСсылка )). TypeID , СтрЗаменить ( БитаяСсылка . Метаданные (). ПолноеИмя (), "." , "Ссылка." ));
КонецЦикла;
КонецЦикла;
КонецФункции
// Возвращает структуру: "TypeID, UUID, Тип, GUID"
Функция РасшифровкаПредставленияБитойСсылки ( ПредставлениеБитойСсылки ) Экспорт
Если мСоответствиеИдентификаторовТипов = Неопределено Тогда
мСоответствиеИдентификаторовТипов = СоответствиеИдентификаторовТипов ();
КонецЕсли;
СтруктураПредставления = СтруктураПредставленияБитойСсылки ( ПредставлениеБитойСсылки );
СтрокаТипа = мСоответствиеИдентификаторовТипов [ СтруктураПредставления . TypeID ];
Если СтрокаТипа = Неопределено Тогда
СтрокаТипа = "Неопределено" ;
КонецЕсли;
Возврат Новый Структура ( "TypeID, UUID, Тип, GUID" , СтруктураПредставления . TypeID , СтруктураПредставления . UUID , СтрокаТипа , UUIDToGUID ( СтруктураПредставления . UUID ));
Есть 2 мнения:
1) Можно переставить местами блоки GUIDа, например, из XMLСтрока(<Какая то ссылка в БД>)
2) Метод из (1) может иногда косячить и пользоваться им нельзя.
Верить (2) или нет - решать Вам.
(6) cool.vlad4, На сервере отдельно нельзя ничего делать. А засунуть этот код в модуль слишком громоздко, к тому же он создает новое, а у меня задача получить существующее значение. (8) чего новое? использовать это в запросе ты не можешь, что ли? или перевести на 1С код? (3) romansun, ЗначениеВСтрокуВнутр возвращает строку, а _IDRRef является бинарным. я так понимаю это [_Fld6037RRef] - ссылка и соответственно тип binary? Я вот например, не знаю как и строки в ms sql сделать так просто binary, хотя способы наверняка имеются (google в помощь), но я делал иначе, я на стороне sql делал уникальныйидентификатор(4) cool.vlad4,
select @unidentifier = CONVERT(char(36),CAST(@id as uniqueidentifier))
вот на этом вызове можно было уже закончить. В переменной @unidentifier уже находится GUID, нужный 1Су. (24) logos, Считаете, что Ваш метод оптимальней? ОК, только я не пойму, как ваш код пристроить к моему. Напишете? (26) info1i, Вам наверное нужно преобразование из (27).
IDПолучатель = XMLСтрока(КакаятоСсылка);
УсловиеЗапроса=" WHERE [_Fld6040]=1 AND [_FLD6036]>'"+ДатаПередачи+"'"+" AND [_Fld6037RRef]=cast(cast('"+IDПолучатель+"'as uniqueidentifier) as binary(16))";
Где то так. (24) я чего-то не понял, проверил и нифига не работает. может мы про разные вещи говорим. на выходе в (4) получается УникальныйИдентификатор объекта, например Справочники.Справочник.НайтиПоКоду("Код").УникальныйИдентификатор() (31) cool.vlad4, (24):
declare @temp binary(16)
set @temp = 0x1234567890abcdef1234567890abcdef
select [sys].[fn_varbintohexstr](@temp)
select convert(char(36),cast(@temp as uniqueidentifier))
возвращает:
78563412-AB90-EFCD-1234-567890ABCDEF
Что в принципе и есть GUID.
(32) cool.vlad4, Конечно поняли, просто предложили более лаконичный вариант. (33) logos,
Проверил на своей УПП, полученные таким образом гуиды объектов не совпадают с теми что выдает для этих же объектов 1С.
например, если в представлении таблицы базы 1С для поля ссылка ввести выражение
convert(char(36),cast(_IDRRef as uniqueidentifier)) - В 1С будет один гуид, а в данной ссылке другой.
Как бы в запросе sql получить гуиды которые отображает для объектов сама 1С?! если у тебя ms sql, конечно и версии повыше, чем 2005 (на ней по моему не сработает) Конверт с кастом не катят, они пытаются преобразовать бинарные данные в текст по кодам символов. Тут нужно предварительно употребить более сильное колдунство:
[sys].[fn_varbintohexstr] и [sys].[fn_varbintohexsubstring] конвертируют варчар и бинари туда и обратно. После получения строки можно уже кромсать сабстрингами. А громоздкого ничего нет, создается функция, которая обрабатывает идшник, переданный в виде строки, конвертирует его в бинари. И эта функция, в свою очередь, вызывается в запросе. (10) на 2012 серваке вроде как катит, я проверил. на 2005 , по всей видимости да, не катит, как я и сказал. в любом случае можно использовать (хоть это и нагрузка) из (4) . (11) cool.vlad4, тестировал свои функции на 2008. Работает. Или Вы про свой код? (12) cool.vlad4, Нет, вру. Конвертация через uniqueidentifier корректно отрабатывает. Приношу свои извинения.
чего-то я не понял.. а зачем именно бинари?
а если новая - то NewId()
или я опять не понял? :)
(21) info1i,(19) logos, Хотя нет, все-таки можно. Здесь http://habrahabr.ru/post/164913/ посмотрел как. Осталось получить "бла-бла""Полученный ID имеет примерно такой вид: 0xa8ed00221591466911e17da9fd549878
В запросе мы его можем сравнивать как строку
where master.dbo.fn_varbintohexstr(_fld1234RRef) = '0xa8ed00221591466911e17da9fd549878'
Но в таком случае запрос будет отрабатывать дольше. Так как на преобразование в строку тоже нужно время"
насчет падения производительности - не скажу. мне было не настолько критично
(23) info1i,И обратное преобразование:
select cast(cast(@guid as uniqueidentifier) as binary(16))
Где @guid - строка ссылки, полученная через XMLСтрока(Ссылка) (18) romansun, Вот это уже более подходящее. Только откуда взять "732547238 бла-бла-ба"+ "'" ? Как это "бла-бла" получить?
поглядите мои вирши
Первый способ:IDПолучатель="0x"+ЗначениеВСтрокуВнутр(СсылкаПолучатель);
Не прошло. Ошибка синтаксиса.
romansun, поправьте мой синтаксис, если не так.
(29)
не, ну не так в лоб же )))
ЗначениеВСтрокуВнутр дает вид
из которого нужно выдрать выделенное - это и есть ссылка, собственно. к нему и присобачиваем "0x", а 9659 - это номер референса, кстати (ну это так, для информации)
(30) ну, а я собственно предлагал брать УникальныйИдентификатор и приводить его к виду ab2b001b78e134e011dfec0814418025 и наоборот. видимо меня не поняли.Итак, компактный код, и работает мгновенно. Теперь остается в последнем цикле полученные значения преобразовать в ссылки. Написал примерно так, но метода ПолучитьЗначение(Номер) не существует. Какие здесь варианты? (34) кастуй idref в строку, дальше преобразуй либо как тебе говорили к виду Значения в строку внутр (что бы сделать ЗначениеИзСтрокиВнутр), либо к Уникальному идентификатору. Если бы использовал ф-цию из (4) , тебе вообще ни пришлось ничего делать. Получил бы УникальныйИдентификатор и все, вот почему я её использую.
если тип знаете (т.е. какой справочник конкретно) то преобразовывайте через ЗначениеИзСтрокиВнутр, предварительно получив "шаблон" строки-аргумента для, скажем, пустой ссылки справочника командой ЗначениеВСтрокуВнутр(ПустаяСсылка)
а затем уже, подменяя 0x00000. получаете
но, если ссылка произвольная, то можно перебором по метаданным
я вот здесь писал обработку такую - ищет любую ссылку
также можно поиграться с УникальныйИдентификатор(), ПолучитьСсылку (или как там. ) и всё в таком духе - но мне такой путь импонирует меньше, т.к. чуть тормознее работает
Инструмент предназначен для получения расширенной информации о ссылочных значениях объектов информационной базы. Говоря простым языком - обработка позволяет получить уникальный идентификатор ссылки и еще расширенный набор информации. Вместе с такими инструментами как "Транслятор запросов 1С" и "Просмотр и анализ структуры базы данных (отчет на СКД)" (новая версия от 07.01.2020) позволяет выполнять анализ работы платформы 1С в части работы с базой данных, а также расследовать различные инциденты в ее работе.
Основными возможностями инструмента являются:
- Получение информации о ссылке на объект информационной базы:
- Уникальный идентификатор
- Навигационную ссылку
- Уникальный идентификатор в терминах SQL Server
- Уникальный идентификатор в терминах PostgreSQL
- Представление "битой" ссылки
- Уникальный идентификатор типа
- Числовой идентификатор типа ссылки
- Полное имя объекта метаданных
- Идентификатор типа ссылки в терминах SQL Server и PostgreSQL
- Дата создания ссылки из уникального идентификатора
- Поиск ссылки и уникальному идентификатору (в т.ч. в терминах SQL Server и PostgreSQL, навигационной ссылке и представлению "битой" ссылки.
- Поиск имя метаданных и числового идентификатора типа по уникальному идентификатору типа.
Требования к работе:
- Платформа 1С версии 8.3.5 и выше.
- Режим работы не имеет значения (клиент-серверный или файловая база. СУБД не имеет значения).
- Только управляемые формы. Для использования в обычном приложении используйте известные обходные пути.
Ниже в примерах мы разберем некоторые кейсы по использованию инструмента.
Принцип работы
Все реализовано штатными возможностями платформы 1С без каких-либо подключений к базе данных напрямую или внешних компонент.
Примеры использования
Рассмотрим несколько случаев применения обработки.
Получение уникального идентификатора
В некоторых задачах необходимо получить уникальный идентификатор ссылки на объект. Это может пригодиться при разборе ситуаций с обменом данных, поиска ссылки по GUID из кода встроенного языка и др. С помощью данного инструмента это делается проще простого.
GUID у Вас в кармане! причем есть также идентификаторы в терминах СУБД, которые можно использовать в прямых SQL-запросах к базе. В нашем примере запросы выглядели бы так.
Вот так можно использовать фильтр по ссылке для прямого запроса к базе SQL Server:
И практически также для PostgreSQL:
Все просто, не так ли?
Еще одной вишенкой на торт будет возможность получения уникального идентификатора для значений перечисления. Да, эти значения не имеют метод "УникальныйИдентификатор()", но есть другие пути его получения. А после можно его хоть в прямых SQL-запросах к базе начать использовать. Вот так выглядит получение GUID'а для значений перечисления.
Все это мне ни раз пригождалось, когда нужно было:
- Из ошибок от SQL Server найти значения из запроса по GUID'ам
- Поиск существующих элементов в базе для идентификатора. Например, для поиска причин ошибок с дублирующейся ссылкой.
- Изучение работы платформы 1С в некоторых ситуациях.
Изначально именно для этой функции эта обработка создавалась.
Поиск ссылок по GUID
Обратная ситуация - у Вас есть уникальный идентификатор, но при этом неизвестно какая ссылка за ним скрывается. С помощью обработки Вы можете найти все ссылки, которые имеют искомый GUID. Причем поиск можно выполнять как по стандартному GUID'у платформы 1С, так и по значениям идентификатора на стороне СУБД.
Пару кликов и все готово! Если будет найдено несколько ссылок, то просмотр переключится в режим списка.
Здесь Вы можете работать с полями также, как и в предыдущем случае.
Зачем идентификаторы типа
Инструмент содержит дополнительную информацию о типе ссылки: уникальный идентификатор типа, числовой идентификатор и имя метаданных. С именем метаданных все ясно, а по поводу остального нужно пояснить.
Числовой идентификатор - Вы могли его видеть в представлении бито ссылки. Например, вот здесь:
<Объект не найден> ( 230 :51ed67a3-7220-11df-b336-0011955cba6b)
число 230 - это как-раз и есть числовой идентификатор типа. Но что это и зачем он нужен? Если мы посмотрим на структуру хранения в базе данных (например. с помощью отчета "Просмотр и анализ структуры базы данных (отчет на СКД)"), то увидим, что справочник "Организации" имеет имя таблицы "_REFERENCE230".
Вот как-раз число в имени таблицы и является числовым идентификатором типа. Он может пригодиться в разборе нестандартных ошибок платформы или для анализа структуры базы.
Что касается уникального идентификатора типа, то он также может пригодиться для диагностики сложных ситуация и ошибок. Например, ошибок вида "Неизвестный идентификатор типа <ЗначениеИдентфикатора> и другое. Это уже совсем другая история.
В общем, информация дополнительная и может быть полезна в особых случаях.
Вместо заключения
Новый инструмент для специфических задач. Разве что получение уникального идентификатора ссылки дело обычное, но тоже используется не так часто.
А Вы сможете найти применение данной обработке? :)
23.08.20 - Добавлены доп. сведения о ссылках и небольшие улучшения
- Добавлена дата создания ссылки (спасибо за идею Евгению Люлюк)
- Добавлены идентификаторы ссылок для SQL Server и PostgreSQL (спасибо за идею Виталию Кислицину)
- Исправлены названия некоторых доп. полей (спасибо за замечание kuzyara)
- Обновлена версия обработки
24.01.20 - Добавлена первая версия инструмента.
Авторские разработки
Транслятор запросов 1С в SQL - инструмент для трансляции запросов платформы 1С в SQL, а также их диагностики.
Анализ производительности APDEX - отчет для просмотра и анализа замеров производительности в конфигурациях на базе БСП.
Путеводитель по истории релизов - отчет по истории выпуска релизов продуктов фирмы "1С" и анализа информации по обновлениям.
Просмотр и анализ структуры базы данных (отчет на СКД) - отчет для просмотра и анализа структуры базы данных с поддержкой файловых баз (ограниченный режим), а также баз на SQL Server и PostgreSQL.
Просмотр и анализ журнала регистрации (отчет на СКД) - отчет на базе системы компоновки данных (СКД) для просмотра записей журнала регистрации.
Обозреватель криптографии - отчет для просмотра доступных провайдеров и сертификатов криптографии на сервере и клиенте.
Пакетная выгрузка / загрузка внешних отчетов и обработок - пакетная выгрузка / загрузка внешних отчетов и обработок для массовый манипуляций с ними.
Командный интерпретатор для 1С - инструмент для выполнения команд CMD / PowerShell из 1С.
Другие ссылки
Специальные предложения
Хорошо
Еще можно добавить дату создания (определяемую) по UID(2) Помимо даты там можно вытащить еще MAC адрес машины на которой была сгенерирована ссылка. Из пожеланий - открытие произвольной формы динамического списка объекта определенного типа, где одной из колонок была бы дата полученная из ссылки. Плюс к этому возможность автоматического открытия формы Журнала Регистрации с переданным отбором по этой дате и ссылке.
Такой инструмент здорово облегчит проведение расследований, чтобы установить автора/создателя объекта в базе.Версионирование дело хорошее, но оно не всегда включено или настроено. И не всегда оправдано с точки зрения производительности.
В качестве еще одного вариант добавления фишки - добавить на форму обработки события и переменные для работы с подключаемым оборудованием (БСП), чтобы отлаживать работу печатных форм на которых выводятся штрих-коды. У нас бывают ситуации, когда распечатанный документ есть, а в базе документа уже нет (помечают на удаление после распечатывания и подписи у руководителя). В таком случае как раз и приходится лезть в журнал регистрации для поиска того кто пометил документ на удаление. Если добавить функцию, которая будет получать штрих-код со сканера, определять дату по ссылке и делать снова отбор по ЖР, то это бы также облегчило проведение расследований.
В первую очередь обработка будет удобна для анализа RLS, чтобы получить реально выполняемый запрос базы данных со всеми ограничениями в удобочитаемом виде.
Пример: у нас есть запрос 1С из конфигурации УПП 1.3, который медленно выполняется под некоторыми пользователями, и мы хотим понять, какой запрос по факту выполняется и по возможности ускорить его.
Видно, что к исходному запросу добавляется громоздкое условие проверяющее доступ пользователя к данной таблице. Предположим, что в организации не используется управленческий учет, тогда проверку доступа RLS можно упростить, отключив контроль по подразделению и оставив контроль по подразделению организации (Операции->Константы->Настройка параметров доступа на уровне записей). Обратите внимание, что при включенном флажке «Результат в терминах 1С», текст запроса максимально приближен к тексту запроса, корректного для выполнения в консоли запроса 1С. Что мне не удалось сделать, так это убрать из текста запроса проверки типа для составных полей, так как для этого пришлось бы использовать полноценный парсер языка запросов SQL. Чтобы запрос был полностью рабочим для консоли запросов, придется руками убрать проверку на составной тип, если такой используется в запросе. В приведенном примере нужно заменить строки
AND T7.ОбъектДоступа_RTRef = 0x000000B5
AND T7.ОбъектДоступа = T1.Подразделение на строку
AND T7.ОбъектДоступа = T1.Подразделение на строку
AND T9.ОбъектДоступа_RTRef = 0x000000B6
AND T9.ОбъектДоступа = T1.ПодразделениеОрганизации
Тогда запрос будет полностью корректным для языка запросов 1с и его можно будет выполнить в консоли.
Дополнительный способ проверки результирующего запроса в SQL
Если при выполнении трансформации снять флажок «Результат в терминах 1С», то результирующий текст запроса будет корректным для языка T-SQL и его можно выполнить в SQL Server Management Studio или в консоли запросов, которая поддерживает выполнение прямых запросов SQL (например моя простенькая консоль SQL запросов). Для нашего примера со списком сдельных нарядов результат будет следующим:
Результат трансформации (снят флажок «Результат в терминах 1С»):Теперь запрос представлен в исходном SQL виде с дополнительными комментариями к параметрам запроса с представлениями ссылок в 1с и его можно выполнить как обычный запрос на языке T-SQL.
Пример 2
Еще один способ использования обработки – в связке с технологическим журналом, без использования трассировки. Пример: в доработанной конфигурации Документооборот 1.4 под некоторыми пользователями очень медленно открывается список внутренних документов. Настраиваем тех. журнал на отлов событий DBMSSQL и смотрим запросы, которые генерировала платформа при открытии формы списка (для настройки и анализа тех. журнала удобно пользоваться инструментами разработчика, но для просмотра можно использовать и типовую обработку с ИТС ПросмотрТехнологическогоЖурнала.epf). Находим следующий запрос:
Не очень удобно разбираться с таким запросом – нет форматирования, вместо параметров стоят вопросы и т.д., поэтому прогоняем его через трансформатор(все опции включены) и получаем такой вид:
Видно, что однотипные ограничения RLS применяются 3 раза при выполнении запроса динамического списка (это можно понять по характерным конструкциям WHERE EXISTS() или по использованию области доступа «ДокументыИФайлы») и это может быть причиной медленной работы списка документов. С проверкой на доступ к таблице T1 «Справочник.ВнутренниеДокументы» сделать ничего не получится, так как это основная таблица списка, а вот оставшиеся 2 проверки под вопросом. «РегистрСведений.ОбщиеРеквизитыДокументов» T4 используется для получения реквизитов «КорреспондентыДляСписков», «ПредставлениеСостояния», «СодержитОригинал», а таблица «Справочник.ВидыВнутреннихДокументов» T12 используется для получения реквизита «ВидДокумента.ЯвляетсяКомплектомДокументов». Таким образом, можно либо не использовать поля на форме, которые приводят к вызову дополнительных проверок на права доступа, либо убрать проверку RLS для вспомогательного регистра с данными, так как проверка уже выполняется в основной таблице и эффекта от дополнительных проверок в данном запросе нет.
Пример 3
Еще один вариант использования обработки – исследование фактического запроса SQL при обращении к виртуальным таблицам 1с. Меня давно интересовал вопрос, как интерпретируется запрос к виртуальным таблицам. Если с таблицей остатков и оборотов регистров накопления все достаточно очевидно, то, например, с регистрами бухгалтерии было бы интересно посмотреть на фактический запрос при указании разных параметров. Рассмотрим достаточно простой запрос обращения к движениям с субконто за указанный период
Прогоняем запрос через трансформатор(все опции включены) и получаем такой вид:
Получен интересный листинг, который показывает, что фактически происходит выполнение нескольких запросов с формированием временных таблиц. Рассмотрим эти запросы:
1) Выполняется запрос к системной таблице актуальности итогов для всех регистров с отбором по регистру. Это нужно для определения необходимости использования служебных таблиц с итогами и периода, на который эти итоги существуют (может есть и другие функции этого запроса, но мои знания ограничиваются только периодами в итогах — дополняйте в комментариях:))
7) Выбирается максимальный регистратор и номер строки, для отделения следующей порции данных
Разобрав запрос, можно сделать вывод что производительность выборки из виртуальной таблицы ДвиженияССубконто полностью определяется объемами выбираемых данных и если не использовать отбор внутри виртуальной таблицы, то все записи физических таблиц будут прогоняться через временные таблицы порциями по 1000 записей, что очень медленно (даже продвинутая СУБД не сможет оптимизировать такой запрос).
Как настроить трассировку запроса из обработки
За трассировку запроса отвечает 2 поля:
Путь файла трассы — здесь указывается путь к папке, в которую будут сохраняться временные файлы трассировки и имя файла (например D:\Временные файлы\TraceTest). Имена файлов трассировки будут присваиваться автоматически, добавлением номера в конец имени (например TraceTest_54.trc)
Подключение SQL — строка подключения к базе данных (например «DRIVER=;SERVER=PC_1C_003;UID=sa;PWD=123;DATABASE=Localbase»). Строку подключения можно проверить на работоспособность, нажав на кнопку «Проверить подключение».
Трассировка запускается только если исходный запрос написан на языке запросов 1с, поэтому если введен SQL запрос, то поля «Путь файла трассы» и «Подключние SQL» можно не заполнять.
Выводы
Данную обработку можно использовать в связке с технологическим журналом с помощью инструментов разработчика или типовой обработки, а также можно использовать без ТЖ, используя трассировку запроса, встроенную в обработку или запуская трассировку вручную. Для понимания фактически выполняемого SQL запроса, гораздо удобнее видеть наименования таблиц и полей в терминах 1с, видеть представление ссылок 1с и читать форматированный текст запроса с отступами и пробелами.
Форма обработки анализа ТЖ из инструментов разработчика:
Форма типовой обработки с ИТС для просмотра логов ТЖ:
Ссылки
Update 19.09.2017
- При обращении к сервису форматирования убрано использование объекта ЧтениеJSON, для совместимости с 8.2 и версиями ниже 8.3.6
Читайте также: