Файл: Хрусталева Е. Ю. Язык запросов 1С-Предприятия 8 (2013).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.03.2019
Просмотров: 51817
Скачиваний: 8725
рассчитываются итоги для полей Клиент и Товар. Соответственно, чтобы обойти
групповые итоги и детальные записи результата запроса, конструктор создал три
вложенных друг в друга цикла для обхода выборок – выборки по группе записей Клиент,
вложенной в нее выборки по группе Товар и вложенной в нее выборки детальных записей.
Для групповых записей получается выборка с типом обхода ПоГруппировкам, а для
детальных записей – с прямым типом обхода.
Вывод в табличный документ
Теперь с помощью конструктора выведем результат этого же запроса в табличный
документ. Поскольку табличный документ заполняется данными на сервере, а выводится
пользователю на клиенте, сначала создадим реквизит формы Результат типа
ТабличныйДокумент, который и будет содержать данные результата запроса, и
перетащим его в дерево элементов формы обработки. После этого создадим в модуле
формы небольшую заготовку (листинг 2.28).
Листинг 2.28. Процедуры для вывода результата запроса в табличный документ
В клиентской процедуре ВыводВТабличныйДокумент() вызывается серверная
внеконтекстная процедура ЗаполнитьТД(), в которую передается реквизит формы
Результат. В этой процедуре табличный документ заполняется данными, и при
возвращении на клиента отображается пользователю в поле формы вида Поле
табличного документа.
Теперь создадим собственно фрагмент кода для вывода результата запроса в табличный
документ. Для этого установим курсор внутрь процедуры ЗаполнитьТД() и вызовем из
контекстного меню пункт Конструктор запроса с обработкой результата. Подтвердим,
что мы хотим создать новый запрос.
На закладке конструктора Обработка результатов в группе Тип обработки выберем
опцию Вывод в табличный документ, все остальные опции оставим без изменения (рис.
2.40).
Рис. 2.40. Окно конструктора запроса с обработкой результата
Далее, как и в предыдущем случае, определим исходные данные для запроса. При
выборе из таблицы ЗаказТовара.Состав ссылочных полей Клиент и Товар конструктор
автоматически добавит в список выборки текстовое представление этих полей,
полученное с помощью функции Представление(), рис. 2.41.
Рис. 2.41. Окно конструктора запроса с обработкой результата
Это сделано для того, чтобы избежать замедления при выполнении запроса. Дело в том,
что при выводе значения ссылочного поля, для получения его представления, будет
выполняться дополнительный запрос к той таблице, на которую ссылается это ссылочное
поле. Поэтому следует в запросе сразу получать текстовое представление ссылочного
поля и затем уже его, а не саму ссылку, выводить в табличный документ.
подробнее
О функции
Представление()
рассказано в разделе «
ссылочного поля
».
Рекомендации по оптимизации запросов при выводе ссылочных полей в отчет даны в
разделе "
Исключить вывод ссылочных полей в отчет
".
Нажмем ОК. Конструктор запроса создаст подчиненный объект обработки (в которой мы
поместили процедуру для вывода результата запроса в табличный документ) – макет
табличного документа с полями, перечисленными в выборке запроса. Исходя из текста
запроса, в макете присутствуют области итоговых группировок Клиент, Товар и область
для вывода детальных записей, а также области для вывода заголовка и подвала
табличного документа, шапки и подвала таблицы (рис. 2.42).
Рис. 2.42. Макет табличного документа, созданный конструктором
Также в функции ЗаполнитьТД() (откуда был вызван конструктор) конструктор запроса с
обработкой результата сформирует следующий фрагмент кода (листинг 2.29).
Листинг 2.29. Фрагмент процедуры для вывода результата запроса в табличный документ, созданный с помощью
конструктора запроса с обработкой результата
В результате в процедуре ЗаполнитьТД() сначала методом ПолучитьМакет()
получается макет табличного документа с именем, указанным в конструкторе (см. рис.
2.40). Затем создается и выполняется запрос, определенный в конструкторе. Затем
методом ПолучитьОбласть() получаются области табличного документа, заданные в
макете. После этого табличный документ ТабДок, переданный в процедуру, очищается, и
в него методом Вывести() выводятся области заголовка и шапки таблицы, полученные
из макета. Затем начинается автоматическая группировка строк табличного документа
методом НачатьАвтогруппировкуСтрок(), так как в конструкторе запроса с обработкой
результата была по умолчанию включена опция Группировать строки (см. рис. 2.40).
Далее, как и предыдущем случае (см. листинг 2.27), начинается обход трех вложенных
друг в друга выборок – итоговых группировок Клиент, Товар и детальных записей. В
цикле обхода каждой выборки параметры соответствующих областей табличного
документа, определенные в макете, заполняются данными выборок, и затем области с
указанием уровня выборки выводятся в табличный документ методом Вывести().
Параметр Уровень этого метода используется для автоматической группировки строк
результирующего табличного документа.
В заключение заканчивается автоматическая группировка строк табличного документа, и
в него выводятся области подвала документа и подвала таблицы, полученные из макета.
Таким образом, при вызове процедуры ВыводВТабличныйДокумент() в поле табличного
документа мы получим следующий результат (рис. 2.43).
Рис. 2.43. Вывод результата запроса в табличный документ
Мы видим, что в табличном документе записи сгруппированы по клиентам и товарам, по
ним рассчитаны итоги, и мы можем свернуть или развернуть эти уровни благодаря
группировке строк табличного документа.