Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

ALV Grid with header inside the report

Former Member
0 Kudos

Hi Experts,

Can you help me on how I can create an ALV like the image I've attached.

I need to create a report like this with a header inside my report.

Thanks!

1 ACCEPTED SOLUTION

rajkumarnarasimman
Active Contributor
0 Kudos

Hi Jepoy,

Please find the below steps to do the same

Steps:

  1. Create field, TEMP in the final structure.
    1. Assign the Field as tech field in field catalog
    2. Assign the purchase document to the field
    3. Consider the same field in IT_SORT too.
  2. Create the event for SUBTOTAL_TEXT as shown below.

FORM sub_get_event .

   CONSTANTS : c_formname_subtotal_text TYPE slis_formname VALUE

'SUBTOTAL_TEXT'.

   DATA: l_s_event TYPE slis_alv_event.

   CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

     EXPORTING

       i_list_type     = 4

     IMPORTING

       et_events       = i_event

     EXCEPTIONS

       list_type_wrong = 0

       OTHERS          = 0.

* Subtotal

   READ TABLE i_event  INTO l_s_event

                     WITH KEY name = slis_ev_subtotal_text.

   IF sy-subrc = 0.

     MOVE c_formname_subtotal_text TO l_s_event-form.

     MODIFY i_event FROM l_s_event INDEX sy-tabix.

   ENDIF.

ENDFORM.                    " sub_get_event

3. Inside the subtotal_text method, write the code like this.


FORM subtotal_text CHANGING

                p_total TYPE any

                p_subtot_text TYPE slis_subtot_text.

"Data Declarations

  DATA: L_DOC TYPE CHAR50 VALUE 'PURCHASE DOCUMENT',

             L_TEMP TYPE CHAR30.

"Get the Subtotal document number

  L_TEMP = p_subtot_text-display_text_for_subtotal.

"Append Purchase document word

  CONCATENATE L_DOC L_TEMP INTO L_DOC SEPARATED BY SPACE.

p_subtot_text-display_text_for_subtotal = L_DOC.


ENDFORM.


Also please find the below link..

Display subtotal text in ALV grid - Code Gallery - SCN Wiki

Regards

Rajkumar Narasimman

6 REPLIES 6

rajkumarnarasimman
Active Contributor
0 Kudos

Hi Jepoy,

Please find the below steps to do the same

Steps:

  1. Create field, TEMP in the final structure.
    1. Assign the Field as tech field in field catalog
    2. Assign the purchase document to the field
    3. Consider the same field in IT_SORT too.
  2. Create the event for SUBTOTAL_TEXT as shown below.

FORM sub_get_event .

   CONSTANTS : c_formname_subtotal_text TYPE slis_formname VALUE

'SUBTOTAL_TEXT'.

   DATA: l_s_event TYPE slis_alv_event.

   CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

     EXPORTING

       i_list_type     = 4

     IMPORTING

       et_events       = i_event

     EXCEPTIONS

       list_type_wrong = 0

       OTHERS          = 0.

* Subtotal

   READ TABLE i_event  INTO l_s_event

                     WITH KEY name = slis_ev_subtotal_text.

   IF sy-subrc = 0.

     MOVE c_formname_subtotal_text TO l_s_event-form.

     MODIFY i_event FROM l_s_event INDEX sy-tabix.

   ENDIF.

ENDFORM.                    " sub_get_event

3. Inside the subtotal_text method, write the code like this.


FORM subtotal_text CHANGING

                p_total TYPE any

                p_subtot_text TYPE slis_subtot_text.

"Data Declarations

  DATA: L_DOC TYPE CHAR50 VALUE 'PURCHASE DOCUMENT',

             L_TEMP TYPE CHAR30.

"Get the Subtotal document number

  L_TEMP = p_subtot_text-display_text_for_subtotal.

"Append Purchase document word

  CONCATENATE L_DOC L_TEMP INTO L_DOC SEPARATED BY SPACE.

p_subtot_text-display_text_for_subtotal = L_DOC.


ENDFORM.


Also please find the below link..

Display subtotal text in ALV grid - Code Gallery - SCN Wiki

Regards

Rajkumar Narasimman

0 Kudos

Hi Rajkumar,

Here is my code and the subtotal works but it does not show the text.

TABLES: mard.

