Skip to Content
Technical Articles
Author's profile photo Dai Hashiguchi

Use the new open SQL to get company, account, and monthly gains and losses and balances from ACDOCA.

Introduction

From SAP ERP 6.0 to SAP S / 4, the standard table structure has changed significantly.
I mainly understand it as a change to accommodate reporting.
On the other hand, I feel that there are a minority of developers who can imagine the concrete source code of CodePushdown.
This time, we will introduce a sample program that outputs a monthly increase / decrease amount and balance as a report.
This sample program is created by accessing the ACDOCA of the SAP standard table and using the Code Pushdown design method.
The sample program uses New open SQL.
It is easy to implement a similar design with the following technologies.
・ ABAP CDS view
・ HANA infomation view
・ Composite Provider (SAP BW)
I hope it will help you to imagine the concrete source code of Code Pushdown promoted by SAP.

Subject

The basic idea is to acquire data using ACDOCA as a FactTable.

In preparation, use ITAB to create a DecisionTable to get the balance.

Use the With clause of New open SQL to do three main things.

・ First process
Filters data by selection criteria.
Aggregate on a monthly basis for ACDOCA.

・ Second process
In the first half, you get the increase / decrease value. Use the SQL aggregate function SUM ().
In the second half, you will get the balance. Join ACDOCA and Decision Table with Inner Join.
The record is amplified to get the cumulative amount (balance).

・ Third process
The increase / decrease amount and balance are output as side-by-side items.
Get text information from G / L account master table.

The execution environment is ABAP 7.52 or later.
The SQL instructions to use are as follows.
・ With
・ Select ~ from @itab
・ Inner join
・ Sum () ~ group by
・ Union all

Conclusion

-I think I was able to show a concrete coding example of Code Pushdown.
-The processing speed was ACDOCA: 3 million records, and the response time was 0.1 sec or less.
-Compared to Non-Code Pushdown, the amount of coding is reduced.
-You can expect the effect of suppressing program bugs.
-By introducing the Code Pushdown design method, the following can be achieved.
・ Real Time Repoting
・ Low Cost Development
・ Low Cost Operation
・ Low Cost Maintenance

Supplement

If ITAB cannot be used, a real table will be used instead.
・ ABAP CDS: Add-on Table
-Composite Provider (SAP BW): InfoObject Master Table

You can get a monthly list of all account codes at once by switching the increase / decrease amount and balance using the CASE clause according to the PL account and BS account from the account code master.

The source code is as follows.

 

*&---------------------------------------------------------------------*
*& Report Y_SQL_CONSOLE
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Y_SQL_CONSOLE.

*-----------------------------------------------------------------------
* GLOBAL VARIABLE
*-----------------------------------------------------------------------
DATA GDF_SUBRC TYPE SY-SUBRC.

*-----------------------------------------------------------------------
* CONDITION VIEW
*-----------------------------------------------------------------------
DATA GDF_RLDNR TYPE ACDOCA-RLDNR.
TYPES GTR_RLDNR LIKE RANGE OF GDF_RLDNR.
SELECT-OPTIONS S_RLDNR FOR GDF_RLDNR DEFAULT '0L'."Ledger in General Ledger Accounting,

DATA GDF_RBUKRS TYPE ACDOCA-RBUKRS.
TYPES GTR_RBUKRS LIKE RANGE OF GDF_RBUKRS.
SELECT-OPTIONS S_RBUKRS FOR GDF_RBUKRS.           "Company Code

DATA GDF_RACCT TYPE ACDOCA-RACCT.
TYPES GTR_RACCT LIKE RANGE OF GDF_RACCT.
SELECT-OPTIONS S_RACCT FOR GDF_RACCT.             "Account Number

*-----------------------------------------------------------------------
* START-OF-SELECTION
*-----------------------------------------------------------------------
START-OF-SELECTION.
  PERFORM START_OF_SELECTION
    USING
      S_RLDNR[]
      S_RBUKRS[]
      S_RACCT[]
    CHANGING
      GDF_SUBRC.

