Сохранение запроса в файл консоли отчетов/запросов

14.08.12

Разработка - Запросы

Идея написания сохранения запроса была давно, но никак не доходили руки. Вдохновением для реализации была небольшая доработка консоли запросов http://infostart.ru/public/143349/

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

Наименование Файл Версия Размер
Демонстрация сохранения запроса
.epf 8,42Kb
9
.epf 8,42Kb 9 Скачать

       Данный функционал сохраняет запрос с параметрами в файл с деревом значений, который открывается консолью отчетов и консолью запросов. Имеются четыре основных режима работы функции сохранения - на рабочий стол, в документы, в указанный каталог/файл и используя диалог выбора файла. Также можно сохранить значение каталога файлов запросов и указывать только имя создаваемого файла. Режимы сохранение являются наброской, "допилить" "под себя" займет немного времени.


Функция
ЗапросВФайл(Запрос, ВариантСохранения = Неопределено, ИмяЗапроса="") Экспорт
    Перем
ИмяКаталога;
    Перем
ИмяФайла;

   
// Получение имен каталога и файла
   
Если ВариантСохранения = 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. После сохранения не забывайте удалять строку в табло отладки :)


http://kostias.blogspot.com/2012/08/blog-post.html

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 8000 руб.

02.09.2020    122405    673    389    

716

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5757    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2007    2    Yashazz    0    

29

Запрос 1С copilot

Инструментарий разработчика Запросы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6300    31    mkalimulin    25    

50

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1750    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5398    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16201    skovpin_sa    14    

98
Оставьте свое сообщение