TYPE-POOLS: sdydo, icon, slis.

* ALV required data objects.

DATA: w_title     TYPE lvc_title,

       w_repid     TYPE sy-repid,

       w_comm      TYPE slis_formname,

       w_status    TYPE slis_formname,

       x_layout    TYPE slis_layout_alv,

       ls_events   TYPE LINE OF slis_t_event,

       t_events    TYPE slis_t_event,

       t_fieldcat  TYPE slis_t_fieldcat_alv,

       x_sort      type LINE OF slis_t_sortinfo_alv,

       t_sort      TYPE slis_t_sortinfo_alv,

       ls_heading  TYPE slis_listheader,

       t_heading   TYPE slis_t_listheader,

       ls_fieldcat TYPE slis_fieldcat_alv,

       gs_variant  LIKE disvariant.

DATA:

   wa_layout     TYPE slis_layout_alv,

   wa_events         TYPE slis_alv_event,

   wa_sort TYPE slis_sortinfo_alv.

DATA: is_print TYPE slis_print_alv,

       gset TYPE lvc_s_glay,

       %runmode TYPE aqlimode.

DATA: BEGIN OF it_mard OCCURS 0,

   matnr LIKE mard-matnr,

   werks LIKE mard-werks,

   lgort LIKE mard-lgort,

   ebeln LIKE ekpo-ebeln,

   ebelp LIKE ekpo-ebelp,

   bstyp LIKE ekpo-bstyp,

   labst LIKE mard-labst.

DATA: END OF it_mard.

DATA: wa_mard LIKE it_mard.

DATA: BEGIN OF it_ekpo OCCURS 0,

   matnr LIKE mard-matnr"Material

   ebeln LIKE ekpo-ebeln"PO Number

   ebelp LIKE ekpo-ebelp"Line Item

   bstyp LIKE ekko-bstyp"Type

   bsart LIKE ekko-bsart"Category

   ekgrp LIKE ekko-ekgrp"Purchasing Group

   aedat LIKE ekpo-aedat"Doc Date

   reswk LIKE ekko-reswk"Vendor/Supplying Plant

   matkl LIKE ekpo-matkl"Material Group

   pstyp LIKE ekpo-pstyp"Item Category

   werks LIKE ekpo-werks"Plant

   menge LIKE ekpo-menge"Order Quantity

   meins LIKE ekpo-meins, "not sure for field

   "quantity in SKU

   lmein LIKE ekpo-lmein,

   netpr LIKE ekpo-netpr"net Price

   "curreny

   peinh LIKE ekpo-peinh"price unit

   ktmng LIKE ekpo-ktmng"Target Quantity

   "open target quantity

   "to be del(qty)

   "to be del(value)

   "to be invoiced(qty)

   "to be invoiced(value)

   labst LIKE mard-labst. "Available Quantity

DATA: END OF it_ekpo.

DATA: wa_ekpo LIKE it_ekpo.

DATA: BEGIN OF it_data OCCURS 0,

   matnr LIKE mard-matnr"Material

   ebeln LIKE ekpo-ebeln"PO Number

   ebelp LIKE ekpo-ebelp"Line Item

   bstyp LIKE ekko-bstyp"Type

   bsart LIKE ekko-bsart"Category

   ekgrp LIKE ekko-ekgrp"Purchasing Group

   aedat LIKE ekpo-aedat"Doc Date

   reswk LIKE ekko-reswk"Vendor/Supplying Plant

   matkl LIKE ekpo-matkl"Material Group

   pstyp LIKE ekpo-pstyp"Item Category

   werks LIKE ekpo-werks"Plant

   menge LIKE ekpo-menge"Order Quantity

   meins LIKE ekpo-meins, "not sure for field

   "quantity in SKU

   lmein LIKE ekpo-lmein,

   netpr LIKE ekpo-netpr"net Price

   "curreny

   peinh LIKE ekpo-peinh"price unit

   ktmng LIKE ekpo-ktmng"Target Quantity

   "open target quantity

   "to be del(qty)

   "to be del(value)

   "to be invoiced(qty)

   "to be invoiced(value)

   labst LIKE mard-labst. "Available Quantity

DATA: END OF it_data.

DATA: wa_data LIKE it_data.

