|
![]() |
#1 |
Участник
|
AX 2012 CU7, форма SalesCopying, метод CustInvoiceTrans\upDateRemainderCache, некорректный расчет ранее возвращенного кол-ва для заказов отгруженных через функционал отложенного перехода права собственности, также ошибка есть в случае использования функционала проектов.
X++: void upDateRemainderCache(CustInvoiceTrans _custInvoiceTrans) { SalesQty qty; PdsCWInventQty cwQty; SalesLine localSalesLine; // <GEERU> GoodsInRouteInventTransIdDelivery_RU inventTransIdDelivery_RU; // </GEERU> if (!creditNoteReturnRemainder.exists(_custInvoiceTrans.RecId)) { localSalesLine = SalesLine::find(_custInvoiceTrans.InventTransId); [qty, cwQty] = SalesLine::pdsRemainReturnLotQtyAllCreditNote(_custInvoiceTrans.InventTransId, localSalesLine.ProjId); // <GEERU> if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoRU])) { inventTransIdDelivery_RU = _custInvoiceTrans.custInvoiceTrans_RU().InventTransIdDelivery_RU; } if (inventTransIdDelivery_RU) { qty = UnitOfMeasureConverter::convert(-SalesLine::qtyDeliveryToCreditNote_RU(inventTransIdDelivery_RU), UnitOfMeasure::unitOfMeasureIdBySymbol(_custInvoiceTrans.inventTable().inventUnitId()), UnitOfMeasure::unitOfMeasureIdBySymbol(_custInvoiceTrans.SalesUnit), NoYes::Yes, InventTable::itemProduct(_custInvoiceTrans.ItemId)); qty = localSalesLine.type().invoicedInTotal() - qty; } // </GEERU> creditNoteReturnRemainder.insert(_custInvoiceTrans.RecId, qty); cwCreditNoteReturnRemainder.insert(_custInvoiceTrans.RecId, cwQty); } } X++: localSalesLine = SalesLine::find(_custInvoiceTrans.InventTransId); X++: localSalesLine = SalesLine::findInventTransId(_custInvoiceTrans.InventTransId); X++: public server static container pdsRemainReturnLotQtyAllCreditNote( InventTransId _inventTransId, ProjId _projId = SalesLine::find(_inventTransId).ProjId)
__________________
Sergey Nefedov |
|
|
За это сообщение автора поблагодарили: gl00mie (3), S.Kuskov (1). |
![]() |
#2 |
Читатель
|
![]()
\Data Dictionary\Maps\CustVendTrans\exchRateCurToMst
X++: public ExchRate exchRateCurToMst() { ExchRate combinedRate; CustTrans custTrans; VendTrans vendTrans; switch (this.TableId) { case tableNum(CustTrans): combinedRate = custTrans.exchRateCurToMst(); break; case tableNum(VendTrans): combinedRate = vendTrans.exchRateCurToMst(); break; default: Debug::assert(false); } return combinedRate; } Последний раз редактировалось b_nosoff; 23.02.2015 в 21:16. |
|
![]() |
#3 |
Молодой, подающий надежды
|
2012 R3 (думаю в прошлых версиях аналогично)
Если делать лукап по временной таблице на основе постоянной и при этом не вставить никаких записей во времянку, что-то типа X++: InventTable inventTableTmp; SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(InventTable), _ctrl); inventTableTmp.setTmp() /* заполняем времянку по какому-то алгоритму, но записей не нашли и ничего не вставили */ sysTableLookup.addLookupfield(fieldNum(InventTable, ItemId)); sysTableLookup.parmTmpBuffer(inventTableTmp); sysTableLookup.performFormLookup(); ![]() Берем напильник, чиним класс SysTableLookupBase. Заводим глобальную переменную boolean useTmpBuffer X++: Common parmTmpBuffer(Common _buffer = tmpBuffer) { tmpBuffer = _buffer; //--> if (! prmisDefault(_buffer)) { useTmpBuffer = true; } //<-- return tmpBuffer; } protected FormRun formRun() { //...строка 55 //--> //if(useLookupValue && !tmpBuffer) if(useLookupValue && ! tmpBuffer && ! useTmpBuffer) //<-- { } //...строка 117 //--> //if (tmpBuffer) if (tmpBuffer || useTmpBuffer) //<-- } |
|
|
За это сообщение автора поблагодарили: gl00mie (5), Kabardian (4). |
![]() |
#4 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: pedrozzz (4). |