![]() |
#10 |
MCITP
|
![]()
dax 2009 sp 1
Создание отборочной из отгрузки... Имеет место 2 следующих (на мой сугубо личный взгляд - слабо предсказуемых) эффекта (или бага, как кому нравится), оба связаны с ситуацией, когда строка заказа на продажу коплектуется несколькими отгрузками. Т.е., например, в строке заказа количество 5, из них 2 и 3 обработаны разными отгрузочными и соответсвенно пошли в строки разных отгрузок. 1. При попытке обработать отборочную по двум данным отгрузкам сразу (выделить 2-е на форме отгрузок) обработается только одна из строк отгрузки. Причина: класс SalesTotals_ParmTrans X++: protected void initRecordSortedListLine() { ; recordSortedListLine = new RecordSortedList(tablenum(SalesParmLine)); recordSortedListLine.sortOrder(fieldnum(SalesParmLine, TableRefId), fieldnum(SalesParmLine, OrigSalesId), fieldnum(SalesParmLine, LineNum), fieldnum(SalesParmLine, SalesLineRecId)); } в следствие чего при заполнении в этот лист списка строчек, последняя (с кол-вом 3) перезатрёт предыдущую (с кол-вом 2). Это в классе TradeTotals, метод calc() X++: recordSortedListLine.ins(orderLine); Возможные варианты - либо в этом же методе проверять наличие подобной строки в recordSortedListLine и, если есть - суммировать кол-ва (правда в этом случае придётся отдельно проработать вопрос оставшегося кол-ва по строке). Пробовал на 2009 реализовывать - работает. Как альтернатива (такое у нас реализовывалось на 3-ке) - переделывать запрос на более ранннем этапе - в SalesFormLetter_PackingSlip.chooseLinesFromWMSShipmentSet(). По сравнению с той же 3-кой тут кой-чего уже переделали, некоторые баги поправили, но как-то не до конца. Тут можно переписать, вместо последнего цикла сделать Query по всем имеющимся отгрузкам и изначально просуммировать все нужные кол-ва в одну строку ещё на форме разноска. Как третий вариант (сам не пробовал, может он и нереализуем) - как-то изменить recordSortedListLine.sortOrder для данного случая. 2. Второй баг более тяжело объяснить... Счас будет много местами бессвязных слов, но кто с этим кодом\функционалом разбирался - надеюсь поймёт. Теперь разносим только одну отгрузу из двух описанных выше. Есть метод SalesFormLetter_PackingSlip.resetProformaUponPhysicalUpdatable(), который определяет будет ли реально производится разноска - он работает на основе полей маршрута из WMSOrderTrans и InventTrans. Т.е. можно разносить, только если ещё остались проводки неразнесённые с таким маршрутом. (иначе будет proforma) Появляются следующие проблемы: а) при реальной разноске отборочной эти маршруты никак не учитываются и разнося отборочную по одной отгрузке мы можем разнести проводки по маршруту другой отгрузки. В итоге чтобы разнести отборочную по второй придётся ещё раз разносить её по первой отгрузке. ![]() ![]() А разнося первую мы как бы разнесли вторую. ![]() И вообще когда таких отгрузок много, можно получить много всяких непредсказуемых эффектов с доступностю птички "разноска" при разноске отборочной по различным отгрузкам. б) даже если передположить, что проводки будут разноситься по нужным маршрутам, есть ещё проблема, с количеством. Возвращаемся к примеру с разбитой на 2 отгрузки строкой. 2 и 3. Предположим мы разносим отгрузку с кол-вом 3, уменьшаем там кол-во до 2-х и разносим. Остаётся в одной отгрузке 2, в другой - 1. Теперь пытаемся опять разнести ту же отгрузку. Благодаря методу SalesFormLetter_PackingSlip.createParmLineFromWMSOrderTrans() который проверяет только общее кол-во скомплектованных по строке заказа (без учёта отгрузок и маршрутов), нам опять предложат разнести кол-во 3, и разноска эта пройдёт без проблем, в результате чего разнесётся сразу всё оставшееся кол-во (3). Т.е. разнося одну отгрузку - мы разнесли обе. ![]() Не знаю, может так, конечно, и задумывалось, но со стороны выглядит как-то уж очень кривенько... б) решается, вероятно, довольно просто, если SalesFormLetter_PackingSlip.createParmLineFromWMSOrderTrans() проверять не общее кол-во скомплектованных проводок по строке заказа, X++: InventQty qtyPicked = _salesLine.pickedInTotalInventUnit(); с а) - кажется сложнее, тут надо параметр какой-то в разноску добавлять, что-ли. Возможно из-за лишнего геморроя на этот момент и решили забить. Не такой уж и частый случай, типа... PS sorry за многабукаф, короче не получилось... ![]()
__________________
Zhirenkov Vitaly |
|
Теги |
bug report, баг, ошибка, dynamics |
|
|