A1sCode библиотека 1С

A1sQ.Validate

Назначение: быстро проверить, что текст запроса 1С синтаксически корректен и ссылается на существующие объекты/поля.
Результат: Истина при успешном разборе; Ложь при ошибке (и запись в лог, если 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 — конструирование текста запроса.