DATA: BEGIN OF it_final OCCURS 0,

   matnr LIKE mard-matnr"Material

   ebeln LIKE ekpo-ebeln"PO Number

   ebelp LIKE ekpo-ebelp"Line Item

   bstyp LIKE ekko-bstyp"Type

   bsart LIKE ekko-bsart"Category

   ekgrp LIKE ekko-ekgrp"Purchasing Group

   aedat LIKE ekpo-aedat"Doc Date

   reswk LIKE ekko-reswk"Vendor/Supplying Plant

   matkl LIKE ekpo-matkl"Material Group

   pstyp LIKE ekpo-pstyp"Item Category

   werks LIKE ekpo-werks"Plant

   menge LIKE ekpo-menge"Order Quantity

   meins LIKE ekpo-meins, "not sure for field

   "quantity in SKU

   lmein LIKE ekpo-lmein,

   netpr LIKE ekpo-netpr"net Price

   "curreny

   peinh LIKE ekpo-peinh"price unit

   ktmng LIKE ekpo-ktmng"Target Quantity

   "open target quantity

   "to be del(qty)

   "to be del(value)

   "to be invoiced(qty)

   "to be invoiced(value)

   labst LIKE mard-labst. "Available Quantity

DATA: END OF it_final.

DATA: wa_final LIKE it_final.

DATA :v_tabix TYPE sy-tabix.

SELECT-OPTIONS: p_matnr FOR mard-matnr,

                 p_plant FOR mard-werks.

START-OF-SELECTION.

PERFORM get_data.

PERFORM display_report.

FORM get_data.

SELECT matnr werks

   INTO CORRESPONDING FIELDS OF TABLE it_mard

   FROM mard

   WHERE labst NE '0.000'.

DELETE it_mard WHERE matnr NOT IN p_matnr.

SELECT matnr ebeln ebelp werks bstyp pstyp audat matkl aedat matkl menge meins lmein netpr peinh ktmng

   INTO CORRESPONDING FIELDS OF TABLE it_ekpo

   FROM ekpo

   WHERE bstyp EQ 'F'

   AND loekz NE 'L'.

DELETE it_ekpo WHERE matnr NOT IN p_matnr.

it_data[] = it_ekpo[].

LOOP AT it_mard.

   READ TABLE it_data WITH KEY werks = it_mard-werks.

   IF sy-subrc NE 0.

     it_data-matnr = it_mard-matnr.

     it_data-werks = it_mard-werks.

     APPEND it_data. CLEAR it_data.

   ENDIF.

ENDLOOP.

SORT it_data BY matnr ebeln ASCENDING.

LOOP AT it_data INTO wa_data.

it_final-matnr = wa_data-matnr.

it_final-ebeln = wa_data-ebeln.

it_final-ebelp = wa_data-ebelp.

it_final-bstyp = wa_data-bstyp.

it_final-aedat = wa_data-aedat.

it_final-matkl = wa_data-matkl.

it_final-werks = wa_data-werks.

it_final-menge = wa_data-menge.

it_final-meins = wa_data-meins.

it_final-lmein = wa_data-lmein.

it_final-netpr = wa_data-netpr.

it_final-peinh = wa_data-peinh.

it_final-ktmng = wa_data-ktmng.

it_final-bstyp = wa_data-bstyp.

SELECT SINGLE epstp

   INTO it_final-pstyp

   FROM t163x

   WHERE pstyp EQ wa_data-pstyp

   AND spras EQ 'EN'.

SELECT SINGLE bsart ekgrp reswk

   INTO (it_final-bsart, it_final-ekgrp, it_final-reswk)

   FROM ekko

   WHERE ebeln = wa_data-ebeln.

DATA: avlqty TYPE i.

SELECT labst

   INTO avlqty

   FROM mard

   WHERE matnr EQ wa_data-matnr

   AND werks EQ wa_data-werks.

   it_final-labst = it_final-labst + avlqty.

ENDSELECT.

APPEND it_final. CLEAR it_final.

ENDLOOP.

SORT it_final by matnr ebeln ASCENDING.

ENDFORM.

