Экспорт запроса из отладки в консоль запросов

Публикация № 1522855 27.09.21

Инструментарий разработчика - Консоль запросов

консоль запросов запрос в отладке

Есть множество вариантов, как выгрузить запрос в файл в момент отладки для дальнейшей быстрой загрузки этого файла в консоль запросов (включая временные таблицы). Я просто опишу код, который можно добавить в консоль запросов управляемого приложения, скачанную с сайта ИТС для 8.2 и 8.3. Описание - в самом коде/заголовках процедур. Тестировал на платформе 1С:Предприятие 8.3 (8.3.18.1334). Спасибо за тестирование, объективная критика приветствуется. Спасибо Андрею Габец (прощу прощения, если склонение фамилии сделал неверно). При просмотре его курсов по БСП впервые увидел реализацию выгрузки запроса из отладки. Отдельное спасибо ему за соавторство в написании книги "Профессиональная разработка в системе «1С:Предприятие 8»", по которой я в 2012 начал изучать 1С.

Исходные обработки скачать можно отсюда:

https://its.1c.ru/db/metod8dev/content/4500/hdoc    

Все реквизиты/команды реализованы программным методом, поэтому теоретически можно добавить возможность в любую консоль запросов на управляемых формах.

Список изменений (добавления с префиксом "ЛС"):
1. В "модуль объекта" добавлены следующие процедуры/функции:
    - ЛС_ВыгрузитьЗапросВФайл
    - ЛС_ЗаполнитьПараметр
2. В модуль основной формы обработки добавлены следующие команды:
    - ЛС_ПриСозданииНаСервере
    - ЛС_ПоказатьМетодикуВнедрения
    - ЛС_ЗагрузитьИзОтладки
    - ЛС_ПолучитьФайлССервера
    - ЛС_ВыбратьЗапросыИзФайла
    - ЛС_ОбработкаЧтенияФайла
3. В модуле основной формы в конце процедуры "ПриСозданииНаСервере" добавлен вызов процедуры "ЛС_ПриСозданииНаСервере"
4. В модуле объекта закомментирована исходная функция "ИмяТипаИзЗначения" и задана обновленная(расширил ее)

Больше никаких изменений нет.

Проверялась на консолях запросов для управляемого приложения от 8.2 и 8.3 с сайта ИТС.

После вставки кода в обработки нужно в процедурах/функциях выбрать номер версии:

8.2: ЛС_Версия = 1 
8.3: ЛС_Версия = 2
 

В модуль объекта вставляете вот этот код:

//++ ЛС Усольцев 25.09.2021

