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: 

using ALV

Former Member
0 Kudos

I want to display sales order items that show various fields and have other fields ready for input.The user can expand or collapse the sales order header lines to decide if they want to review the line item data. Fields are ready for input at both the header and item level :

How can I achieve this in ALV?

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi,

Check this sample for hierarchical ALV to display the sales order details..


TYPE-POOLS: slis.

DATA: BEGIN OF itab OCCURS 0,
        vbeln TYPE vbeln,
        expand,
      END OF itab.

DATA: BEGIN OF itab1 OCCURS 0,
        vbeln TYPE vbeln,
        posnr TYPE posnr,
        matnr TYPE matnr,
        netpr TYPE netpr,
      END OF itab1.

DATA: t_fieldcatalog TYPE slis_t_fieldcat_alv.
DATA: s_fieldcatalog TYPE slis_fieldcat_alv.

s_fieldcatalog-col_pos = '1'.
s_fieldcatalog-fieldname = 'VBELN'.
s_fieldcatalog-tabname   = 'ITAB'.
s_fieldcatalog-rollname  = 'VBELN'.
s_fieldcatalog-outputlen = '12'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.

s_fieldcatalog-col_pos = '1'.
s_fieldcatalog-fieldname = 'VBELN'.
s_fieldcatalog-tabname   = 'ITAB1'.
s_fieldcatalog-rollname  = 'VBELN'.
s_fieldcatalog-outputlen = '12'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.

s_fieldcatalog-col_pos = '2'.
s_fieldcatalog-fieldname = 'POSNR'.
s_fieldcatalog-tabname   = 'ITAB1'.
s_fieldcatalog-rollname  = 'POSNR'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.

s_fieldcatalog-col_pos = '3'.
s_fieldcatalog-fieldname = 'MATNR'.
s_fieldcatalog-tabname   = 'ITAB1'.
s_fieldcatalog-rollname  = 'MATNR'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.

s_fieldcatalog-col_pos = '4'.
s_fieldcatalog-fieldname = 'NETPR'.
s_fieldcatalog-tabname   = 'ITAB1'.
s_fieldcatalog-rollname  = 'NETPR'.
s_fieldcatalog-do_sum    = 'X'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.

DATA: s_layout TYPE slis_layout_alv.

s_layout-subtotals_text            = 'SUBTOTAL TEXT'.
s_layout-key_hotspot = 'X'.
s_layout-expand_fieldname = 'EXPAND'.


SELECT vbeln UP TO 100 ROWS
       FROM
       vbak
       INTO TABLE itab.


IF NOT itab[] IS INITIAL.

  SELECT vbeln posnr matnr netpr
         FROM vbap
         INTO TABLE itab1
         FOR ALL ENTRIES IN itab
         WHERE vbeln = itab-vbeln.

ENDIF.


DATA: v_repid TYPE syrepid.

v_repid = sy-repid.

DATA: s_keyinfo TYPE slis_keyinfo_alv.
s_keyinfo-header01 = 'VBELN'.
s_keyinfo-item01   = 'VBELN'.

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
     EXPORTING
          i_callback_program = v_repid
          is_layout          = s_layout
          it_fieldcat        = t_fieldcatalog
          i_tabname_header   = 'ITAB'
          i_tabname_item     = 'ITAB1'
          is_keyinfo         = s_keyinfo
     TABLES
          t_outtab_header    = itab
          t_outtab_item      = itab1
     EXCEPTIONS
          program_error      = 1
          OTHERS             = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

Thanks

Naren

5 REPLIES 5

0 Kudos

go for HIERSEQUENTIAL REPORTs.

here i am attaching some sample code go through that one.



TYPE-POOLS: slis.

TABLES: ekko.

SELECT-OPTIONS: s_ebeln FOR ekko-ebeln.

DATA: BEGIN OF i_ekko OCCURS 0,
            ebeln LIKE ekko-ebeln,
            ernam LIKE ekko-ernam,
            bsart LIKE ekko-bsart,
            var1,
      END OF i_ekko.

DATA: BEGIN OF i_ekpo OCCURS 0,
            ebeln LIKE ekpo-ebeln,
            ebelp LIKE ekpo-ebelp,
            matnr LIKE ekpo-matnr,
            aedat LIKE ekpo-aedat,
      END OF i_ekpo.