FORM display_report.

   is_print-no_print_selinfos = 'X'.

   is_print-no_print_listinfos = 'X'.

   is_print-print_ctrl = 'X'.

   PERFORM pf_write_fieldcat USING:

   'MATNR'                 'it_data' 'Material Number'                   ' ',

   'EBELN'                 'it_data' 'PO Number'                   ' ',

   'EBELP'                 'it_data' 'Line Item'                   ' ',

   'BSART'                 'it_data' 'Type'                   ' ',

   'BSTYP'                 'it_data' 'Category'                   ' ',

   'EKGRP'                 'it_data' 'Purchasing Group'                   ' ',

   'AEDAT'                 'it_data' 'Doc. Date'                   ' ',

   'RESWK'                 'it_data' 'Vendor/Supplying Plant'                   ' ',

   'MATKL'                 'it_data' 'Material Group'                   ' ',

   'PSTYP'                 'it_data' 'Item Category'                   ' ',

   'WERKS'                 'it_data' 'Plant'                   ' ',

   'MENGE'                 'it_data' 'Order Quantity'                   ' ',

   'MEINS'                 'it_data' 'Order Unit'                   ' ',

*  ''                 'it_data' ''                   ' ',

    'LMEIN'                'it_data' 'SKU'                   ' ',

   'NETPR'                 'it_data' 'Net Price'                   ' ',

*  ''                 'it_data' ''                   ' ',

   'PEINH'                 'it_data' 'Price Unit'                   ' ',

   'KTMNG'                 'it_data' 'Target Quantity'                   ' ',

*  ''                 'it_data' ''                   ' ',

*  ''                 'it_data' ''                   ' ',

*  ''                 'it_data' ''                   ' ',

*  ''                 'it_data' ''                   ' ',

   'LABST'                 'it_data' 'Available Quantity'                   ' '.

*  ''                 'it_data' ''                   ' '.

* Layout

   x_layout-zebra = 'X'.

   x_layout-no_keyfix = ' '.

   x_layout-colwidth_optimize = 'X'.

* GUI Status

   w_status = 'SET_PF_STATUS'.

   w_repid = sy-repid.

* User commands

   w_comm = 'USER_COMMAND'.

   gs_variant-report  = sy-repid.

   gs_variant-username = sy-uname.

   gset-no_colwopt = 'X'.

PERFORM build_events.

PERFORM sub_populate_sort.

PERFORM sub_get_event.

   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

     EXPORTING

       i_callback_program = sy-repid

       it_fieldcat        = t_fieldcat

       is_layout          = x_layout

*      it_sort                 = it_sortcat

       it_sort = t_sort

       it_events                = t_events

       is_variant         = gs_variant

       i_save             = 'A'

       is_print           = is_print

       i_default                = 'X'

     TABLES

       t_outtab           = it_final

     EXCEPTIONS

       program_error      = 1

       OTHERS             = 2.

ENDFORM.                    " display_report

FORM pf_write_fieldcat  USING fname

                               tname

                               text

                               len.

   ls_fieldcat-fieldname     = fname.

   ls_fieldcat-tabname       = tname.

   ls_fieldcat-seltext_l     = text.

   ls_fieldcat-outputlen     = len.

   IF fname = 'NETPR'.

     ls_fieldcat-do_sum = 'X'.

   ENDIF.

   IF len = '0'.

     ls_fieldcat-outputlen     = '1'.

     ls_fieldcat-no_out = 'X'.

   ENDIF.

   APPEND ls_fieldcat TO t_fieldcat.

   CLEAR ls_fieldcat.

ENDFORM.

FORM sub_get_event .

    CONSTANTS : c_formname_subtotal_text TYPE slis_formname VALUE 'SUBTOTAL_TEXT'.

    DATA: l_s_event TYPE slis_alv_event.

    CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

      EXPORTING

        i_list_type     = 4

      IMPORTING

        et_events       = t_events

      EXCEPTIONS

        list_type_wrong = 0

        OTHERS          = 0.

* Subtotal

    READ TABLE t_events  INTO l_s_event

                      WITH KEY name = slis_ev_subtotal_text.

    IF sy-subrc = 0.

      MOVE c_formname_subtotal_text TO l_s_event-form.

      MODIFY t_events FROM l_s_event INDEX sy-tabix.

    ENDIF.

ENDFORM.                    " sub_get_event

FORM subtotal_text CHANGING

                 p_total TYPE any

                 p_subtot_text TYPE slis_subtot_text.

"Data Declarations

   DATA: L_DOC TYPE CHAR50 VALUE 'PURCHASE DOCUMENT',

              L_TEMP TYPE CHAR30.

"Get the Subtotal document number

   L_TEMP = p_subtot_text-display_text_for_subtotal.

"Append Purchase document word

   CONCATENATE L_DOC L_TEMP INTO L_DOC SEPARATED BY SPACE.

p_subtot_text-display_text_for_subtotal = 'Purchase Document'."L_DOC.

ENDFORM.

FORM sub_populate_sort .

* Sort on material

   wa_sort-spos = '01' .

   wa_sort-fieldname = 'MATNR'.

   wa_sort-tabname = 'IT_FINAL'.

   wa_sort-up = 'X'.

   wa_sort-subtot = 'X'.

   APPEND wa_sort TO t_sort .

   CLEAR wa_sort.

* Sort on plant

   wa_sort-spos = '02'.

   wa_sort-fieldname = 'EBELN'.

   wa_sort-tabname = 'IT_FINAL'.

   wa_sort-up = 'X'.

   wa_sort-subtot = 'X'.

   APPEND wa_sort TO t_sort .

   CLEAR wa_sort.

ENDFORM.


FORM build_events.

   CLEAR:

   wa_events, t_events[].

   wa_events-name = 'SUBTOTAL_TEXT'.

   wa_events-form = 'SUBTOTAL_TEXT'.

   APPEND wa_events TO t_events.

   CLEAR  wa_events.

ENDFORM.

0 Kudos

Hi Jepoy, 

Please do the following corrections.

  1. Add a new field in final Structure and copy the same values as shown below.
  2. Assign the following attributes for the new added field
    1. tech = 'X'
    2. NO_OUT = 'X'


Please find the corrections in Bold Character


TABLES: mard.

TYPE-POOLS: sdydo, icon, slis.

* ALV required data objects.

DATA: w_title     TYPE lvc_title,

        w_repid     TYPE sy-repid,

        w_comm      TYPE slis_formname,

        w_status    TYPE slis_formname,

        x_layout    TYPE slis_layout_alv,

        ls_events   TYPE LINE OF slis_t_event,

        t_events    TYPE slis_t_event,

        t_fieldcat  TYPE slis_t_fieldcat_alv,

        x_sort      type LINE OF slis_t_sortinfo_alv,

        t_sort      TYPE slis_t_sortinfo_alv,

        ls_heading  TYPE slis_listheader,

        t_heading   TYPE slis_t_listheader,

        ls_fieldcat TYPE slis_fieldcat_alv,

        gs_variant  LIKE disvariant.

DATA:

    wa_layout     TYPE slis_layout_alv,

    wa_events         TYPE slis_alv_event,

    wa_sort TYPE slis_sortinfo_alv.

DATA: is_print TYPE slis_print_alv,

        gset TYPE lvc_s_glay,

        %runmode TYPE aqlimode.

DATA: BEGIN OF it_mard OCCURS 0,

    matnr LIKE mard-matnr,

    werks LIKE mard-werks,

    lgort LIKE mard-lgort,

    ebeln LIKE ekpo-ebeln,

    ebelp LIKE ekpo-ebelp,

    bstyp LIKE ekpo-bstyp,

    labst LIKE mard-labst.

DATA: END OF it_mard.

DATA: wa_mard LIKE it_mard.

DATA: BEGIN OF it_ekpo OCCURS 0,

    matnr LIKE mard-matnr"Material

    ebeln LIKE ekpo-ebeln"PO Number

    ebelp LIKE ekpo-ebelp"Line Item

    bstyp LIKE ekko-bstyp"Type

    bsart LIKE ekko-bsart"Category

    ekgrp LIKE ekko-ekgrp"Purchasing Group

    aedat LIKE ekpo-aedat"Doc Date

    reswk LIKE ekko-reswk"Vendor/Supplying Plant

    matkl LIKE ekpo-matkl"Material Group

    pstyp LIKE ekpo-pstyp"Item Category

    werks LIKE ekpo-werks"Plant

    menge LIKE ekpo-menge"Order Quantity

    meins LIKE ekpo-meins, "not sure for field

    "quantity in SKU

    lmein LIKE ekpo-lmein,

    netpr LIKE ekpo-netpr"net Price

    "curreny

    peinh LIKE ekpo-peinh"price unit

    ktmng LIKE ekpo-ktmng"Target Quantity

    "open target quantity

    "to be del(qty)

    "to be del(value)

    "to be invoiced(qty)

    "to be invoiced(value)

    labst LIKE mard-labst. "Available Quantity

