A1sQ.Validate
Назначение: быстро проверить, что текст запроса 1С синтаксически корректен и ссылается на существующие объекты/поля.
Результат: Истина при успешном разборе; Ложь при ошибке (и запись в лог, если ShowError = Истина).
Результат: Истина при успешном разборе; Ложь при ошибке (и запись в лог, если ShowError = Истина).
Сигнатура
Function Validate(QueryText, ShowError = True) Export
Как работает
// По исходному коду A1sQ
Функция Validate(QueryText, ShowError = Истина) Экспорт
QW = Новый КонструкторЗапроса; // QueryWizard
Попытка
QW.Текст = QueryText; // Парсинг/проверка синтаксиса и идентификаторов
Возврат Истина;
Исключение
Если ShowError Тогда
A1sS.Print("Query validation error: " + ОписаниеОшибки());
КонецЕсли;
Возврат Ложь;
КонецПопытки;
КонецФункции
Почему QueryWizard: установка Текст у КонструкторЗапроса инициирует парсинг языка запросов без выполнения и без подготовки параметров/ВТ. Это быстрый способ отловить синтаксические ошибки ещё до исполнения.
Параметры
- QueryText — строка с текстом запроса 1С.
- ShowError — если Истина (по умолчанию), пишет сообщение об ошибке в лог через A1sS.Print; если Ложь — просто вернёт Ложь без логирования.
Возвращает
Булево — Истина, если парсинг прошёл успешно; Ложь, если возникла ошибка.
Примеры
1) Перед выполнением динамически собранного текста
QT = "
|ВЫБРАТЬ Ссылка, Наименование
|ИЗ Справочник.Номенклатура КАК Ном
|ГДЕ Ном.Родитель = &P";
Если A1sQ.Validate(QT) Тогда
С = A1sQ.ExecuteQ(QT, Родитель);
Иначе
ВызватьИсключение("Текст запроса некорректен, см. лог.");
КонецЕсли;
2) Тихая проверка без логирования
Если Не A1sQ.Validate(QT, Ложь) Тогда
// Просто пропускаем шаг, ничего не пишем в лог
Возврат;
КонецЕсли;
3) Проверка собранных частей (QT/CombineQT)
QTA = A1sQ.QT("Ссылка", "Справочник.Номенклатура");
QTB = A1sQ.QT("Ссылка", "Справочник.Контрагенты");
QT = A1sQ.CombineQT(QTA, QTB) + " УПОРЯДОЧИТЬ ПО Ссылка";
Если A1sQ.Validate(QT) Тогда
ТЗ = A1sQ.Unload(QT);
КонецЕсли;
Нюансы и ограничения
✅ Быстро: не выполняет запрос, только анализирует текст
✅ Удобно для раннего отлова синтаксических ошибок в динамически собранных строках
❗ Не проверяет: существование временных таблиц на момент выполнения, значения/типы параметров, права доступа, объём данных и т.п.
❗ Ошибки «временных» конструкций (например, обращение к ВТ_...) могут проявиться только на этапе выполнения
❗ Сообщение в лог — лишь при ShowError=Истина
Связанные функции
- CreateQSafe — создать Запрос с предварительной валидацией.
- ExecuteByQT / UnloadByQT — безопасные исполнители с Try/Except.
- QT / CombineQT — конструирование текста запроса.