Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
dai_hashiguchi
Explorer

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.

 
6 Comments