If a vendor transaction is reversed but an AP check has been printed (and the payment journal not posted) you may get this error. Essentially the record which was marked for settlement by the check has been deleted so it does not exist (VendTransOpen was deleted when the invoice was reversed). If you go to the line in the accounts payable payment journal and click Inquiries > view marked transactions you will find it blank. AX has lost the relationship of what invoices/credits were settled as part of the payment. There are really two tables involved SpecTrans and VendTransOpen.
First thing we need to know is which transactions were settled by that payment. The check will have the transactions shown in the Bank module. Bank > Checks…select the check…Invoices button. It lists all the transactions paid. Go to the vendor transaction which was paid, click the Open button and remember the RecID of the VendTransOpen record for that transaction.
Find the reversal transaction and revoke the reversal (click the Reverse button when you have the reversal transaction selected). The invoice should now have a balance like any other open invoice.
At this point if the SpecTrans record still exists you can fix it otherwise you must create it. First open the SpecTrans table in the table browser and filter on SpecRecID = the journal line’s RecID. If you find one then just fix the RefRecID to be the record ID of the VendTransOpen record. Otherwise create the missing SpecTrans record by using a job.
static void Job1(Args _args)
{
SpecTrans specTrans;
;
SpecTrans.clear();
SpecTrans.initValue();
SpecTrans.SpecTableId = tablenum(LedgerJournalTrans);
SpecTrans.SpecRecId = 5638151884; // Record ID of the ledger journal line
SpecTrans.LineNum = 1.00;
SpecTrans.Code = "USD";
SpecTrans.Balance01 = -78680.92; // Amount of the invoice which was paid
SpecTrans.RefTableId = tablenum(VendTransOpen);
SpecTrans.RefRecId = 5637622098; // Record ID of the open transaction
SpecTrans.Payment = NoYes::No;
SpecTrans.PaymentStatus = CustVendPaymStatus::Sent;
SpecTrans.ErrorCodePayment = "";
SpecTrans.FullSettlement = NoYes::No;
SpecTrans.insert();
}