Нет switch/case
В BSL нет оператора множественного выбора по значению — только цепочка ИначеЕсли:
Если Статус = "Новый" Тогда
Действие = "создать";
ИначеЕсли Статус = "ВРаботе" Тогда
Действие = "обработать";
ИначеЕсли Статус = "Закрыт" Тогда
Действие = "архивировать";
Иначе
Действие = "неизвестно";
КонецЕсли;Если веток много и они проверяют одну и ту же переменную на равенство разным константам — альтернатива без длинной цепочки: сложить пары «значение → результат» в Соответствие и вызвать Получить() вместо ИначеЕсли.
?() вычисляет обе ветки всегда
Самая частая ошибка при переходе от Если к ?() — забыть, что это функция, а не сокращённая запись Если: оба значения-аргумента вычисляются, даже то, которое в итоге не вернётся. Подробности и примеры — в заметке про тернарный оператор.
В отличие от ?(), у логических операторов И/ИЛИ короткое замыкание есть — платформа не вычисляет второй операнд, если результат уже ясен по первому. Проверка на <> Неопределено перед обращением к свойству безопасна одной строкой через И, но только если предохранитель стоит первым операндом.
Сравнение через одиночный =
В условиях = — это сравнение на равенство, а не присваивание, несмотря на тот же символ, что и в Переменная = Значение. Разбор без неоднозначности — по контексту (после Если/ИначеЕсли/внутри ?() это всегда сравнение), но при чтении кода легко визуально спутать со присваиванием, особенно в сложных условиях с несколькими =.