Оформление текстов запросов

#std437

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

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

Методическая рекомендация (полезный совет)

2. Рекомендуется указывать и необязательные конструкции запроса, прежде всего - явно назначать псевдонимы полям, в целях повышения наглядности текста запроса и "устойчивости" использующего его кода. Например, если в алгоритме используется запрос с полем, объявленным как

Касса.Валюта

при изменении имени реквизита нужно будет также изменить и код, осуществляющий обращение по имени свойства Валюта к выборке из результата запроса. Если же поле будет объявлено как

Касса.Валюта КАК Валюта

то изменение имени реквизита приведет только к изменению текста запроса.

2а. Особенно внимательно следует относиться к автоматически присваиваемым псевдонимам для полей – реквизитов других полей, типа "... Касса.Валюта.Наименование...". В приведенном выше примере поле получит автоматический псевдоним ВалютаНаименование, а не Наименование.

2б. Следует обязательно указывать ключевое слово КАК перед псевдонимом поля источника.

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

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

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

5. При создании объекта Запрос рекомендуется указывать комментарии, для получения какой информации или каких иных целей будет использован данный запрос.

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

6.2. Нужно стараться, чтобы каждая часть формируемого запроса могла быть открыта с помощью конструктора запросов

Типичные случаи программной модификации текста запроса

Изменение имени поля выборки или таблицы

Неправильно

ТекстЗапроса =
"ВЫБРАТЬ
| Номенклатура.Наименование  КАК Наименование ,
| Номенклатура. " + ИмяПоляКод + " КАК КодАртикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";


Правильно

ТекстЗапроса =
"ВЫБРАТЬ
| Номенклатура.Наименование  КАК Наименование,
| &ИмяПоляКод  КАК КодАртикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";

ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяПоляКод", "Номенклатура." + ИмяПоляКод);

или аналогично для имени таблицы

ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаСправочника.Наименование КАК Наименование,
| ТаблицаСправочника.Код КАК Код
|ИЗ
| &ТаблицаСправочника КАК ТаблицаСправочника";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТаблицаСправочника", "Справочник." + ИмяСправочника);

или еще один вариант для имени таблицы

ТекстЗапроса =
"ВЫБРАТЬ
| Номенклатура.Наименование  КАК НаименованиеТовара ,
| ЕСТЬNULL(ТаблицаОстатков.ВНаличииОстаток,0) КАК ОстатокТовара
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ #ТаблицаОстатков КАК ТаблицаОстатков
| ПО Номенклатура.Ссылка= ТаблицаОстатков.Номенклатура";

Если ИспользуетсяАдресноеХранение Тогда
 ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаОстатков", "РегистрНакопления.ТоварыВЯчейках.Остатки");
Иначе
 ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаОстатков", "РегистрНакопления.ТоварыНаСкладах.Остатки");
КонецЕсли;

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

Неправильно
ТекстЗапроса =
"ВЫБРАТЬ
|	Контрагенты.Ссылка КАК Ссылка
|// ПОМЕСТИТЬ втКонтрагенты
|ИЗ
|	Справочник.Контрагенты КАК Контрагенты";

Если ВыгрузитьВоВременнуюТаблицу Тогда
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// ПОМЕСТИТЬ", "ПОМЕСТИТЬ");
КонецЕсли;

Правильно

ТекстЗапроса =
"ВЫБРАТЬ
|	Контрагенты.Ссылка КАК Ссылка
|ПОМЕСТИТЬ втКонтрагенты
|ИЗ
|	Справочник.Контрагенты КАК Контрагенты";

Если Не ВыгрузитьВоВременнуюТаблицу Тогда
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПОМЕСТИТЬ втКонтрагенты", "");
КонецЕсли;

Конкатенация нескольких текстов запросов в пакет

Неправильно

ТекстЗапроса = " ";
Если ИспользоватьУпаковки Тогда
  ТекстЗапроса =
  "ВЫБРАТЬ
  | Упаковки.Ссылка КАК Ссылка
  |ИЗ
  | Справочник.Упаковки КАК Упаковки;
  |/////////////////////////////////////////////////////////////
  |";
КонецЕсли;

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

Правильно

ТекстЗапроса = " ";
Если ИспользоватьУпаковки Тогда
  ТекстЗапроса =
  "ВЫБРАТЬ
  | Упаковки.Ссылка КАК Ссылка
  |ИЗ
  | Справочник.Упаковки КАК Упаковки";

  ТекстЗапроса = ТекстЗапроса +
  "
  |;
  |/////////////////////////////////////////////////////////////
  |";
КонецЕсли;

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

Или

Разделитель =
"
|;
|/////////////////////////////////////////////////////////////
|";

ТекстыЗапросовПакета = Новый Массив;

ТекстЗапроса =
"ВЫБРАТЬ
| Упаковки.Ссылка КАК Ссылка
|ИЗ
| Справочник.Упаковки КАК Упаковки";

ТекстыЗапросовПакета.Добавить(ТекстЗапроса);

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

ТекстыЗапросовПакета.Добавить(ТекстЗапроса);
ТекстЗапроса = СтрСоединить(ТекстыЗапросовПакета, Разделитель);

См. также