davsoft42 | Дата: Пятница, 04.11.2016, 07:59 | Сообщение # 1 |
Рядовой
Группа: Проверенные
Сообщений: 9
Репутация: 1
Статус: Оффлайн
| Добрый день! Столкнулся с проблемой например в ЕРП в разных процедурах готовится много временных таблиц, и много параметров для запроса, и чтоб посмотреть и поправить запрос приходится долго набирать параметры руками, ну а временные таблицы которые находятся в МенеджерВременныхТаблиц, вообще не получится запустить запрос в запроснике... мы тут подумали и написали механизм по загрузке в консоль запросов данных чтобы отладить запрос..
Функция СтруктураВXDTO(Параметры, ФлагЗаписи) Экспорт ЗаписьXML = Новый ЗаписьXML(); Если ФлагЗаписи <> 0 Тогда Путь = КаталогВременныхФайлов()+ "\СтруктураВXDTO.xml"; Файл = Новый Файл(Путь); Если Файл.Существует() Тогда ЧтениеXML = Новый ЧтениеXML(); ЧтениеXML.ОткрытьФайл(Путь); а = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); лФлагЗаписи = а.ФлагЗаписи; ЧтениеXML.Закрыть(); КонецЕсли; КонецЕсли; Если ФлагЗаписи <> 0 Тогда Если ФлагЗаписи <> лФлагЗаписи Тогда ЗаписьXML.ОткрытьФайл(Путь); иначе ЗаписьXML.УстановитьСтроку(); КонецЕсли; Иначе ЗаписьXML.УстановитьСтроку(); КонецЕсли; СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Параметры); Если ФлагЗаписи <> 0 Тогда Если ФлагЗаписи <> лФлагЗаписи Тогда ЗаписьXML.Закрыть(); ВозвЗнач = Путь; Иначе ВозвЗнач = ЗаписьXML.Закрыть(); КонецЕсли; Иначе ВозвЗнач = ЗаписьXML.Закрыть(); КонецЕсли; Возврат ВозвЗнач; КонецФункции
//МВТ - менеджерВременныхТаблиц //ФлагЗаписи - число (0 не писать в файл, 1 - писать в файл если нет или в заголовке ФлагЗаписи<>1, // 2 - писать в файл если нет или в заголовке ФлагЗаписи<>2 // значение 1 или 2 нужно если возвр знач не ВХОДИТ в строку Функция МенеджерВременныхТаблицВXDTO(Запрос, ФлагЗаписи) Экспорт МВТ = Запрос.МенеджерВременныхТаблиц; ТекстЗапроса = ""; СтруктураВыгрузки = Новый Структура; СтруктураВыгрузки.Вставить("ФлагЗаписи", ФлагЗаписи); Для каждого Таб Из МВТ.Таблицы Цикл Колонки = ""; Для Каждого Колонка Из Таб.Колонки Цикл Колонки = Колонки + Таб.ПолноеИмя+"."+Колонка.Имя + ","; КонецЦикла; Колонки = Лев(Колонки, СтрДлина(Колонки)-1); СтруктураВыгрузки.Вставить(Таб.ПолноеИмя, Таб.ПолучитьДанные().Выгрузить()); ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ "+Колонки+" поместить "+Таб.ПолноеИмя+" ИЗ &"+Таб.ПолноеИмя+" как "+Таб.ПолноеИмя+";"+Символы.ВК;
КонецЦикла; СтруктураВыгрузки.Вставить("Параметры", Запрос.Параметры); ТекстЗапроса = ТекстЗапроса + Запрос.Текст; СтруктураВыгрузки.Вставить("ТекстЗапроса", ТекстЗапроса); Возврат СтруктураВXDTO(СтруктураВыгрузки, ФлагЗаписи); КонецФункции
перед тем как выполнить запрос в отладчике в табло вызываем МенеджерВременныхТаблицВXDTO(Запрос, ФлагЗаписи) флаг записи если 0 то функция вернет строку xml которую надо сохранить в файл, флаги 1 и 2 сделаны для того чтоб прикаждом шаге функция не писала в файл, если флаг в файле совпадает с флагом функции фал не запишится, а если не совпадает функция вернет имя файла который надо загрузить в консоль запросов
в консоль запросов вешаем кнопку я повесил в параметрах
Процедура КоманднаяПанельПараметрыЗагрузитьИзXDTO(Кнопка) Параметры.Очистить(); ДВФ = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Если ДВФ.Выбрать() Тогда ЧтениеXML = Новый ЧтениеXML(); ЧтениеXML.ОткрытьФайл(ДВФ.ПолноеИмяФайла); НПараметры = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); КонецЕсли; ЗаполнитьПараметры(НПараметры); КонецПроцедуры
Процедура ЗаполнитьПараметры(НПараметры) Для Каждого Параметр Из НПараметры Цикл Если Параметр.Ключ = "Параметры" Тогда ЗаполнитьПараметры(Параметр.Значение); Продолжить; КонецЕсли; Если Параметр.Ключ = "ТекстЗапроса" Тогда ЭлементыФормы.ТекстЗапроса.УстановитьТекст(Параметр.Значение); КонецЕсли; СтрокаПараметров = Параметры.Добавить(); СтрокаПараметров.ИмяПараметра = Параметр.Ключ; ирОбщий.ОбновитьКопиюСвойстваВНижнемРегистреЛкс(СтрокаПараметров, "ИмяПараметра"); СтрокаПараметров.ЭтоВыражение = Ложь; СтрокаПараметров.ТипЗначения = ТипЗнч(Параметр.Значение); Если Не СтрокаПараметров.НеИспользоватьОграничениеТипа Тогда МТ = Новый Массив; МТ.Добавить(ТипЗнч(Параметр.Значение)); ОТ = Новый ОписаниеТипов(МТ); СтрокаПараметров.Значение = ОТ.ПривестиЗначение(Параметр.Значение); КонецЕсли; КонецЦикла; КонецПроцедуры;
процедура считает из файла занные и добавит из в параметры, также добавит текст запроса
если включите в релиз буду радДобавлено (04.11.2016, 07:59) --------------------------------------------- вот такой запрос с параметрами можно загрузить
|
|
| |
davsoft42 | Дата: Пятница, 04.11.2016, 08:01 | Сообщение # 2 |
Рядовой
Группа: Проверенные
Сообщений: 9
Репутация: 1
Статус: Оффлайн
| чето не загрузился... дубль 2
|
|
| |
tormozit | Дата: Пятница, 04.11.2016, 11:45 | Сообщение # 3 |
Генералиссимус
Группа: Администраторы
Сообщений: 6382
Репутация: 165
Статус: Оффлайн
| Хотелось бы понять исходную проблему, т.е. почему имеющимся средством (функцией От) не удается загрузить запрос с параметрами и временными таблицами в консоль запросов? Вроде бы все описанное тут давным давно фиксируется в снимке и затем восстанавливается в консоли запросов.
|
|
| |
davsoft42 | Дата: Суббота, 05.11.2016, 05:28 | Сообщение # 4 |
Рядовой
Группа: Проверенные
Сообщений: 9
Репутация: 1
Статус: Оффлайн
| подскажите где почитать про данный функционал, как снять снимок, как восстановить?
|
|
| |
tormozit | Дата: Суббота, 05.11.2016, 11:27 | Сообщение # 5 |
Генералиссимус
Группа: Администраторы
Сообщений: 6382
Репутация: 165
Статус: Оффлайн
| Сам принцип формирования снимка и затем работы с ним я называл "отложенная отладка". http://devtool1c.ucoz.ru/index/funkcii_dlja_otladki/0-33 http://devtool1c.ucoz.ru/index/mobilnyj_variant/0-39 Как я уже писал, конкретно функция режима отладки для запроса называется От().
|
|
| |