Difference between revisions of "ManPageW FinancialReport"

From ADempiere
Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.
 
(contributing tutorial on howto generate Balance Sheet)
 
(6 intermediate revisions by 2 users not shown)
Line 7: Line 7:
 
under the [[#Contributions|Contributions]] Section
 
under the [[#Contributions|Contributions]] Section
  
<!-- Note to editors: NOT MODIFY THIS CODE -->
+
<!-- Note to editors: DON'T MODIFY THIS CODE -->
{{:ManPageW_FinancialReport_olh}}
+
{{:Adempiere{{CURRENTMANUALVERSION}}/en/ManPageW_FinancialReport_olh}}
<!-- END Note to editors: NOT MODIFY THIS CODE -->
+
<!-- END Note to editors: DON'T MODIFY THIS CODE -->
 
=Contributions=
 
=Contributions=
 +
 +
=== Functional Description ===
 +
 +
Look here [[Financial_Report_Writer]]
 +
 +
=== Technical Description ===
 +
 +
These reports are based on tables:
 +
* PA_Report
 +
** PA_ReportColumnSet
 +
*** PA_ReportColumn
 +
** PA_ReportLineSet
 +
*** PA_ReportLine
 +
**** PA_ReportSource
 +
* C_AcctSchema
 +
* C_Calendar
 +
 +
The report generator looks on table T_REPORT and invokes org.compiere.report.FinReport process to fill temporary table.
 +
 +
T_REPORT has only 21 columns (0 to 20)
 +
 +
==== org.compiere.report.FinReport ====
 +
===== prepare =====
 +
Fix parameters
 +
 +
Fix where clause based on parameters and hierarchy.
 +
 +
Create a list of accounting periods of tables C_Period and C_Year with fields C_Period_ID, Name, StartDate (first day of month), EndDate (last day of month), YearStartDate (first day of year)
 +
 +
Query:
 +
<pre>
 +
SELECT  p.c_period_id, p.NAME, p.startdate, p.enddate, MIN (p1.startdate)
 +
    FROM c_period p INNER JOIN c_year y ON (p.c_year_id = y.c_year_id),
 +
        c_period p1
 +
  WHERE y.c_calendar_id = ?
 +
    AND p.periodtype = 'S'
 +
    AND p1.c_year_id = y.c_year_id
 +
    AND p1.periodtype = 'S'
 +
GROUP BY p.c_period_id, p.NAME, p.startdate, p.enddate
 +
ORDER BY p.startdate
 +
</pre>
 +
 +
If period field is left blank process takes the period corresponding to TODAY
 +
 +
===== doIt =====
 +
This method insert in T_Report records for the instance of process AD_PInstance_ID, according to the defined ReportLineSet
 +
 +
Query:
 +
<pre>
 +
INSERT INTO t_report
 +
            (ad_pinstance_id, pa_reportline_id, record_id, fact_acct_id,
 +
            seqno, levelno, NAME, description)
 +
  SELECT ?, pa_reportline_id, 0, 0, seqno, 0, NAME, description
 +
    FROM pa_reportline
 +
    WHERE isactive = 'Y' AND pa_reportlineset_id = ?
 +
</pre>
 +
 +
If "Update Balance" is seleted then the process FinBalance.updateBalance is executed, this process update existing Fact_Acct_Balance records from Fact_Acct, and then insert into Fact_Acct_Balance the non existing records in Fact_Acct.
 +
 +
For each line of report type SegmentValue (S)
 +
 +
For each column not calculation gets the select according with the AmountType of line, or of AmountType of column if line has that field blank.
 +
 +
First letter of Amount Type determines the query:
 +
; B : Balance - acctBalance(Account_ID,AmtAcctDr,AmtAcctCr)
 +
; C : Credit - AmtAcctCr
 +
; D : Debit - AmtAcctDr
 +
; Q : Qty - Qty
 +
 +
Then process define the work period, if it's relative subtract/add the relative value of current period for report.
 +
 +
Second letter of Amount Type determines the period:
 +
; P : Period - BETWEEN StartDate AND EndDate
 +
; Y : Year - BETWEEN YearStartDate AND EndDate
 +
; T : Total - <= EndDate
 +
 +
Example of a final query:
 +
<pre>
 +
SELECT SUM (acctbalance (account_id, amtacctdr, amtacctcr))
 +
  FROM fact_acct_balance
 +
WHERE dateacct BETWEEN DATE '2004-01-01' AND DATE '2004-05-31'
 +
</pre>
 +
Moreover to this query conditions are added according to hierarchy and PostingType.
 +
 +
Function acctBalance does the following: returns DB-CR, or returns CR-DB if account is of credit nature.<br>
 +
If account is type N (Natural), then is credit with type is not A or E.<br>
 +
 +
With founded value it updates the columns COL_X of table T_Report.
 +
 +
If the report must list sources then it proceeds to insert details on T_Report.<br>
 +
These lines on T_Report with Level = 1 (or -1 if must be reported before)<br>
 +
Transactions are level = 2 (or -2 if must be reported before)<br>
 +
 +
Then process executes calculations over calculated columns.
 +
 +
===Generating a Financial Report===
 +
*Here we show how to generate a sample [[Balance Sheet]] based on GardenWorld.
 +
 +
[[Category:Manual|W F]]

Latest revision as of 18:24, 5 September 2009

Return to Index

Enjoy it, and help to fill it! But please, always respecting copyright.

Please write your contributions under the Contributions Section



Window: Financial Report

Description : Maintain Financial Reports

Help : Financial Reports are the combination of a Report Column Set and Line Set.



Tab: Financial Report

Description :

Help :

Table Name  : PA_Report

ManPageW FinancialReport FinancialReport.png

Fields

Name Description Help Technical Data
Client Client/Tenant for this installation. A Client is a company or a legal entity. You cannot share data between Clients. Tenant is a synonym for Client. AD_Client_ID

NUMBER(10)

TableDir

Organization Organizational entity within client An organization is a unit of your client or legal entity - examples are store, department. You can share data between organizations. AD_Org_ID

NUMBER(10)

TableDir

Accounting Schema Rules for accounting An Accounting Schema defines the rules used in accounting such as costing method, currency and calendar C_AcctSchema_ID

NUMBER(10)

TableDir

Calendar Accounting Calendar Name The Calendar uniquely identifies an accounting calendar. Multiple calendars can be used. For example you may need a standard calendar that runs from Jan 1 to Dec 31 and a fiscal calendar that runs from July 1 to June 30. C_Calendar_ID

NUMBER(10)

TableDir

Name Alphanumeric identifier of the entity The name of an entity (record) is used as an default search option in addition to the search key. The name is up to 60 characters in length. Name

NVARCHAR2(60)

String

Description Optional short description of the record A description is limited to 255 characters. Description

NVARCHAR2(255)

String

Active The record is active in the system There are two methods of making records unavailable in the system: One is to delete the record, the other is to de-activate the record. A de-activated record is not available for selection, but available for reports.

There are two reasons for de-activating and not deleting records: (1) The system requires the record for audit purposes. (2) The record is referenced by other records. E.g., you cannot delete a Business Partner, if there are invoices for this partner record existing. You de-activate the Business Partner and prevent that this record is used for future entries.

IsActive

CHAR(1)

YesNo

Report Line Set PA_ReportLineSet_ID

NUMBER(10)

TableDir

Report Column Set Collection of Columns for Report The Report Column Set identifies the columns used in a Report. PA_ReportColumnSet_ID

NUMBER(10)

TableDir

Jasper Process The Jasper Process used by the printengine if any process defined JasperProcess_ID

NUMBER(10)

Table

List Sources List Report Line Sources List the Source Accounts for Summary Accounts selected ListSources

CHAR(1)

YesNo

List Transactions List the report transactions List the transactions of the report source lines ListTrx

CHAR(1)

YesNo

Create Report Create Financial Report The default period is the current period. You can optionally enter other restrictions. You can select an alternative Reporting Hierarchy. Processing

CHAR(1)

Button

Print Format Data Print Format The print format determines how data is rendered for print. AD_PrintFormat_ID

NUMBER(10)

TableDir

Create Report (Jasper) Create Financial Report (Jasper) The default period is the current period. You can optionally enter other restrictions. You can select an alternative Reporting Hierarchy. JasperProcessing

CHAR(1)

Button

Contributions

Functional Description

Look here Financial_Report_Writer

Technical Description

These reports are based on tables:

  • PA_Report
    • PA_ReportColumnSet
      • PA_ReportColumn
    • PA_ReportLineSet
      • PA_ReportLine
        • PA_ReportSource
  • C_AcctSchema
  • C_Calendar

The report generator looks on table T_REPORT and invokes org.compiere.report.FinReport process to fill temporary table.

T_REPORT has only 21 columns (0 to 20)

org.compiere.report.FinReport

prepare

Fix parameters

Fix where clause based on parameters and hierarchy.

Create a list of accounting periods of tables C_Period and C_Year with fields C_Period_ID, Name, StartDate (first day of month), EndDate (last day of month), YearStartDate (first day of year)

Query:

SELECT   p.c_period_id, p.NAME, p.startdate, p.enddate, MIN (p1.startdate)
    FROM c_period p INNER JOIN c_year y ON (p.c_year_id = y.c_year_id),
         c_period p1
   WHERE y.c_calendar_id = ?
     AND p.periodtype = 'S'
     AND p1.c_year_id = y.c_year_id
     AND p1.periodtype = 'S'
GROUP BY p.c_period_id, p.NAME, p.startdate, p.enddate
ORDER BY p.startdate

If period field is left blank process takes the period corresponding to TODAY

doIt

This method insert in T_Report records for the instance of process AD_PInstance_ID, according to the defined ReportLineSet

Query:

INSERT INTO t_report
            (ad_pinstance_id, pa_reportline_id, record_id, fact_acct_id,
             seqno, levelno, NAME, description)
   SELECT ?, pa_reportline_id, 0, 0, seqno, 0, NAME, description
     FROM pa_reportline
    WHERE isactive = 'Y' AND pa_reportlineset_id = ?

If "Update Balance" is seleted then the process FinBalance.updateBalance is executed, this process update existing Fact_Acct_Balance records from Fact_Acct, and then insert into Fact_Acct_Balance the non existing records in Fact_Acct.

For each line of report type SegmentValue (S)

For each column not calculation gets the select according with the AmountType of line, or of AmountType of column if line has that field blank.

First letter of Amount Type determines the query:

Balance - acctBalance(Account_ID,AmtAcctDr,AmtAcctCr)
Credit - AmtAcctCr
Debit - AmtAcctDr
Qty - Qty

Then process define the work period, if it's relative subtract/add the relative value of current period for report.

Second letter of Amount Type determines the period:

Period - BETWEEN StartDate AND EndDate
Year - BETWEEN YearStartDate AND EndDate
Total - <= EndDate

Example of a final query:

SELECT SUM (acctbalance (account_id, amtacctdr, amtacctcr))
  FROM fact_acct_balance
 WHERE dateacct BETWEEN DATE '2004-01-01' AND DATE '2004-05-31'

Moreover to this query conditions are added according to hierarchy and PostingType.

Function acctBalance does the following: returns DB-CR, or returns CR-DB if account is of credit nature.
If account is type N (Natural), then is credit with type is not A or E.

With founded value it updates the columns COL_X of table T_Report.

If the report must list sources then it proceeds to insert details on T_Report.
These lines on T_Report with Level = 1 (or -1 if must be reported before)
Transactions are level = 2 (or -2 if must be reported before)

Then process executes calculations over calculated columns.

Generating a Financial Report

  • Here we show how to generate a sample Balance Sheet based on GardenWorld.