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

Директива компиляции недоступна в этом модуле (CompilationDirectiveNotAllowed)

Тип Поддерживаются
языки
Важность Включена
по умолчанию
Время на
исправление (мин)
Теги
Ошибка BSL Критичный Да 1 error
unpredictable

Описание диагностики

Набор директив компиляции зависит от вида модуля:

  • в модуле управляемой формы доступны &НаКлиенте, &НаСервере, &НаСервереБезКонтекста, &НаКлиентеНаСервереБезКонтекста;
  • в модуле команды доступны &НаКлиенте, &НаСервере, &НаКлиентеНаСервере;
  • в общем модуле &НаКлиенте и &НаСервере дополнительно ограничивают контексты, заданные флагами модуля.

Директива из набора другого вида модуля разбирается без синтаксической ошибки, но для этого модуля не описана. Чаще всего это &НаКлиентеНаСервере в модуле формы вместо &НаКлиентеНаСервереБезКонтекста: метод оказывается недоступен части вызывающих, а поведение зависит от вида клиента. Например, вызов такого метода из серверной процедуры формы не компилируется, и форма не открывается.

Для общего модуля проверяется, остаётся ли у метода хотя бы один возможный контекст после применения директивы. Например, &НаКлиенте исключает метод в общем модуле, у которого включён только флаг «Внешнее соединение». Директивы &НаСервереБезКонтекста, &НаКлиентеНаСервереБезКонтекста и &НаКлиентеНаСервере не создают доступного метода общего модуля, даже если включены клиентские и серверные флаги.

Если включена общая настройка supportThickClientFileMode, учитывается и файловый толстый клиент. В этом случае отсутствие клиентской галки у серверного ОМа само по себе не делает &НаКлиенте ошибкой объявления: метод может существовать в файловом толстом клиенте. По умолчанию этот вариант работы исключён, поэтому такой метод считается недоступным. Вызовы в режимах, где метод отсутствует, отдельно проверяет MemberAccessUnavailable. Проверка объявления не зависит от выбранных режимов этой диагностики и условий препроцессора вокруг метода. Если метаданных общего модуля нет, соответствие флагам не предполагается.

Для директивы, не оставляющей доступных контекстов, рекомендация CompilationDirectiveNeedLess не дублируется. Для допустимой директивы общего модуля эта рекомендация сохраняется.

Примеры

Неправильно (модуль формы):

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ОбновитьОформление(ЭтотОбъект);
КонецПроцедуры

&НаКлиентеНаСервере
Процедура ОбновитьОформление(Форма)
    ...
КонецПроцедуры

Правильно:

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьОформление(Форма)
    ...
КонецПроцедуры

Источники

Сниппеты

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

// BSLLS:CompilationDirectiveNotAllowed-off
// BSLLS:CompilationDirectiveNotAllowed-on

Параметр конфигурационного файла

"CompilationDirectiveNotAllowed": false