//Записываем Запрос во внешний файл временного хранилища с фиксированным названием 
//"FileQueryExport.q1c". Сам файл удалится после прочтения (в модуле формы)
//
//Делаем 2 одинаковых запроса, чтобы можно было вернуться к исходному
//Запросы называются "ИсходныйЗапрос" и "ТекущийЗапрос"
//
//Если в запросе указан менеджер временных таблиц и в нем есть таблицы,
//к которым идет обращение - такие таблицы будут
//выгружены как внешние таблицы значений(добавлены в параметры),
//и в начало запроса будет добавлен код объявления временных таблиц
//Сам код будет обрамлен комментариями:
//АВТОМАТИЧЕСКИ_ФОРМИРУЕМАЯ_ЧАСТЬ_ЗАПРОСА_ИЗ_ВРЕМЕННЫХ_ТАБЛИЦ
//КОНЕЦ АВТОМАТИЧЕСКИ_ФОРМИРУЕМАЯ_ЧАСТЬ_ЗАПРОСА_ИЗ_ВРЕМЕННЫХ_ТАБЛИЦ
//
// Для разных версий консолей внедряется немного по-разному.
//Проверялась на обычных консолях запросов для управляемого приложения от 8.2 и 8.3(те что с сайта ИТС можно скачать)
// (8.2): ЛС_Версия = 1 
// (8.3): ЛС_Версия = 2 
// Параметры:
//  ОбъектЗапроса  - Запрос - Запрос, по который нужно сохрать в файл.
Функция ЛС_ВыгрузитьЗапросВФайл(знач ОбъектЗапроса) Экспорт 
	
	//В старой и новой версии консоли запросов
	//разные процедуры загрузки из файла(различаются подходы)
	
	ЛС_Версия = 2;
		
	ПрефиксЗапроса = "";
	ВременныеТаблицыТЗ = Новый Структура;
	
	Если ОбъектЗапроса.МенеджерВременныхТаблиц <> Неопределено Тогда
		
		ПрефиксЗапроса = ПрефиксЗапроса + "//АВТОМАТИЧЕСКИ_ФОРМИРУЕМАЯ_ЧАСТЬ_ЗАПРОСА_ИЗ_ВРЕМЕННЫХ_ТАБЛИЦ" + Символы.ПС+ Символы.ПС;
		
		ЗапросБезПробелов = СтрЗаменить(ОбъектЗапроса.Текст, Символы.ПС, "");
		ЗапросБезПробелов = СтрЗаменить(ЗапросБезПробелов, Символы.Таб, "");
		ЗапросБезПробелов = СтрЗаменить(ЗапросБезПробелов, " ", "");
		
		Для каждого Таблица Из ОбъектЗапроса.МенеджерВременныхТаблиц.Таблицы Цикл
			
			//Проверка на то что временная таблица используется в текущем запросе
			Если Найти(ЗапросБезПробелов, Таблица.ПолноеИмя+"КАК") = 0 Тогда
				Продолжить;	
			КонецЕсли; 
			
			Данные = Новый ТаблицаЗначений;
			
			РезультатЗапросаВТ = Таблица.ПолучитьДанные();
			
			Для каждого Колонка Из РезультатЗапросаВТ.Колонки Цикл
			
				Данные.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);	
			
			КонецЦикла;
			
			ВыборкаВТ = РезультатЗапросаВТ.Выбрать();
			
			Пока ВыборкаВТ.Следующий() Цикл
			
				ЗаполнитьЗначенияСвойств(Данные.Добавить(), ВыборкаВТ);	
			
			КонецЦикла;
						
			ИмяПараметраТЗ = "ЛСВР_" + Таблица.ПолноеИмя;
			
			ВременныеТаблицыТЗ.Вставить(ИмяПараметраТЗ, Данные);
			
			ПрефиксЗапроса = ПрефиксЗапроса + "ВЫБРАТЬ";
			
			ПервыйПроход = Истина;
			
			Для каждого Колонка Из Данные.Колонки Цикл
				
				Если ПервыйПроход Тогда
					ПервыйПроход = Ложь;	
				Иначе 
					ПрефиксЗапроса = ПрефиксЗапроса + ",";	
				КонецЕсли; 
				
				ПрефиксЗапроса = ПрефиксЗапроса + Символы.ПС + "	Т." + Колонка.Имя + " КАК " + Колонка.Имя;	
				
			КонецЦикла;
			
			ПрефиксЗапроса = ПрефиксЗапроса + Символы.ПС + "ПОМЕСТИТЬ " + Таблица.ПолноеИмя;
			ПрефиксЗапроса = ПрефиксЗапроса + Символы.ПС + "ИЗ";
			ПрефиксЗапроса = ПрефиксЗапроса + Символы.ПС + "	&" + ИмяПараметраТЗ + " КАК Т" + Символы.ПС + ";" + Символы.ПС + Символы.ПС;
			
		КонецЦикла;	
		
		ПрефиксЗапроса = ПрефиксЗапроса + "//КОНЕЦ АВТОМАТИЧЕСКИ_ФОРМИРУЕМАЯ_ЧАСТЬ_ЗАПРОСА_ИЗ_ВРЕМЕННЫХ_ТАБЛИЦ"+ Символы.ПС+ Символы.ПС;
		
	КонецЕсли; 	
	
	ТекстЗапроса = ПрефиксЗапроса + ОбъектЗапроса.Текст;
	
	ДанныеПоЗапросу = Новый Структура;
	
	ДанныеПоЗапросу.Вставить("Параметры", ЭтотОбъект.Параметры.ВыгрузитьКолонки());
	
	ДанныеПоЗапросу.Вставить("Запросы", ЭтотОбъект.Запросы.ВыгрузитьКолонки());
	
	Для НомерЗапроса = 1 По 2 Цикл
		
		НовЗапрос = ДанныеПоЗапросу.Запросы.Добавить();
		
		Если НомерЗапроса = 1 Тогда
			НовЗапрос.Имя = "ТекущийЗапрос";
		Иначе	
			НовЗапрос.Имя = "ИсходныйЗапрос";
		КонецЕсли; 	
		
		НовЗапрос.Текст = ТекстЗапроса;
		
		НовЗапрос.Идентификатор = Новый УникальныйИдентификатор;
		
		Если ЛС_Версия = 1 Тогда
			
			//в старой версии нет реквизита "АдресХранилищаПланаЗапроса"
			
		ИначеЕсли ЛС_Версия = 2 Тогда
			
			НовЗапрос.АдресХранилищаПланаЗапроса = ПоместитьВоВременноеХранилище(Неопределено);
			
		КонецЕсли; 
		
		Для каждого ТекПараметр Из ОбъектЗапроса.Параметры Цикл
			ЛС_ЗаполнитьПараметр(ДанныеПоЗапросу, ТекПараметр, НовЗапрос.Идентификатор);	
		КонецЦикла;
		
		Для каждого ВременнаяТаблицаТЗ Из ВременныеТаблицыТЗ Цикл
			ЛС_ЗаполнитьПараметр(ДанныеПоЗапросу, ВременнаяТаблицаТЗ, НовЗапрос.Идентификатор);	
		КонецЦикла;
		
	КонецЦикла;
	
	ДД = ЗаписатьЗапросыВФайлXML(ДанныеПоЗапросу);
	
	ИмяФайла = КаталогВременныхФайлов() + "FileQueryExport.q1c";
	
	ДД.Записать(ИмяФайла);
	
	Возврат СтрШаблон("Запрос успешно сохранен в файл.%1Теперь в консоли запросов нажмите кнопку ""Загрузить из отладки""", Символы.ПС);
	
