oknosoft / windowbuilder

Окнософт:Заказ дилера
http://www.oknosoft.ru/zd/
Other
10 stars 19 forks source link

ведущая продукция #545

Closed rnpoddor closed 4 years ago

rnpoddor commented 4 years ago

По первому коммиту. Ошибка происходит когда ведущую продукцию удаляют из заказа, а подчинённая остаётся. Такую продукцию уже пересчитать нельзя, т.к. ссылка на объект характеристики в leading_product становится битой, но в ней остаётся заполненным только ref. Это приводит к empty() == false и обращению к leading_product.calc_order_row, который уже undefined, что приводит к падению на leading_product.calc_order_row.row.

По второму коммиту. Доработка понадобилась чтобы предотвратить удаление подчинённой продукции, если в заказе имеется ведущая. Периодически обращаются с формулировкой - Почему на эскизе изделия имеется антимоскитная сетка, а клиенту её не изготовили? Объясняем, что при добавлении через доп. вставку должна быть еще строка продукции с антимоскитной сеткой. Смотрим историю заказа, оказывается сетку просто удалили, а в ведущем изделии из доп. вставок нет.

Эти решения допускают удаление ведущей продукции с возможностью оставить подчинённые. Это конечно не правильно, с потерей ведущего изделия, подчинённая теряет возможность пересчитываться, т.к. не принадлежит вставке и изделию. Продолжением этих решений может стать удаление подчинённых продукций вместе с ведущей или преобразование подчинённой продукции в параметрическую.

Простите, опять делаю предложение решения в надежде быть отвергнутым.

unpete commented 4 years ago

Код пока не смотрел. Проблема известна со времён УПзП. Там она решалась в форме документа. Естественно, повторить бизнес-логику в форме браузера я не мог по моральным причинам. Это должно кодироваться в самом объекте без привязки к интерфейсу. Удивительно, что о проблеме заговорили только сейчас, но лучше поздно чем никогда.

unpete commented 4 years ago

По первому коммиту, будет !leading_product.empty() && !leading_product.calc_order.empty(). Получение calc_order_row более тяжелая операция

unpete commented 4 years ago

Добавил циклическое удаление ведомых при удалении ведущей.

Напомните народу, что если случайно удалили или отредактировали, к состоянию на момент предыдущей записи можно вернуться командой Перечитать с сервера - есть во всех формах объектов в подменю Все действия - кто-то может не помнить об этой возможности.

rnpoddor commented 4 years ago

Хорошо, напомним.