Работа с конструктором запроса с выводом в табличный документ
⇐ ПредыдущаяСтр 9 из 9
Умение писать текст запроса «вручную» никогда не являлось «лишним», но удобнее использовать конструктор запросов. Замечание. К сожалению, в управляемом приложении в обработке «ЗнакомствоСЗапросом» нельзя пользоваться конструктором запроса. Можно им воспользоваться в этой обработке перейдя в обычный режим, но делать этого не будем. Создадим обработку «КонструкторЗапроса» и определяем ее в подсистему «ОтчетыИОбработки». Создадим форму обработки и в ней добавляем реквизит формы «ТабДок» типа «Табличный документ», а так же команду «ВыполнитьЗапрос» с действием «ВыполнитьЗапрос». Далее, перетаскиваем их на форму. В модуле формы, для работы команды, пишем процедуру: &НаКлиенте Процедура ВыполнитьЗапрос(Команда) ВыполнитьЗапросСервер(); КонецПроцедуры &НаСервере Процедура ВыполнитьЗапросСервер() КонецПроцедуры Становимся внутри процедуры вызываемой на сервере и из контекстного меню вызываем «Конструктор запроса с обработкой результата» (рисунок 2.65). Рисунок 2.65 Конструктор запроса с обработкой результата
Ставим тип обработки «Вывод в табличный документ» и нажимаем либо кнопку «Далее», либо закладку «Таблицы и поля». На закладке «Таблицы и поля» конструктора можно просмотреть существующие на данный момент таблицы в системе (левая часть озаглавленная «База данных») (Рисунок 2.66). Рисунок 2.67 Конструктор запроса
Таблицы, данные из которых будут получаться запросом, переносятся в область «Таблицы», необходимые запросу поля переносятся в область «Поля». Сделаем это как на рисунке 2.68. Рис 2.68 Конструктор запроса
Здесь мы убрали, создаваемое по умолчанию, поле представления - «ПРЕДСТАВЛЕНИЕ (ПоступлениеТоваровТовары.Номенклатура)»
В любой момент работы с конструктором можно смотреть получаемый текст запроса. Для выполнения этой задачи необходимо нажать кнопку «Запрос», расположенную в левом нижнем углу формы конструктора (рисунок 2.69). Рисунок 2.69 Запрос
Можно вручную отредактировать текст запроса, нажав на кнопку «Редактировать». Практика. Нажимаем кнопку «ОК» и проверяем нашу обработку в пользовательском режиме. Если проанализировать данные, полученные при выполнении запроса, то можно встретить «повторы» номенклатурных позиций (если у вас это не получилось, то можно скопировать и провести любой документ «ПоступлениеТоваров»). Возвращаемся в процедуру ВыполнитьЗапросСервер() в обработке «КонструкторЗапроса» и из контекстного меню опять вызываем «Конструктор запроса с обработкой результата». Если требуется «свернуть» результат запроса, то для этой цели можно использовать закладку «Группировка» конструктора запроса. При определении группировок необходимо придерживаться следующего правила: все поля выборки запроса делятся на поля, по которым производится группировка (свертка), поля вложенных таблиц (суммируемые поля относительно тех, по которым ведется группировка) и на агрегатные функции. Определим группировки (Рисунок 2.70). Рисунок 2.70 Конструктор запроса
Если данные, получаемые запросом должны выбираться по какому-либо условию, то в этом случае может потребоваться задействовать закладку «Условия». Выберем ПоступлениеТоваровТовары.Количество=10 (Рисунок 2.71). Рисунок 2.71 Условие конструктора запроса.
Обратите внимание на тот факт, что в случае если условие определено таким же образом как на рисунке, то запрос выполняться не будет. Исправить ситуацию можно двумя способами: • Переопределив условие, отметив флаг «П...»; • Воспользовавшись возможностью изменения самого текста запроса (получаемого при нажатии на кнопку «Редактировать Запрос»).
Само изменение вручную будет заключаться в том, что необходимо перед числом «10» убрать символ «&». Этим символом в тексте запроса определяются параметры запроса, в которые в дальнейшем (но перед выполнением запроса) должны быть записаны какие-либо значения. Нажмем на кнопку «РедактироватьЗапрос» и правим (Рисунок 2.72). Рисунок 2.73 Редактирование запроса
На закладке «Дополнительно» можно отметить ряд флагов (касающихся ключевого слова «Выбрать» языка запросов) и определить состав таблиц предназначенных для изменения запроса (Рисунок 2.74). Рисунок 2.74 Дополнительные функции запроса
На закладке «Объединения/Псевдонимы» можно изменить имена полей задав «Псевдонимы», но мы этого делать не будем. На закладке «Порядок» можно определить порядок сортировки записей в результате запроса (Рисунок 2.75). Рисунок 2.75 Порядок сортировки записей
Обратите внимание на флаг «Автоупорядочивание», он может использоваться для упорядочивания по полям ссылочного типа. При определении раздела «Итоги» следует быть готовым к тому, что в результате запроса появится «дополнительные» итоговые записи. Вместе с этими записями результат запроса становится иерархическим (Рисунок 2.76). Рисунок 2.76.Итоги конструктора запроса.
Допустимо указание нескольких типов итогов: • Элементы (в выборке результата запроса присутствуют итоги по группировкам и детальные записи); • Иерархия (в выборке результата запроса в общем случае присутствуют итоговые записи по иерархии, итоговые записи по группировке, детальные записи); • Только иерархия (в выборке результата запроса в общем случае присутствуют итоговые записи по иерархии). После нажатия на кнопку «Ок» конструктора, будет сформирован «Макет» и в модуле формы пропишется код процедуры ВыполнитьЗапросСервер(): &НаСервере Процедура ВыполнитьЗапросСервер() //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Макет = Обработки.КонструкторЗапросов.ПолучитьМакет("Макет");
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПоступлениеТоваровТовары.Номенклатура КАК Номенклатура, | СУММА(ПоступлениеТоваровТовары.Количество) КАК Количество, | СУММА(ПоступлениеТоваровТовары.Сумма) КАК Сумма |ИЗ | Документ.ПоступлениеТоваров.Товары | КАК ПоступлениеТоваровТовары |ГДЕ | ПоступлениеТоваровТовары.Количество > 1 | |СГРУППИРОВАТЬ ПО | ПоступлениеТоваровТовары.Номенклатура | |УПОРЯДОЧИТЬ ПО | Количество, | Сумма УБЫВ |ИТОГИ | СУММА(Количество), | СУММА(Сумма) |ПО | Номенклатура ИЕРАРХИЯ"; Результат = Запрос.Выполнить(); ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок"); ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы"); ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы"); ОбластьНоменклатураИерархия = Макет.ПолучитьОбласть("НоменклатураИерархия"); ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура"); ТабДок.Очистить(); ТабДок.Вывести(ОбластьЗаголовок); ТабДок.Вывести(ОбластьШапкаТаблицы); ТабДок.НачатьАвтогруппировкуСтрок(); ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл Если ВыборкаНоменклатура.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда Область = ОбластьНоменклатураИерархия; Иначе Область = ОбластьНоменклатура; КонецЕсли;
Область.Параметры.Заполнить(ВыборкаНоменклатура); ТабДок.Вывести(Область, ВыборкаНоменклатура.Уровень()); КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); ТабДок.Вывести(ОбластьПодвалТаблицы); ТабДок.Вывести(ОбластьПодвал); //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА КонецПроцедуры
Список литературы 1) Б. Лоусон, Р. Шарп — Изучаем HTML. 3) Дронов.В.-.HTML.5.CSS.3.и.Web 2.0.Разработка.современных.Web-сайтов. 4) ru.wikipedia.org
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|