[ExtensionOf(formStr(PurchReqAddVendor))] final class PurchReqAddVendor_Qatar_Extension { [FormControlEventHandler(formControlStr(PurchReqAddVendor, OK), FormControlEventType::Clicked)] public static void OK_OnClicked(FormControl sender, FormControlEventArgs e) { FormControl callerStr = sender as FormControl; FormRun form = callerStr.formRun(); FormDataSource ds = form.dataSource("PurchReqLine"); //PurchReqLine PurchReqLine = ds.getFirst();//ds.cursor(); PurchReqLine purchReqLineRecord; for (purchReqLineRecord = ds.getFirst(); purchReqLineRecord; purchReqLineRecord = ds.getNext()) { NW_PRToPo prToPo; if(PurchReqTable::find(purchReqLineRecord.PurchReqTable).blanketPO) { ttsbegin; prToPo.PurchReqTable = purchReqLineRecord.PurchReqTable; prToPo.Vendor = purchReqLineRecord.VendAccount; prToPo.insert(); ttscommit; } } } } //---------- [ExtensionOf(tablestr(PurchTable))] final class PurchTable_Extension { void insert(boolean _interCompanySilent, AccountingDate _accountingDate) { NW_PRToPo NW_PRToPo; select firstonly forupdate NW_PRToPo where NW_PRToPo.Vendor == this.InvoiceAccount; //order by RecId desc; if(NW_PRToPo) { str newPoId = this.newNumSequ(NW_PRToPo.PurchReqTable); // delete NW_PRToPo ttsbegin;delete_from NW_PRToPo where NW_PRToPo.Vendor == this.InvoiceAccount;ttscommit; PurchId oldPoId = this.PurchId; // change po id this.PurchId = newPoId; // abort old po id this.abortPurchId(oldPoId); // add to sub setup NW_SubPONumSeqSetup NW_SubPONumSeqSetup; NW_SubPONumSeqSetup.PONo = this.PurchId; ttsbegin;NW_SubPONumSeqSetup.insert();ttscommit; } next insert(_interCompanySilent, _accountingDate); } public void abortPurchId(PurchId purchId) { NumberSequenceTable numSeqTable; numSeqTable = NumberSequenceTable::find(PurchParameters::numRefPurchId().NumberSequenceId); if (numSeqTable.Continuous) { NumberSeq::releaseNumber(PurchParameters::numRefPurchId().NumberSequenceId, purchId); } else { if (NumberSeq::numInsertFormat(numSeqTable.NextRec - 1, numSeqTable.Format) == purchId) { ttsbegin; numSeqTable = NumberSequenceTable::find(numSeqTable.NumberSequenceScope, true); numSeqTable.NextRec--; numSeqTable.doUpdate(); ttscommit; } } } public str newNumSequ(RecId PRRecId) { PurchReqLine PRLine; select firstonly PRLine where PRLine.PurchReqTable == PRRecId; NW_BlanketPoNumSeqSetup seqSetup, seqSetupInsert; DimensionAttributeValueSetStorage dimStorage; dimStorage = DimensionAttributeValueSetStorage::find(PRLine.DefaultDimension); str dep = dimStorage.getDisplayValueByDimensionAttribute(DimensionAttribute::findByName('Department').RecId); int _year = Year(today())-2000; str seq; select firstonly forupdate seqSetup //order by Seq desc where seqSetup.DepId == dep && seqSetup.Year == _year; if(seqSetup) { ttsbegin; seqSetup.Seq +=1; seqSetup.update(); ttscommit; } else { ttsbegin; seqSetup.Year = _year; seqSetup.DepId = dep; seqSetup.Seq = 1; seqSetup.insert(); ttscommit; } //this.blanketPO if(seqSetup.Seq < 10) seq = strFmt('000%1', seqSetup.Seq); //0-9 else if(seqSetup.Seq >= 10 && seqSetup.Seq < 100) seq = strFmt('00%1', seqSetup.Seq); // 10-99 else if(seqSetup.Seq >= 100 && seqSetup.Seq < 1000) seq = strFmt('0%1', seqSetup.Seq); // 100-999 else if(seqSetup.Seq >= 1000) seq = strFmt('%1', seqSetup.Seq); // 1000-9999 return strFmt("COA%1-%2-%3", _year , dep, seq); } }