designing check layouts

I am using 2009 SP1 and i cant seem to find where i can change the report that the checks print out 2 after setting up a new bank account. Here is where it is in 2013 but i am needing 2009 SP1.


It can be a new functionality in NAV2013 as it is under Whats new?

So how would i assign different reports to different bank accounts for printing checks? From the payment Journal form, then under the ‘payments’ drop down, print checks. I have added a new bank account and it is printing from a report (1401) that my other bank accounts do not print from that report but from (50003) and i cant seem to find where they are being assigned…

The method for specifying which report object to run from that menu option is handled through codeunit 229, function PrintCheck, and depends on the settings in table 77 Report Selections. In this case, you’re looking for the Report ID for the entry in Report Selections that has a value in the Usage field of B.Check. The default is 1401, but you can specify an alternate report number if you chose.

Changing the report object from 1401 to 50003 would apply to all checking accounts in that company though. You need a method for using different reports for different bank accounts. There is a standard field in the Bank Account table called Check Report ID, which you can use to store the object id of the report that you want to use to print checks for each account. The downside is that there’s no native NAV functionality to substitute this report for the default report. You’ll have to add that yourself.

I have done that in the past by making multiple entries in the Report Selections table for Usage=B.Check, and then modifying the PrintCheck function in the Print-Document codeunit (229) accordingly. Start by adding an entry in the Report Selections table, one for each of the various checks that you’re using. You’re basically creating a list of Check reports. Be sure to increment the value of the Sequence field as you are entering new records. I’ve found that it’s most flexible to leave the default entry in place (B.Check, ‘’, 1401), and add new entries for the alternate reports and incrementing the Sequence value from 1 to n by 1. This way, if you have a Bank Account record that doesn’t have a specific report defined, you fall back to the default report. (Caveat here … if you don’t add code in the PrintCheck function to filter the list of B.Check entries in Report Selections down to a single entry, then all of the B.Check reports will run, one after the other … not good.)

So now you have all of the setup data in place. Next, you’ll need to modify the PrintCheck function in codeunit 229 Document-Print so that you can filter the Report Selections record based on the value in Bank Account.“Check Report ID”. To do this, you’ll need to inspect the lines in the Payment Journal to determine which Bank Account the checks are being printed against, retrieve that bank account record, and then filter the Report Selection recordset accordingly. You’ll also want to be prepared for the possibility that the journal may include payments against more than one bank account, and you’ll want to provide a method for resolving the journal recordset down to a single bank account. Once you’ve pulled a Bank Account record out of the Journal recordset, you’ll want to filter the Report Selections dataset on “Report ID” field, using the value of BankAccount.“Check Report ID” as the filter expression, or using ‘’ as an expression if BankAccount.“Check Report ID” is blank (0). From that point on, the right check report runs. You don’t NEED to make any other code changes.

Optionally, you can modify your custom check reports such that the value of the Bank Account control on the report’s Request Options form/page (the control where the users enter the Bank Account No. that they want the checks to print against) gets pre-populated based on Bank Account that you used to decide which report to run. Due to the way that the PrintCheck function launches the report, you’ll need to filter the JournalLine recordset on “Bal. Account No.” using BankAccount.“No.” as the filter expression, before the PrintCheck function calls REPORT.RUNMODAL. Then you’ll need to add code in the OnInitReport trigger of each check report to inspect the value of the filter on the “Bal. Account No.” field and apply that to the Bank Account control on the Request Options form/page. It’s a bit of work, and maybe only useful in those infrequent instances where the user might supply a value for Bank Account that disagrees with the contents of the JournalLine. But, it’s spiffy.

Hope that helps.