1С Простая консоль запросов Печать
Автор: А.Волос   

1с очень многое сделал за программиста, благодаря чему стало возможным писать программы в очень короткие сроки!

Простая консоль запросов. При использовании минимально простых средств разработки, она вполне функциональна!

 

 

 

Интерфейс интуитивно понятен:
  1. В правом верхнем окне Добавить(+), и вводим текст запроса, вида:

    ВЫБРАТЬ
      ЦеныНоменклатурыСрезПоследних.ВидЦены,
      ЦеныНоменклатурыСрезПоследних.Номенклатура
    ИЗ
      РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ТипЦены) КАК ЦеныНоменклатурыСрезПоследних
    
    

    Можно ввести запрос и без параметров.

  2. В левом верхнем окне Добавить(+), впечатываем имя параметра и выбираем из списка его тип. Так добавляется любое необходимое количество параметров.

  3. Нажимаем "Выполнить запрос". Результат программа помещает в нижнее окно - элемент формы типа ТабличныйДокумент.

 

Примечание: Программа правильно работает только при корректном вводе данных! Только один запрос за один раз.

 


Управляемое приложение УТ11.

В конструкторе основной формы:
1. Создадим реквизиты формы:

-ДеревоЗапросов тип: Дерево значений
---- ТекстЗапроса тип: Строка
---- ПараметрыЗапроса тип: Таблица значений
-------- ИмяПараметра тип: Строка
-------- ЗначениеПараметра тип (составной: ЛюбаяСсылка, СписокЗначений, и тд).
-ТабДокРезультат тип: Табличный документ

 

2. Создадим иерархию элементов на форме:

-ГруппаЗапросыТекст тип: Группа
----СтраницыДеревоПараметры тип: Страницы
--------СтраницаПараметры тип: Страница
------------ГруппаОбщие тип: Группа
----------------ДеревоЗапросовПараметрыЗапроса тип: Таблица значений
--------------------Командная панель
--------------------ИмяПараметра тип: Поле ввода
--------------------ЗначениеПараметра тип: Поле ввода
----------------ДеревоЗапросов тип: Дерево значений
--------------------Командная панель
--------------------ТекстЗапроса тип: Поле ввода
--------ВыполнитьЗапрос тип: Кнопка
--------ТабДокРезультат тип: ТабличныйДокумент

 

Причем Дерево значений, Таблицу значений и Табличный документ поместим на форму "методом перетаскивания". Приятно радует то, что 1с очень многое сделал за программиста!

Когда мы перетаскиваем на форму реквизиты типа Дерево значений или Табличный документ, то возникают на форме новые элементы вида: окно с командной панелью. В командной панели уже присутствуют большинство стандартных команд: Создать, Удалить, Копировать, Изменить и тд.

В программе задействованы всего четыре функции:

&НаКлиенте
Процедура ВыполнитьЗапрос(Команда)
        
                ЭлементДерева = Элементы.ДеревоЗапросов.ТекущиеДанные;

                Если ЭлементДерева <> Неопределено Тогда
                                
                                ПараметрыЗапроса = ЭлементДерева.ПараметрыЗапроса;
                                ВыполнитьТекстЗапроса(ЭлементДерева.ТекстЗапроса, ПараметрыЗапроса);
                Иначе
                        Предупреждение("Запрос не выбран");
                КонецЕсли;
                
КонецПроцедуры

&НаСервере
Процедура ВыполнитьТекстЗапроса(ТекстЗапроса, ПараметрыЗапроса)

        ВремяВыполнения = "";
        //ОбновитьОтображениеДанных();  
  
        Если ЗначениеЗаполнено(ТекстЗапроса) Тогда
                        
                                ПолеРезультатаЗапроса = Новый ТабличныйДокумент();
                Начало = ТекущаяДата();

                Результат = ВыполнитьЗапрос_сервер(ТекстЗапроса, ПараметрыЗапроса);

                Окончание = ТекущаяДата();
                ФорматВремени = "ДЛФ=В";
                ВремяВыполнения = "нач." + Формат(Начало, ФорматВремени) + "  оконч." + Формат(Окончание, ФорматВремени);

                Если ТипЗнч(Результат) = Тип("ТаблицаЗначений") Тогда
                                        //Вывести табличный документ в элемент формы ТабДокРезультат типа Табличный документ
                                        ТабДокРезультат = ВывестиТаблицуЗначений(Результат, Истина);
                Иначе
                        Сообщить(Результат);
                КонецЕсли;
        Иначе
                Сообщить("Текст запроса пустой");
        КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ВыполнитьЗапрос_сервер(ТекстЗапроса, ПараметрыЗапроса) Экспорт

        Запрос = Новый Запрос();
                Запрос.Текст = ТекстЗапроса;
                
        Для каждого ОписаниеПараметра из ПараметрыЗапроса Цикл

                Значение = ОписаниеПараметра.ЗначениеПараметра;
                Запрос.УстановитьПараметр(ОписаниеПараметра.ИмяПараметра, Значение);
                        
                КонецЦикла;

        Попытка
                ТЗ = Запрос.Выполнить().Выгрузить();
        Исключение
                Возврат ОписаниеОшибки();
                КонецПопытки;
                        
        Возврат ТЗ;

        КонецФункции
        
