Файл: Хрусталева Е. Ю. Язык запросов 1С-Предприятия 8 (2013).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.03.2019

Просмотров: 50466

Скачиваний: 8601

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

рассчитываются итоги для полей Клиент и Товар. Соответственно, чтобы обойти
групповые итоги и детальные записи результата запроса, конструктор создал три
вложенных друг в друга цикла для обхода выборок – выборки по группе записей Клиент,
вложенной в нее выборки по группе Товар и вложенной в нее выборки детальных записей.
Для групповых записей получается выборка с типом обхода ПоГруппировкам, а для
детальных записей – с прямым типом обхода.

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

Листинг 2.28. Процедуры для вывода результата запроса в табличный документ

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

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

На закладке конструктора Обработка результатов в группе Тип обработки выберем
опцию Вывод в табличный документ, все остальные опции оставим без изменения (рис.
2.40).


background image

Рис. 2.40. Окно конструктора запроса с обработкой результата

Далее, как и в предыдущем случае, определим исходные данные для запроса. При
выборе из таблицы ЗаказТовара.Состав ссылочных полей Клиент и Товар конструктор
автоматически добавит в список выборки текстовое представление этих полей,
полученное с помощью функции Представление(), рис. 2.41.

Рис. 2.41. Окно конструктора запроса с обработкой результата

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

подробнее

О функции 

Представление()

 рассказано в разделе «

Как получить текстовое представление


background image

ссылочного поля

».

Рекомендации по оптимизации запросов при выводе ссылочных полей в отчет даны в
разделе "

Исключить вывод ссылочных полей в отчет

".

Нажмем ОК. Конструктор запроса создаст подчиненный объект обработки (в которой мы
поместили процедуру для вывода результата запроса в табличный документ) – макет
табличного документа с полями, перечисленными в выборке запроса. Исходя из текста
запроса, в макете присутствуют области итоговых группировок КлиентТовар и область
для вывода детальных записей, а также области для вывода заголовка и подвала
табличного документа, шапки и подвала таблицы (рис. 2.42).

Рис. 2.42. Макет табличного документа, созданный конструктором

Также в функции ЗаполнитьТД() (откуда был вызван конструктор) конструктор запроса с
обработкой результата сформирует следующий фрагмент кода (листинг 2.29).

Листинг 2.29. Фрагмент процедуры для вывода результата запроса в табличный документ, созданный с помощью
конструктора запроса с обработкой результата


background image

В результате в процедуре ЗаполнитьТД() сначала методом ПолучитьМакет()
получается макет табличного документа с именем, указанным в конструкторе (см. рис.
2.40). Затем создается и выполняется запрос, определенный в конструкторе. Затем
методом ПолучитьОбласть() получаются области табличного документа, заданные в
макете. После этого табличный документ ТабДок, переданный в процедуру, очищается, и
в него методом Вывести() выводятся области заголовка и шапки таблицы, полученные
из макета. Затем начинается автоматическая группировка строк табличного документа
методом НачатьАвтогруппировкуСтрок(), так как в конструкторе запроса с обработкой
результата была по умолчанию включена опция Группировать строки (см. рис. 2.40).


background image

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

В заключение заканчивается автоматическая группировка строк табличного документа, и
в него выводятся области подвала документа и подвала таблицы, полученные из макета.

Таким образом, при вызове процедуры ВыводВТабличныйДокумент() в поле табличного
документа мы получим следующий результат (рис. 2.43).

Рис. 2.43. Вывод результата запроса в табличный документ

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