Пожелание. Расширить функционал отложенной отладки объектов
|
|
sweep4 | Дата: Вторник, 27.08.2024, 17:08 | Сообщение # 1 |
Сержант
Группа: Пользователи
Сообщений: 28
Репутация: 17
Статус: Оффлайн
| Привет.
В ИР есть функция отладки объекта, которой я постоянно пользуюсь - От(), чаще всего - отладкой запросов. Но возникла ситуация, когда хотелось бы расширить её возможности, думаю, может оказаться востребованным.
Ограниченность функции в том, что нужно запустить 1С под отладкой, поставить точку останова, дождаться попадания в отладчик и выполнить иробщий.от(Запрос) для сохранения запроса во временное хранилище и затем чтение в инструменте отложенной отладки из хранилища в рантайме. Это подразумевает некую интерактивность со стороны разработчика, нужно ожидание остановки в точке отладки, выполнение вручную действий и т.д.
И вот теперь возникла сложная задача. В качестве примера сложной задачи - делаю анализ запросов расчёта себестоимости в ERP, нужно вытащить в отладку один из тяжёлых подзапросов в недрах этого шайтан-механизма и передать его в отладку. Процедура эта долгая, запускается в разных фоновых заданиях, может идти много часов/суток, интерактивно отловить под отладчиком нужный подзапрос довольно непросто.
Поэтому у меня возникла мысль - а что если прописать вызов иробщий.от(Запрос) прямо в коде (либо прямо в коде конфигурации, либо переопределить участок кода расширением) отдельного тестового стенда ? Насобирать за длительное время объекты, насохранять в каталог объекты отладки, потом по отдельности открывать их в инструменте отладки отложенного объекта и анализировать.
Но есть проблема - функция не предусматривает возможность сохранения объекта отладки в отдельный файл, только во временное хранилище. Поэтому возникло предложение - можно ли доработать функцию От() и добавить ей возможность сохранения объекта во внешний файл с заданным именем ? Примерно таким образом - добавить функции необязательный параметр с условным названием "ИмяФайлаДляСохранения" = Неопределено. Если имя неопределено - функция От() работает точно также, как обычно. Если имя файла указано (без каталога) - сохранить объект отладки в каталог по-умолчанию, куда обычно сохраняются файлы с расширением *.deb Если имя файла указано в виде полного пути - сохранить по указанному пути.
Это бы сильно помогло программному сбору объектов для отладки на длительных и тяжёлых операциях, типа того же расчёта себестоимости в ERP. Собранные файлы потом можно проанализировать на другой копии базы, передать другим разработчикам для анализа и т.д. и т.п.
Обобщая вышесказанное - превратить функцию От() не только в инструмент интерактивной отладки объекта вручную, но и в инструмент автоматизированного программного сбора объектов для отладки для ряда сложных ситуаций.
И второе пожелание - сделать более удобным пункт "Сохранить объект для отладки с менеджером временных таблиц" в консоли запросов - дать возможность сохранить файл с данными объекта отладки по произвольному пути (на флешку там, в сетевой каталог и т.п.) с той же целью - открыть на другой копии базы, передать другим разработчикам и т.п. Доработка непринципиальная, только ради удобства.
|
|
| |
tormozit | Дата: Среда, 28.08.2024, 08:27 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 6503
Репутация: 173
Статус: Оффлайн
| Допишу в описании функции, т.к. видимо не во всех сценариях эта важная информация легко находится
Цитата Снимок сохраняется в различные места в зависимости от варианта поставки и настроек: - вариант "Конфигурация" - в справочник ирОбъектыДляОтладки - варианты "Расширение" и "Портативный" - если в общих настройках указан КаталогОбъектовДляОтладки, то в отдельный файл в этом каталоге, иначе в единую ячейку в хранилище общих настроек в БД. Создал задачу https://www.hostedredmine.com/issues/991354
|
|
| |
tormozit | Дата: Среда, 28.08.2024, 08:41 | Сообщение # 3 |
Генералиссимус
Группа: Администраторы
Сообщений: 6503
Репутация: 173
Статус: Оффлайн
| В окне открытия объекта для отладки кажется есть довольно толстая подсказка на каталог сохранения объектов для отладки
|
|
| |
sweep4 | Дата: Среда, 28.08.2024, 13:00 | Сообщение # 4 |
Сержант
Группа: Пользователи
Сообщений: 28
Репутация: 17
Статус: Оффлайн
| Разобрался с ситуацией, спс. Текущую мою задачу решает. Вот не нашёл сходу эту инфу, да )
Единственное что бы хотелось - возможность как-то задавать имена этих файлов *.deb, или метку какую-то в имя файла писать. Например, по 50 организациям настряпал 50 дампов подзапроса с именами вида "_28_08_202411_04_37ОтладитьСтруктура.deb" - для поиска по нужной организации надо поштучно перебирать их все вручную.
|
|
| |
tormozit | Дата: Среда, 28.08.2024, 13:50 | Сообщение # 5 |
Генералиссимус
Группа: Администраторы
Сообщений: 6503
Репутация: 173
Статус: Оффлайн
| Цитата sweep4 ( ) задавать имена этих файлов есть же параметр "Наименование" у этой функции
|
|
| |
sweep4 | Дата: Среда, 28.08.2024, 17:00 | Сообщение # 6 |
Сержант
Группа: Пользователи
Сообщений: 28
Репутация: 17
Статус: Оффлайн
| Ок, разобрался, принято. Не заметил этот параметр. В колонке описания функций отладки не развёрнуто описание всех параметров, проглядел. Добавлено (30.08.2024, 09:20) --------------------------------------------- Можешь ли подсказать, чем вызваны ошибки примерно такого рода, когда я открываю полученный объект отладки ? И насколько это критично с точки зрения корректности открывшегося снимка ?
Код Ошибка восстановления временной таблицы "ВТДокументыРасчетаСебестоимости": Присутствует момент времени, дата в котором не совпадает с датой документа Ошибка восстановления временной таблицы "ВТРегистраторыРасчетаСебестоимости": {ИнструментыРазработчикаTormozit ОбщийМодуль.ирОбщий.Модуль(27139)}: Ошибка при вызове метода контекста (Выполнить): {(2, 149)}: Временная таблица уже существует "_Т3463" ВЫБРАТЬ Ссылка, Организация, МоментВремени_Дата_ЗначениеДляТипа3463, МоментВремени_ВыборПодколонки3463, МоментВремени_ЗначениеДляТипа3463 ПОМЕСТИТЬ <<?>>_Т3463 ИЗ &ВТРегистраторыРасчетаСебестоимости КАК Т; Ошибка восстановления временной таблицы "ВТДокументыРасчетаСебестоимостиПрошлогоПериода": {ИнструментыРазработчикаTormozit ОбщийМодуль.ирОбщий.Модуль(27139)}: Ошибка при вызове метода контекста (Выполнить): {(2, 149)}: Временная таблица уже существует "_Т3463" ВЫБРАТЬ Ссылка, Организация, МоментВремени_Дата_ЗначениеДляТипа3463, МоментВремени_ВыборПодколонки3463, МоментВремени_ЗначениеДляТипа3463 ПОМЕСТИТЬ <<?>>_Т3463 ИЗ &ВТДокументыРасчетаСебестоимостиПрошлогоПериода КАК Т; Ошибка восстановления временной таблицы "ВТ_СебестоимостьТоваровОстаткиПрошлогоПериодаСоСписаниемМалоценныхТМЦ": {ИнструментыРазработчикаTormozit ОбщийМодуль.ирОбщий.Модуль(27139)}: Ошибка при вызове метода контекста (Выполнить): {(2, 1053)}: Временная таблица уже существует "_Т3463" ВЫБРАТЬ ЕстьСписание, АналитикаУчетаНоменклатуры, РазделУчета, ВидЗапасов, Организация, Партия, АналитикаУчетаПартий, АналитикаФинансовогоУчета, ВидДеятельностиНДС, Количество, НастройкаХозяйственнойОперации_ВыборПодколонки3463, НастройкаХозяйственнойОперации_Значение3463, НастройкаХозяйственнойОперации_ЗначениеДляТипа3463, ИдентификаторФинЗаписи_ВыборПодколонки3463, ИдентификаторФинЗаписи_Значение3463, ИдентификаторФинЗаписи_ЗначениеДляТипа3463, ХозяйственнаяОперация_ВыборПодколонки3463, ХозяйственнаяОперация_Значение3463, ХозяйственнаяОперация_ЗначениеДляТипа3463, КорНаправлениеДеятельности_ВыборПодколонки3463, КорНаправлениеДеятельности_Значение3463, КорНаправлениеДеятельности_ЗначениеДляТипа3463, АналитикаРасходов_ВыборПодколонки3463, АналитикаРасходов_Значение3463, АналитикаРасходов_ЗначениеДляТипа3463, СтатьяРасходовСписания_ВыборПодколонки3463, СтатьяРасходовСписания_Значение3463, СтатьяРасходовСписания_ЗначениеДляТипа3463, Подразделение_ВыборПодколонки3463, Подразделение_Значение3463, Подразделение_ЗначениеДляТипа3463 ПОМЕСТИТЬ <<?>>_Т3463 ИЗ &ВТ_СебестоимостьТоваровОстаткиПрошлогоПериодаСоСписаниемМалоценныхТМЦ КАК Т;
|
|
| |
tormozit | Дата: Вторник, 03.09.2024, 07:41 | Сообщение # 7 |
Генералиссимус
Группа: Администраторы
Сообщений: 6503
Репутация: 173
Статус: Оффлайн
| Ошибка восстановления временной таблицы означает, что часть ее может быть искажена.
|
|
| |
sweep4 | Дата: Вторник, 03.09.2024, 18:00 | Сообщение # 8 |
Сержант
Группа: Пользователи
Сообщений: 28
Репутация: 17
Статус: Оффлайн
| Ответ очевидный, но всё-равно непонятный, в том контексте, что за искажения и как это повлияет на анализ полученного дампа.
Ок, хотелось бы узнать вот про какой момент. Вот я получил нужный мне дамп. Весит ~4 Гб, 136 временных таблиц и около сотни параметров. Я открыл дамп через инструмент отладки и могу запустить запрос как есть и посмотреть результат. Но мне надо слегка изменить запрос, чтобы посмотреть, как меняется план запроса. Если я начинаю редактировать (или копипастом вставлять) что-то в окне редактора запроса - вкладки со списком запросов/временными таблицами блокируются и становятся недоступными, а структура запроса похоже вообще не меняется и не переформируется в соответствии с вносимыми изменениями. Если я попытаюсь запустить изменённый запрос, то у меня такое ощущение, что на самом деле на исполнение идёт исходный текст запроса, а не тот, который я изменил.
Как можно добиться того, чтобы в отлаживаемом запросе "на ходу" поменять его текст и запустить на выполнение ? Я знаю, что можно сделать перетаскивание в обычную консоль запроса. но хотелось бы этого избежать - всё-таки 136 ВТ нехилого размера и сотня параметров весьма трудоёмки в ручном перетаскивании. Это помимо того, что дамп снят по одному из подзапросов огромного пакета запросов (а не весь запрос целиком) и для его запуска/исследования нужен "снимок" всех ВТ, который в обычной консоли запросов не сохраняется.
UPDATE: нет, всё же изменённый запрос исполнился, посмотрел по ТЖ. Но левая часть консоли с ВТ и структурой запроса не "разморозилась" и не отобразила изменения ВТ, структуру запроса и времена исполнения подзапросов. Можно ли как-то поправить это поведение ?
Сообщение отредактировал sweep4 - Вторник, 03.09.2024, 18:20 |
|
| |
tormozit | Дата: Вторник, 03.09.2024, 18:54 | Сообщение # 9 |
Генералиссимус
Группа: Администраторы
Сообщений: 6503
Репутация: 173
Статус: Оффлайн
| Цитата sweep4 ( ) вкладки со списком запросов/временными таблицами блокируются и становятся недоступными Так работает уже 10+ лет в режиме ведущей структуры запроса. Наводи указатель мыши на заголовок колонки структуры запроса и читай пояснение.
Цитата sweep4 ( ) на исполнение идёт исходный текст запроса, а не тот, который я изменил В режиме ведущей структуры запроса это нормально для всех команд, которые выполняют полный запрос, т.к. в это режиме редактирование элемента структуры выполняется путем его "ответвления" от основного запроса до тех пор, пока ты не сохранишь изменения узла. Выполнять редактируемый элемент структуры надо командой "Выполнить отображаемый".
Если такое поведение не нравится, переключайся в режим ведомой структуры запроса.
|
|
| |