КонецФункции // ЛС_ВыгрузитьЗапросВФайл()

// Параметры:
//  ДанныеПоЗапросу  - Структура - Структура, которая повторяет табличные
//						части "Запросы", "Параметры" 
//  Параметр  - КлючЗначение - текущий параметр из коллекции
//  ИдентификаторЗапроса  - УникальныйИдентификатор - Уникальный идентификатор текущего запроса
Процедура ЛС_ЗаполнитьПараметр(ДанныеПоЗапросу, Параметр, ИдентификаторЗапроса)
	
	//приводим значение параметра к тому, которое может записываться обработкой
	Если ТипЗнч(Параметр.Значение) = Тип("Массив") Тогда
		ПараметрЗначение = Новый СписокЗначений;
		ПараметрЗначение.ЗагрузитьЗначения(Параметр.Значение);
	Иначе 	
		ПараметрЗначение = Параметр.Значение;
	КонецЕсли; 
	
	НовПараметр = ДанныеПоЗапросу.Параметры.Добавить();
	НовПараметр.Значение = ЗначениеВСтрокуВнутр(ПараметрЗначение);
	НовПараметр.Идентификатор = Новый УникальныйИдентификатор;
	НовПараметр.ИдентификаторЗапроса = ИдентификаторЗапроса;
	НовПараметр.Имя = Параметр.Ключ;
	
	НовПараметр.Тип = ИмяТипаИзЗначения(ПараметрЗначение);
	
КонецПроцедуры // ЛС_ЗаполнитьПараметр()