DATA: END OF it_ekpo.

DATA: wa_ekpo LIKE it_ekpo.

DATA: BEGIN OF it_data OCCURS 0,

    matnr LIKE mard-matnr"Material

    ebeln LIKE ekpo-ebeln"PO Number

    ebelp LIKE ekpo-ebelp"Line Item

    bstyp LIKE ekko-bstyp"Type

    bsart LIKE ekko-bsart"Category

    ekgrp LIKE ekko-ekgrp"Purchasing Group

    aedat LIKE ekpo-aedat"Doc Date

    reswk LIKE ekko-reswk"Vendor/Supplying Plant

    matkl LIKE ekpo-matkl"Material Group

    pstyp LIKE ekpo-pstyp"Item Category

    werks LIKE ekpo-werks"Plant

    menge LIKE ekpo-menge"Order Quantity

    meins LIKE ekpo-meins, "not sure for field

    "quantity in SKU

    lmein LIKE ekpo-lmein,

    netpr LIKE ekpo-netpr"net Price

    "curreny

    peinh LIKE ekpo-peinh"price unit

    ktmng LIKE ekpo-ktmng"Target Quantity

    "open target quantity

    "to be del(qty)

    "to be del(value)

    "to be invoiced(qty)

    "to be invoiced(value)

    labst LIKE mard-labst. "Available Quantity

DATA: END OF it_data.

DATA: wa_data LIKE it_data.

DATA: BEGIN OF it_final OCCURS 0,

    matnr LIKE mard-matnr"Material

    ebeln LIKE ekpo-ebeln"PO Number

   ebeln_cp LIKE ekpo-ebeln,

    ebelp LIKE ekpo-ebelp"Line Item

    bstyp LIKE ekko-bstyp"Type

    bsart LIKE ekko-bsart"Category

    ekgrp LIKE ekko-ekgrp"Purchasing Group

    aedat LIKE ekpo-aedat"Doc Date

    reswk LIKE ekko-reswk"Vendor/Supplying Plant

    matkl LIKE ekpo-matkl"Material Group

    pstyp LIKE ekpo-pstyp"Item Category

    werks LIKE ekpo-werks"Plant

    menge LIKE ekpo-menge"Order Quantity

    meins LIKE ekpo-meins, "not sure for field

    "quantity in SKU

    lmein LIKE ekpo-lmein,

    netpr LIKE ekpo-netpr"net Price

    "curreny

    peinh LIKE ekpo-peinh"price unit

    ktmng LIKE ekpo-ktmng"Target Quantity

    "open target quantity

    "to be del(qty)

    "to be del(value)

    "to be invoiced(qty)

    "to be invoiced(value)

    labst LIKE mard-labst. "Available Quantity

DATA: END OF it_final.

DATA: wa_final LIKE it_final.

DATA :v_tabix TYPE sy-tabix.

SELECT-OPTIONS: p_matnr FOR mard-matnr,

                  p_plant FOR mard-werks.

START-OF-SELECTION.

PERFORM get_data.

PERFORM display_report.

FORM get_data.

SELECT matnr werks

    INTO CORRESPONDING FIELDS OF TABLE it_mard

    FROM mard UP TO 10 ROWS

    WHERE labst NE '0.000'.

DELETE it_mard WHERE matnr NOT IN p_matnr.

SELECT matnr ebeln ebelp werks bstyp pstyp audat matkl aedat matkl menge meins lmein netpr peinh ktmng

    INTO CORRESPONDING FIELDS OF TABLE it_ekpo

    FROM ekpo UP TO 10 ROWS

    WHERE bstyp EQ 'F'

    AND loekz NE 'L'

    .

DELETE it_ekpo WHERE matnr NOT IN p_matnr.

it_data[] = it_ekpo[].

LOOP AT it_mard.

    READ TABLE it_data WITH KEY werks = it_mard-werks.

    IF sy-subrc NE 0.

      it_data-matnr = it_mard-matnr.

      it_data-werks = it_mard-werks.

      APPEND it_data. CLEAR it_data.

    ENDIF.

ENDLOOP.

SORT it_data BY matnr ebeln ASCENDING.

