AX 2012 R2: Purchase Requisition not showing as release approve purchase requisition

Recently I faced an issue where Only one specific PR, which has completed the workflow approval cycle; showas the status as ‘Approved’ but still not coming on Release Approve Purchase Requisitions form. During research I found lot of things to check listed like.

1. The green color flag against the PR is missing that could be the reason

2. Purchase Requisition with corresponding “source document ” has incorrect status

Tables>Purchreqline > select the record>copy the value in “source document line” field

tables>source document line> select specific source document line and change the status to “completed”

3. Batch group blank has a selected batch server ?

go to System administration> Setup > Batch Group

Click on the blank batch group then select the batch server tab.

There needs to be a server name selected on the batch server tab

I checked all these specific setting even I created a small job to verify with the form required query.

static void Job44(Args _args)


PurchReqLine PurchReqLine;

PurchReqLine = PurchReqLine::find(5637312081);

info(strFmt(“%1, %2, %3, %4, %5, %6”,PurchReqLine.PurchLineCreated,

PurchReqLine.RequisitionStatus, PurchReqLine.IsPreEncumbranceRequired,

PurchReqLine.IsPurchaseOrderGenerationManual, PurchReqLine.RequisitionPurpose,




Later I found a work around from Microsoft that on specific Purchase Requisition and on the Financial tab click button Reserve budget funds. This should bring your PR to Release approve PRs form to further process.


this community link help me also in solving this problem.

Happy Daxing


Cache on Display method implemented at Form level

Some time you have to write display methods on form level, like you needed inputs from form and need to execute the Calculative logic based on those inputs. Cache on form level display method is not supported resulted we have to use the logic to implement the cache. Below code is an example where I have implemented the cache using Maps. In this specific way we have to define a key and value should be calculated and stored in Map. If on next time we have same key then we do not need to recalculate the value and it will be directly fetched from Map.

Cache will be cleared when form closed and refreshed on reopening the form.

public display Amount mzk_osb_TotalMovement(MainAccount _MainAccount)


GeneralJournalAccountEntry GeneralJournalAccountEntry;

GeneralJournalEntry GeneralJournalEntry;

str key;

DimensionAttributeValueCombination davc;

if (!MapCalcTMov)


MapCalcTMov = new Map(Types::String, Types::Real);


key = strFmt(“%1_%2_%3”, _MainAccount.MainAccountId,StartDate.dateValue(),EndDate.dateValue());

if (! MapCalcTMov.exists(key))


select sum(AccountingCurrencyAmount) from GeneralJournalAccountEntry

join GeneralJournalEntry

where GeneralJournalEntry.RecId == GeneralJournalAccountEntry.GeneralJournalEntry

join davc

where davc.RecId == GeneralJournalAccountEntry.LedgerDimension

&& davc.MainAccount == _MainAccount.RecId

&& GeneralJournalEntry.AccountingDate >=StartDate.dateValue()

&& GeneralJournalEntry.AccountingDate <=EndDate.dateValue()

&& GeneralJournalEntry.Ledger == Ledgerrecid;

MapCalcTMov.insert(key, GeneralJournalAccountEntry.AccountingCurrencyAmount);


return MapCalcTMov.lookup(key);




%d bloggers like this: