Данный функционал сохраняет запрос с параметрами в файл с деревом значений, который открывается консолью отчетов и консолью запросов. Имеются четыре основных режима работы функции сохранения - на рабочий стол, в документы, в указанный каталог/файл и используя диалог выбора файла. Также можно сохранить значение каталога файлов запросов и указывать только имя создаваемого файла. Режимы сохранение являются наброской, "допилить" "под себя" займет немного времени.
Функция ЗапросВФайл(Запрос, ВариантСохранения = Неопределено, ИмяЗапроса="") Экспорт
Перем ИмяКаталога;
Перем ИмяФайла;
// Получение имен каталога и файла
Если ВариантСохранения = 0 Тогда
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ДиалогВыбораФайла.Заголовок = "Укажите файл для сохранения запроса";
ДиалогВыбораФайла.Фильтр = "Файлы запросов (*.sel)|*.sel|Файлы отчетов (*.rcf)|*.rcf|Все файлы (*.*)|*.*";
ДиалогВыбораФайла.Расширение = "sel";
Если ДиалогВыбораФайла.Выбрать() Тогда
ПолучитьКаталогИИмяФайла(ДиалогВыбораФайла.ПолноеИмяФайла, ИмяКаталога, ИмяФайла);;
КонецЕсли;
ИначеЕсли ВариантСохранения = 1 Тогда
WSS=Новый COMОбъект("WScript.Shell");
ИмяКаталога = Строка(WSS.SpecialFolders().Item("Desktop"));
ИначеЕсли ВариантСохранения = 2 Тогда
WSS=Новый COMОбъект("WScript.Shell");
ИмяКаталога = Строка(WSS.SpecialFolders().Item("MyDocuments"));
ИначеЕсли ТипЗнч(ВариантСохранения) = Тип("Строка") Тогда
ПолучитьКаталогИИмяФайла(ВариантСохранения, ИмяКаталога, ИмяФайла);
Иначе
Возврат Ложь;
КонецЕсли;
Если Не ЗначениеЗаполнено(ИмяКаталога) Тогда
КаталогСохраненияФайлов = ВосстановитьЗначение("КаталогСохраненияФайлов");
Если КаталогСохраненияФайлов = Неопределено Тогда
WSS=Новый COMОбъект("WScript.Shell");
ИмяКаталога = Строка(WSS.SpecialFolders().Item("Desktop")) + "\";
Иначе
ИмяКаталога = КаталогСохраненияФайлов;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(ИмяФайла) Тогда
ИмяФайла = "Запрос.sel"
ИначеЕсли Найти(ИмяФайла, ".") = 0 Тогда
ИмяФайла = ИмяФайла + ".sel";
КонецЕсли;
// {{ Если файл сущетвует
// - это файл запросов - добавление строки в дерево запосов
// - если это не файл запросов - перезаписывание файла
Файл = Новый Файл(ИмяКаталога + "\" + ИмяФайла);
ЗначениеФайла = Неопределено;
Если файл.Существует() Тогда
ЗначениеФайла = ЗначениеИзФайла(ИмяКаталога + "\" + ИмяФайла)
КонецЕсли;
// {{ Создание структурированого дерева значений
Если ТипЗнч(ЗначениеФайла) = Тип("ДеревоЗначений") Тогда
ДеревоЗапросов = ЗначениеФайла;
Иначе
ДеревоЗапросов = Новый ДеревоЗначений;
ДеревоЗапросов.Колонки.Добавить("Запрос");
ДеревоЗапросов.Колонки.Добавить("ТекстЗапроса");
ДеревоЗапросов.Колонки.Добавить("ПараметрыЗапроса");
//ДеревоЗапросов.Колонки.Добавить("СпособВыгрузки");
ДеревоЗапросов.Колонки.Добавить("ТипОформления");
КонецЕсли;
// Инициализация параметор запроса
ПараметрыЗапроса = Новый ТаблицаЗначений;
ПараметрыЗапроса.Колонки.Добавить("ИмяПараметра");
ПараметрыЗапроса.Колонки.Добавить("ЭтоВыражение");
ПараметрыЗапроса.Колонки.Добавить("ЗначениеПараметра");
Для Каждого Параметр Из Запрос.Параметры Цикл
ПараметрЗапроса = ПараметрыЗапроса.Добавить();
ПараметрЗапроса.ИмяПараметра = Параметр.Ключ;
ПараметрЗапроса.ЭтоВыражение = Ложь;
Если ТипЗнч(Параметр.Значение) = Тип("Массив") Тогда
СписокЗначения = Новый СписокЗначений;
СписокЗначения.ЗагрузитьЗначения(Параметр.Значение);
ПараметрЗапроса.ЗначениеПараметра = СписокЗначения;
Иначе
ПараметрЗапроса.ЗначениеПараметра = Параметр.Значение;
КонецЕсли;
КонецЦикла;
// Добавление запроса в дерево запросов
ИмяЗапроса = ?(ЗначениеЗаполнено(ИмяЗапроса), ИмяЗапроса, "Запрос");
ИтоговоеИмяЗапроса = ИмяЗапроса; Итерация = 1;
Пока Не ДеревоЗапросов.Строки.Найти(ИтоговоеИмяЗапроса) = Неопределено Цикл
ИтоговоеИмяЗапроса = ИмяЗапроса + Строка(Итерация);
Итерация = Итерация + 1;
КонецЦикла;
// Добавление текущего запроса
СтрокаЗапрос = ДеревоЗапросов.Строки.Добавить();
СтрокаЗапрос.Запрос = ИтоговоеИмяЗапроса;
СтрокаЗапрос.ПараметрыЗапроса = ПараметрыЗапроса;
СтрокаЗапрос.ТекстЗапроса = Запрос.Текст;
//СтрокаЗапрос.СпособВыгрузки = ?(Найти(Запрос.Текст, "ИТОГИ")>0, 2, 1);
СтрокаЗапрос.ТипОформления = СтандартноеОформление.Классика;
// Сохранение файла
Возврат ЗначениеВФайл(ИмяКаталога + "\" + ИмяФайла, ДеревоЗапросов)
КонецФункции
Процедура ПолучитьКаталогИИмяФайла(Знач ПолноеИмяФайла, ИмяКаталога, ИмяФайла) Экспорт
// находим последний с конца "\" все что до него - это путь, после - имя
НомерПозиции = СтрДлина(ПолноеИмяФайла);
Пока НомерПозиции <> 0 Цикл
Если Сред(ПолноеИмяФайла, НомерПозиции, 1) = "\" Тогда
ИмяКаталога = Сред(ПолноеИмяФайла, 1, НомерПозиции - 1);
ИмяФайла = Сред(ПолноеИмяФайла, НомерПозиции + 1);
Возврат;
КонецЕсли;
НомерПозиции = НомерПозиции - 1;
КонецЦикла;
// так и не нашли слешей, значит все- это имя файла
ИмяФайла = ПолноеИмяФайла;
ИмяКаталога = "";
КонецПроцедуры
P.S. После сохранения не забывайте удалять строку в табло отладки :)