LOOP AT it_data INTO wa_data.

it_final-matnr = wa_data-matnr.

it_final-ebeln = wa_data-ebeln.

it_final-ebeln_CP = wa_data-ebeln.

it_final-ebelp = wa_data-ebelp.

it_final-bstyp = wa_data-bstyp.

it_final-aedat = wa_data-aedat.

it_final-matkl = wa_data-matkl.

it_final-werks = wa_data-werks.

it_final-menge = wa_data-menge.

it_final-meins = wa_data-meins.

it_final-lmein = wa_data-lmein.

it_final-netpr = wa_data-netpr.

it_final-peinh = wa_data-peinh.

it_final-ktmng = wa_data-ktmng.

it_final-bstyp = wa_data-bstyp.

SELECT SINGLE epstp

    INTO it_final-pstyp

    FROM t163x

    WHERE pstyp EQ wa_data-pstyp

    AND spras EQ 'EN'.

SELECT SINGLE bsart ekgrp reswk

    INTO (it_final-bsart, it_final-ekgrp, it_final-reswk)

    FROM ekko

    WHERE ebeln = wa_data-ebeln.

DATA: avlqty TYPE i.

SELECT labst

    INTO avlqty

    FROM mard UP TO 10 ROWS

    WHERE matnr EQ wa_data-matnr

    AND werks EQ wa_data-werks.

    it_final-labst = it_final-labst + avlqty.

ENDSELECT.

APPEND it_final. CLEAR it_final.

ENDLOOP.

SORT it_final by matnr ebeln ASCENDING.

ENDFORM.

FORM display_report.

    is_print-no_print_selinfos = 'X'.

    is_print-no_print_listinfos = 'X'.

    is_print-print_ctrl = 'X'.

    PERFORM pf_write_fieldcat USING:

    'MATNR'                 'it_data' 'Material Number'                   ' ',

    'EBELN'                 'it_data' 'PO Number'                   ' ',

    'EBELN_CP'                 'it_data' 'PO Number'                   ' ',

    'EBELP'                 'it_data' 'Line Item'                   ' ',

    'BSART'                 'it_data' 'Type'                   ' ',

    'BSTYP'                 'it_data' 'Category'                   ' ',

    'EKGRP'                 'it_data' 'Purchasing Group'                   ' ',

    'AEDAT'                 'it_data' 'Doc. Date'                   ' ',

    'RESWK'                 'it_data' 'Vendor/Supplying Plant'                   ' ',

    'MATKL'                 'it_data' 'Material Group'                   ' ',

    'PSTYP'                 'it_data' 'Item Category'                   ' ',

    'WERKS'                 'it_data' 'Plant'                   ' ',

    'MENGE'                 'it_data' 'Order Quantity'                   ' ',

    'MEINS'                 'it_data' 'Order Unit'                   ' ',

*  ''                 'it_data' ''                   ' ',

     'LMEIN'                'it_data' 'SKU'                   ' ',

    'NETPR'                 'it_data' 'Net Price'                   ' ',

*  ''                 'it_data' ''                   ' ',

    'PEINH'                 'it_data' 'Price Unit'                   ' ',

    'KTMNG'                 'it_data' 'Target Quantity'                   ' ',

*  ''                 'it_data' ''                   ' ',

*  ''                 'it_data' ''                   ' ',

*  ''                 'it_data' ''                   ' ',

*  ''                 'it_data' ''                   ' ',

    'LABST'                 'it_data' 'Available Quantity'                   ' '.

*  ''                 'it_data' ''                   ' '.

* Layout

    x_layout-zebra = 'X'.

    x_layout-no_keyfix = ' '.

    x_layout-colwidth_optimize = 'X'.

* GUI Status

    w_status = 'SET_PF_STATUS'.

    w_repid = sy-repid.

* User commands

    w_comm = 'USER_COMMAND'.

    gs_variant-report  = sy-repid.

    gs_variant-username = sy-uname.

    gset-no_colwopt = 'X'.

PERFORM sub_populate_sort.

PERFORM sub_get_event.

BREAK-POINT.

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

      EXPORTING

        i_callback_program = sy-repid

        it_fieldcat        = t_fieldcat

        is_layout          = x_layout