//Переопределяемая функция
//исходную нужно закомментировать
Функция ИмяТипаИзЗначения(Значение) Экспорт
	
	Если ТипЗнч(Значение) = Тип("Строка") Тогда
		ИмяТипа = "Строка";
	ИначеЕсли ТипЗнч(Значение) = Тип("Число") Тогда
		ИмяТипа = "Число";
	ИначеЕсли ТипЗнч(Значение) = Тип("Булево") Тогда
		ИмяТипа = "Булево";
	ИначеЕсли ТипЗнч(Значение) = Тип("Дата") Тогда
		ИмяТипа = "Дата";
	ИначеЕсли ТипЗнч(Значение) = Тип("МоментВремени") Тогда
		ИмяТипа = "МоментВремени";
	ИначеЕсли ТипЗнч(Значение) = Тип("Неопределено") Тогда
		ИмяТипа = "Строка";
	ИначеЕсли ТипЗнч(Значение) = Тип("ФиксированныйМассив") Тогда
		ИмяТипа = "ФиксированныйМассив";
	ИначеЕсли ТипЗнч(Значение) = Тип("ТаблицаЗначений") Тогда
		ИмяТипа = "ТаблицаЗначений";
	ИначеЕсли ТипЗнч(Значение) = Тип("Граница") Тогда
		ИмяТипа = "Граница";
	ИначеЕсли ТипЗнч(Значение) = Тип("СписокЗначений") Тогда
		ИмяТипа = "СписокЗначений";
	ИначеЕсли ТипЗнч(Значение) = Тип("ВидДвиженияНакопления") Тогда
		ИмяТипа = "ВидДвиженияНакопления";
	ИначеЕсли ТипЗнч(Значение) = Тип("ВидДвиженияБухгалтерии") Тогда
		ИмяТипа = "ВидДвиженияБухгалтерии";
	Иначе
		ИмяТипа = xmlТип(ТипЗнч(Значение)).ИмяТипа;
	КонецЕсли;
	
	Возврат ИмяТипа;
	
КонецФункции

//-- ЛС Усольцев 25.09.2021

 

В модуль основной формы вот этот код:

 

//++ ЛС Усольцев 25.09.2021