*-----------------------------------------------------------------------
* SUBROUTINE
*-----------------------------------------------------------------------
FORM START_OF_SELECTION
    USING
      PIR_RLDNR TYPE GTR_RLDNR
      PIR_RBUKRS TYPE GTR_RBUKRS
      PIR_RACCT TYPE GTR_RACCT
    CHANGING
      POF_SUBRC TYPE SY-SUBRC.
*-----------------------------------------------------------------------
* Please write the SQL statement here ☆
* Set the internal table to be stored to LDT_DATA ☆
* Inline definition of LDT_DATA is fun ☆
  SELECT
    FROM ACDOCA
    FIELDS COUNT( * ) AS LDF_INPUT_RECORDS
    WHERE ACDOCA~RLDNR  IN @PIR_RLDNR             "Ledger in General Ledger Accounting,
      AND ACDOCA~RBUKRS IN @PIR_RBUKRS            "Company Code
      AND ACDOCA~RACCT  IN @PIR_RACCT             "Account Number
    INTO @DATA(LDF_INPUT_RECORDS).

  DATA LDF_TIMESTAMP_START TYPE TIMESTAMPL.
  GET TIME STAMP FIELD LDF_TIMESTAMP_START.

  "In preparation, use ITAB to create a DecisionTable to get the balance.
  TYPES:
    BEGIN OF LTS_DECISION,
      COEFFICIENT  TYPE FINS_VHCUR12,
      POPER_SOURCE TYPE ACDOCA-POPER,
      POPER_TARGET TYPE ACDOCA-POPER,
    END OF LTS_DECISION,
    LTT_DECISION TYPE STANDARD TABLE OF LTS_DECISION.

  DATA LDT_DECISION TYPE LTT_DECISION.
  LDT_DECISION = VALUE #(
        ( COEFFICIENT = 1 POPER_SOURCE = '000' POPER_TARGET = '001' )
        ( COEFFICIENT = 1 POPER_SOURCE = '001' POPER_TARGET = '001' )

        ( COEFFICIENT = 1 POPER_SOURCE = '000' POPER_TARGET = '002' )
        ( COEFFICIENT = 1 POPER_SOURCE = '001' POPER_TARGET = '002' )
        ( COEFFICIENT = 1 POPER_SOURCE = '002' POPER_TARGET = '002' )

        ( COEFFICIENT = 1 POPER_SOURCE = '000' POPER_TARGET = '003' )
        ( COEFFICIENT = 1 POPER_SOURCE = '001' POPER_TARGET = '003' )
        ( COEFFICIENT = 1 POPER_SOURCE = '002' POPER_TARGET = '003' )
        ( COEFFICIENT = 1 POPER_SOURCE = '003' POPER_TARGET = '003' )

        ( COEFFICIENT = 1 POPER_SOURCE = '000' POPER_TARGET = '004' )
        ( COEFFICIENT = 1 POPER_SOURCE = '001' POPER_TARGET = '004' )
        ( COEFFICIENT = 1 POPER_SOURCE = '002' POPER_TARGET = '004' )
        ( COEFFICIENT = 1 POPER_SOURCE = '003' POPER_TARGET = '004' )
        ( COEFFICIENT = 1 POPER_SOURCE = '004' POPER_TARGET = '004' )

        ( COEFFICIENT = 1 POPER_SOURCE = '000' POPER_TARGET = '005' )
        ( COEFFICIENT = 1 POPER_SOURCE = '001' POPER_TARGET = '005' )
        ( COEFFICIENT = 1 POPER_SOURCE = '002' POPER_TARGET = '005' )
        ( COEFFICIENT = 1 POPER_SOURCE = '003' POPER_TARGET = '005' )
        ( COEFFICIENT = 1 POPER_SOURCE = '004' POPER_TARGET = '005' )
        ( COEFFICIENT = 1 POPER_SOURCE = '005' POPER_TARGET = '005' )

        ( COEFFICIENT = 1 POPER_SOURCE = '000' POPER_TARGET = '006' )
        ( COEFFICIENT = 1 POPER_SOURCE = '001' POPER_TARGET = '006' )
        ( COEFFICIENT = 1 POPER_SOURCE = '002' POPER_TARGET = '006' )
        ( COEFFICIENT = 1 POPER_SOURCE = '003' POPER_TARGET = '006' )
        ( COEFFICIENT = 1 POPER_SOURCE = '004' POPER_TARGET = '006' )
        ( COEFFICIENT = 1 POPER_SOURCE = '005' POPER_TARGET = '006' )
        ( COEFFICIENT = 1 POPER_SOURCE = '006' POPER_TARGET = '006' )

        ( COEFFICIENT = 1 POPER_SOURCE = '000' POPER_TARGET = '007' )
        ( COEFFICIENT = 1 POPER_SOURCE = '001' POPER_TARGET = '007' )
        ( COEFFICIENT = 1 POPER_SOURCE = '002' POPER_TARGET = '007' )
        ( COEFFICIENT = 1 POPER_SOURCE = '003' POPER_TARGET = '007' )
        ( COEFFICIENT = 1 POPER_SOURCE = '004' POPER_TARGET = '007' )
        ( COEFFICIENT = 1 POPER_SOURCE = '005' POPER_TARGET = '007' )
        ( COEFFICIENT = 1 POPER_SOURCE = '006' POPER_TARGET = '007' )
        ( COEFFICIENT = 1 POPER_SOURCE = '007' POPER_TARGET = '007' )

        ( COEFFICIENT = 1 POPER_SOURCE = '000' POPER_TARGET = '008' )
        ( COEFFICIENT = 1 POPER_SOURCE = '001' POPER_TARGET = '008' )
        ( COEFFICIENT = 1 POPER_SOURCE = '002' POPER_TARGET = '008' )
        ( COEFFICIENT = 1 POPER_SOURCE = '003' POPER_TARGET = '008' )
        ( COEFFICIENT = 1 POPER_SOURCE = '004' POPER_TARGET = '008' )
        ( COEFFICIENT = 1 POPER_SOURCE = '005' POPER_TARGET = '008' )
        ( COEFFICIENT = 1 POPER_SOURCE = '006' POPER_TARGET = '008' )
        ( COEFFICIENT = 1 POPER_SOURCE = '007' POPER_TARGET = '008' )
        ( COEFFICIENT = 1 POPER_SOURCE = '008' POPER_TARGET = '008' )

        ( COEFFICIENT = 1 POPER_SOURCE = '000' POPER_TARGET = '009' )
        ( COEFFICIENT = 1 POPER_SOURCE = '001' POPER_TARGET = '009' )
        ( COEFFICIENT = 1 POPER_SOURCE = '002' POPER_TARGET = '009' )
        ( COEFFICIENT = 1 POPER_SOURCE = '003' POPER_TARGET = '009' )
        ( COEFFICIENT = 1 POPER_SOURCE = '004' POPER_TARGET = '009' )
        ( COEFFICIENT = 1 POPER_SOURCE = '005' POPER_TARGET = '009' )
        ( COEFFICIENT = 1 POPER_SOURCE = '006' POPER_TARGET = '009' )
        ( COEFFICIENT = 1 POPER_SOURCE = '007' POPER_TARGET = '009' )
        ( COEFFICIENT = 1 POPER_SOURCE = '008' POPER_TARGET = '009' )
        ( COEFFICIENT = 1 POPER_SOURCE = '009' POPER_TARGET = '009' )

        ( COEFFICIENT = 1 POPER_SOURCE = '000' POPER_TARGET = '010' )
        ( COEFFICIENT = 1 POPER_SOURCE = '001' POPER_TARGET = '010' )
        ( COEFFICIENT = 1 POPER_SOURCE = '002' POPER_TARGET = '010' )
        ( COEFFICIENT = 1 POPER_SOURCE = '003' POPER_TARGET = '010' )
        ( COEFFICIENT = 1 POPER_SOURCE = '004' POPER_TARGET = '010' )
        ( COEFFICIENT = 1 POPER_SOURCE = '005' POPER_TARGET = '010' )
        ( COEFFICIENT = 1 POPER_SOURCE = '006' POPER_TARGET = '010' )
        ( COEFFICIENT = 1 POPER_SOURCE = '007' POPER_TARGET = '010' )
        ( COEFFICIENT = 1 POPER_SOURCE = '008' POPER_TARGET = '010' )
        ( COEFFICIENT = 1 POPER_SOURCE = '009' POPER_TARGET = '010' )
        ( COEFFICIENT = 1 POPER_SOURCE = '010' POPER_TARGET = '010' )

        ( COEFFICIENT = 1 POPER_SOURCE = '000' POPER_TARGET = '011' )
        ( COEFFICIENT = 1 POPER_SOURCE = '001' POPER_TARGET = '011' )
        ( COEFFICIENT = 1 POPER_SOURCE = '002' POPER_TARGET = '011' )
        ( COEFFICIENT = 1 POPER_SOURCE = '003' POPER_TARGET = '011' )
        ( COEFFICIENT = 1 POPER_SOURCE = '004' POPER_TARGET = '011' )
        ( COEFFICIENT = 1 POPER_SOURCE = '005' POPER_TARGET = '011' )
        ( COEFFICIENT = 1 POPER_SOURCE = '006' POPER_TARGET = '011' )
        ( COEFFICIENT = 1 POPER_SOURCE = '007' POPER_TARGET = '011' )
        ( COEFFICIENT = 1 POPER_SOURCE = '008' POPER_TARGET = '011' )
        ( COEFFICIENT = 1 POPER_SOURCE = '009' POPER_TARGET = '011' )
        ( COEFFICIENT = 1 POPER_SOURCE = '010' POPER_TARGET = '011' )
        ( COEFFICIENT = 1 POPER_SOURCE = '011' POPER_TARGET = '011' )

        ( COEFFICIENT = 1 POPER_SOURCE = '000' POPER_TARGET = '012' )
        ( COEFFICIENT = 1 POPER_SOURCE = '001' POPER_TARGET = '012' )
        ( COEFFICIENT = 1 POPER_SOURCE = '002' POPER_TARGET = '012' )
        ( COEFFICIENT = 1 POPER_SOURCE = '003' POPER_TARGET = '012' )
        ( COEFFICIENT = 1 POPER_SOURCE = '004' POPER_TARGET = '012' )
        ( COEFFICIENT = 1 POPER_SOURCE = '005' POPER_TARGET = '012' )
        ( COEFFICIENT = 1 POPER_SOURCE = '006' POPER_TARGET = '012' )
        ( COEFFICIENT = 1 POPER_SOURCE = '007' POPER_TARGET = '012' )
        ( COEFFICIENT = 1 POPER_SOURCE = '008' POPER_TARGET = '012' )
        ( COEFFICIENT = 1 POPER_SOURCE = '009' POPER_TARGET = '012' )
        ( COEFFICIENT = 1 POPER_SOURCE = '010' POPER_TARGET = '012' )
        ( COEFFICIENT = 1 POPER_SOURCE = '011' POPER_TARGET = '012' )
        ( COEFFICIENT = 1 POPER_SOURCE = '012' POPER_TARGET = '012' ) ).

  WITH

  "・ First process
  "Filters data by selection criteria.
  "Aggregate on a monthly basis for ACDOCA.
  +ACDOCA AS ( SELECT
    FROM ACDOCA
    FIELDS
      ACDOCA~RLDNR,                               "Ledger in General Ledger Accounting
      ACDOCA~RBUKRS,                              "Company Code
      ACDOCA~PERIV,                               "Fiscal Year Variant
      ACDOCA~GJAHR,                               "Fiscal Year
      ACDOCA~POPER,                               "Posting period
      ACDOCA~KTOPL,                               "Chart of Accounts
      ACDOCA~RACCT,                               "Account Number
      ACDOCA~RCNTR,                               "Cost Center
      ACDOCA~PRCTR,                               "Profit Center
      ACDOCA~RFAREA,                              "Functional Area
      ACDOCA~RBUSA,                               "Business Area
      ACDOCA~KOKRS,                               "Controlling Area
      ACDOCA~WERKS,                               "Plant
      ACDOCA~MATNR,                               "Material Number
      ACDOCA~LIFNR,                               "Account Number of Vendor or Creditor
      ACDOCA~KUNNR,                               "Customer Number
      ACDOCA~RWCUR,                               "Transaction Currency
      ACDOCA~RHCUR,                               "Company Code Currency
      SUM( ACDOCA~WSL ) AS WSL,                   "Amount in Transaction Currency
      SUM( ACDOCA~HSL ) AS HSL                    "Amount in Company Code Currency
    WHERE ACDOCA~RBUKRS IN @PIR_RBUKRS            "Company Code
      AND ACDOCA~RACCT  IN @PIR_RACCT             "Account Number
    GROUP BY
      ACDOCA~RLDNR,                               "Ledger in General Ledger Acc
      ACDOCA~RBUKRS,                              "Company Code
      ACDOCA~PERIV,                               "Fiscal Year Variant
      ACDOCA~GJAHR,                               "Fiscal Year
      ACDOCA~POPER,                               "Posting period
      ACDOCA~KTOPL,                               "Chart of Accounts
      ACDOCA~RACCT,                               "Account Number
      ACDOCA~RCNTR,                               "Cost Center
      ACDOCA~PRCTR,                               "Profit Center
      ACDOCA~RFAREA,                              "Functional Area
      ACDOCA~RBUSA,                               "Business Area
      ACDOCA~KOKRS,                               "Controlling Area
      ACDOCA~WERKS,                               "Plant
      ACDOCA~MATNR,                               "Material Number
      ACDOCA~LIFNR,                               "Account Number of Vendor or
      ACDOCA~KUNNR,                               "Customer Number
      ACDOCA~RWCUR,                               "Transaction Currency
      ACDOCA~RHCUR ),                             "Company Code Currency

  "・ Second process
  +ACDOCA01 AS (
  "In the first half, you get the increase / decrease value. Use the SQL aggregate function SUM ().
  SELECT
    FROM +ACDOCA
    FIELDS
      +ACDOCA~RLDNR,                              "Ledger in General Ledger Accounting
      +ACDOCA~RBUKRS,                             "Company Code
      +ACDOCA~PERIV,                              "Fiscal Year Variant
      +ACDOCA~GJAHR,                              "Fiscal Year
      +ACDOCA~POPER,                              "Posting period
      +ACDOCA~KTOPL,                              "Chart of Accounts
      +ACDOCA~RACCT,                              "Account Number
      +ACDOCA~RCNTR,                              "Cost Center
      +ACDOCA~PRCTR,                              "Profit Center
      +ACDOCA~RFAREA,                             "Functional Area
      +ACDOCA~RBUSA,                              "Business Area
      +ACDOCA~KOKRS,                              "Controlling Area
      +ACDOCA~WERKS,                              "Plant
      +ACDOCA~MATNR,                              "Material Number
      +ACDOCA~LIFNR,                              "Account Number of Vendor or Creditor
      +ACDOCA~KUNNR,                              "Customer Number
      +ACDOCA~RWCUR,                              "Transaction Currency
      +ACDOCA~RHCUR,                              "Company Code Currency
      +ACDOCA~WSL AS WSL00,                       "Amount in Transaction Currency
      +ACDOCA~HSL AS HSL00,                       "Amount in Company Code Currency
      CAST( 0 AS DEC( 23, 2 ) ) AS WSL01,         "Amount in Transaction Currency
      CAST( 0 AS DEC( 23, 2 ) ) AS HSL01          "Amount in Company Code Currency

  "In the second half, you will get the balance. Join ACDOCA and Decision Table with Inner Join.
  "The record is amplified to get the cumulative amount (balance).
  UNION ALL SELECT
    FROM +ACDOCA
    INNER JOIN @LDT_DECISION AS LDT_DECISION
      ON LDT_DECISION~POPER_SOURCE = +ACDOCA~POPER
    FIELDS
      +ACDOCA~RLDNR,                              "Ledger in General Ledger Accounting
      +ACDOCA~RBUKRS,                             "Company Code
      +ACDOCA~PERIV,                              "Fiscal Year Variant
      +ACDOCA~GJAHR,                              "Fiscal Year
      LDT_DECISION~POPER_TARGET AS POPER,         "Posting period
      +ACDOCA~KTOPL,                              "Chart of Accounts
      +ACDOCA~RACCT,                              "Account Number
      +ACDOCA~RCNTR,                              "Cost Center
      +ACDOCA~PRCTR,                              "Profit Center
      +ACDOCA~RFAREA,                             "Functional Area
      +ACDOCA~RBUSA,                              "Business Area
      +ACDOCA~KOKRS,                              "Controlling Area
      +ACDOCA~WERKS,                              "Plant
      +ACDOCA~MATNR,                              "Material Number
      +ACDOCA~LIFNR,                              "Account Number of Vendor or Creditor
      +ACDOCA~KUNNR,                              "Customer Number
      +ACDOCA~RWCUR,                              "Transaction Currency
      +ACDOCA~RHCUR,                              "Company Code Currency
      CAST( 0 AS DEC( 23, 2 ) ) AS WSL00,         "Amount in Transaction Currency
      CAST( 0 AS DEC( 23, 2 ) ) AS HSL00,         "Amount in Company Code Currency
      SUM( +ACDOCA~WSL ) AS WSL01,                "Amount in Transaction Currency
      SUM( +ACDOCA~HSL ) AS HSL01                 "Amount in Company Code Currency
    GROUP BY
      +ACDOCA~RLDNR,                              "Ledger in General Ledger Accounting
      +ACDOCA~RBUKRS,                             "Company Code
      +ACDOCA~PERIV,                              "Fiscal Year Variant
      +ACDOCA~GJAHR,                              "Fiscal Year
      LDT_DECISION~POPER_TARGET,                  "Posting period
      +ACDOCA~KTOPL,                              "Chart of Accounts
      +ACDOCA~RACCT,                              "Account Number
      +ACDOCA~RCNTR,                              "Cost Center
      +ACDOCA~PRCTR,                              "Profit Center
      +ACDOCA~RFAREA,                             "Functional Area
      +ACDOCA~RBUSA,                              "Business Area
      +ACDOCA~KOKRS,                              "Controlling Area
      +ACDOCA~WERKS,                              "Plant
      +ACDOCA~MATNR,                              "Material Number
      +ACDOCA~LIFNR,                              "Account Number of Vendor or Creditor
      +ACDOCA~KUNNR,                              "Customer Number
      +ACDOCA~RWCUR,                              "Transaction Currency
      +ACDOCA~RHCUR )                             "Company Code Currency

  "・ Third process
  "The increase / decrease amount and balance are output as side-by-side items.
  "Get text information from G / L account master table.
  SELECT
    FROM +ACDOCA01
    INNER JOIN SKA1
       ON SKA1~KTOPL = +ACDOCA01~KTOPL
      AND SKA1~SAKNR = +ACDOCA01~RACCT
      AND SKA1~XBILK = @ABAP_TRUE
    LEFT OUTER JOIN SKAT
       ON SKAT~SPRAS = @SY-LANGU
      AND SKAT~KTOPL = SKA1~KTOPL
      AND SKAT~SAKNR = SKA1~SAKNR
    FIELDS
      +ACDOCA01~RLDNR,                            "Ledger in General Ledger Accounting
      +ACDOCA01~RBUKRS,                           "Company Code
      +ACDOCA01~PERIV,                            "Fiscal Year Variant
      +ACDOCA01~GJAHR,                            "Fiscal Year
      +ACDOCA01~POPER,                            "Posting period
      +ACDOCA01~KTOPL,                            "Chart of Accounts
      +ACDOCA01~RACCT,                            "Account Number
      SKAT~TXT20,                                 "G/L account short text
      +ACDOCA01~RCNTR,                            "Cost Center
      +ACDOCA01~PRCTR,                            "Profit Center
      +ACDOCA01~RFAREA,                           "Functional Area
      +ACDOCA01~RBUSA,                            "Business Area
      +ACDOCA01~KOKRS,                            "Controlling Area
      +ACDOCA01~WERKS,                            "Plant
      +ACDOCA01~MATNR,                            "Material Number
      +ACDOCA01~LIFNR,                            "Account Number of Vendor or Creditor
      +ACDOCA01~KUNNR,                            "Customer Number
      +ACDOCA01~RWCUR,                            "Transaction Currency
      +ACDOCA01~RHCUR,                            "Company Code Currency
      SUM( +ACDOCA01~WSL00 ) AS WSL00,            "Amount in Transaction Currency
      SUM( +ACDOCA01~HSL00 ) AS HSL00,            "Amount in Company Code Currency
      SUM( +ACDOCA01~WSL01 ) AS WSL01,            "Amount in Transaction Currency
      SUM( +ACDOCA01~HSL01 ) AS HSL01             "Amount in Company Code Currency
    GROUP BY
      +ACDOCA01~RLDNR,                            "Ledger in General Ledger Accounting
      +ACDOCA01~RBUKRS,                           "Company Code
      +ACDOCA01~PERIV,                            "Fiscal Year Variant
      +ACDOCA01~GJAHR,                            "Fiscal Year
      +ACDOCA01~POPER,                            "Posting period
      +ACDOCA01~KTOPL,                            "Chart of Accounts
      +ACDOCA01~RACCT,                            "Account Number
      SKAT~TXT20,                                 "G/L account short text
      +ACDOCA01~RCNTR,                            "Cost Center
      +ACDOCA01~PRCTR,                            "Profit Center
      +ACDOCA01~RFAREA,                           "Functional Area
      +ACDOCA01~RBUSA,                            "Business Area
      +ACDOCA01~KOKRS,                            "Controlling Area
      +ACDOCA01~WERKS,                            "Plant
      +ACDOCA01~MATNR,                            "Material Number
      +ACDOCA01~LIFNR,                            "Account Number of Vendor or Creditor
      +ACDOCA01~KUNNR,                            "Customer Number
      +ACDOCA01~RWCUR,                            "Transaction Currency
      +ACDOCA01~RHCUR                             "Company Code Currency
    ORDER BY
      +ACDOCA01~RLDNR,                            "Ledger in General Ledger Accounting
      +ACDOCA01~RBUKRS,                           "Company Code
      +ACDOCA01~KTOPL,                            "Fiscal Year Variant
      +ACDOCA01~RACCT,                            "Fiscal Year
      SKAT~TXT20,                                 "Posting period
      +ACDOCA01~RCNTR,                            "Chart of Accounts
      +ACDOCA01~PRCTR,                            "Account Number
      +ACDOCA01~RFAREA,                           "G/L account short text
      +ACDOCA01~RBUSA,                            "Cost Center
      +ACDOCA01~KOKRS,                            "Profit Center
      +ACDOCA01~WERKS,                            "Functional Area
      +ACDOCA01~MATNR,                            "Business Area
      +ACDOCA01~LIFNR,                            "Controlling Area
      +ACDOCA01~KUNNR,                            "Plant
      +ACDOCA01~RWCUR,                            "Material Number
      +ACDOCA01~PERIV,                            "Account Number of Vendor or Creditor
      +ACDOCA01~GJAHR,                            "Customer Number
      +ACDOCA01~POPER,                            "Transaction Currency
      +ACDOCA01~RHCUR                             "Company Code Currency
    INTO TABLE @DATA(LDT_DATA).

  DATA LDF_TIMESTAMP_END TYPE TIMESTAMPL.
  GET TIME STAMP FIELD LDF_TIMESTAMP_END.
