James Hitz wrote:
As I said earlier, I am quite green with PGSQL, so please bear with me when I ask 
"Stupid" questions...


--- On Mon, 13/10/08, justin <[EMAIL PROTECTED]> wrote:

I just redid the accounting side of an application we have
access to source code, so been here and done this.

If i was not for the rest of the application i would have
completely redone the accounting table layout something like this

Ok with the tables

I would used views and the application to create the tree
list view i think your after. As you also need to know the Open
Balances, Debit, Credits and Closing Balances by accounting period.. One idea is is create a functions that scans through the general_ledger_transactions table to get your values So create a View something like
this

Example would by
   Select Sum(debits) +
           Case when  coa.doIhaveChildren then
                   GetChildAccountDebits(coa.coa_id,
period_id)
            else
                  0.0
            end;
   from general_ledger_transactions, coa,
    where general_ledger_transactions.coad_id = coa.coa_id
              and coa.coa_id = SomPassedAccountID
      group by general_ledger_transactions.period_id, 
general_ledger_transactions.coa_id

I start getting lost : SomPassedAccountID ??? Where is this coming from?
I put this in so the select statement would be limited to a specific account the user would choose from the UI

it can be left out, it just would get all the accounts grouped by accounting period. I added to the group by clause the coad_id so it would not sum all the accounts as just one value.
PassedPeriodID ??? ...and this?

I hope this clarifies things


Create or replace Function GetChildAccountDebits(PassedAccountID integer, PassedPeriodID integer) returns numeric as
$FunctionCode$
begin
  return  Select Sum(debits) +
           Case when  coa.doIhaveChildren then
                   GetChildAccountDebits(coa.coa_id, PassedPeriodID )
            else
                  0.0
            end;
   from general_ledger_transactions, coa,
    where general_ledger_transactions.coa_id= coa_id
         and  coa.parent_id = PassedAccountID
        and general_ledger_transactions.period_id = PassedPeriodID ;
end;
$FunctionCode$
LANGUAGE 'plpgsql' VOLATILE ;

Same as above one would normally limit account balances by accounting Period so only the values posted to that period show up.

Also note Some people have 12 accounting periods aka calendar year others have 13 accounting periods 52 weeks in a year 4 weeks to an accounting period. = 13 periods Also fiscal <http://en.wikipedia.org/wiki/Fiscal_year>years don't have to match to calendar years this is the reason why accounting periods must be identified somehow to group transactions by period.
This creates a loop back which can be dangers if
Parent_account is also a Child_account of itself which creates an endless loop then creates a stack error.

I think this is easy enough to control with a CHECK constraint I think.  
Otherwise, I see the sense in using two columns for transactions - If I were 
writing an application for a bank, then using one column only may have 
potential pitfalls.

The difference between one column or two columns is personal preference like allot things. I prefer two columns as it makes more logical sense to me to split it out. But at presently i'm stuck using a system that uses One column in the gl table. :-(

Reply via email to