&НаСервере
Процедура ЛС_ПриСозданииНаСервере()

	МассивДобавляемыхРеквизитов = Новый Массив; 
	МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ЛС_ТекстДляВычисления", Новый ОписаниеТипов("Строка"))); 
	ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
	
	ЛС_ИмяФайла = РеквизитФормыВЗначение("Объект").ИспользуемоеИмяФайла;
	
	ЭтаФорма.ЛС_ТекстДляВычисления = СтрШаблон("ВнешниеОбработки.Создать(""%1"",Ложь).ЛС_ВыгрузитьЗапросВФайл(Запрос)", ЛС_ИмяФайла);
	
	ЛС_Группа1 = Элементы.Добавить("ЛС_Группа1", Тип("ГруппаФормы"));
	ЛС_Группа1.Вид = ВидГруппыФормы.ОбычнаяГруппа;
	ЛС_Группа1.Заголовок = "(ЛС) Получение запроса из отладки";
	ЛС_Группа1.Отображение = ОтображениеОбычнойГруппы.Нет;
	ЛС_Группа1.ОтображениеУправления = ОтображениеУправленияОбычнойГруппы.Картинка;
	ЛС_Группа1.Поведение = ПоведениеОбычнойГруппы.Свертываемая;
	ЛС_Группа1.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
	ЛС_Группа1.Скрыть();
		
	ЛС_Надпись1 = Элементы.Добавить("ТА_Декорация1", Тип("ДекорацияФормы"), ЛС_Группа1);
	ЛС_Надпись1.Вид = ВидДекорацииФормы.Надпись;
	ЛС_Надпись1.Заголовок = 
	"1. Самое главное, чтобы обработка была доступна серверу 1С. Для этого нужно открывать ее либо на сервере 1С(как локальный файл),
	|либо положить в общую папку. И только после этого переходить к следующим пунктам.
	|2. Скопируйте текст справа(начинается ""ВнешниеОбработки.Создать("").
	|3. Откройте конфигуратор. Запустите процедуру в отладке и поставьте точку останова на моменте выполнение запроса (Запрос.Выполнить())
	|4. Убедитесь что у вас не работает ""Безопасный режим"". Для этого Нажмите Shift + F9, в поле ""Выражение"" введите текст ""БезопасныйРежим()"" и нажмите ""Рассчитать"".
	|В таблице ""Результат"" в колонке ""Значение"" должно быть Ложь. Если у вас ""Значение"" = Истина, значит смотрите в интернете как
	|отключить безопасный режим для вашего пользователя. Дальнейшие действия возможны только при отключенном безопасном режиме.
	|5. Нажмите Shift + F9. Вставьте из буфера(Ctrl + V) в поле ""Выражение"", укажите переменную содержащую сам запрос(если у вас он называется
	|Запрос1, то в поле выражение замените единственный параметр с ""Запрос"" на ""Запрос1"") и нажмите ""Рассчитать"".
	|6. Вернитесь в консоль запросов и нажмите кнопку ""Загрузить из отладки""(при загрузке файл, содержащий выгрузку из запроса удалится из временных файлов)
	|7. У вас заполнится консоль из выгруженного ранее файла.
	|Временные таблицы, используемые этим запросом реализованы через таблицы значений
	|и выделены специальным комментарием:
	|//АВТОМАТИЧЕСКИ_ФОРМИРУЕМАЯ_ЧАСТЬ_ЗАПРОСА_ИЗ_ВРЕМЕННЫХ_ТАБЛИЦ
	|//КОНЕЦ АВТОМАТИЧЕСКИ_ФОРМИРУЕМАЯ_ЧАСТЬ_ЗАПРОСА_ИЗ_ВРЕМЕННЫХ_ТАБЛИЦ";
	
	ЛС_Группа2 = Элементы.Добавить("ЛС_Группа2", Тип("ГруппаФормы"), ЛС_Группа1);
	ЛС_Группа2.Вид = ВидГруппыФормы.ОбычнаяГруппа;
	ЛС_Группа2.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
	ЛС_Группа2.Отображение = ОтображениеОбычнойГруппы.Нет;
	
	ЛС_ТекстДляВычисления = Элементы.Добавить("ЛС_ТекстДляВычисления", Тип("ПолеФормы"), ЛС_Группа2);
	ЛС_ТекстДляВычисления.Вид = ВидПоляФормы.ПолеВвода;
	ЛС_ТекстДляВычисления.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
	ЛС_ТекстДляВычисления.ПутьКДанным = "ЛС_ТекстДляВычисления";
	ЛС_ТекстДляВычисления.ТолькоПросмотр = Истина;
	
	ЛС_ЗагрузитьИзОтладки = ЭтаФорма.Команды.Добавить("ЛС_ЗагрузитьИзОтладки");
	ЛС_ЗагрузитьИзОтладки.Действие = "ЛС_ЗагрузитьИзОтладки";
	ЛС_ЗагрузитьИзОтладки.Заголовок = "Загрузить из отладки";

	Элемент = ЭтаФорма.Элементы.Добавить("ЛС_ЗагрузитьИзОтладки", Тип("КнопкаФормы"), ЛС_Группа2);
	Элемент.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
	Элемент.ИмяКоманды = "ЛС_ЗагрузитьИзОтладки";
	
	ЛС_ЗагрузитьИзОтладки = ЭтаФорма.Команды.Добавить("ЛС_ПоказатьМетодикуВнедрения");
	ЛС_ЗагрузитьИзОтладки.Действие = "ЛС_ПоказатьМетодикуВнедрения";
	ЛС_ЗагрузитьИзОтладки.Заголовок = "Показать методику внедрения";

	Элемент = ЭтаФорма.Элементы.Добавить("ЛС_ПоказатьМетодикуВнедрения", Тип("КнопкаФормы"), ЛС_Группа2);
	Элемент.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
	Элемент.ИмяКоманды = "ЛС_ПоказатьМетодикуВнедрения";
	
КонецПроцедуры

&НаКлиенте
Процедура ЛС_ПоказатьМетодикуВнедрения(Команда)

	ТекстСообщения = "
	|Все реквизиты/команды реализованы программным методом, поэтому теоретически можно добавить возможность в любую консоль запросов на управляемых формах.
	|
	|Список изменений(добавления с префиксом ""ЛС""):
	|1. В ""модуль объекта"" добавлены следующие процедуры/функции:
	|	- ЛС_ВыгрузитьЗапросВФайл
	|	- ЛС_ЗаполнитьПараметр
	|2. В модуль основной формы обработки добавлены следующие команды:
	|	- ЛС_ПриСозданииНаСервере
	|	- ЛС_ПоказатьМетодикуВнедрения
	|	- ЛС_ЗагрузитьИзОтладки
	|	- ЛС_ПолучитьФайлССервера
	|	- ЛС_ВыбратьЗапросыИзФайла
	|	- ЛС_ОбработкаЧтенияФайла
	|3. В модуле основной формы в конце процедуры ""ПриСозданииНаСервере"" добавлен вызов процедуры ""ЛС_ПриСозданииНаСервере""
	|4. В модуле объекта закомментирована исходная функция ""ИмяТипаИзЗначения"" и задана обновленная(расширил ее)
	|
	|Больше никаких изменений нет
	|
	|Проверялась на консолях запросов для управляемого приложения от 8.2 и 8.3 с сайта ИТС.
	|После вставки кода в обработки нужно в процедурах/функциях выбрать номер версии:
	|
	|8.2: ЛС_Версия = 1 
	|8.3: ЛС_Версия = 2"; 
	
	Сообщение = Новый СообщениеПользователю;
	Сообщение.Текст = ТекстСообщения;
	Сообщение.Сообщить();

КонецПроцедуры // ЛС_ПоказатьМетодикуВнедрения()
 
&НаКлиенте
Процедура ЛС_ЗагрузитьИзОтладки(Команда)
	
	//В старой и новой версии консоли запросов
	//разные процедуры загрузки из файла(различаются подходы)
	
	ЛС_Версия = 2;
	
	Если ЛС_Версия = 1 Тогда
		
		ЛС_ВыбратьЗапросыИзФайла();
		
	ИначеЕсли ЛС_Версия = 2 Тогда
		
		ДанныеССевера = ЛС_ПолучитьФайлССервера();	
		
		Выполнить("ПомещениеФайловЗавершение(ДанныеССевера.Результат, ДанныеССевера.ДополнительныеПараметры)");
		
	КонецЕсли; 
	
КонецПроцедуры // ЛС_ЗагрузитьИзОтладки()

&НаСервереБезКонтекста
Функция ЛС_ПолучитьФайлССервера()

	ЛС_КраткоеИмяФайла = "FileQueryExport.q1c";
	ЛС_ИмяФайла = КаталогВременныхФайлов() + ЛС_КраткоеИмяФайла;
	
	ДД = Новый ДвоичныеДанные(ЛС_ИмяФайла);
	
	УдалитьФайлы(ЛС_ИмяФайла);
	
	ЛС_ИдентификаторФайла = Новый УникальныйИдентификатор;
	
	ЛС_АдресФайла = ПоместитьВоВременноеХранилище(ДД, ЛС_ИдентификаторФайла);
	
	ЛС_ОписаниеФайла = Новый Структура;
	ЛС_ОписаниеФайла.Вставить("Имя", ЛС_КраткоеИмяФайла);
	ЛС_ОписаниеФайла.Вставить("ИдентификаторФайла", ЛС_ИдентификаторФайла);
	ЛС_ОписаниеФайла.Вставить("ПолноеИмя", ЛС_ИмяФайла);
	ЛС_ОписаниеФайла.Вставить("Хранение", ЛС_АдресФайла);
	
	ЛС_Результат = Новый Массив;
	ЛС_Результат.Добавить(ЛС_ОписаниеФайла);
		
	ДанныеССевера = Новый Структура;
	ДанныеССевера.Вставить("Результат", ЛС_Результат);
	ДанныеССевера.Вставить("ДополнительныеПараметры", Новый Структура("Удалять",Истина));

	Возврат ДанныеССевера;
	
КонецФункции // ЛС_ПолучитьФайлССервера()

&НаКлиенте
Процедура ЛС_ВыбратьЗапросыИзФайла()

	ЛС_ОбработкаЧтенияФайла();
	
	КоличествоЗапросов = Объект.Запросы.Количество();
	Если КоличествоЗапросов > 0 Тогда 
		ИдентификаторТекущегоЗапроса 	= Объект.Запросы.Получить(0).Идентификатор;
		Модифицированность				= Ложь;
	Иначе
		Элемент 						= Объект.Запросы.Добавить();
		ИдентификаторТекущегоЗапроса	= Новый УникальныйИдентификатор;
		Элемент.Идентификатор  			= ИдентификаторТекущегоЗапроса;
		Элемент.Имя						= ИмяЗапросаПоУмолчанию;
		Результат						= Новый ТабличныйДокумент;
	КонецЕсли;	
	
	ОбновитьФормуКлиент();

КонецПроцедуры // ЛС_ВыбратьЗапросыИзФайла()

&НаКлиенте
Процедура ЛС_ОбработкаЧтенияФайла()
	
	Объект.Запросы.Очистить();
	Объект.Параметры.Очистить();
	
	ДанныеССевера = ЛС_ПолучитьФайлССервера();	
	
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДанныеССевера.Результат[0].Хранение);
	
	ЗагрузитьЗапросыИзФайла(ДвоичныеДанные);
	Объект.ИмяФайла = ДанныеССевера.Результат[0].ПолноеИмя;

