Бухгалтерия / Говнокод #27064 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 ShilkovNikolay, (Updated )

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

  • Интересно посмотреть на бизнес-правила, сформулированные человеческим языком, легшие в основу этого кода
    Ответить
    • Ну, э-э-э, бля, короче, заебень такую вот хуйню, ну, чтобы оно на следующий день в девять утра хуярило, во-о-от.
      Ответить
      • ЕСЛИ БЛЯДЬ ЭТОТ ДОКУМЕНТ ЕЩЕ ХОТЬ ОДНА ПАДЛА ПОСЛЕ ДЕВЯТИ ТРОНЕТ
        Я БЛЯДЬ САМ
        ЛИЧНО
        ПРИДУ УЕБУ ЭТОГО ИДИОТА ЕГО ЖЕ КЛАВИАТУРОЙ
        Ответить
  • Документ разрешено изменять только до 9 утра следующего дня от даты документа
    Ответить
    • Остальная вся логика посвящена исключительно високосным годам и длине месяца?
      Ответить
      • Ну да, классическая же говнолаба, перекочевавшая в продакшен.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                      Вроде бы даже были истории про то, как кто-то таким образом охуел.
                      Ответить
                      • Они разве не по RDP подключаются к своим рабочим компам?
                        Ответить
                        • Это если ты крупный
                          А если ты мелкий, то они ноутбуки домой забирают, и всё
                          Ответить
                          • А если я мелкий и у меня десктоп?
                            Ответить
                            • Ну утащишь его домой, делов то. Это проще, чем весь этот пиздецовый софт переставлять.
                              Ответить
                              • На самом деле это зависит.

                                Очень популярна схема, когда питухи ходят по RDP на какой-то сервер, и там запускают клиент.

                                Во-первых это может оказаться быстрее (протокол может быть жирнее RDP) во-вторых проще и безопаснее: таких петухов из дома пускают прямо по RDP.

                                Но это конечно в конторах средних размеров, где админ это всё осилил
                                Ответить
                                • Не хотел бы я работать админом.
                                  Ответить
                                    • Потому что постоянно надо искать какой-то копромисс между безопасностью, желаниями начальства и потребностями юзеров.
                                      Ответить
                                      • Так ведь и программисту постоянно приходится искать золотую середину между расширяемостью, временем разработки, перформансом, красотой архитектуры итд
                                        Ответить
                                    • Чуть что наебнется - а ты один, и хз что делать. Если опытным напарником, то можно, конечно.
                                      Ответить
            • Композитор Римский-Корсаков и бухгалтер Клиент-Серверный.
              Ответить
    • Можно сократить)

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

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

Добавить комментарий для MAPTbIwKA Отменить ответ

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8