Функция ВывестиТаблицуЗначений(ТЗ, ВыводитьЗаголовкиКолонок)
        
        Если ТипЗНЧ(ТЗ) <> Тип("ТаблицаЗначений") Тогда
                ВызватьИсключение("Входной параметр функции ВывестиТаблицуЗначений() не является таблицей значений ");
        КонецЕсли;      
        
        ТабДок = Новый ТабличныйДокумент;
        НомТекСтр = 1;
        
        Если ВыводитьЗаголовкиКолонок Тогда
                Для Каждого Колонки Из ТЗ.Колонки Цикл
                        Область = ТабДок.Область(НомТекСтр, ТЗ.Колонки.Индекс(Колонки)+1);
                        Область.Текст = Колонки.Имя;
                КонецЦикла;
                НомТекСтр = НомТекСтр+1;
        КонецЕсли;      
        
        Для СчСтрок = 0 По ТЗ.Количество()-1 Цикл
                Для СчКол = 0 По ТЗ.Колонки.Количество()-1 Цикл
                        
                        Область = ТабДок.Область(НомТекСтр, СчКол+1);
                        ТекстДляВывода = ТЗ[СчСтрок][СчКол];
                        Область.Текст = ТекстДляВывода;
                        Область.ШиринаКолонки =  Макс(СтрДлина(ТекстДляВывода), Область.ШиринаКолонки);
                        
                КонецЦикла;     
                
                НомТекСтр = НомТекСтр+1;
        КонецЦикла;     
        
        Возврат ТабДок;
        
КонецФункции


 

Процедура ВыполнитьЗапрос() проверяет всего одно условие: существуют ли вообще текущие данные у реквизита ДеревоЗапросов (тип Дерево значений). Если данные есть, то вызывается процедура ВыполнитьТекстЗапроса() и ей передаются два элемента этого дерева: ТекстЗапроса (тип Строка) и ПараметрыЗапроса (тип Структура, или Таблица значений, что в данном случае одно и то же).

 

Первая проверка в процедуре ВыполнитьТекстЗапроса() - не пуст ли запрос? Если запрос не пуст, то вызывается серверная функция ВыполнитьЗапрос_сервер(), которой передаются те же два параметра ТекстЗапроса и ПараметрыЗапроса.

 

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

 

Серверной процедуре ВыполнитьЗапрос_сервер() передаются те же два параметра ТекстЗапроса и ПараметрыЗапроса и она собственно осуществляет работу со специфичным 1С объектом Запрос, а именно передает ТекстЗапроса свойству Запрос.Текст, а элементы структуры ПараметрыЗапроса в цикле (по числу элементов структуры) методу Запрос.УстановитьПараметр().

 

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

 

Далее программа возвращается в процедуру ВыполнитьТекстЗапроса() где присваивает полученный результат (а это должна быть таблица значений) работы функции ВыполнитьЗапрос_сервер() переменной Результат.

 

Далее проверка: является ли переменная Результат таблицей значений, если да, то вызывается функция ВывестиТаблицуЗначений(), которая конвертирует таблицу значений в табличный документ, и результат работы этой функции присваивается реквизиту формы ТабДокРезультат (тип Табличный документ).

 

В результате этого присвоения результат отображается на форме, в нижнем окне (элемент формы ТабДокРезультат).

 

Скачать 1С внешнюю обработку : Простая консоль запросов

 

Обновлено 06.04.2014 11:57