КонецПроцедуры // ЛС_ОбработкаЧтенияФайла()

//-- ЛС Усольцев 25.09.2021

 

И в модуле объекта и в модуле формы есть объявление переменной:

	ЛС_Версия = 2;

Вот с этим очень внимательно!

Повторюсь, что:

    ЛС_Версия = 1 это для консоли 8.2

    ЛС_Версия = 2 это для консоли 8.3

 

Прилагаю обработки, в коде мои вставки обрамляются комментариями:

//++ ЛС Усольцев

//-- ЛС Усольцев

 

Дополнение от 06.10.2021:

- В "Консоль запросов управляемого приложения 8.3" в модуле объекта обработки в функции "ВывестиРезультатОдногоЗапроса" закомментировал строчку:

	//КоличествоСтрок = РезультатЗапроса.Количество(); // ЛС Усольцев 06.10.2021 "ошибка при выполнении Итоги ПО"

Причина: ошибка при работе конструкции "ИТОГИ ПО".

Описание ошибки:

Метод объекта не обнаружен (Количество

P.S. ошибка не связана с моими доработками.

Можно скачать с сайта ИТС чистую консоль и выполнить в ней такой запрос:

ВЫБРАТЬ
	Валюты.Ссылка КАК Ссылка
ИЗ
	Справочник.Валюты КАК Валюты
ИТОГИ ПО
	Ссылка

В результате получить соответствующую ошибку.

Это актуально на 06.10.2021

Скачать файлы

Наименование Файл Версия Размер
Консоль запросов управляемого приложения 8.2

.epf 97,42Kb
20
.epf 97,42Kb 20 Скачать бесплатно
Консоль запросов управляемого приложения 8.3

.epf 115,11Kb
55
.epf 115,11Kb 55 Скачать бесплатно

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Rootking2010 27.09.21 09:57 Сейчас в теме
При нажатие на кнопку "Загрузить из отладки" появляется ошибка:
Тип не определен (AccumulationMovementType)
{ВнешняяОбработка.КонсольЗапросов.МодульОбъекта(387)}: ТипЭлемента = Тип(ФайлXML.Значение);
{ВнешняяОбработка.КонсольЗапросов.Форма.Форма.Форма(1539)}: ОбъектВнешнейОбработки = ОбъектОбработки().ПрочитатьЗапросыИзФайлаXML(ДвоичныеДанные);
{ВнешняяОбработка.КонсольЗапросов.Форма.Форма.Форма(1511)}: ЗагрузитьЗапросыИзФайла(Результат[0].Хранение);
{(1)}:ПомещениеФайловЗавершение(ДанныеССевера.Результат, ДанныеССевера.ДополнительныеПараметры)
{ВнешняяОбработка.КонсольЗапросов.Форма.Форма.Форма(2436)}: Выполнить("ПомещениеФайловЗавершение(ДанныеССевера.Результат, ДанныеССевера.ДополнительныеПараметры)");
2. prohorp 14 27.09.21 12:09 Сейчас в теме
(1)Отправьте мне по почту файл, который у вас сохранился:

Он находится в каталоге временных файлов с названием FileQueryExport.q1c

поя почта "upv@940000.ru"
3. prohorp 14 27.09.21 12:43 Сейчас в теме
(2)Исправил. Обработки обновил. Исправил описание процедур в самой теме.
4. prohorp 14 27.09.21 18:51 Сейчас в теме
(3) Спасибо за тестирование!
Rootking2010; +1 Ответить
5. gmkushkunov 30.09.21 13:46 Сейчас в теме
Добрый день! При вставке скопированного текста из обработки в конфигуратор в поле Выражение происходит зависание и сам текст в поле не появляется. Приходится через диспетчер задач снимать задачу. (1С:Предприятие 8.3 (8.3.19.1264))
6. gmkushkunov 30.09.21 14:19 Сейчас в теме
(5) Странно, после нескольких не удачных попыток (штук 5 и завершениями задач через диспетчер задач) вдруг начало работать. Будем считать ложная тревога.
7. prohorp 14 01.10.21 04:13 Сейчас в теме
(6) Проблемы стабильности работы обычно в платформе. Попробуйте сменить платформу. Спасибо за тест!
8. prohorp 14 01.10.21 08:13 Сейчас в теме
(6) Проблемы стабильности работы обычно в платформе. Попробуйте сменить платформу. Спасибо за тест!
(5)Или у вас были очень большие временные таблицы, которые выгружались в файл.
Больше ничего в голову не приходит, т.к. операция сохранения в файл легкая(использована из самой консоли запросов)
На тот случай, если у вас действительно огромные временные таблицы - сделал их выгрузку через Выборка.Следующий(), а не через Выгрузить(). Публикацию и обработки обновил.
9. prohorp 14 01.10.21 08:40 Сейчас в теме
10. DrAku1a 1464 09.10.21 19:07 Сейчас в теме
11. prohorp 14 11.10.21 03:01 Сейчас в теме
(10)Да, ловко у вас сделано)
12. prohorp 14 11.10.21 19:02 Сейчас в теме
(10) Не придираюсь, но как у вас существующие временные таблицы переносятся (созданные до выполнения текущего запроса, и используемые текущим запросом) ?
13. tormozit 6438 11.10.21 19:48 Сейчас в теме
(12) Такой способ этого не подразумевает.
14. DrAku1a 1464 12.10.21 08:40 Сейчас в теме
(12) Для такого уже нужно использовать модуль обработки и выгрузку делать через файл. Это тоже реализовано (в том-же диалоге "Открыть из отладчика"), скриншоты прилагаю.

