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

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

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

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

Добавлен: 12.03.2019

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

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

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

ТаблицаЗначений или ДеревоЗначений, в зависимости от переданного параметра
ТипОбхода.

Если устанавливается прямой тип обхода (по умолчанию), то будет создана таблица
значений, иначе – дерево значений. Далее таблица значений/дерево значений может быть
обработана средствами встроенного языка или показана пользователю в виде таблицы в
форме (листинг 2.32).

Листинг 2.32. Варианты выгрузки результата запроса в таблицу значений

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

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

Листинг 2.33. Заполнение таблицы значений результатами запроса


background image

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

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

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

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

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


background image

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

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

Необходимо иметь в виду, что в данном примере (см. листинг 2.33) второй запрос
выполняется в цикле обхода записей таблицы значений, содержащей результат запроса.
Это сделано в чисто демонстрационных целях, на небольшой демонстрационной базе.
Вообще же таких ситуаций (выполнения запросов в цикле) в целях оптимизации запросов
нужно стараться избегать.

подробнее

Раздел «

Не использовать запросы в цикле

».

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

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

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

Листинг 2.34. Фрагмент процедуры «ЗаполнитьТЗ()»


background image

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

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

Рис. 2.49. Просмотр таблицы значений, содержащей результат запроса

Использование временных таблиц с помощью встроенного языка

В этом разделе мы рассмотрим, как использовать данные временной таблицы с помощью
встроенного языка. В разделе «

Временные таблицы и пакетные запросы

» мы

использовали данные временной таблицы в пакетном запросе. При этом в первом
запросе пакета создавалась временная таблица ПоступлениеТоваров, содержащая
данные о поступлении товаров за определенный период. А во втором запросе пакета
таблица справочника Товары связывалась левым соединением с этой временной
таблицей, и в результате выполнения данного пакетного запроса в консоли запросов мы
получали список всех товаров в порядке иерархии справочника Товары с данными об их
поступлении за период (листинг 2.35).

Листинг 2.35. Вывод всех товаров в порядке иерархии справочника «Товары» с данными об их поступлении за ноябрь


background image

Теперь выполним то же самое из встроенного языка.

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

Чтобы получить доступ к этим данным, используется объект встроенного языка
МенеджерВременныхТаблиц, предназначенный для хранения данных временных таблиц.
Для этого следует создать программный объект МенеджерВременныхТаблиц, затем
создать объект Запрос и связать его с созданным менеджером временных таблиц через
свойство запроса МенеджерВременныхТаблиц (листинг 2.36).

Листинг 2.36. Создание менеджера временных таблиц и установка его связи с запросом

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

Таким образом, пакетный запрос (см. листинг 2.35) можно переписать следующим
образом (листинг 2.37).

Листинг 2.37. Вывод всех товаров в порядке иерархии справочника «Товары» с данными об их поступлении за ноябрь