Wednesday, April 26, 2017

Electronic payment - NACHA file CCD addenda

My customer recently decided they wanted the ability to pay our vendors electronically.  Currently we use the Expense system and pay our employees via AP (Setting up employees as vendors).  We use EFT (Electronic funds transfer) to pay out those expenses.  However, we have been paying vendors via checks. We also needed to be able to pass along the Invoice numbers we were paying.

Our Employees get PPD NACHA files which are designed for personal accounts.  Our 'actual' vendors will get CCD NACHA files which are designed for company accounts.

To set this up, we need to go to Accounts payable -> Setup -> Payment -> Method of payment
Here are the settings I used which are based upon the employee 'EFT' we have setup for expenses.
Then, you need to setup the Payment specification.  This will then indicate that you want the CCD file and not the PPD. 'Payment specification' is located at the top of this form.
Here we have the correct 'Export format' selected.

We will start in the VendOutPaymRecord_NACHA_CCD class.  This is where all of our modifications will be made.  We will also look at the VendOutPaymRecord_NACHA class (the former's parent class) just for help to understand what we are doing.

First we will want to overrid the 'fillField10()' method in the 'CCD' class.
All the code will be the same except:


We changed the '0' that is in the parent class to '1' in the 'CCD' class.  This tells us that the 'Detail' record on our 'CCD' file will contain 1 'Addenda' record. We want our PPD file to remain as it always has with 0 addenda records.

Next we want to go to the 'output()' method on our 'CCD' class and this is where we will 'Fill' our addenda line.  After the 'file.writeExp(nacha_ccd_Recrod);' we can do:


Create the 'FillInvoiceAddenda()' method:
protected container FillInvoiceAddenda()
    container addenda;'7')
    #define.inv('INV ')

    str 80 invoiceAddenda = #seven + #inv + this.parmCustVendPaym().recieversInvoiceNumber();
    addenda = conIns(addenda, 1, invoiceAddenda);

    return addenda;

the 'parmCustVendPaym()' comes from parent classes (If you trace it back it is the CustVendOutPaymRecord class) and it contains pretty much all the information about the 'sender' and the 'reciever'.  Great place to look for additional information.

This is simply a container with 1 record in it.  We define the '7' because that is required for the NACHA file.  The 'INV' is simply extra and is supposed to indicate 'Invoices' to the vendor.  Remember, you only have 80 Characters.  In my case, we were going to show the Invoices on this addenda line.  That could get long depending on how many invoices and how long the invoices are.

Here is a sample of the NACHA CCD file detail and addenda line

43615200325442821342         0000215280V-001001       My Vendor          1GJ-041478000001
705INV123TEST, 123aTEST

***NOTE:  I haven't had a chance to test the addenda lines, however, I'm fairly certain that it will work.
***Update:  Looks like I may need to have '705' for the beginning of my addenda line.

The entire file has more than that, however, there was no need at this point to modify anything else.

That's it.  Incremental CIL and you can test this by 'Generating payments' in a Vendor 'Payment journal'.

Friday, March 17, 2017

Unable to find Vendor Invoice

Unable to find Vendor Invoice

Yesterday, an AX user was attempting to create a Vendor Invoice from a Purchase order.  In the middle of that operation, his client lost connection to the AOS due to a network issue.

After that, we couldn't find the invoice anywhere.  It didn't get posted and it wasn't in 'Pending' or 'Open' Vendor invoices.  After doing a little research, I found this post which had a couple different solutions to try.

Deleting the record in 'Accounts receivable -> Inquiries -> History -> Invoice history and matching details' worked perfectly.

Thanks to 'ERP Software Blog', whoever you are, for the post! 

Monday, August 29, 2016

Expense Workflow Error

We have an expense report workflow setup and a auto posting sub workflow.  
Suddenly, we started to receive the following error:

Failed to find workflow version.

The wording here appears to be important as 'version' could be replaced with 'instance' which would mean something else.

After looking in the history of this workflow, this error has been 'on and off' for about 10 days.  With that inconsistency, an AOS restart seemed to be the best option (and was recommended on a few posts).

The AOS restart did it.  Resumed all the error workflows and everything worked. 

Wednesday, August 24, 2016

SSRS Error with large report

 Client found response content type of 'text/html; charset=utf-8', but expected 'text/xml'.

The request failed with the error message: 

At the moment, I'm not sure why my report is doing this.

Friday, June 3, 2016

Can't e-mail MS Excel from AX

I can run a report and e-mail every report format EXCEPT Excel.  I keep getting a permission error:

The permissions granted to user '(user)' are insufficient for performing this operation.


Such a simple answer for this...  The DAX service account, and other user accounts, must be set up as 'Browser' in the Report folder.

Add a 'New role assignment' and give your DAX service account, user accounts, or user groups access as 'Browser'.

And it works!

Wednesday, May 11, 2016

Error when running large report to batch

When one of my users runs a larger report (500k+ lines) to batch, they receive the following error after about 2 hours:

Excel Rendering Extension: Number of rows exceeds the maximum possible in a worksheet of this version. Rows requested: 552994. Maximum rows: 65536.

Not sure why this is happening at this point.  My SysAdmin can run the same report and batch it to the exact same location (C:\Temp on the AOS machine) and it works fine.

I forgot to post the solution here!  Turns out that my user's client was automatically adding a .xls extension to the excel file name for the batch.  Once we changed that to .xlsx, everything worked peachy!

Wednesday, March 16, 2016

Reverse a Customer reimbursement

In AX 2012, the Customer reimbursement functionality was introduced.  Recently, my customer had done a reimbursement by accident and wanted to reverse it.  Here is one way I found to do that.

Customer setup

To use this functionality you must create a vendor and tie that vendor to the customer. Open the Customer Details and go to the Miscellaneous details fast tab and set your vendor.


For this sample, I am going to make a payment, using a payment journal, against a customer for $100 which will give them a balance of -100.00 (A credit in essence). If you look at the Customer transactions, you can now see the credt of 100.00 with a balanace of -100.00.  This customer is now eligible for a reimbursement.

Accounts receivable -> Periodic -> Reimbursement
**** NOTE ****
You MUST, MUST, MUST put a customer in the query.  If you leave it blank, it will pick up all customers that have a < 0 balance!

If you have successfully created a reimbursement, you will then receive the following infolog:

Now, if you open up your Customer Transactions, you will see the original payment AND the new Reimbursement.  These are automatically settled and you now have a balance of 0.00

Next, open up the Vendor transactions for the related vendor.  You will now see the same Reimbursement on the vendor side with a balance of -100.00.

From here, you can create a Vendor payment proposal in your Vendor payment journal and cut a check for this vendor.  In our case, we want to undo this reimbursement.
One of the problems here is that we can't 'Reverse' this reimbursement transaction like we would normally do with other Vendor and Customer transactions.

This means we need to do a General Journal and manually fix it.
The first line is a Credit of $100.00 to the customer which is the same thing we did for the customer payment.  The offset account will be the bank account originally used.
The second line is a Debit of $100.00 to the vendor with the same offset account. At this point you can also settle the vendor Reimbursement transaction to this Vendor journal line by using Functions -> Settlement. Post.

If you didn't settle in the Journal, then go to Vendor open transactions and settle the 2 $100 transactions against each other.

Now, take a look at our Customer transactions.  We have the extra $100 from the Journal that return us to a $-100.00 balance. This could now be applied to a customer invoice.

Also, look at your Vendor Transactions.  You are now settled back to 0.00.