Skip to content

API для статической валидации SDBL-запроса в контексте метаданных #4475

Description

@zeegin

Сценарий

Внешнему инструменту (IDE, CI, AI-агенту) нужно проверить сгенерированный текст запроса 1С до помещения его в модуль и до выполнения в информационной базе.

Сейчас MCP позволяет вызвать analyze_file, но не принять сырой текст SDBL-запроса. Диагностика QueryParseError работает только внутри анализируемого BSL-модуля и проверяет наличие ошибок в дереве разбора, поэтому сама по себе не является API семантической проверки запроса.

Предложение

Дать стабильный вызываемый контракт для валидации сырого текста запроса в контексте метаданных зарегистрированного workspace.

Транспорт не принципиален: MCP tool, отдельная LSP-команда/request, CLI со stdin или Java API. Важно, чтобы потребителю не приходилось создавать временный BSL-модуль и разбирать человекочитаемый лог.

Минимальный вход:

  • текст SDBL-запроса;
  • идентификатор workspace/configuration root, если сервер обслуживает несколько корней.

Минимальный структурированный результат:

  • valid;
  • полнота проверки (syntax_only, metadata_semantics, при наличии иной backend — его явное имя);
  • список диагностик: стабильный код, сообщение, severity и диапазон в исходном тексте запроса;
  • причина деградации, если метаданные не загружены или проверена только грамматика.

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

Воспроизводящий пример

Для конфигурации, где есть Документ.ЗаказКлиента и его табличная часть Товары:

ВЫБРАТЬ
    Заказ.Ссылка
ИЗ
    Документ.ЗаказКлиента КАК Заказ
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.Товары КАК Товары
        ПО Заказ.Ссылка = Товары.Ссылка

Платформа 8.3.27 отклоняет запрос с ошибкой Неоднозначное поле "Товары.Ссылка": имя алиаса совпало с именем табличной части. Обычный разбор SDBL эту проблему не выявляет.

Контроль: если заменить алиас источника на СтрокиТоваров и использовать СтрокиТоваров.Ссылка, запрос проходит проверку платформы.

Критерии приёмки

  • Сырой запрос можно проверить одним вызовом без временного .bsl-файла и без запуска запроса.
  • При доступных метаданных проверяются как минимум имена объектов/полей, области видимости алиасов и неоднозначные ссылки.
  • Пример выше возвращает структурированную ошибку с диапазоном Товары.Ссылка, контрольный вариант — без неё.
  • Если сервер способен проверить только синтаксис, результат прямо помечен как неполный и не выдаётся за полную валидность запроса.
  • Контракт и пример вызова документированы.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions