Skip to Content
0
Former Member
Feb 25, 2009 at 05:46 AM

Dynamically Displaying row data as colum in ALV

479 Views

Dear Experts,

Please find herewith below my code. In this the column MONAT displays Month. Now scenario is as follows:

1. In the selection screen user inputs the YEAR & MONTH for which the report is to be displayed.

2. With reference to that the system should display VALUES in the MONTH column DYNAMICALLY.

For Ex: Currently my data is coming as follows:

CompanyCode	Year	Month	GLCode	CostCenter	Amt
1000		2008	MAR	aaaa	xxxx		1000
1000		2008	MAR	aaaa	xxxx		2000
1000		2008	MAR	aaaa	xxxx		3000
1000		2008	MAR	aaaa	xxxx		4000

1000		2008	MAR	bbbb	yyyy		1000
1000		2008	MAR	bbbb	yyyy		1000

1000		2008	MAR	cccc	yyyy		1000

1000		2008	APR	aaaa	xxxx		2000
1000		2008	APR	aaaa	xxxx		3000

1000		2008	APR	bbbb	xxxx		4000

I want the data as follows:

CompanyCode	Year	MAR	APR	GLCode	CostCenter	
1000		2008	10000	5000	aaaa	xxxx		

1000		2008	2000	0.00	bbbb	yyyy		

1000		2008	1000	0.00	cccc	yyyy		

1000		2008	0.00	4000	bbbb	xxxx		

The month should get generated dynamically.

My Code:

REPORT  z_co_expenses.

TYPE-POOLS: slis.

TABLES: bsis, "GL Table
        csks, "Cost Center Master Data
        cska. "Cost Elements(Dependent on Chart of Accounts).

DATA: BEGIN OF it_bsis OCCURS 0,
      bukrs TYPE bsis-bukrs	, "Company Code
      hkont TYPE bsis-hkont	, "General Ledger Account
      gjahr TYPE bsis-gjahr	, "Fiscal Year
      monat TYPE bsis-monat	, "Fiscal Period
      shkzg TYPE bsis-shkzg	, "Debit/Credit Indicator
      dmbtr TYPE bsis-dmbtr	, "Amount in Local Currency
      wrbtr TYPE bsis-wrbtr, "Amount in document currency
      kostl TYPE bsis-kostl	, "Cost Center
      END OF it_bsis.

DATA: BEGIN OF it_data OCCURS 0,
      bukrs TYPE bsis-bukrs	, "Company Code
      hkont TYPE bsis-hkont	, "General Ledger Account
      gjahr TYPE bsis-gjahr	, "Fiscal Year
      monat TYPE bsis-monat	, "Fiscal Period
      shkzg TYPE bsis-shkzg	, "Debit/Credit Indicator
      dmbtr TYPE bsis-dmbtr	, "Amount in Local Currency
      wrbtr TYPE bsis-wrbtr, "Amount in document currency
      kostl TYPE bsis-kostl	, "Cost Center
      dr_val TYPE bsis-dmbtr,
      cr_val TYPE bsis-dmbtr,
      END OF it_data.

DATA: BEGIN OF it_final OCCURS 0,
      bukrs TYPE bsis-bukrs	, "Company Code
      hkont TYPE bsis-hkont	, "General Ledger Account
      gjahr TYPE bsis-gjahr	, "Fiscal Year
      monat TYPE bsis-monat	, "Fiscal Period
      dmbtr TYPE bsis-dmbtr	, "Amount in Local Currency
      wrbtr TYPE bsis-wrbtr, "Amount in document currency
      kostl TYPE bsis-kostl	, "Cost Center
      dr_val TYPE bsis-dmbtr,
      cr_val TYPE bsis-dmbtr,
      count(30) TYPE c,
      END OF it_final.

DATA: BEGIN OF it_cost OCCURS 0,
      bukrs TYPE bsis-bukrs	, "Company Code
      hkont TYPE bsis-hkont	, "General Ledger Account
      gjahr TYPE bsis-gjahr	, "Fiscal Year
      monat TYPE bsis-monat	, "Fiscal Period
      dmbtr TYPE bsis-dmbtr	, "Amount in Local Currency
      wrbtr TYPE bsis-wrbtr, "Amount in document currency
      kostl TYPE bsis-kostl	, "Cost Center
      final_val TYPE bsis-dmbtr,
      count(30) TYPE c,
      END OF it_cost.

DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
      wa_layout TYPE slis_layout_alv,
      it_header   TYPE slis_t_listheader,
      wa_header   LIKE LINE OF it_header,
      it_events TYPE slis_t_event,
      wa_events LIKE LINE OF it_events.

****************************************************************************************
* selection screen *
********************

SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-030.

SELECT-OPTIONS:  so_bukrs FOR bsis-bukrs,  "Company Code
                 so_gjahr FOR bsis-gjahr,      "Fiscal Year
                 so_monat FOR bsis-monat,      "Fiscal Period
                 so_kostl FOR bsis-kostl,      "Cost Center
                 so_hkont FOR bsis-hkont.      "Cost Element

SELECTION-SCREEN END OF BLOCK a.

****************************************************************************************
*START_OF_SELECTION  *
**********************

START-OF-SELECTION.

  PERFORM get_data.

  PERFORM fill_catalog.

  PERFORM display_data.

END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data .

  SELECT
        bukrs
        hkont
        gjahr
        monat
        shkzg
        SUM( dmbtr )
        SUM( wrbtr )
        kostl
        FROM bsis
        INTO TABLE it_bsis
        WHERE
        bukrs IN so_bukrs AND
        gjahr IN so_gjahr AND
        monat IN so_monat AND
        kostl IN so_kostl AND
        hkont IN ( SELECT kstar FROM cska WHERE  kstar IN so_hkont AND ktopl = '1000' )
        GROUP BY gjahr monat bukrs shkzg hkont kostl.

  SORT it_bsis BY bukrs gjahr monat hkont shkzg kostl.

  IF it_bsis[] IS NOT INITIAL.

    LOOP AT it_bsis.

      it_data-bukrs = it_bsis-bukrs.
      it_data-hkont = it_bsis-hkont.
      it_data-gjahr = it_bsis-gjahr.
      it_data-monat = it_bsis-monat.
      it_data-shkzg = it_bsis-shkzg.
      it_data-kostl = it_bsis-kostl.

      IF it_data-shkzg = 'H'.
        it_data-cr_val = it_data-cr_val + it_bsis-dmbtr.
      ENDIF.

      IF it_data-shkzg = 'S'.
        it_data-dr_val = it_data-dr_val + it_bsis-dmbtr.
      ENDIF.

      APPEND it_data.
      CLEAR it_data.

    ENDLOOP.

    SORT it_data BY bukrs gjahr monat hkont kostl.


    LOOP AT it_data.


      MOVE: it_data-bukrs TO it_final-bukrs,
            it_data-hkont TO it_final-hkont,
            it_data-gjahr TO it_final-gjahr,
            it_data-monat TO it_final-monat,
            it_data-kostl TO it_final-kostl,
            it_data-dr_val TO it_final-dr_val,
            it_data-cr_val TO it_final-cr_val.

*      CONCATENATE it_data-bukrs it_data-gjahr it_data-monat it_data-hkont it_data-kostl INTO it_final-count.
       collect it_final.

      APPEND it_final.
      CLEAR it_final.

    ENDLOOP.

    SORT it_final BY  count.

    DATA: w_bukrs TYPE bsis-bukrs,
          w_hkont TYPE bsis-hkont,
          w_gjahr TYPE bsis-gjahr,
          w_kostl TYPE bsis-kostl,
          w_monat TYPE bsis-monat.

    LOOP AT it_final.

      w_bukrs = it_final-bukrs.
      w_hkont = it_final-hkont.
      w_gjahr = it_final-gjahr.
      w_kostl = it_final-kostl.
      w_monat = it_final-monat.

      AT END OF monat.
      sum.
        it_cost-bukrs = w_bukrs.
        it_cost-gjahr = w_gjahr.
        it_cost-monat = w_monat.
        it_cost-hkont = w_hkont.
        it_cost-kostl = w_kostl.
        it_cost-final_val = it_final-dr_val - it_final-cr_val.

      ENDAT.

      CLEAR: w_bukrs, w_gjahr, w_monat, w_hkont, w_kostl.

    ENDLOOP.

  ENDIF.

ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  FILL_CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fill_catalog .

  data lwa_fieldcat type slis_fieldcat_alv.

  wa_layout-zebra = 'X'.
  wa_layout-colwidth_optimize = 'X'.

  clear lwa_fieldcat.
  lwa_fieldcat-fieldname = 'BUKRS'.
  lwa_fieldcat-seltext_m = 'Company Code'.
  append lwa_fieldcat to it_fieldcat.

  clear lwa_fieldcat.
  lwa_fieldcat-fieldname = 'GJAHR'.
  lwa_fieldcat-seltext_m = 'Year'.
  append lwa_fieldcat to it_fieldcat.

  clear lwa_fieldcat.
  lwa_fieldcat-fieldname = 'MONAT'.
  lwa_fieldcat-seltext_m = 'Month'.
  append lwa_fieldcat to it_fieldcat.

  clear lwa_fieldcat.
  lwa_fieldcat-fieldname = 'HKONT'.
  lwa_fieldcat-seltext_m = 'Cost Element'.
  append lwa_fieldcat to it_fieldcat.

  clear lwa_fieldcat.
  lwa_fieldcat-fieldname = 'KOSTL'.
  lwa_fieldcat-seltext_m = 'Cost Center'.
  append lwa_fieldcat to it_fieldcat.

  clear lwa_fieldcat.
  lwa_fieldcat-fieldname = 'FINAL_VAL'.
  lwa_fieldcat-seltext_m = 'VALUE'.
  append lwa_fieldcat to it_fieldcat.


ENDFORM.                    " FILL_CATALOG
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_data .

ENDFORM.                    " DISPLAY_DATA

Please tell me how to go about... As usual your expert suggestions are most valued.

Also any suggestion for writing report in different way is also welcomed.

Regards,

Jitesh