При разработке конфигураций на платформе 1С часто возникают задачи, требующие составления сложных логических выражений. Неправильная расстановка скобок или непонимание приоритетов выполнения операций И, ИЛИ и НЕ приводит к ошибкам, которые сложно отловить при отладке. Рассмотрим подробнее, как приводить логические условия к корректному виду.
Для успешного преобразования выражений нам необходимо опираться на законы Де-Моргана. Они позволяют «заносить» отрицание НЕ внутрь скобок, меняя логические связки на противоположные:
НЕ (А И В) превращается в (НЕ А) ИЛИ (НЕ В).НЕ (А ИЛИ В) превращается в (НЕ А) И (НЕ В).Представим, что мы работаем с алгебраической аналогией: И соответствует операции умножения, ИЛИ — операции сложения, а НЕ — отрицательному знаку. Чтобы корректно раскрыть выражение НЕ(а и не в или с), сначала необходимо явно расставить скобки согласно приоритетам платформы 1С, а затем последовательно применить правила.
Важно помнить, что в 1С операции имеют строгий порядок выполнения. Если в выражении нет явных скобок, сначала выполняется НЕ, затем И, и только в последнюю очередь ИЛИ. Поэтому выражение НЕ (а и не в или с) будет интерпретировано системой как НЕ ((а И (НЕ в)) ИЛИ с).
Давайте разберем по шагам, как упростить такое условие:
НЕ ((а И (НЕ в)) ИЛИ с).НЕ (а И (НЕ в)) И (НЕ с).НЕ (а И (НЕ в)): (НЕ а ИЛИ НЕ(НЕ в)) И (НЕ с).НЕ(НЕ в) — это в: (НЕ а ИЛИ в) И (НЕ с).(НЕ а И (НЕ с)) ИЛИ (в И (НЕ с)).Хотя знание законов алгебры логики полезно, в профессиональной разработке «монструозные» условия часто становятся причиной ошибок сопровождения. Рассмотрим способы упрощения работы с такими конструкциями:
Условие1 = (Цена > 100);
Условие2 = (Продукт = Справочник.Номенклатура.Апельсины);
Если НЕ (Условие1 ИЛИ Условие2) Тогда
// Действия
КонецЕсли;
Помните, что лучший код — это тот, который не требует долгого разбора для понимания условий. Старайтесь избегать глубокой вложенности НЕ и большого количества скобок, заменяя их на понятные проверки переменных.