Hi,
I need to write a batch job in NAV 2015 that creates vendor payment entries in the G/L Journal and applies them to the relevant vendor invoices. I must use ONE payment entry per vendor. This payment has to be applied to several vendor invoices (always more than 1 invoice per vendor). Normally the user would open page 233 (Apply Vendor Entries), mark all the invoices, Close the page with OK and post the Journal. Since I cannot use a page that opens in my batch job I have filled out the field "Applies-to ID" on the General Journal (vendor payment) as well as on all the vendor ledger entries (invoices) against which the payment shall be applied. I also made sure the field "Amount to Apply" on the vendor ledger entries (invoices) is filled out with the remaining amount of the relevant ledger entry. When I post the journal the payment is registered, the balance of the vendor is zero. So far so good. But - the payment and the invoices are all still open. The entries were not applied.
I have been searching/testing for hours and I can't find what I am still missing. When I mark the entries through page 233 (Apply Vendor Entries) and post, then everything is fine.
Here is the code that I used for testing:
GLJournal.RESET;
GLJournal.SETRANGE(GLJournal."Journal Batch Name",'STANDARDA');
IF GLJournal.FINDFIRST THEN BEGIN
CLEAR(VendEntry);
VendEntry.SETCURRENTKEY("Vendor No.",Open);
VendEntry.SETRANGE("Vendor No.",'K8118');
VendEntry.SETRANGE(Open,TRUE);
IF VendEntry.FINDSET THEN REPEAT
VendEntry.VALIDATE("Applies-to ID",GLJournal."Document No.");
VendEntry.CALCFIELDS("Remaining Amount");
VendEntry.VALIDATE("Amount to Apply",VendEntry."Remaining Amount");
VendEntry.MODIFY;
UNTIL VendEntry.NEXT = 0;
GLJournal.VALIDATE("Applies-to ID",GLJournal."Document No.");
CODEUNIT.RUN(CODEUNIT::"Gen. Jnl.-Post",GLJournal);
END;
I would really appreciate if somebody could help me to solve this problem.
Many thanks in advance.
MACL2
0
Answers
1) you are only doing this for the 1st general journal line
2) you are filtering the vendor ledger entry on a hard coded vendor - if the vendor on the first line is different then you won't get any applications posted
3) you are using applies-to ID so you need to set this on the general journal line(s) - same field name
Regards
Thank's for your reply. As I mentioned I used this code for testing. That's why I go only over the first G/L line and the vendor no. is hard coded. If you look at my code then you see that I am using "Applies-to ID" for the G/L line as well as for the vendor ledger entries I want to close.
Regards
...after setting it, the value will be lost otherwise during the batch posting routine.
No PM,please use the forum. || May the <SOLVED>-attribute be in your title!
I tried your suggestion and added "GLJournal.MODIFY" - it helped!
Thanks a lot.
Best regards,
MACL2
Same way I'm also doing , see my code
Documentation()
OnInitReport()
GenJournalLine.SETRANGE("Journal Batch Name",'BANK');
GenJournalLine.SETRANGE("Journal Template Name",'PAYMENT');
OnPreReport()
GenJournalLine.INIT;
GenJournalLine."Posting Date":=020119D;
GenJournalLine."Journal Batch Name":='BANK';
GenJournalLine."Document Type":=GenJournalLine."Document Type"::Payment;
GenJournalLine."Document No.":='ADI9';
GenJournalLine."Journal Template Name":='PAYMENT';
GenJournalLine."Account Type":=GenJournalLine."Account Type"::Vendor;
GenJournalLine."Account No.":="Vendor no";
GenJournalLine."Recipient Bank Account":='ECA';
GenJournalLine."Payment Method Code":='CASH';
GenJournalLine."Bal. Account Type":=GenJournalLine."Bal. Account Type"::"Bank Account";
GenJournalLine."Bal. Account No.":='GIRO';
GenJournalLine."Applies-to Doc. Type":=GenJournalLine."Applies-to Doc. Type"::Invoice;
GenJournalLine.VALIDATE("Applies-to Doc. Type",GenJournalLine."Applies-to Doc. Type"::Invoice);
VendorLedgerEntry.SETRANGE("Vendor No.","Vendor no");
VendorLedgerEntry.SETRANGE("Document Type",VendorLedgerEntry."Document Type"::Invoice);
IF VendorLedgerEntry.FINDSET THEN
REPEAT
VendorLedgerEntry.VALIDATE("Applies-to ID",GenJournalLine."Document No.");
VendorLedgerEntry.CALCFIELDS("Remaining Amount");
VendorLedgerEntry.VALIDATE("Amount to Apply",VendorLedgerEntry."Remaining Amount");
//VendorLedgerEntry.MODIFY;
UNTIL VendorLedgerEntry.NEXT=0;
GenJournalLine.Amount:=-amt;
GenJournalLine.INSERT;
OnPostReport()
//CODEUNIT.RUN(CODEUNIT::"Gen. Jnl.-Post",GenJournalLine);
But I'm getting this error