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

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
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
// Раздел 1 продолжение, расчет графы 5 и 6.
	Области.П010000105.Значение = Области.П010000205.Значение
	                                         + Области.П010000305.Значение
	                                         + Области.П010000405.Значение
	                                         + Области.П010000505.Значение
	                                         + Области.П010000605.Значение
	                                         + Области.П010000705.Значение
	                                         + Области.П010000805.Значение
	                                         + Области.П010000905.Значение
	                                         + Области.П010001005.Значение
	                                         + Области.П010001105.Значение;
	Если Области.П010000105.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000205.Текст
	                                           + Области.П010000305.Текст
	                                           + Области.П010000405.Текст
	                                           + Области.П010000505.Текст
	                                           + Области.П010000605.Текст
	                                           + Области.П010000705.Текст
	                                           + Области.П010000805.Текст
	                                           + Области.П010000905.Текст
	                                           + Области.П010001005.Текст
	                                           + Области.П010001105.Текст), "ЧН=' '", "ЧН=");
		Области.П010000105.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000105.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	
	Области.П010000106.Значение = Области.П010000206.Значение
	                                         + Области.П010000306.Значение
	                                         + Области.П010000406.Значение
	                                         + Области.П010000506.Значение
	                                         + Области.П010000606.Значение
	                                         + Области.П010000706.Значение
	                                         + Области.П010000806.Значение
	                                         + Области.П010000906.Значение
	                                         + Области.П010001006.Значение
	                                         + Области.П010001106.Значение;
	Если Области.П010000106.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000206.Текст
	                                           + Области.П010000306.Текст
	                                           + Области.П010000406.Текст
	                                           + Области.П010000506.Текст
	                                           + Области.П010000606.Текст
	                                           + Области.П010000706.Текст
	                                           + Области.П010000806.Текст
	                                           + Области.П010000906.Текст
	                                           + Области.П010001006.Текст
	                                           + Области.П010001106.Текст), "ЧН=' '", "ЧН=");
		Области.П010000106.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000106.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	
	Области.П010000107.Значение = Области.П010000207.Значение
	                                         + Области.П010000307.Значение
	                                         + Области.П010000407.Значение
	                                         + Области.П010000507.Значение
	                                         + Области.П010000607.Значение
	                                         + Области.П010000707.Значение
	                                         + Области.П010000807.Значение
	                                         + Области.П010000907.Значение
	                                         + Области.П010001007.Значение
	                                         + Области.П010001107.Значение;
	Если Области.П010000107.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000207.Текст
	                                           + Области.П010000307.Текст
	                                           + Области.П010000407.Текст
	                                           + Области.П010000507.Текст
	                                           + Области.П010000607.Текст
	                                           + Области.П010000707.Текст
	                                           + Области.П010000807.Текст
	                                           + Области.П010000907.Текст
	                                           + Области.П010001007.Текст
	                                           + Области.П010001107.Текст), "ЧН=' '", "ЧН=");
		Области.П010000107.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000107.Формат, ФорматПредставленияНуля);
	КонецЕсли;

zoebis

