[Alimir_BootModal_Login]

Язык запросов 1С 8.3 для начинающих программистов: пакетные запросы и временные таблицы

Автор уроков и преподаватель школы: Владимир Милькин

Пакетные запросы

Пусть у нас есть запрос, выбирающий наименования цветов:

ВЫБРАТЬ
    Наименование КАК Цвет
ИЗ
    Справочник.Цвета

И запрос, выбирающий наименования вкусов:

ВЫБРАТЬ
    Наименование КАК Вкус
ИЗ
    Справочник.Вкусы

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

Вот бы иметь возможность выполнить оба этих запроса последовательно, но в один присест. Так сказать в одном пакете. У платформы есть такая возможность и она называется пакетный запрос.

Чтобы получить пакетный запрос нужно перечислить входящие в него запросы и отделить их друг от друга точкой с запятой.

Таким образом наш пакетный запрос для двух вышеперечисленных запросов будет таким:

ВЫБРАТЬ
    Наименование КАК Цвет
ИЗ
    Справочник.Цвета
 
;
 
ВЫБРАТЬ
    Наименование КАК Вкус
ИЗ
    Справочник.Вкусы

В результате пакетный запрос вернёт нам сразу две таблицы:

01

Разумеется в пакетный запрос может входить и 3 и 4 и сколько угодно запросов. Главное отделять их друг от друга точкой с запятой.

Временные таблицы

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

К примеру, давайте поставим себе цель написать пакетный запрос, который первым запросом выбирает все цвета и помещает их во временную таблицу с именем ТАБЛИЦА_ЦВЕТОВ, вторым запросом выбирает все вкусы и помещает их во временную таблицу с именем ТАБЛИЦА_ВКУСОВ, а третьим запросом делает объединение полученных ранее результатов в одну таблицу:

ВЫБРАТЬ
    Наименование КАК Цвет
ПОМЕСТИТЬ
	ТАБЛИЦА_ЦВЕТОВ
ИЗ
    Справочник.Цвета
 
;
 
ВЫБРАТЬ
    Наименование КАК Вкус
ПОМЕСТИТЬ
	ТАБЛИЦА_ВКУСОВ
ИЗ
    Справочник.Вкусы
 
;
 
ВЫБРАТЬ
    Цвет КАК Поле
ИЗ
    ТАБЛИЦА_ЦВЕТОВ
 
ОБЪЕДИНИТЬ ВСЕ
 
ВЫБРАТЬ
    Вкус
ИЗ
    ТАБЛИЦА_ВКУСОВ

02

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

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

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

Пройдите тест

Начать тест

Домашнее задание

Доработайте решение домашнего задания под пунктом 'в' из урока на объединение, чтобы его результат выглядел вот так:

Подсказки:

  • Поместить результат объединения во временную таблицу.
  • Сгруппировать временную таблицу по полю Склад с суммированием прихода и расхода.
Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся

В заключении модуля

На этом мы заканчиваем рассмотрение языка запросов (впереди вас ждут упражнения для самостоятельно выполнения на эту тему).

Если у вас в будущем (я советую делать это уже после окончания всей школы) возникнет потребность в более глубоком изучении языка запросов - есть замечательная книга Е. Ю. Хрусталёвой "Язык запросов 1С:Предприятия 8".

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

Мы отлично поработали, пора отдохнуть!

Продолжить обучение в школе программирования в 1С

Для учеников

Уровень сложности уроков идёт снизу вверх. Поэтому старайтесь заниматься последовательно, ничего не пропуская и не откладывая на потом.

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

На вопросы учеников — отвечаю по почте,  но прежде загляните в ЧАВО (ссылка) .

С уважением, Владимир Милькин

[Alimir_BootModal_Login]