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

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

ID: std437
Type: standard
Canonical HTML: https://v8std.ru/std/437/
Markdown URL: https://v8std.ru/std/437.md
Source path: std/437.md
Aliases: std437, #std437, std 437, стандарт 437
Related:
- diagnostic:acc:254 (https://v8std.ru/diagnostics/acc/254.md; HTML: https://v8std.ru/diagnostics/acc/254/)
- diagnostic:bslls:AssignAliasFieldsInQuery (https://v8std.ru/diagnostics/bslls/AssignAliasFieldsInQuery.md; HTML: https://v8std.ru/diagnostics/bslls/AssignAliasFieldsInQuery/)
- diagnostic:bslls:QueryParseError (https://v8std.ru/diagnostics/bslls/QueryParseError.md; HTML: https://v8std.ru/diagnostics/bslls/QueryParseError/)
- standard:std762 (https://v8std.ru/std/762.md; HTML: https://v8std.ru/std/762/)
External sources: https://its.1c.ru/db/v8std#content:437

## Content

ID: #std437

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

#### 1.

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

#### 2.

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

#### Неправильно
```sdbl
Касса.Валюта
```

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

#### Правильно
```sdbl
Касса.Валюта КАК Валюта
```

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

#### Проверки
[#bslls:AssignAliasFieldsInQuery](https://v8std.ru/diagnostics/bslls/AssignAliasFieldsInQuery/)

#### 2а.

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

#### Проверки
[#bslls:AssignAliasFieldsInQuery](https://v8std.ru/diagnostics/bslls/AssignAliasFieldsInQuery/)

#### 2б.

Пишите ключевое слово `КАК` перед псевдонимом поля источника.

#### Проверки
[#bslls:AssignAliasFieldsInQuery](https://v8std.ru/diagnostics/bslls/AssignAliasFieldsInQuery/)

#### 3.

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

#### Неправильно

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

#### Правильно

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

#### 4.

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

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

#### 5.

При создании объекта `Запрос` указывайте комментарий о цели запроса: какие данные нужны или для чего они используются.

#### 6.1.

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

#### 6.2.

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

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

#### Проверки
[#bslls:QueryParseError](https://v8std.ru/diagnostics/bslls/QueryParseError/)

#### 7.

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

#### 7.1.

Изменение имени поля выборки.

#### Неправильно

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

#### Правильно

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

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

Изменение имени таблицы.

#### Правильно

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

ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТаблицаСправочника", "Справочник." + ИмяСправочника);
```

Изменение имени таблицы. Вариант 2.

#### Правильно

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

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

#### 7.2.

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

#### Неправильно

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

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

#### Правильно

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

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

#### 7.3.

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

#### Неправильно

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

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

#### Правильно

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

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

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

Или

#### Правильно

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

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

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

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

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

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

#### См. также

- [Запросы, динамические списки и отчеты на СКД: требования по локализации](https://v8std.ru/std/762/)

#### Проверки

[#acc:254](https://v8std.ru/diagnostics/acc/254/)
#### Источник

https://its.1c.ru/db/v8std#content:437