*-----------------------------------------------------------------------
  TRY.
      CL_SALV_TABLE=>FACTORY(
        IMPORTING
          R_SALV_TABLE = DATA(LDO_ALV)
        CHANGING
          T_TABLE  = LDT_DATA ).
    CATCH CX_SALV_MSG INTO DATA(LDX_SALV_MSG).
      POF_SUBRC = 8.
      RETURN.
  ENDTRY.

  DATA(LDO_HEADER) = NEW CL_SALV_FORM_LAYOUT_GRID( ).

  DATA(LDO_H_LABEL) = LDO_HEADER->CREATE_LABEL( ROW = 1 COLUMN = 1 ).
  LDO_H_LABEL->SET_TEXT( 'Performance data' ).

  DATA(LDO_H_FLOW) = LDO_HEADER->CREATE_FLOW( ROW = 2  COLUMN = 1 ).
  LDO_H_FLOW->CREATE_TEXT( TEXT = 'Input records' ).
  LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 2  COLUMN = 2 ).
  LDO_H_FLOW->CREATE_TEXT( TEXT = LDF_INPUT_RECORDS ).

  LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 3  COLUMN = 1 ).
  LDO_H_FLOW->CREATE_TEXT( TEXT = 'Output records' ).
  LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 3  COLUMN = 2 ).
  LDO_H_FLOW->CREATE_TEXT( TEXT = LINES( LDT_DATA ) ).

  LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 4  COLUMN = 1 ).
  LDO_H_FLOW->CREATE_TEXT( TEXT = 'Timestamp of start' ).
  LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 4  COLUMN = 2 ).
  LDO_H_FLOW->CREATE_TEXT( TEXT = CL_ABAP_TSTMP=>SUBTRACT( EXPORTING TSTMP1 = LDF_TIMESTAMP_END TSTMP2 = LDF_TIMESTAMP_START ) ).

  LDO_ALV->SET_TOP_OF_LIST( LDO_HEADER ).
  LDO_ALV->SET_TOP_OF_LIST_PRINT( LDO_HEADER ).

  LDO_ALV->GET_FUNCTIONS( )->SET_ALL( ).
  LDO_ALV->GET_COLUMNS( )->SET_OPTIMIZE( ).
  LDO_ALV->GET_SELECTIONS( )->SET_SELECTION_MODE( EXPORTING VALUE = IF_SALV_C_SELECTION_MODE=>CELL ).
  LDO_ALV->DISPLAY( ).

  POF_SUBRC = 0.
