- 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.Формат, ФорматПредставленияНуля);
КонецЕсли;
TOPT 11.03.2021 04:52 # 0
MAKAKA 11.03.2021 19:16 # 0
они реально вот эту хуйню руками пишут?
bormand 12.03.2021 00:09 # 0
6oHo6o 12.03.2021 00:14 # 0
Зачем шмат данных мешать с императивным кодом?
bormand 12.03.2021 00:19 # 0
6oHo6o 12.03.2021 00:25 # 0
Давно пора уже изобрести универсальный декларативный язык для заполнения и валидации всяких говноформ (но тут конечно нужно случайно не получить новый XSLT+XQuery). Буткемп вон недавно рассказывал про такие решения для фронта
bormand 12.03.2021 00:33 # +1
Как превратить сто строк одинакового кода в тысячу строк разного.
6oHo6o 12.03.2021 00:39 # +1
На самом деле для выпила бизнес-логики из императивговна есть такие попытки
https://www.drools.org/ и еще штук пять таких же.
Но во всех известных мне интерпрайзах все равно кодеры пишут бизнеслогику руками, и хорошо еще если не по три раза в разных частях системы (база, бек, итд)
CHayT 12.03.2021 01:19 # +3
Ах, эта наивная надежда, что если превратить программирование в рисование и мышководство, то сложность куда-то испарится.
6oHo6o 12.03.2021 01:29 # +1
Классическое "программирование мышкой" пропагандировали в второй половине 90-х, когда текли от RAD систем, и считали, что через пять лет уже никто не будет писать код, а все будут только в Visual Basic соединять ActiveX компоненты. Не выстрелило.
"Друлс" это усталость программистов от кода типа
который, к тому же, нужно менять три раза в неделю, потому что маркетологи генерируют новые бизнес-правила.
Ну вот была попытка дать маркетологам инструмент, и сказать "ебитесь сами".
Но видимо сложность и монструозность решения превысила возможные бенефиты от гибкости. Да и появляется возможность накастовать бесконечный цикл небось (пишут, что эта хрень тьюринг полная), а виноваты будут программисты..
Кстати, DSL из той же области: "сейчас мы напишем мини-язык для маркетологов, и они на нем напишу логику". И всё это тоже обосралось.
ЗЫ: А вообще проблема бизнес-требований часто в том, что их сами авторы нихуя не понимают до конца. Запрограммировать их это дело десятое..
bootcamp_dropout 12.03.2021 01:47 # +1
6oHo6o 12.03.2021 02:01 # +1
В общем запрос на решение этой проблемы все таки есть, но решения пока нет. Кто придумает как красиво решить -- тот будет большим молодцом)
Я видал совершенно безумные конструкции типа шаблонов страниц и писем на языке FreeMarker, которые лежали в базе, и там в них была какая-то логика:)
Программисты говорили "а зато мы можем через веб-морду поправить код прямо в базе"
CHayT 12.03.2021 02:02 # +2
Первый раз это было про схемы данных. Обосратые диаграммы выпилили и запилили DSL.
Второй раз это было про risk engine. Обосратые диаграммы выпилили и заменили на ЙАЖУ. На ЙАЖУ, Карл!
JloJle4Ka 12.03.2021 02:03 # +1
Тогда бизнесмены смогут просто пилить блок-схемы мышкой, а программисты будут переносить эту логику в код. Или вообще использовать генератор скрипта из блоксхемы, чтобы не напрягаться.
6oHo6o 12.03.2021 02:06 # +1
Проблема в том, что бизнесмены не хотят ничего пилить мышкой. Они хотят объяснить тебе примерно требования, и чтобы ты сам всё сделал.
Не сделали еще настолько высокоуровневый язык, чтобы в нем можно было писать:
"ну типа мы хотим скидку сделать для клиентов в день рождения, но только если они у нас много купили"
Всё равно вылезут какие-то низкоуровневые детали.
Оказывается, проще программисту послушать хотели бизнеса, и написать всё на сраном питоне, прямо вот захардкодив все бизнес-требования в императивный код!
Такая же хуйня, кстати, была с гуем.
Вот сейчас дизайнер мышкой соберет UI, а программист натянет на него код. UI продвинулся дальше логики, но в любом сложном проекте всё равно часть UIя управляется кодом..
JloJle4Ka 12.03.2021 02:12 # 0
(Начало)
V
<Если у клиента ДР>
V
<Если Чек.сумма \> 42>
V
<Сделать скидку>
Хотя, наверное, легче внятное ТЗ попросить предоставить, чем пытаться подсадить всех на такое.
6oHo6o 12.03.2021 02:13 # 0
* но не более одной скидки в сутки
* но не более N рублей скидка
* а считать цену с НДС или нет? А это зависит от типа клиента
и пздц
JloJle4Ka 12.03.2021 02:15 # 0
6oHo6o 12.03.2021 02:18 # 0
Они пишут боль-мень формальные документы, но их совершенно не ебет, что для получения суммы тебе нужно сходить в базу, и ты вынужден правильно написать код, что бы не получить N+1, а комптютер пока не умеет за тебя это понять, и превратить документ бизнес-аналитика в правильный код.
И это грустно. Я бы хотел, что бы было такое решение..
JloJle4Ka 12.03.2021 02:27 # 0
Взять дату рождения пользователя из базы, чтобы сделать скидку? Это, конечно, плохо, когда в базу нужно ходить, но вполне вписывается в бизнес логику, которая должна иметь доступ к базе и входным параметрам, чтобы какую-то питушню посчитать и вернуть.
Не вижу ничего страшного в том, чтобы в каком-нибудь заскриптованном сценарии что-то немного подправить и где-то добавить ещё if'ов. Тем более, в документах всё описано.
6oHo6o 12.03.2021 02:31 # +1
Например да. Или найти все его товары, чтобы посчитать на сколько он денег купил в этом месяце.
Где-то должен существовать хак типа
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'ов
В смысле сгенерить код по документу, а потом его руками подправить?
Сделать патч, который автоматом бы накладывался на каждую версию?
А потом его поддерживать?
Это не очень-то приятно.
bootcamp_dropout 12.03.2021 02:21 # +1
а потом окажется что бизнес-схемы надо хранить и желательно историей изменений
а еще неплохо бы блоксхемы автоматически деплоить
а потом окажется что конвертилка бизнес схем имеет баги
а потом окажется что высратый код хочется покрыть аналитикой или если высратый код где-то в клауде крутится то окажется что клауд не волшебный и тоже иногда падает
6oHo6o 12.03.2021 02:22 # +1
и уметь делать им человекопонятный diff, угу
CHayT 12.03.2021 02:07 # +3
Получишь LabView или Simulink. По ощущениям это как те два стула.
j123123 12.03.2021 17:27 # 0
http://drakon-editor.sourceforge.net/cpp/c.html - там вот сишку можно генерить так (хотя там си-код тупо вписывается в эти блоки и потом стыкуется через goto).
JloJle4Ka 12.03.2021 17:34 # +1
Какой фреймворк для лаб )))
TOPT 12.03.2021 03:58 # 0
bormand 14.03.2021 13:11 # 0
3oJIoTou_xyu 14.03.2021 14:55 # 0
Petro-san 14.03.2021 15:05 # 0
nytlenc 16.04.2021 07:21 # −2
TOPT 16.04.2021 09:58 # 0
necKoB 06.09.2022 09:58 # −1
bormanb 07.09.2022 13:03 # 0