Директива компиляции недоступна в этом модуле (CompilationDirectiveNotAllowed)¶
| Тип | Поддерживаются языки |
Важность | Включена по умолчанию |
Время на исправление (мин) |
Теги |
|---|---|---|---|---|---|
Ошибка |
BSL |
Критичный |
Да |
1 |
errorunpredictable |
Описание диагностики¶
Набор директив компиляции зависит от вида модуля:
- в модуле управляемой формы доступны
&НаКлиенте,&НаСервере,&НаСервереБезКонтекста,&НаКлиентеНаСервереБезКонтекста; - в модуле команды доступны
&НаКлиенте,&НаСервере,&НаКлиентеНаСервере; - в общем модуле
&НаКлиентеи&НаСервередополнительно ограничивают контексты, заданные флагами модуля.
Директива из набора другого вида модуля разбирается без синтаксической ошибки, но для этого модуля не описана.
Чаще всего это &НаКлиентеНаСервере в модуле формы вместо &НаКлиентеНаСервереБезКонтекста: метод оказывается
недоступен части вызывающих, а поведение зависит от вида клиента. Например, вызов такого метода из серверной
процедуры формы не компилируется, и форма не открывается.
Для общего модуля проверяется, остаётся ли у метода хотя бы один возможный контекст после применения директивы.
Например, &НаКлиенте исключает метод в общем модуле, у которого включён только флаг «Внешнее соединение».
Директивы &НаСервереБезКонтекста, &НаКлиентеНаСервереБезКонтекста и &НаКлиентеНаСервере
не создают доступного метода общего модуля, даже если включены клиентские и серверные флаги.
Если включена общая настройка supportThickClientFileMode, учитывается
и файловый толстый клиент. В этом случае отсутствие клиентской галки у серверного ОМа само по себе
не делает &НаКлиенте ошибкой объявления: метод может существовать в файловом толстом клиенте.
По умолчанию этот вариант работы исключён, поэтому такой метод считается недоступным.
Вызовы в режимах, где метод отсутствует, отдельно проверяет MemberAccessUnavailable.
Проверка объявления не зависит от выбранных режимов этой диагностики и условий препроцессора вокруг метода.
Если метаданных общего модуля нет, соответствие флагам не предполагается.
Для директивы, не оставляющей доступных контекстов, рекомендация CompilationDirectiveNeedLess не дублируется.
Для допустимой директивы общего модуля эта рекомендация сохраняется.
Примеры¶
Неправильно (модуль формы):¶
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ОбновитьОформление(ЭтотОбъект);
КонецПроцедуры
&НаКлиентеНаСервере
Процедура ОбновитьОформление(Форма)
...
КонецПроцедуры
Правильно:¶
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьОформление(Форма)
...
КонецПроцедуры
Источники¶
- Синтакс-помощник: «Встроенный язык» - «Директивы компиляции»
- Использование директив компиляции и инструкций препроцессора
- Ошибка платформы: &НаКлиентеНаСервере в модуле управляемой формы
Сниппеты¶
Экранирование кода¶
// BSLLS:CompilationDirectiveNotAllowed-off
// BSLLS:CompilationDirectiveNotAllowed-on
Параметр конфигурационного файла¶
"CompilationDirectiveNotAllowed": false