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

    +2

    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
    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, 11 Марта 2021

    Комментарии (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. По ощущениям это как те два стула.
                            Ответить
                            • Еще ДРАКОН есть.
                              http://drakon-editor.sourceforge.net/cpp/c.html - там вот сишку можно генерить так (хотя там си-код тупо вписывается в эти блоки и потом стыкуется через goto).
                              Ответить
                              • > хотя там си-код тупо вписывается в эти блоки и потом стыкуется через goto

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

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