17.11.2010, 11:00 | #1 |
Участник
|
Как правильно поставить маркировку или снять ее?
Вы извините но облазил форум и не могу найти. ( Как программно поставить маркировку по заказу и снять ее.
PS Axapta 3.0 sp1 Заранее благодарен! |
|
17.11.2010, 11:23 | #2 |
северный Будда
|
Вообще-то маркировку делают по складской проводке, сопоставляя её с другой проводкой. Вам это нужно, или вы про что-то другое говорите?
__________________
С уважением, Вячеслав |
|
17.11.2010, 11:54 | #3 |
Участник
|
Вот код который я нашел ) Но я не знаю насколько он правильный т.е. он работает снимает маркировку к примеру и ставить знаю что ее можно подкорректировать под свои нужды. Мне просто интересно есть ли более простой способ ?
X++: InventTrans _InventTrans; InventTrans InventTrans; InventDim _InventDim; InventDim InventDim; SalesLine _SalesLine; Container con; InventQty qty , qty2; Container res; Map recMAp = new MAp(Types::Integer, Types::Record); Map recMAp2 = new MAp(Types::String, Types::Container); TmpInventTransMark tmp; MapIterator mti, mti2; Map mapMarkNow = new map(types::Integer,types::Record); Str mapKey ; str mapKey( InventTrans invTrans, InventDim invDim ) { return invDim.mapKey()+'#'+enum2Str(invTrans.Direction); } ; While Select _SalesLine where _SalesLine.SalesId == 'КЛ10-0111435' { while select ItemId, TransType, TransRefId, InventTransId, Direction, inventDimId, sum(qty), sum(qtySettled) from _InventTrans group by ItemId, TransType, TransRefId, InventTransId, Direction, inventDimId where _InventTrans.InventTransId == _SalesLine.InventTransId && _InventTrans.ValueOpen == inventTransOpen::Yes && _InventTrans.TransChildType == InventTransChildType::None && _InventTrans.PackingSlipReturned == noYes::No join // maxof(RecId) from _InventDim Where _InventDim.inventDimId == _InventTrans.inventDimId { res = inventTrans::packTmpMark(_inventTrans.ItemId,_inventDim,_inventTrans.InventTransId,_inventTrans.Qty); recMAp2.insert(mapKey, conpeek(res, 1)); } if(recMAp2 && recMAp2.elements()> 0 ) { mti = new MapIterator(recMAp2); mti.begin(); while (mti.more()) { recMAp = map::create(recMAp2.lookup(mti.key())); mti.next(); } } mti = new MapIterator(recMAp); mti.begin(); while (mti.more()) { tmp.data( recMAp.lookup(mti.key())); tmp.insert(); mti.next(); } ttsbegin; while select forupdate tmp where (tmp.TransType == InventTransType::Purch || tmp.TransType == InventTransType::InventTransfer) && tmp.StatusReceipt == StatusReceipt::Ordered && tmp.InventDimId == _SalesLine.InventDimId { Info(strfmt("%1 %2 %3",_SalesLine.ItemId,tmp.InventTransId,tmp.Qty)); if (tmp.QtyMarked) { qty = -tmp.QtyMarked; qty2 = tmp.QtyMarked; } else { qty = _SalesLine.SalesQty; qty2 = -_SalesLine.SalesQty; } tmp.qtyMarkNow = qty; tmp.update(); mapMarkNow.insert(tmp.RecId, tmp); inventTrans.Qty = qty; // inventTrans.costAmountPosted = Qty; inventTrans.TransType = InventTransType::Sales; inventTrans.TransRefId = tmp.TransRefId; inventTrans.InventTransId = _SalesLine.InventTransId; inventTrans.ItemId = _SalesLine.ItemId; //+ снять //- установить if(qty < 0) inventTrans::updateTmpMark(inventTrans.InventTransId, inventDim, qty ,mapMarkNow.pack()); else inventTrans::updateTmpMark(inventTrans.InventTransId, inventDim, -qty ,mapMarkNow.pack()); //Pause; } ttscommit; delete_from tmp; |
|
17.11.2010, 12:02 | #4 |
северный Будда
|
Если вы знаете маркируемый лот InventTransId и маркирующий InventRefTransId, то можно просто использовать
X++: InventTrans::updateMarking(InventTransId, InventRefTransId, Qty) Разумеется, оба лота должны быть несмаркированными ранее
__________________
С уважением, Вячеслав |
|
|
За это сообщение автора поблагодарили: Logger (1), raniel (1). |
17.11.2010, 12:10 | #5 |
Участник
|
Спасибо значит мои догадки оправданы )
|
|
04.12.2010, 23:34 | #6 |
Участник
|
Цитата:
Сообщение от pitersky
Если вы знаете маркируемый лот InventTransId и маркирующий InventRefTransId, то можно просто использовать
X++: InventTrans::updateMarking(InventTransId, InventRefTransId, Qty) Разумеется, оба лота должны быть несмаркированными ранее Предложенный вами способ пропишет ссылку на лот только в одной из проводок, а надо в обе. Тогда уж лучше сделать как тут : \Classes\InventUpd_Estimated\updateReservation X++: markNow = InventTrans::updateMarking(movement.inventRefTransId(), movement.transId(), -reservQty); InventTrans::updateMarking(movement.transId(), movement.inventRefTransId(), markNow); |
|
|
За это сообщение автора поблагодарили: raniel (1). |
Теги |
маркировка |
|
|