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

14.08.12

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Демонстрация сохранения запроса
.epf 8,42Kb
9
9 Скачать (1 SM) Купить за 1 850 руб.

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


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

   
// Получение имен каталога и файла
   
Если ВариантСохранения = 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

См. также

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

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

15500 руб.

02.09.2020    184787    1029    403    

968

Обновление 1С Запросы Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Данный инструмент помогает анализировать доработанную конфигурацию после обновления на новый релиз и находить «битые» тексты запросов, в которых участвуют несуществующие в новом релизе метаданные.

2 стартмани

06.02.2025    2205    17    XilDen    26    

36

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

В статье приведена удобная возможность отладки исполняемого запроса динамического списка.

03.12.2024    5738    artemusII    11    

23

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    13147    sergey279    18    

66

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    8223    XilDen    36    

90

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

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    3194    PROSTO-1C    0    

23

Запросы Программист Запросы Бесплатно (free)

Отлаживая взаимодействие с базой данных, мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися обращениями, негативно влияющими на производительность. О том, как в PostgreSQL выявить подозрительные запросы, основываясь на доступной о них информации, расскажем в статье.

16.08.2024    10807    user1840182    5    

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