- В этой теме 1 ответ, 2 участника, последнее обновление 15 минут назад сделано .
Просмотр 1 ветки ответов
Просмотр 1 ветки ответов
- Для ответа в этой теме необходимо авторизоваться.
Программирование и администрирование в 1С
База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить ошибку синтаксиса запроса с функцией ЗначениеЗаполнено()?
Ошибка при вызове метода контекста (ОткрытьФорму)
{Обработка.ЖурналДокументовВнутреннегоТовародвижения.Команда.ВнутреннееТовародвижение.МодульКоманды(8)}:ОткрытьФорму(«Обработка.ЖурналДокументовВнутреннегоТовародвижения.Форма.СписокДокументов»,
[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Ошибка при выполнении запроса.
по причине:
{(67, 8)}: Синтаксическая ошибка
И (НЕ <<?>>ЗначениеЗаполнено(&ИспользованиеПроверкиВозможно) ИЛИ &ИспользованиеПроверкиВозможно = ИСТИНА)
Ошибка синтаксиса в запросе вызвана тем, что в условии используется функция ЗначениеЗаполнено(), а она не поддерживается в языке запросов 1С.
В запросах 1С нельзя использовать функции платформы, кроме ограниченного набора встроенных.
Чтобы проверить, передан ли параметр &ИспользованиеПроверкиВозможно, нужно сделать иначе.
В запросах 1С нет прямой проверки на заполненность параметра.
Решения:
1. Передавать параметр всегда, чтобы он был определен (Истина или Ложь).
2. Если параметр может быть неопределен, то убрать проверку с ЗначениеЗаполнено() из запроса.
3. Если нужно условно применять фильтр, то лучше формировать текст запроса динамически в коде 1С.
—
Пример правильного условия, если параметр всегда передается:
| И (&ИспользованиеПроверкиВозможно = ИСТИНА)
—
Если параметр не передается, то условие нужно убрать.
—
Если хотите условно применять фильтр, то в коде 1С сделайте так:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
ТекстЗапроса = " |ВЫБРАТЬ | ... |ГДЕ | РеестрДокументов.ДатаДокументаИБ МЕЖДУ &НачалоПериода И &КонецПериода "; Если ИспользованиеПроверкиВозможно Тогда ТекстЗапроса = ТекстЗапроса + " | И РеестрДокументов.ЧтоТо = Значение "; КонецЕсли; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода); Запрос.УстановитьПараметр("КонецПериода", КонецПериода); |
—
Итог: уберите из запроса вызов ЗначениеЗаполнено(), замените условие на простое сравнение с параметром, который обязательно передается.
—
Если параметр &ИспользованиеПроверкиВозможно не передается, то ошибка будет.
Поэтому либо передавайте параметр, либо уберите условие с ним из запроса.