Пятница, 04.10.2024, 23:46
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
ЗагрузкаПараметров
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
Прикрепления: XDTO.rar (24.2 Kb)
 
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
Как я уже писал, конкретно функция режима отладки для запроса называется От().
 
  • Страница 1 из 1
  • 1
Поиск: