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

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

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

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

Добавлен: 12.03.2019

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

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

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

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

Псевдонимы задаются с помощью ключевого слова КАК, после которого следует имя
псевдонима. Имя псевдонима может писаться сразу после имени таблицы (например,
Справочник.Клиенты Клиенты), но наличие ключевого слова КАК повышает
наглядность и удобочитаемость текста запроса.

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

Листинг 1.12. Вывод определенных полей для всех записей из таблицы

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

Если не присваивать псевдонимы полям выборки, то поля выборки будут иметь
«стандартные» имена, соответствующие их именам в таблице запросов. В этом случае
при выборе другого поля в запросе у поля выборки будет другое имя. А если
использовать псевдонимы полей выборки, то имя поля выборки в результате запроса
можно оставить без изменений, только оно уже будет указывать на другое поле в таблице
запроса. Таким образом, при изменении полей выборки запроса алгоритм обработки
результатов будет работать так же, как и раньше.

Для примера сравним две процедуры, в которых выполняется запрос и обрабатываются
его результаты (листинги 1.13, 1.14).

Листинг 1.13. Вывод наименований всех товаров


background image

Листинг 1.14. Вывод англоязычных наименований всех товаров

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

Как расположить полученные записи в нужном порядке
Следующий пример, который мы рассмотрим, показывает простую, но очень важную
возможность языка запросов – возможность упорядочивания записей в результате
запроса.

Важно понимать, что упорядочивание результата запроса – это обязательное правило
хорошего тона при написании работоспособных запросов в «1С:Предприятии». Если не
использовать упорядочивание, то порядок записей в результате запроса будет не
определен. Предугадать его заранее не может ни пользователь, ни даже разработчик.

Например, один и тот же запрос, выполненный на разных СУБД, может дать разный
порядок записей. С точки зрения пользователя, это может показаться странным, а с точки
зрения разработчика, вообще может привести к ошибкам при обработке результатов
запроса, если алгоритм обработки рассчитан на определенный порядок записей.

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


background image

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

Порядок расположения записей в результате запроса определяется в секции
Упорядочивание результатов текста запроса. Все секции запроса приведены на 

рис.

1.13

.

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

Для этого в языке запросов предназначено ключевое слово УПОРЯДОЧИТЬ ПО, после
которого следует список полей упорядочивания и тип упорядочивания (по возрастанию,
по убыванию, по иерархии) для каждого поля.

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

Листинг 1.15. Упорядочивание записей регистра сведений по возрастанию поля «Период»

Обратите внимание, предложение УПОРЯДОЧИТЬ ПО относится к секции
упорядочивания результатов запроса, а предложения ВЫБРАТЬ и ИЗ – к секции описания
запроса. В правилах оформления запросов принято отделять одну секцию запроса от
другой, поэтому между секциями находится пустая строка.

Результат выполнения запроса будет следующим (рис. 1.19).

Рис. 1.19. Вывод записей из таблицы в определенном порядке


background image

Мы видим, что записи таблицы в результате запроса расположены по возрастанию поля,
указанного в предложении УПОРЯДОЧИТЬ ПО, хотя тип упорядочивания не задан. Дело
в том, что упорядочивание записей результата запроса по возрастанию выполняется по
умолчанию, хотя можно указать явно тип упорядочивания. Для этого после имени поля
нужно указать ключевое слово ВОЗР (листинг 1.16).

Листинг 1.16. Упорядочивание записей регистра сведений по возрастанию поля «Период»

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

Листинг 1.17. Упорядочивание записей регистра сведений по возрастанию поля «Период»

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

Чтобы расположить записи результата запроса по убыванию какого-либо поля, нужно в
предложении упорядочивания указать после имени поля ключевое слово УБЫВ. Можно
также упорядочивать иерархические данные по иерархии (этот пример будет рассмотрен

позже

).

В предложении УПОРЯДОЧИТЬ ПО могут участвовать несколько полей, каждое из этих
полей может использовать разный способ упорядочивания (листинг 1.18). В этом случае
записи результата запроса будут упорядочены сначала по первому полю, затем – по
второму полю (в случае, если существует несколько записей с одинаковым значением
первого поля) и т. д.

Листинг 1.18. Упорядочивание записей регистра сведений по нескольким полям


background image

Обратите внимание, что в тексте запроса принято не только поля в списке выборки, но и
поля в списке упорядочивания располагать на разных строках со смещением
относительно ключевого слова УПОРЯДОЧИТЬ ПО.

В результате мы видим, что записи регистра сведений расположены в порядке убывания
поля Период, а внутри одного периода – в порядке возрастания поля Цена (рис. 1.20).

Рис. 1.20. Вывод записей из таблицы в определенном порядке

Как упорядочить записи таблицы по ссылочному полю
В предыдущем примере мы рассматривали, как упорядочить данные результата запроса
по полям примитивных типов – ДатаЧисло и т. п. Но как упорядочить данные по
ссылочному полю?

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

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

В тексте запроса этот режим задается в секции Автоупорядочивание. Все секции
запроса приведены на 

рис. 1.13

.

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