Запостил: TOPT TOPT, (Updated )

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

  • Разработчики фирмы 1с сделали заполнение формы п-4 таким анрольным способом.
    Ответить
  • >П010000707
    они реально вот эту хуйню руками пишут?
    Ответить
    • Это поди ещё и в законе прописано? Или где там эти форматы документов утверждают.
      Ответить
      • Может быть. Но нельзя как-то.. эээ.. вынести эти прекрасные значения енума в файл "закон.txt" в одному енуму на строчку, отсортировать их там, и оттуда читать?

        Зачем шмат данных мешать с императивным кодом?
        Ответить
        • Я думаю нет, потому что в таких документах часто на каждую строку своя формула и правило по заполнению. Как данные это будет сложно описать.
          Ответить
          • Use DSL, Luke

            Давно пора уже изобрести универсальный декларативный язык для заполнения и валидации всяких говноформ (но тут конечно нужно случайно не получить новый XSLT+XQuery). Буткемп вон недавно рассказывал про такие решения для фронта
            Ответить
            • > DSL

              Как превратить сто строк одинакового кода в тысячу строк разного.
              Ответить
              • Как создать новый хуёвый ЯП, на котором никто кроме его разработчика ничего написать не сможет:)

                На самом деле для выпила бизнес-логики из императивговна есть такие попытки
                https://www.drools.org/ и еще штук пять таких же.

                Но во всех известных мне интерпрайзах все равно кодеры пишут бизнеслогику руками, и хорошо еще если не по три раза в разных частях системы (база, бек, итд)
                Ответить
                • > https://www.drools.org/

                  Ах, эта наивная надежда, что если превратить программирование в рисование и мышководство, то сложность куда-то испарится.
                  Ответить
                  • Скорее это логическое продолжение этого желания:)

                    Классическое "программирование мышкой" пропагандировали в второй половине 90-х, когда текли от RAD систем, и считали, что через пять лет уже никто не будет писать код, а все будут только в Visual Basic соединять ActiveX компоненты. Не выстрелило.

                    "Друлс" это усталость программистов от кода типа
                    if (user.getNumberOfItems() > 4 && user.isEuCitizen()) {

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

                    Ну вот была попытка дать маркетологам инструмент, и сказать "ебитесь сами".

                    Но видимо сложность и монструозность решения превысила возможные бенефиты от гибкости. Да и появляется возможность накастовать бесконечный цикл небось (пишут, что эта хрень тьюринг полная), а виноваты будут программисты..

                    Кстати, DSL из той же области: "сейчас мы напишем мини-язык для маркетологов, и они на нем напишу логику". И всё это тоже обосралось.

                    ЗЫ: А вообще проблема бизнес-требований часто в том, что их сами авторы нихуя не понимают до конца. Запрограммировать их это дело десятое..
                    Ответить
                    • обычно "а давайте отделим бизнес-логику" в лучшем случае проваливается а в худшем рождает настолько обосратое и вендорлокнутое нечто что программисты в итоге пытаются затащить бизнес-логику обратно и при этом еще и поддерживать это потому что аналитики если и высрут скрипты, то мониторить и мейнтейнить высратое точно не будут
                      Ответить
                      • Угу. Причем обосратое получается с одной стороны настолько сложное, что по нему в пору книги на тысячу страниц писать, а с другой стороны недостаточно гибкое, чтобы выразить все хотелки.

                        В общем запрос на решение этой проблемы все таки есть, но решения пока нет. Кто придумает как красиво решить -- тот будет большим молодцом)

                        Я видал совершенно безумные конструкции типа шаблонов страниц и писем на языке FreeMarker, которые лежали в базе, и там в них была какая-то логика:)

                        Программисты говорили "а зато мы можем через веб-морду поправить код прямо в базе"
                        Ответить
                      • Вот этот регистрант всё правильно говорит. Два раза в двух разных конторах это наблюдал (один раз со стороны, к счастью).
                        Первый раз это было про схемы данных. Обосратые диаграммы выпилили и запилили DSL.
                        Второй раз это было про risk engine. Обосратые диаграммы выпилили и заменили на ЙАЖУ. На ЙАЖУ, Карл!
                        Ответить
                      • А если организовать конструктор скриптов из блок-схем?

                        Тогда бизнесмены смогут просто пилить блок-схемы мышкой, а программисты будут переносить эту логику в код. Или вообще использовать генератор скрипта из блоксхемы, чтобы не напрягаться.
                        Ответить
                        • Поздравляю, вы изобрели BPMN: https://ru.wikipedia.org/wiki/BPMN

                          Проблема в том, что бизнесмены не хотят ничего пилить мышкой. Они хотят объяснить тебе примерно требования, и чтобы ты сам всё сделал.

                          Не сделали еще настолько высокоуровневый язык, чтобы в нем можно было писать:

                          "ну типа мы хотим скидку сделать для клиентов в день рождения, но только если они у нас много купили"

                          Всё равно вылезут какие-то низкоуровневые детали.

                          Оказывается, проще программисту послушать хотели бизнеса, и написать всё на сраном питоне, прямо вот захардкодив все бизнес-требования в императивный код!

                          Такая же хуйня, кстати, была с гуем.

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

                            (Начало)
                            V
                            <Если у клиента ДР>
                            V
                            <Если Чек.сумма \> 42>
                            V
                            <Сделать скидку>

                            Хотя, наверное, легче внятное ТЗ попросить предоставить, чем пытаться подсадить всех на такое.
                            Ответить
                            • А потом начнется

                              * но не более одной скидки в сутки
                              * но не более N рублей скидка
                              * а считать цену с НДС или нет? А это зависит от типа клиента

                              и пздц
                              Ответить
                              • А если бизнес-мейкеров заставить обновлять блок-схему, то им быстро станет лень, и изменений станет меньше.
                                Ответить
                                • Бизнес-аналитики они называются.
                                  Они пишут боль-мень формальные документы, но их совершенно не ебет, что для получения суммы тебе нужно сходить в базу, и ты вынужден правильно написать код, что бы не получить N+1, а комптютер пока не умеет за тебя это понять, и превратить документ бизнес-аналитика в правильный код.

                                  И это грустно. Я бы хотел, что бы было такое решение..
                                  Ответить
                                  • > что для получения суммы тебе нужно сходить в базу

                                    Взять дату рождения пользователя из базы, чтобы сделать скидку? Это, конечно, плохо, когда в базу нужно ходить, но вполне вписывается в бизнес логику, которая должна иметь доступ к базе и входным параметрам, чтобы какую-то питушню посчитать и вернуть.

                                    Не вижу ничего страшного в том, чтобы в каком-нибудь заскриптованном сценарии что-то немного подправить и где-то добавить ещё if'ов. Тем более, в документах всё описано.
                                    Ответить
                                    • >Взять дату рождения пользователя из базы, чтобы сделать скидку?

                                      Например да. Или найти все его товары, чтобы посчитать на сколько он денег купил в этом месяце.

                                      Где-то должен существовать хак типа
                                      https://docs.djangoproject.com/en/3.1/ref/models/querysets/#prefetch-related

                                      "...to stop the deluge of database queries that is caused by accessing related objects"

                                      Очевидно, это не часть бизнес-логики. Но если мы не пишем код руками, то где же мы это выразим?

                                      >заскриптованном сценарии что-то немного подправить и где-то добавить ещё if'ов

                                      В смысле сгенерить код по документу, а потом его руками подправить?

                                      Сделать патч, который автоматом бы накладывался на каждую версию?
                                      А потом его поддерживать?
                                      Это не очень-то приятно.
                                      Ответить
                              • это только первый уровень пиздеца

                                а потом окажется что бизнес-схемы надо хранить и желательно историей изменений

                                а еще неплохо бы блоксхемы автоматически деплоить

                                а потом окажется что конвертилка бизнес схем имеет баги

                                а потом окажется что высратый код хочется покрыть аналитикой или если высратый код где-то в клауде крутится то окажется что клауд не волшебный и тоже иногда падает
                                Ответить
                                • >а потом окажется что бизнес-схемы надо хранить и желательно историей изменений

                                  и уметь делать им человекопонятный diff, угу
                                  Ответить
                        • > А если организовать конструктор скриптов из блок-схем?

                          Получишь LabView или Simulink. По ощущениям это как те два стула.
                          Ответить
                            • > хотя там си-код тупо вписывается в эти блоки и потом стыкуется через goto

                              Какой фреймворк для лаб )))
                              Ответить
    • Надеюсь что руками эти идиоты пишут подобные анролы в 2к кол-во строк.
      Ответить
      • Думаешь у них есть какой-то язык, который они конпелируют в 1С?
        Ответить

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

Где здесь C++, guest?!

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


    8