Препроцессор: отличить #Если от условия, которое проверяется при запуске

Учебные задачи

В собственном серверном модуле выбираем ветку компиляции, а затем выполняем обычный расчёт и обычное Если над числом.

Где и как запускать

Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.

Подготовка

  1. Используйте отдельную учебную базу без рабочих данных. Создайте серверный общий модуль УчебныйЯзык с флагом Сервер, без Привилегированный.

  2. Вставьте весь модуль выбранного примера, а не одну процедуру внутрь другой. Из своей серверной команды учебной обработки вызовите УчебныйЯзык.ВыполнитьПример().

  3. Все числа, строки и коллекции созданы в самом примере. Документы, регистры, файловая система и сеть не используются; никаких зависимостей от КА2/УНФ/УТ/БП нет.

  4. Браузер показывает код, но не исполняет BSL. Проверки результата нужно выполнить вручную на платформе 8.5.1.1343 в учебной базе.

Процедура ВыполнитьПример() Экспорт
    #Область УчебныйРасчёт
    #Если Сервер Тогда
    СредаКомпиляции = "Сервер";
    #Иначе
    СредаКомпиляции = "Другой контекст";
    #КонецЕсли
    Количество = 3;
    Сумма = Количество * 250;
    Если Количество > 0 Тогда
        Сообщить(Сумма = 750);
    Иначе
        ВызватьИсключение "Количество для учебного расчёта должно быть положительным";
    КонецЕсли;
    Сообщить(СредаКомпиляции = "Сервер");
    #КонецОбласти
КонецПроцедуры

Разбор по шагам

  1. Использовать именно серверный общий модуль из подготовки. Символ Сервер — символ препроцессора, не переменная с числом или строкой.

  2. При компиляции #Если выбирает доступную ветку исходного текста. Другой вариант присваивания не превращается в обычную проверку при каждом вызове.

  3. Символ # требуется перед Если, Иначе и КонецЕсли в блоке препроцессора. У обычной проверки количества таких символов нет.

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

  5. #Область и #КонецОбласти охватывают целый внутренний блок и не пересекаются с обычным Если. Область помогает сворачивать текст, но не задаёт новый контекст или переменную.

Как проверить результат

  1. В указанном серверном модуле две Истина: сумма 750 и выбранная среда Сервер.

  2. Измените количество на 5: выбранная среда остаётся Сервер, сумма становится 1250. Изменение данных при запуске не переключает #Если.

Ожидаемый результат

Препроцессор и обычное ветвление сопоставлены в одном полностью ограниченном учебном модуле.

На что обратить внимание

  1. Не пишите #Если Количество > 0: это не поддерживаемый символ препроцессора. Для переменных времени исполнения используется обычное Если.

  2. Не переносите без изменения пример на клиент и не ожидайте серверной ветки: настройки модуля и режим клиента определяют символы.

  3. #Область не создаёт изоляцию данных. Её границы не должны пересекать границы процедуры, функции или других группируемых блоков.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.