В практике - интереснее изучать как формируются эти самые временные таблицы, т.е. выгрузить весь пакет запросов, даже если он формируется по частям. Это сложная задача. Вручную её решал в предыдущей версии отладчика (на обычных формах).
Прикрепленные файлы:
Оставьте свое сообщение

См. также

Универсальные инструменты 1С

Универсальные обработки Прочие инструменты разработчика Консоль запросов v8 v8::УФ 1cv8.cf Бесплатно (free)

Свободно распространяемый набор универсальных обработок и отчетов в виде расширения для разработки и поддержки, которое работает во ВСЕХ видах клиентских приложений и во всех операционных системах, которые поддерживает платформа 1С:Предприятие, кроме мобильных. Консоль запросов - консоль отчетов - консоль кода - редактор объектов базы данных - удаление помеченных объектов - поиск и удаление дублей - редактор констант - консоль заданий - групповая обработка справочников и документов - динамический список - поиск ссылок на объект - регистрация изменений для обмена данными - структура хранения базы - консоль HTTP запросов-консоль вебсервисов- консоль сравнения данных- информация о лицензиях- загрузка из табличного документа-файловый менеджер-все функции- навигатор по конфигурации-конструктор регулярных выражений-Выгрузка загрузка XML с фильтрами

21.01.2020    56474    5003    cprit    183