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

    +5

    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
    47. 47
    48. 48
    Функция РазрешеноМенятьЗаявкуПоПравилу9Утра()    
    	
     	_Год    = Год  ( Объект.Дата);
    	_Месяц  = Месяц( Объект.Дата);
    	_День   = День ( Объект.Дата) + 1;
    	
    	Если _День = 29 Тогда
    		Если _Месяц = 2 Тогда
    			
    			Если (_Год - 2016)%4 <> 0 Тогда	
    				
    				_Месяц = 3; _День = 1;
    			КонецЕсли;  
    		КонецЕсли;
    	КонецЕсли;
    	
    	Если _День = 30 Тогда
    		Если (_Месяц = 4) ИЛИ (_Месяц = 6) ИЛИ (_Месяц = 9) ИЛИ (_Месяц = 11) Тогда
    			
    			_Месяц = _Месяц + 1;
    			_День  = 1;
    		КонецЕсли;
    	КонецЕсли;
    	
    	Если _День = 31 Тогда
    		Если (_Месяц = 1) ИЛИ (_Месяц = 3) ИЛИ (_Месяц = 5) ИЛИ (_Месяц = 7) ИЛИ
    			(_Месяц = 8)        Тогда
    			
    			_Месяц = _Месяц + 1;
    			_День  = 1;
    		ИначеЕсли _Месяц = 12  Тогда
    			
    			_Месяц = 1;
    			_День  = 1; 
    		КонецЕсли;
    	КонецЕсли;
    	
    	_9УтраСледующегоДня = Дата( _Год , _Месяц, _День,9,0,0);
    	
    	Если ТекущаяДата() < _9УтраСледующегоДня Тогда
    		
    		Возврат Истина;
    	Иначе
    		
    		Возврат Ложь;
    	КонецЕсли;
    	  
    КонецФункции

    По-моему, достойно Вашего внимания ;)

    Запостил: ShilkovNikolay, 27 Октября 2020

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

    • vanished
      Ответить
      • Ну, э-э-э, бля, короче, заебень такую вот хуйню, ну, чтобы оно на следующий день в девять утра хуярило, во-о-от.
        Ответить
        • // запускать в 9 утра!!11!1
          sleep((12 + 12) * 3600);
          Ответить
        • ЕСЛИ БЛЯДЬ ЭТОТ ДОКУМЕНТ ЕЩЕ ХОТЬ ОДНА ПАДЛА ПОСЛЕ ДЕВЯТИ ТРОНЕТ
          Я БЛЯДЬ САМ
          ЛИЧНО
          ПРИДУ УЕБУ ЭТОГО ИДИОТА ЕГО ЖЕ КЛАВИАТУРОЙ
          Ответить
          • Охуенно! У тебя лучше получилось. Въебал плюс.
            Ответить
          • Я бы с испугу такой же код высрал.
            Ответить
    • Бедненький, как он мучается.
      Ответить
    • Документ разрешено изменять только до 9 утра следующего дня от даты документа
      Ответить
      • vanished
        Ответить
        • Ну да, классическая же говнолаба, перекочевавшая в продакшен.

          P. S. В универе с високосными годами не ебался — не мужик.
          Ответить
          • У меня было где-то логическое выражение, которое проверяло год на високосность, за основу взял признаки из википедии. Я его ещё сократил по карте Карно... Красота!
            Ответить
        • майнингу биткойнов
          Ответить
      • > только до 9 утра

        Когда это было препятствием для опытного бухгалтера?
        Ответить
    • Рад что Вам понравился сей шедевр ректального программирования ;)
      Ответить
    • Здесь не очень распространено выкладывать правильные ответы.
      Но не могу удержаться!

      Функция РазрешеноМенятьЗаявкуПоПравилу9Утра()

      ОДИН_ЧАС = 60 * 60;
      ОДИН_ДЕНЬ = 24 * ОДИН_ЧАС;
      Возврат ТекущаяДата() < (НачалоДня(Объект.Дата) + ОДИН_ДЕНЬ + 9 * ОДИН_ЧАС);

      КонецФункции
      Ответить
      • А что будет, если кто-то системное время передвинет назад, чтобы совершить «коррупцию»? Потом скажут, что это ты оставил бэкдор для злоумышленников, то есть был соучастником.
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • У бухов это право обычно есть, как мне кажется.
            Ответить
            • хм)
              во-первых зачем бы оно им?
              во-вторых я конечно не настоящий сварщик, но мне птички напели, что 1С всё чаще клиент-серверный в наше время, и если это выполняется в районе сервера, то там у бухов точно нет никаких прав
              Ответить
              • > клиент-серверный

                Как показывает практика, их даже https не останавливал от перевода часов... Ну разве что сломанным сертификатом.

                > зачем бы оно им

                Чтобы проводить что-нибудь задним числом.
                Ответить
                • ничево не понял.

                  Перевести часы (да еще и отключить их синхронизацию с NTP) может только админ, или питух со спец привилегией SE_SYSTEMTIME_NAME.

                  Если ты не хочешь иметь много вирусов-вымогателей, шифровальщиков и яндекс-браузеоров, то ты обычно не даешь много прав бухам на их тачках: пусть седят под обычными пользователями

                  Альзо, сбитые часы сломают тебе керберос, а это в домене страшнее сломанного HTTPS.

                  Если же у тебя клиент 1С связанный с 1С сервером, и код выполняется на сервере, то тамошнее время ты вообще никак не поменяешь: я не знаю, есть ли RPC или WS для смены времени, а по RDP буха на сервер никто не пустит
                  Ответить
                  • Ты сейчас про какой-то энтерпрайз. А я про обычную мелочь, где админ один на десяток контор.

                    И да, клиент-сервер их не остановит, они попробуют перевести время. Вдруг время берётся с клиента и всё прокатит. Ну не прокатит - значит нет.
                    Ответить
                    • >Чтобы проводить что-нибудь задним числом.
                      1C:Теневая бухгалтерия

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

                        Вроде бы даже были истории про то, как кто-то таким образом охуел.
                        Ответить
              • Композитор Римский-Корсаков и бухгалтер Клиент-Серверный.
                Ответить
      • Можно сократить)

        ОДИН_ЧАС = 60 * 60;
        Возврат ТекущаяДата() < (КонецДня(Объект.Дата) + 9 * ОДИН_ЧАС);
        Ответить
        • Правильно:
          ОДИН_ЧАС = 60 * 60;
          Возврат ТекущаяДата() < ((КонецДня(Объект.Дата) + 1) + 9 * ОДИН_ЧАС);

          В Вашем варианте получится не 09:00 следующего дня, а 08:59!
          Ответить
          • Я знаю, конечно, про эту секунду. Но исходный код просто неверен (скорее всего, из какой-нибудь лабораторной работы).
            К _День сначала прибавляется единица, а потом идут условия. Т.е. для последнего дня любого месяца - всегда будет исключение.
            + Октябрь вообще пропал, а для 31.12 - год потерялся.
            Ответить

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