Image

Let’s suppose we have the following invoice for which we want to obtain a corresponding accounting entry.

Your accounting entry would be as follows:

Before we go into the specific example, we need to make some observations:

Firstly, the transformation is considerably complex, that is, from a two-line invoice we need to generate a six-movement entry (four movements are fixed, and the other two vary according to the number of document lines).

The fixed movements are as follows:

• cash/bank: the invoice Grand Total goes to that account
• Sale: the invoice Sub-Total goes there
• Tax: the invoice taxes go there
• Total Item Costs: the sum of the cost of all products goes there. In our case, DVD: US\$ 30 and mouse: US\$ 10.

In addition, there is a movement per invoice line, with the individual cost corresponding to each line ( product cost * line quantity )

Note that CR = 84+40 = DB = 70+14+30+10.

Secondly, the problem arises in the output, so Data Providers are a natural solution.

And lastly, we’ve declared our intention, and have specified no transformation process; we simply declare the output.

``````Entry
{
EntryDate  = InvoiceDate
EntryDescription = 'Invoice ' + InvoiceId
Movements
{
Movement
{
AccountId = ObtainAccount.udp('Cash/Bank')
MoveType = 'CR'
MoveAmount = InvoiceTotal
}
Movement
{
AccountId = ObtainAccount.udp('Debtors')
MoveType = 'DB'
MoveAmount = InvoiceTotal
}
Movement
{
AccountId = ObtainAccount.udp('TAX')
MoveType = 'CR'
MoveAmount = InvoiceSubTotal * 0.20 	//corresponding to the Tax of 20%
}
Movement
{
AccountId   = AccountForProduct.udp(ProductId)
MoveType    = 'DB'
&MoveAmount = ProductCost.udp(ProductId) * InvoiceLineQuantity
MoveAmount  = &MoveAmount
}
Movement
{
AccountId = ObtainAccount.udp('SaleCost')
MoveType = 'CR'
MoveAmount = &MoveAmount
}
}
}``````

This declaration is very simple, but that doesn’t make it less powerful in the Data Providers. Notice that the example uses formulas; you could also use filters, different types of outputs, and many other things that make Data Providers simple and powerful objects, something that is very difficult to achieve simultaneously.