1. 1C / Говнокод #16758

    −125

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    Попытка
    	// Для редких случаев, когда ЭтотОбъект неопределен
    	// проверку на режим обмена данными делаем через попытку
    	Загрузка = ЭтотОбъект.ОбменДанными.Загрузка;
    	Если Загрузка Тогда
    		// если текущий режим Загрузка, то производим минимум проверок
    		// т.к. все проверки были произведены в ИБ источнике
    		Возврат Ложь;
    	КонецЕсли;
    	ДопЗагрузка = Неопределено;
    	Если НЕ Загрузка Тогда
    		ЭтотОбъект.ДополнительныеСвойства.Свойство("Загрузка",ДопЗагрузка);
    		Загрузка = ?(НЕ ДопЗагрузка = Неопределено,ДопЗагрузка,Загрузка); 
    	КонецЕсли;
    	Если Загрузка Тогда
    		Возврат Ложь;
    	КонецЕсли;
    Исключение КонецПопытки;

    Переменная "Загрузка" может принимать только 2 значения.

    Запостил: Mortum, 24 Сентября 2014

    Комментарии (18) RSS

    • Не вижу ГК. Загрузка изменяется внутри второго блока Если.
      Ответить
      • В 11 строке "Если" один хрен лишнее.
        Ответить
      • Какой смысл все это писать, если все равно возврат ложь
        Ответить
        • Ради кода, который ниже. Тут же явно не вся процедура.
          Ответить
          • 1. Не процедура, а функция.
            2. Так код ниже явно теряет смысл. Потому как полюбому возврат из функции выполняется.
            Т.е. до кода ниже дело так и не дойдет.
            Ответить
            • > Не процедура, а функция.
              Всем похуй :)

              > Так код ниже явно теряет смысл.
              Да как это по-любому? Там же не безусловный возврат лжи.

              Если ЭтотОбъект.ОбменДанными.Загрузка = Ложь, то 5-9 не исполняются, но исполняются 12-13. Если ДопЗагрузка будет неопределенным (ну я 1с не знаю, это догадки) или ложным - Загрузка останется Ложью и 15-17 тоже не исполнятся. Т.е. управление уйдет ниже.

              Ну и, как вариант, в какой-то из строк (в какой - х.з.) может вылететь исключение, и оно заигнорится в строке 18. Управление тоже уйдет ниже.
              Ответить
    • "Попытка" тут вообще не нужна, т.к. "ЭтотОбъект" не может быть неопределен в модуле объекта! Я бы всё переписал так:

      ДопЗагрузка = Ложь;
      ЭтотОбъект.ДополнительныеСвойства.Свойст во("Загрузка",ДопЗагрузка);

      Возврат ЭтотОбъект.ОбменДанными.Загрузка Или ?(ДопЗагрузка = Неопределено, Ложь, ДопЗагрузка);
      Ответить
      • Кстати, а в 1с логические операции как себя ведут с Неопределено? Троичная логика, как в SQL, кидает исключение, или же считается Ложью?
        Ответить
        • Ложь
          Ответить
          • Тогда, получается, можно упростить выражение до няшного:
            Возврат ЭтотОбъект.ОбменДанными.Загрузка Или ДопЗагрузка
            Или не проканает?
            Ответить
            • Если не "загрузка", то дальше идёт программная проверка на права доступа.
              Ответить
            • Да, должно так проканать. Если честно, даже не задумывался, можно ли так написать. В крайнем случае, как вариант:

              Возврат ЭтотОбъект.ОбменДанными.Загрузка Или ДопЗагрузка = Истина;
              - такое точно прокатит :)
              Ответить
    • Комментаторы профессиональные говнокодеры блин...
      Ответить

    Добавить комментарий