*      it_sort                 = it_sortcat

        it_sort = t_sort

        it_events                = t_events

        is_variant         = gs_variant

        i_save             = 'A'

        is_print           = is_print

        i_default                = 'X'

      TABLES

        t_outtab           = it_final

      EXCEPTIONS

        program_error      = 1

        OTHERS             = 2.

ENDFORM.                    " display_report

FORM pf_write_fieldcat  USING fname

                                tname

                                text

                                len.

    ls_fieldcat-fieldname     = fname.

    ls_fieldcat-tabname       = tname.

    ls_fieldcat-seltext_l     = text.

    ls_fieldcat-outputlen     = len.

    IF fname = 'NETPR'.

      ls_fieldcat-do_sum = 'X'.

    ENDIF.

   IF fname = 'EBELN_CP'.

     ls_fieldcat-tech = 'X'.

     ls_fieldcat-no_out = 'X'.

   ENDIF.

    IF len = '0'.

      ls_fieldcat-outputlen     = '1'.

      ls_fieldcat-no_out = 'X'.

    ENDIF.

    APPEND ls_fieldcat TO t_fieldcat.

    CLEAR ls_fieldcat.

ENDFORM.

FORM sub_get_event .

     CONSTANTS : c_formname_subtotal_text TYPE slis_formname VALUE 'SUBTOTAL_TEXT'.

     DATA: l_s_event TYPE slis_alv_event.

     CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

       EXPORTING

         i_list_type     = 4

       IMPORTING

         et_events       = t_events

       EXCEPTIONS

         list_type_wrong = 0

         OTHERS          = 0.

* Subtotal

     READ TABLE t_events  INTO l_s_event

                       WITH KEY name = slis_ev_subtotal_text.

     IF sy-subrc = 0.

       MOVE c_formname_subtotal_text TO l_s_event-form.

       MODIFY t_events FROM l_s_event INDEX sy-tabix.

     ENDIF.

ENDFORM.                    " sub_get_event

FORM subtotal_text CHANGING

                  p_total TYPE any

                  p_subtot_text TYPE slis_subtot_text.

*BREAK-POINT.

"Data Declarations

    DATA: L_DOC TYPE CHAR50 VALUE 'PURCHASE DOCUMENT',

               L_TEMP TYPE CHAR30.

"Get the Subtotal document number

*   L_TEMP = p_subtot_text-display_text_for_subtotal.

"Append Purchase document word

*   CONCATENATE L_DOC L_TEMP INTO L_DOC SEPARATED BY SPACE.

IF p_subtot_text-display_text_for_subtotal IS INITIAL.

p_subtot_text-display_text_for_subtotal = 'Purchase Document'."L_DOC.

ENDIF.

*p_subtot_text-display_text_for_subtotal = 'Purchase Document'."L_DOC.

ENDFORM.

FORM sub_populate_sort .

* Sort on material

*   wa_sort-spos = '01' .

*   wa_sort-fieldname = 'MATNR'.

*   wa_sort-tabname = 'IT_FINAL'.

*   wa_sort-up = 'X'.

*   wa_sort-subtot = 'X'.

*   APPEND wa_sort TO t_sort .

*   CLEAR wa_sort.

** Sort on plant

*   wa_sort-spos = '02'.

*   wa_sort-fieldname = 'EBELN'.

*   wa_sort-tabname = 'IT_FINAL'.

*   wa_sort-up = 'X'.

*   wa_sort-subtot = 'X'.

*   APPEND wa_sort TO t_sort .

*   CLEAR wa_sort.

    wa_sort-spos = '01'.

    wa_sort-fieldname = 'EBELN_CP'.

    wa_sort-tabname = 'IT_FINAL'.

    wa_sort-up = 'X'.

    wa_sort-subtot = 'X'.

    APPEND wa_sort TO t_sort .

    CLEAR wa_sort.

ENDFORM.

Output:

Hope it helps.

Regards

Rajkumar Narasimman

0 Kudos

Hi Rajkumar,

It's working fine now. Thank you very much.

I would like to ask as well if it is possible to put the SUBTOTAL and TOTAL at the the top just like the picture I sent?

0 Kudos

Hi Jepoy.

Update the ALV layout variable as shown below.

   X_LAYOUT-TOTALS_BEFORE_ITEMS = 'X'.

Regards

Rajkumar Narasimman.

0 Kudos

Thank you so much Rajkumar