- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 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.Формат, ФорматПредставленияНуля);
КонецЕсли;
они реально вот эту хуйню руками пишут?
Зачем шмат данных мешать с императивным кодом?
Давно пора уже изобрести универсальный декларативный язык для заполнения и валидации всяких говноформ (но тут конечно нужно случайно не получить новый XSLT+XQuery). Буткемп вон недавно рассказывал про такие решения для фронта
Как превратить сто строк одинакового кода в тысячу строк разного.
На самом деле для выпила бизнес-логики из императивговна есть такие попытки
https://www.drools.org/ и еще штук пять таких же.
Но во всех известных мне интерпрайзах все равно кодеры пишут бизнеслогику руками, и хорошо еще если не по три раза в разных частях системы (база, бек, итд)
Ах, эта наивная надежда, что если превратить программирование в рисование и мышководство, то сложность куда-то испарится.
Классическое "программирование мышкой" пропагандировали в второй половине 90-х, когда текли от RAD систем, и считали, что через пять лет уже никто не будет писать код, а все будут только в Visual Basic соединять ActiveX компоненты. Не выстрелило.
"Друлс" это усталость программистов от кода типа
который, к тому же, нужно менять три раза в неделю, потому что маркетологи генерируют новые бизнес-правила.
Ну вот была попытка дать маркетологам инструмент, и сказать "ебитесь сами".
Но видимо сложность и монструозность решения превысила возможные бенефиты от гибкости. Да и появляется возможность накастовать бесконечный цикл небось (пишут, что эта хрень тьюринг полная), а виноваты будут программисты..
Кстати, DSL из той же области: "сейчас мы напишем мини-язык для маркетологов, и они на нем напишу логику". И всё это тоже обосралось.
ЗЫ: А вообще проблема бизнес-требований часто в том, что их сами авторы нихуя не понимают до конца. Запрограммировать их это дело десятое..
В общем запрос на решение этой проблемы все таки есть, но решения пока нет. Кто придумает как красиво решить -- тот будет большим молодцом)
Я видал совершенно безумные конструкции типа шаблонов страниц и писем на языке FreeMarker, которые лежали в базе, и там в них была какая-то логика:)
Программисты говорили "а зато мы можем через веб-морду поправить код прямо в базе"
Первый раз это было про схемы данных. Обосратые диаграммы выпилили и запилили DSL.
Второй раз это было про risk engine. Обосратые диаграммы выпилили и заменили на ЙАЖУ. На ЙАЖУ, Карл!
Тогда бизнесмены смогут просто пилить блок-схемы мышкой, а программисты будут переносить эту логику в код. Или вообще использовать генератор скрипта из блоксхемы, чтобы не напрягаться.
Проблема в том, что бизнесмены не хотят ничего пилить мышкой. Они хотят объяснить тебе примерно требования, и чтобы ты сам всё сделал.
Не сделали еще настолько высокоуровневый язык, чтобы в нем можно было писать:
"ну типа мы хотим скидку сделать для клиентов в день рождения, но только если они у нас много купили"
Всё равно вылезут какие-то низкоуровневые детали.
Оказывается, проще программисту послушать хотели бизнеса, и написать всё на сраном питоне, прямо вот захардкодив все бизнес-требования в императивный код!
Такая же хуйня, кстати, была с гуем.
Вот сейчас дизайнер мышкой соберет 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).
Какой фреймворк для лаб )))