ENDFORM.

 

Assigned tags

      6 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Michelle Crapo
      Michelle Crapo

      Just a couple of suggestions.

      • Use classes instead of forms.
      • Are you on HANA?  Create CDS view instead of select in program.   I haven't looked - are there already CDS views that will work with this?

      I really do like using ACDOCA.  I like that everything is there in one table.   That's a nice change.

      Author's profile photo Florian Henninger
      Florian Henninger

      Exactly what I also thought.

      Must be on HANA, when there is ACDOCA available I think.

      Author's profile photo Dai Hashiguchi
      Dai Hashiguchi
      Blog Post Author

      Thanks for your comment.

      I think there are still many things that ACDOCA can do that BSEG couldn't do.

      HDB costs little to process "SUM () ~ GROUP BY". With 1 billion records, I tried moving it and realized it.

      Author's profile photo Dai Hashiguchi
      Dai Hashiguchi
      Blog Post Author

      It was my first blog in my life, and I am very happy to receive comments.

      I like using ABAP objects. However, I don't use it much at work. ABAP objects are esoteric for beginners. This time the subject is not object-oriented, so I stopped it.

      ABAP CDS with the same logic will be introduced in the next blog. Please wait for a while.

      Thank you.

      Author's profile photo Michelle Crapo
      Michelle Crapo

      Excellent first blog!   I'll be looking forward to some more.  

      Comments mean we are reading it.  🙂  I have found I learn more from comments than the people who write them do.  I have blogs where the suggestions were amazing.  I've had some that the comments were questions - and I learned a lot answering them.  I've also had some where I don't think anyone has read them.  And that's OK too.   I always think to myself "If I can just help 1 person".   That one person just probably didn't comment.

      I haven't had time to write a good blog lately.  I've been so very busy at work.   But I'm overjoyed that there are some interesting ones to read.

       

      Author's profile photo Dai Hashiguchi
      Dai Hashiguchi
      Blog Post Author

      HI,Michelle.

      I posted my blog of the ABAP CDS view version.

      The link is as follows.

      https://blogs.sap.com/2021/02/24/use-cds-view-to-get-company-account-and-monthly-gains-and-losses-and-balances-from-acdoca./