Перейти к содержанию

Разрываемые тексты запросов - Невозможно разобрать строку, которая выглядит как запрос

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

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

Анализатор разбирает строки кода модулей, чтобы найти качественные недостатки в текстах запроса.

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

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

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

Неправильно

ТекстЗапроса =

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

Правильно

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

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

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

ТекстЗапроса =

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

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

ТекстЗапроса =

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

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

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

Неправильно

ТекстЗапроса = " ";

Если ИспользоватьУпаковки Тогда

ТекстЗапроса =

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

КонецЕсли;

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

Правильно

ТекстЗапроса = " ";

Если ИспользоватьУпаковки Тогда

ТекстЗапроса =

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

ТекстЗапроса = ТекстЗапроса +
"
|;
|/////////////////////////////////////////////////////////////
|";

КонецЕсли;

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

Или

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

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

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

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

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

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

См. также

Экранирование кода

// sonar:ProbablyAQuery:off
// sonar:ProbablyAQuery:on