When we create SO from sales agreement, we will face a problem that occur on standard version of AX 2012 if number of sales agreement record are thousands and we only want to choose let’s say 2 or 3 line from sales agreement line to Sales Line.
we can choose records from agreement line by fill the quantity, and the problem is standard AX still will loop all records no matter the quantity is fill or not. and all thosands will going through process that not needed.
Class : SalesAutoCreate\Create
void create() { #OCCRetryCount try { setprefix("@SYS55110"); ttsbegin; while (this.recordExist()) { this.setCust(); setprefix(#PreFixField(CustTable,AccountNum)); this.setSalesTable(); this.setSalesLine(); setprefix(#PreFixField(SalesLine,ItemId)); this.nextRecord(); } this.endUpdate(); ttscommit; } catch (Exception::Deadlock) { retry; } catch (Exception::UpdateConflict) { if (appl.ttsLevel() == 0) { if (xSession::currentRetryCount() >= #RetryNum) { throw Exception::UpdateConflictNotRecovered; } else { retry; } } else { throw Exception::UpdateConflict; } } }
i tried debug and i found the issue that made sales agreement release order process become so slow. and made a modification as below.
Class : SalesAutoCreate_ReleaseFromAgreement\New
protected void new(Common _releaseOrderLine, Object _callBackClass = null, Common _releaseOrderTable = null) { //modify by fanddy //purpose : speeding up release agreement from BMP SalesCreateReleaseOrderLineTmp TIDSalesCreateReleaseOrderLineTmp; releaseOrderLine = _releaseOrderLine as SalesCreateReleaseOrderLineTmp; delete_from releaseOrderLine where releaseOrderLine.SalesQty < 1; //end modify fanddy releaseOrderTable = _releaseOrderTable as SalesCreateReleaseOrderTableTmp; this.firstRecord(); createFromAgreementLine = AgreementLineQuantityCommitment::find(releaseOrderLine.AgreementLineQuantityCommitment, false); createFromSalesAgreement = SalesAgreementHeader::find(createFromAgreementLine.Agreement ? createFromAgreementLine.Agreement : releaseOrderTable.AgreementHeader); currentSalesId = ''; firstRecord = true; super(_releaseOrderLine,_callBackClass); // <GEERU> countryRegion_RU = SysCountryRegionCode::isLegalEntityInCountryRegion([#isoRU]); // </GEERU>
Voila !! Now your when you create an SO with 2-3 SO lines originated from thousands line data of sales agreement, the process has been boosted !!