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

    +1

    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
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    ДействующиеПостановления = Новый Структура;
    			ДействующиеПостановления.Вставить("Постановление914",  ДанныеПечати.Дата < ДатаНачалаПримененияПостановления1137);
    			ДействующиеПостановления.Вставить("Постановление1137", НЕ (ДанныеПечати.Дата < ДатаНачалаПримененияПостановления1137));
    			ДействующиеПостановления.Вставить("Постановление1137_625", ВедетсяУчетНДСПоФЗ56(ДанныеПечати.Дата,ДанныеПечати.ДатаИсправления));
    			ДействующиеПостановления.Вставить("Постановление981", ДействуетПостановление981(ДанныеПечати.Дата,ДанныеПечати.ДатаИсправления));
    			
    			ОпцииПечатиСчетаФактуры.Вставить("ДействующиеПостановления", ДействующиеПостановления);
    			
    			Если ДанныеПечати.КорректировочныйСчетФактура Тогда
    				Если ДействующиеПостановления.Постановление981 Тогда
    					Макет = МакетКорр_981;
    					ЕстьПостановление981 = Истина;
    				ИначеЕсли ДействующиеПостановления.Постановление1137_625 Тогда
    					Макет = МакетКорр_625;
    					ЕстьПостановление1137_625 = Истина;
    				Иначе
    					Макет = МакетКорр;
    					ЕстьПостановление1137 = Истина;
    				КонецЕсли;
    			ИначеЕсли ДействующиеПостановления.Постановление914 Тогда
    				Макет = Макет451;
    				ЕстьПостановление914 = Истина;
    			ИначеЕсли ДействующиеПостановления.Постановление981 Тогда
    				Макет = Макет981;
    				ЕстьПостановление981 = Истина;
    			ИначеЕсли ДействующиеПостановления.Постановление1137_625 Тогда
    				Макет = Макет1137_625;
    				ЕстьПостановление1137_625 = Истина;
    			Иначе
    				Макет = Макет1137;
    				ЕстьПостановление1137 = Истина;
    			КонецЕсли;
    			
    			Если (ЕстьПостановление914 И ЕстьПостановление1137) 
    				ИЛИ (ЕстьПостановление914 И ЕстьПостановление981)
    				ИЛИ ((ЕстьПостановление1137 ИЛИ ЕстьПостановление1137_625) И ЕстьПостановление981) Тогда
    				
    				Текст = НСтр("ru = 'Недоступна одновременная печать счетов-фактур, сформированных по разным постановлениям Правительства РФ'");
    				ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
    					Текст,
    					ДанныеПечати.Ссылка);
    				
    				ТабличныйДокумент.Очистить();
    				Прервать;
    				
    			КонецЕсли;

    Типовая УТ 11.3.4.93, ПечатьОбщихФорм, модуль менеджера

    Что проверяют эти "Если"? Не ошибся ли программист?
    Постановление определяется по дате счета-фактуры. Интересно, как можно сформировать счет-фактуру одновременно "по разным постановлениям Правительства РФ"?

    И мало того, что вторая и третья строки всегда дают противоположный результат. Нет, на всякий случай проверим "Если (ЕстьПостановление914 И ЕстьПостановление1137)".
    Интересно также, как после ИначеЕсли ожидали получить сочетание разных "постановлений"? И почему проверяется всего три неправильных сочетания? Надо больше кода!

    Еще понравилась оригинальная идея завести на каждый элемент структуры отдельную переменную, потом присвоить этой переменной то же, что и в структуре, а потом проверить сочетание этих переменных. Надо заметить, что переменные ЕстьПостановлениеYYYY больше нигде не используются.

    Запостил: romanvk, 10 Ноября 2017

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

    • Небольшой "упс"... Говнокод отменяется, там есть все-таки цикл снаружи. Проверяется несколько счетов-фактур, обработка не может сразу по нескольким макетам напечатать документ.
      Ответить
      • отменяется?
        то-есть вот это ты считаешь ок?
        >>Макет = Макет1137_625;

        ?
        Ответить
        • вероятно, эти макеты где-то ещё могут использоваться. поэтому разрабы их переопределили заранее. а так, ничего плохо в этом нет.
          Ответить
          • А что значат волшебные числа?

            Если это часть domain logic которую мы просто не знаем (например, закон номер 1137) то тогда это и правда нормально.
            Ответить
    • Строки 20-22 это баг или фича? Если фича, то хотя бы ради этого данному коду место на этом сайте.
      Ответить
    • Зато код на 1С понятен каждому, так как написан по-русски. НННННАХУЙ это ваше ООП. Это слишком сложно для средних умов
      Ответить

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