TGViewer
Bear's Rambles | МЕДВЕДЬ ГОВОРИТ... Bear's Rambles | МЕДВЕДЬ ГОВОРИТ... @bearrambles · 128 subscribers
Post #93 196
Сложные условия - верный путь в ад

Многострочные условия занимают прочное место в топе легальных издевательств над людьми, где-то сразу после «пенопластом по стеклу».

Давайте разберёмся как из чего-то ебанного типа (и это ещё не самый плохой пример
Если (ВажныеДанные = ПервоеЗначение
    ИЛИ ВажныеДанные = ВтороеЗначение
    ИЛИ ВажныеДанные = ТретьеЗначение
    //еще много значений
    ИЛИ ВажныеДанные = ЕщеОдноЗначение)
    И (ВажнаяДата >= ЗначениеВажнойДаты
    ИЛИ ВыполнятьВнеЗависимостиОтДаты)
    И СтатусВажныхДанных = ДействительныйСтатус
    И (ВажныеДанные.Свойство = ПервыйВариантСвойства
        ИЛИ ВажныеДанные.Свойство = ВторойВариантСвойства
        ИЛИ ВажныеДанные.Свойство = ТретийВариантСвойства) Тогда
    
    //какой-то код  
КонецЕсли;

сделать нечто удобоваримое.

Что нам может помочь?

Метод # 1. Объединение условий в переменные и/или методы
ЗначениеДанныхВыполняется = ВажныеДанныеНужногоЗначения(ВажныеДанные);
ДатаДанныхЗаебись = ВажныеДанныеПроверкаДаты(ВажныеДанные);
СтатусДанныхСоответствует = СтатусВажныхДанных = ДействительныйСтатус;
ДанныеОбладаютНужнымСвойством = СвойствоДанныхУдовлетворительно(ВажныеДанные);

Если ЗначениеДанныхВыполняется
    И ДатаДанныхЗаебись
    И СтатусДанныхСоответствует
    И ДанныеОбладаютНужнымСвойством Тогда

    //какой-то код
КонецЕсли;

Функция ВажныеДанныеНужногоЗначения(ВажныеДанные)
    Возврат ВажныеДанные = ПервоеЗначение
        ИЛИ ВажныеДанные = ВтороеЗначение
        ИЛИ ВажныеДанные = ТретьеЗначение
        //еще много значений
        ИЛИ ВажныеДанные = ЕщеОдноЗначение;
КонецФункции

Функция ВажныеДанныеПроверкаДаты(ВажныеДанные)
    Возврат ВыполнятьВнеЗависимостиОтДаты
        ИЛИ ВажныеДанные.ВажнаяДата >= ЗначениеВажнойДаты;
КонецФункции

Функция СвойствоДанныхУдовлетворительно(ВажныеДанные)
    Возврат ВажныеДанные.Свойство = ПервыйВариантСвойства
        ИЛИ ВажныеДанные.Свойство = ВторойВариантСвойства
        ИЛИ ВажныеДанные.Свойство = ТретийВариантСвойства;
КонецФункции

Или вообще засунуть все условия в один метод ВажныеДанныеПрошлиПроверки() - что в целом не очень информативно, потому что из тела основного метода не будет очевидно, какие именно проверки выполнялись

Метод # 2. При переборе строгих равенств использовать массив
ПодходящиеЗначения = Новый Массив;
ПодходящиеЗначения.Добавить(ПервоеЗначение);
ПодходящиеЗначения.Добавить(ВтороеЗначение);

ЗначениеДанныхВыполняется = ?(ПодходящиеЗначения.Найти(ВажныеДанные) = Неопределено, Ложь, Истина);


Метод # 3. Использовать логические функции
Операнды = Новый Массив;

Операнды.Добавить(ВажныеДанные = ПервоеЗначение);
Операнды.Добавить(ВажныеДанные = ВтороеЗначение);
Операнды.Добавить(ВажныеДанные = ЕщеОдноЗначение);
ЗначениеДанныхВыполняется = Коньюкция(Операнды);

Операнды.Очистить();

Операнды.Добавить(ВыполнятьВнеЗависимостиОтДаты);
Операнды.Добавить(ВажныеДанные.ВажнаяДата >= ЗначениеВажнойДаты);
ДатаДанныхЗаебись = Дизъюнкция(Операнды);

Операнды.Очистить();

Операнды.Добавить(ВажныхДанных.Свойство = ПервыйВариантСвойства);
Операнды.Добавить(ВажныхДанных.Свойство = ВторойВариантСвойства);
Операнды.Добавить(ВажныхДанных.Свойство = ТретийВариантСвойства);
ДанныеОбладаютНужнымСвойством = Дизъюнкция(Операнды);

Операнды.Очистить();

Операнды.Добавить(ВажныеДанныеНужногоЗначения);
Операнды.Добавить(ДатаДанныхЗаебись);
Операнды.Добавить(СтатусВажныхДанных = ДействительныйСтатус);
Операнды.Добавить(ДанныеОбладаютНужнымСвойством);

Если Коньюкция(Операнды) Тогда
    //какой-то код
КонецЕсли;

Функция Коньюкция(Операнды)
Для Каждого Операнд Из Операнды Цикл
Если Не Операнд Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;

Возврат Истина;
КонецФункции

Функция Дизъюнкция(Операнды)
Для Каждого Операнд Из Операнды Цикл
Если Операнд Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;

Возврат Ложь;
КонецФункции


P.S. Важно понимать, что если Вы опираетесь в логике проверки на ленивое выполнение логических операций платформой - то при переформатировании условий это свойство может быть утеряно и проверки потребуют более тщательного подхода.

#медвежийкодстайл
  • 🔥 4
  • ✍ 1
  • ❤ 1
  • 👍 1
More from @bearrambles
  1. Sep 25, 2026Первый блин комом ли? Итак, стрим закончился. Вайбово было точно. Моё главное опасение был…
  2. Sep 23, 2026Post #136
  3. Sep 9, 2026Пошёл в веб-кам Мне нравится, когда из пары сказанных между делом слов получается что-то и…
  4. Aug 25, 2026Post #134
  5. Aug 24, 2026Всем привет👋 Да, я знаю, что не было значащих постов уже почти 3(!!!!) недели😂 Ну вот та…
  6. Aug 16, 2026Post #132
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →