- 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).
Какой фреймворк для лаб )))