DATA: fldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
      layout TYPE slis_layout_alv,
      key    TYPE slis_keyinfo_alv,
      events TYPE slis_t_event.

PERFORM get_data.
PERFORM append_data.

layout-expand_fieldname = 'VAR1'.
layout-zebra            = 'X'.

key-header01  = 'EBELN'.
key-item01    = 'EBELN'.

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
  EXPORTING
*   I_INTERFACE_CHECK              = ' '
    i_callback_program             = sy-cprog
*   I_CALLBACK_PF_STATUS_SET       = ' '
*   I_CALLBACK_USER_COMMAND        = ' '
    is_layout                      = layout
    it_fieldcat                    = fldcat[]
*   IT_EXCLUDING                   =
*   IT_SPECIAL_GROUPS              =
*   IT_SORT                        =
*   IT_FILTER                      =
*   IS_SEL_HIDE                    =
*   I_SCREEN_START_COLUMN          = 0
*   I_SCREEN_START_LINE            = 0
*   I_SCREEN_END_COLUMN            = 0
*   I_SCREEN_END_LINE              = 0
*   I_DEFAULT                      = 'X'
*   I_SAVE                         = ' '
*   IS_VARIANT                     =
*   IT_EVENTS                      =
*   IT_EVENT_EXIT                  =
    i_tabname_header               = 'I_EKKO'
    i_tabname_item                 = 'I_EKPO'
*   I_STRUCTURE_NAME_HEADER        =
*   I_STRUCTURE_NAME_ITEM          =
    is_keyinfo                     = key
*   IS_PRINT                       =
*   IS_REPREP_ID                   =
*   I_BYPASSING_BUFFER             =
*   I_BUFFER_ACTIVE                =
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER        =
*   ES_EXIT_CAUSED_BY_USER         =
  TABLES
    t_outtab_header                = i_ekko
    t_outtab_item                  = i_ekpo
* EXCEPTIONS
*   PROGRAM_ERROR                  = 1
*   OTHERS                         = 2
          .
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.



*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
*          Getting Data into Internal Tables
*----------------------------------------------------------------------*
FORM get_data.

  SELECT ebeln
         ernam
         bsart
    FROM       ekko
    INTO TABLE i_ekko
    WHERE ebeln IN s_ebeln.

  SELECT ebeln
         ebelp
         matnr
         aedat
    INTO TABLE i_ekpo
    FROM       ekpo
    FOR ALL ENTRIES IN i_ekko
    WHERE ebeln EQ i_ekko-ebeln.


ENDFORM.                    " get_data
*&---------------------------------------------------------------------*
*&      Form  append_data
*&---------------------------------------------------------------------*
*       Getting Data into Field Catalog
*----------------------------------------------------------------------*
FORM append_data.

  fldcat-col_pos          = 1.
  fldcat-fieldname        = 'EBELN'.
  fldcat-tabname          = 'I_EKKO'.
  fldcat-ref_fieldname    = 'EBELN'.
  fldcat-ref_tabname      = 'EKKO'.
  fldcat-key              = 'X'.
  APPEND fldcat.
  CLEAR  fldcat.

  fldcat-col_pos          = 2.
  fldcat-fieldname        = 'ERNAM'.
  fldcat-tabname          = 'I_EKKO'.
  fldcat-ref_fieldname    = 'ERNAM'.
  fldcat-ref_tabname      = 'EKKO'.
  APPEND fldcat.
  CLEAR  fldcat.

  fldcat-col_pos          = 3.
  fldcat-fieldname        = 'BSART'.
  fldcat-tabname          = 'I_EKKO'.
  fldcat-ref_fieldname    = 'BSART'.
  fldcat-ref_tabname      = 'EKKO'.
  APPEND fldcat.
  CLEAR  fldcat.

  fldcat-col_pos          = 4.
  fldcat-fieldname        = 'EBELP'.
  fldcat-tabname          = 'I_EKPO'.
  fldcat-ref_fieldname    = 'EBELP'.
  fldcat-ref_tabname      = 'EKPO'.
  fldcat-key              = 'X'.
  APPEND fldcat.
  CLEAR  fldcat.

  fldcat-col_pos          = 5.
  fldcat-fieldname        = 'MATNR'.
  fldcat-tabname          = 'I_EKPO'.
  fldcat-ref_fieldname    = 'MATNR'.
  fldcat-ref_tabname      = 'EKPO'.
  APPEND fldcat.
  CLEAR  fldcat.

  fldcat-col_pos          = 6.
  fldcat-fieldname        = 'AEDAT'.
  fldcat-tabname          = 'I_EKPO'.
  fldcat-ref_fieldname    = 'AEDAT'.
  fldcat-ref_tabname      = 'EKPO'.
  APPEND fldcat.
  CLEAR  fldcat.

ENDFORM.                    " append_data

<b>reward some points if helpful.</b>

Former Member
0 Kudos

Hi

by useing heirachical ALV report you can do this

<b>Reward if usefull</b>

Former Member
0 Kudos

Hi,

Check this sample for hierarchical ALV to display the sales order details..


TYPE-POOLS: slis.

DATA: BEGIN OF itab OCCURS 0,
        vbeln TYPE vbeln,
        expand,
      END OF itab.

DATA: BEGIN OF itab1 OCCURS 0,
        vbeln TYPE vbeln,
        posnr TYPE posnr,
        matnr TYPE matnr,
        netpr TYPE netpr,
      END OF itab1.

DATA: t_fieldcatalog TYPE slis_t_fieldcat_alv.
DATA: s_fieldcatalog TYPE slis_fieldcat_alv.

s_fieldcatalog-col_pos = '1'.
s_fieldcatalog-fieldname = 'VBELN'.
s_fieldcatalog-tabname   = 'ITAB'.
s_fieldcatalog-rollname  = 'VBELN'.
s_fieldcatalog-outputlen = '12'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.

s_fieldcatalog-col_pos = '1'.
s_fieldcatalog-fieldname = 'VBELN'.
s_fieldcatalog-tabname   = 'ITAB1'.
s_fieldcatalog-rollname  = 'VBELN'.
s_fieldcatalog-outputlen = '12'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.

s_fieldcatalog-col_pos = '2'.
s_fieldcatalog-fieldname = 'POSNR'.
s_fieldcatalog-tabname   = 'ITAB1'.
s_fieldcatalog-rollname  = 'POSNR'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.

s_fieldcatalog-col_pos = '3'.
s_fieldcatalog-fieldname = 'MATNR'.
s_fieldcatalog-tabname   = 'ITAB1'.
s_fieldcatalog-rollname  = 'MATNR'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.

s_fieldcatalog-col_pos = '4'.
s_fieldcatalog-fieldname = 'NETPR'.
s_fieldcatalog-tabname   = 'ITAB1'.
s_fieldcatalog-rollname  = 'NETPR'.
s_fieldcatalog-do_sum    = 'X'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.

DATA: s_layout TYPE slis_layout_alv.

s_layout-subtotals_text            = 'SUBTOTAL TEXT'.
s_layout-key_hotspot = 'X'.
s_layout-expand_fieldname = 'EXPAND'.


SELECT vbeln UP TO 100 ROWS
       FROM
       vbak
       INTO TABLE itab.


IF NOT itab[] IS INITIAL.

  SELECT vbeln posnr matnr netpr
         FROM vbap
         INTO TABLE itab1
         FOR ALL ENTRIES IN itab
         WHERE vbeln = itab-vbeln.

ENDIF.


DATA: v_repid TYPE syrepid.

v_repid = sy-repid.

DATA: s_keyinfo TYPE slis_keyinfo_alv.
s_keyinfo-header01 = 'VBELN'.
s_keyinfo-item01   = 'VBELN'.

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
     EXPORTING
          i_callback_program = v_repid
          is_layout          = s_layout
          it_fieldcat        = t_fieldcatalog
          i_tabname_header   = 'ITAB'
          i_tabname_item     = 'ITAB1'
          is_keyinfo         = s_keyinfo
     TABLES
          t_outtab_header    = itab
          t_outtab_item      = itab1
     EXCEPTIONS
          program_error      = 1
          OTHERS             = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

Thanks

Naren

Former Member
0 Kudos

Hi

sample code here

REPORT Z_HIER_ALV_TEST.

TYPE-POOLS: slis.

DATA: BEGIN OF t_scarr OCCURS 0.

INCLUDE STRUCTURE scarr.

DATA: expand.

DATA: END OF t_scarr.

DATA: BEGIN OF t_spfli OCCURS 0.

INCLUDE STRUCTURE spfli.

DATA: expand.

DATA: END OF t_spfli.

DATA: BEGIN OF t_sflight OCCURS 0.

INCLUDE STRUCTURE spfli.

DATA: END OF t_sflight.

data: w_scarr type scarr,

w_spfli type spfli,

w_sflight type sflight.

tables scarr.

select-options: s_carrid for scarr-carrid.

select * from scarr into table t_scarr where carrid in s_carrid.

select * from spfli into table t_spfli for all entries in t_scarr

where carrid = t_scarr-carrid.

DATA: gs_keyinfo TYPE slis_keyinfo_alv ,

g_expandname TYPE slis_fieldname VALUE 'EXPAND',

gs_layout TYPE slis_layout_alv,

g_tabname_header TYPE slis_tabname,

g_tabname_item TYPE slis_tabname,

g_tabname_item1 type slis_tabname..

DATA: t_fcat TYPE TABLE OF slis_fieldcat_alv,

w_fcat TYPE slis_fieldcat_alv.

data: ls_fieldcat type slis_fieldcat_alv.

gs_keyinfo-header01 = 'CARRID'.

gs_keyinfo-item01 = 'CARRID'.

gs_keyinfo-item02 = 'CARRID'.

g_tabname_header = 'T_SCARR'.

g_tabname_item = 'T_SPFLI'.

g_tabname_item1 = 'T_SLIGHT'.

gs_layout-expand_fieldname = g_expandname.

CLEAR w_fcat.

w_fcat-fieldname = 'ADD1'.

w_fcat-tabname = g_tabname_header.

w_fcat-no_out = 'X'.

w_fcat-input = 'X'.

w_fcat-sp_group = 'A'.

APPEND w_fcat TO t_fcat.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

i_internal_tabname = g_tabname_header

i_structure_name = 'SCARR'

CHANGING

ct_fieldcat = t_fcat[].

loop at t_fcat into ls_fieldcat.

case ls_fieldcat-fieldname.

when 'CARRID'.

ls_fieldcat-no_out = 'X'.

when 'CARRNAME'.

ls_fieldcat-no_out = 'X'.

when 'CURRCODE'.

ls_fieldcat-NO_OUT = 'X'.

endcase.

MODIFY t_fcat[] FROM ls_fieldcat.

ENDLOOP.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

i_internal_tabname = g_tabname_item

i_structure_name = 'SPFLI'

CHANGING

ct_fieldcat = t_fcat[].

*CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

  • EXPORTING

  • i_internal_tabname = g_tabname_item1

  • i_structure_name = 'SFLIGHT'

  • CHANGING

  • ct_fieldcat = t_fcat[].

*

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'

EXPORTING

  • t_INTERFACE_CHECK = ' '

i_CALLBACK_PROGRAM = sy-repid

  • t_CALLBACK_PF_STATUS_SET = ' '

  • t_CALLBACK_USER_COMMAND = ' '

IS_LAYOUT = gs_layout

IT_FIELDCAT = t_fcat[]

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

  • IT_SORT =

  • IT_FILTER =

  • IS_SEL_HIDE =

  • t_SCREEN_START_COLUMN = 0

  • t_SCREEN_START_LINE = 0

  • t_SCREEN_END_COLUMN = 0

  • t_SCREEN_END_LINE = 0

  • t_DEFAULT = 'X'

  • t_SAVE = ' '

  • IS_VARIANT =

  • IT_EVENTS =

  • IT_EVENT_EXIT =

i_TABNAME_HEADER = g_tabname_header

i_TABNAME_ITEM = g_tabname_item

  • t_STRUCTURE_NAME_HEADER =

  • t_STRUCTURE_NAME_ITEM =

IS_KEYINFO = gs_keyinfo

  • IS_PRINT =

  • IS_REPREP_ID =

  • t_BYPASSING_BUFFER =

  • t_BUFFER_ACTIVE =

  • IR_SALV_HIERSEQ_ADAPTER =

  • IT_EXCEPT_QINFO =

  • t_SUPPRESS_EMPTY_DATA = ABAP_FALSE

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

T_OUTTAB_HEADER = t_SCARR

T_OUTTAB_ITEM = t_SPFLI

  • EXCEPTIONS

  • PROGRAM_ERROR = 1

  • OTHERS = 2

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

<b>reward if usefull</b>

0 Kudos

how to make output fields as input enabled, displayed in the hierarchical list?

i.e. to make them as editable?Is it possible in list display?