Application Development and Automation 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: 
Read only

First try with ALV Grid and Abap Objects

Former Member
0 Likes
3,470

Hi,

this is my first try to write a simple report which just reads a textfile and display it in an ALV Grid. As a basis, I used some examples from SDN, but it did not work as expected

I would like just to use a docking container. I do not need a separate area for the ALV Grid. The report gives no syntax errors, but it just display the report title, nothing else. SAP R/3 Release is 4.7. Below is the source code of the report. Any idea what is missing?

*&---------------------------------------------------------------------*
*& Report  Z_PLAN_TEXT_UPLOAD                                          *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*
REPORT z_plan_text_upload.

INCLUDE <icon>.

************************************************************************
* Data Declaration
************************************************************************
DATA:
  gf_dynnr TYPE sy-dynnr,
  gf_repid TYPE sy-repid.

DATA:
  go_docking_container TYPE REF TO cl_gui_docking_container,
  go_alv_grid TYPE REF TO cl_gui_alv_grid.

DATA:
  gt_fieldcat TYPE lvc_t_fcat,
  gs_fieldcat LIKE LINE OF gt_fieldcat.


TYPES:
  BEGIN OF gy_text_input,
    firma(20)           TYPE c,
    kostenstelle(20)    TYPE c,
    datenart1(10)       TYPE c,
    planjahr(10)        TYPE c,
*    planperiode         TYPE co_perio,
    planperiode(5)      TYPE c,
    datenart2(10)       TYPE c,
    planungposition(10) TYPE c,
*    kostenart           TYPE koart,
    kostenart(10)       TYPE c,
*    planbetrag          TYPE bapicurr_d,
    planbetrag(20)      TYPE c,
  END OF gy_text_input.

DATA:
  gt_text_input TYPE TABLE OF gy_text_input,
  gs_text_input LIKE LINE OF gt_text_input.


************************************************************************
* Local Class Definition
************************************************************************



************************************************************************
* Local Class Implementation
************************************************************************



************************************************************************
* Selection-Screen
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1
  WITH FRAME TITLE text-001.

SKIP.

PARAMETERS:
  gp_file TYPE localfile,
  gp_head TYPE checkbox DEFAULT 'X'.

SKIP.

PARAMETERS:
  gp_gjahr LIKE coep-gjahr,
  gp_versn LIKE coep-versn.

SELECTION-SCREEN END OF BLOCK b1.


************************************************************************
* Initialization
************************************************************************
INITIALIZATION.

  DATA:
    lf_sapworkdir TYPE string.

  CALL METHOD cl_gui_frontend_services=>get_sapgui_workdir
    CHANGING
      sapworkdir            = lf_sapworkdir
    EXCEPTIONS
      get_sapworkdir_failed = 1
      cntl_error            = 2
      error_no_gui          = 3
      not_supported_by_gui  = 4
      OTHERS                = 5.

  IF sy-subrc <> 0 OR lf_sapworkdir = ''.

    CALL METHOD cl_gui_frontend_services=>directory_get_current
      CHANGING
        current_directory            = lf_sapworkdir
      EXCEPTIONS
        directory_get_current_failed = 1
        cntl_error                   = 2
        error_no_gui                 = 3
        not_supported_by_gui         = 4
        OTHERS                       = 5.

    CALL METHOD cl_gui_cfw=>flush.

  ENDIF."sy-subrc <> 0 OR sapworkdir = ''

  gp_file = lf_sapworkdir.

  gf_dynnr = sy-dynnr.
  gf_repid = sy-repid.


************************************************************************
* At Selection-Screen
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR gp_file.

  DATA:
    lt_filetable TYPE filetable,
    ls_filetable LIKE LINE OF lt_filetable,
    lt_rc TYPE i.

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
*  EXPORTING
*    WINDOW_TITLE            =
*    DEFAULT_EXTENSION       =
*    DEFAULT_FILENAME        =
*    FILE_FILTER             =
*    INITIAL_DIRECTORY       =
*    MULTISELECTION          =
*    WITH_ENCODING           =
    CHANGING
      file_table              = lt_filetable
      rc                      = lt_rc
*    USER_ACTION             =
*    FILE_ENCODING           =
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS                  = 5.

  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  READ TABLE lt_filetable INDEX 1
    INTO
      ls_filetable.

  gp_file = ls_filetable-filename.

  CALL METHOD cl_gui_cfw=>flush.


************************************************************************
* Start-Of-Selection
************************************************************************
START-OF-SELECTION.

  DATA:
    lf_filename LIKE filename-fileintern.

  lf_filename = gp_file.

  CALL FUNCTION 'FILE_READ_AND_CONVERT_SAP_DATA'
    EXPORTING
      i_filename                 = lf_filename
      i_servertyp                = 'PRS '
      i_fileformat               = 'TXT'
*     I_FIELD_SEPERATOR          =
      i_line_header              = gp_head
*   IMPORTING
*     E_BIN_FILELENGTH           =
   TABLES
     i_tab_receiver             = gt_text_input
   EXCEPTIONS
     file_not_found             = 1
     close_failed               = 2
     authorization_failed       = 3
     open_failed                = 4
     conversion_failed          = 5
     OTHERS                     = 6.

  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

*------ Build the Field Catalog ---------------------------------------*
  PERFORM build_fieldcatalog
    CHANGING gt_fieldcat.


*------ Create the docking container ----------------------------------*
  IF go_docking_container IS INITIAL.

    CREATE OBJECT go_docking_container
      EXPORTING
*      PARENT                      =
        repid                       = gf_repid
        dynnr                       = gf_dynnr
*     SIDE                        = go_docking_container->DOCK_AT_bottom
*      EXTENSION                   = 200
*      STYLE                       =
*      LIFETIME                    = lifetime_default
*      CAPTION                     =
*      METRIC                      = 0
*      RATIO                       =
*      NO_AUTODEF_PROGID_DYNNR     =
*      NAME                        =
      EXCEPTIONS
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5
        OTHERS                      = 6.

    IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

  ENDIF."go_docking_container IS INITIAL

*------ Create the ALV Grid -------------------------------------------*
  IF go_alv_grid IS INITIAL.

    CREATE OBJECT go_alv_grid
      EXPORTING
*      I_SHELLSTYLE      = 0
*      I_LIFETIME        =
        i_parent          = go_docking_container
*      I_APPL_EVENTS     = space
*      I_PARENTDBG       =
*      I_APPLOGPARENT    =
*      I_GRAPHICSPARENT  =
*      I_NAME            =
      EXCEPTIONS
        error_cntl_create = 1
        error_cntl_init   = 2
        error_cntl_link   = 3
        error_dp_create   = 4
        OTHERS            = 5.

    IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDIF."go_alv_grid is initial

*------ Call ALV Grid -------------------------------------------------*
  CALL METHOD go_alv_grid->set_table_for_first_display
*     EXPORTING
*      I_BUFFER_ACTIVE               =
*      I_BYPASSING_BUFFER            =
*      I_CONSISTENCY_CHECK           =
*      I_STRUCTURE_NAME              =
*      IS_VARIANT                    =
*      I_SAVE                        =
*      I_DEFAULT                     = 'X'
*      IS_LAYOUT                     =
*      IS_PRINT                      =
*      IT_SPECIAL_GROUPS             =
*      IT_TOOLBAR_EXCLUDING          =
*      IT_HYPERLINK                  =
*      IT_ALV_GRAPHICS               =
*      IT_EXCEPT_QINFO               =
    CHANGING
      it_outtab                     = gt_text_input
      it_fieldcatalog               = gt_fieldcat
*      IT_SORT                       =
*      IT_FILTER                     =
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.

  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  build_fieldcatalog
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_FIELDCAT  text
*----------------------------------------------------------------------*
FORM build_fieldcatalog
  CHANGING
    pt_fieldcat TYPE lvc_t_fcat.


  DATA ls_fcat TYPE lvc_s_fcat.

  ls_fcat-fieldname = 'FIRMA' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '20' .
  ls_fcat-coltext = 'Firma' .
  ls_fcat-seltext = 'Firma' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'KOSTENSTELLE' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '20' .
  ls_fcat-coltext = 'Kostenstelle' .
  ls_fcat-seltext = 'Kostenstelle' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'DATENART1' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '10' .
  ls_fcat-coltext = 'Datenart1' .
  ls_fcat-seltext = 'Datenart1' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'PLANJAHR' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '10' .
  ls_fcat-coltext = 'Planjahr' .
  ls_fcat-seltext = 'Planjahr' .

  APPEND ls_fcat TO pt_fieldcat .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'PLANPERIODE' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '5' .
  ls_fcat-coltext = 'Planperiode' .
  ls_fcat-seltext = 'Planperiode' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'DATENART2' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '10' .
  ls_fcat-coltext = 'Datenart2' .
  ls_fcat-seltext = 'Datenart2' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'PLANUNGSPOSITION' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '10' .
  ls_fcat-coltext = 'Planungsposition' .
  ls_fcat-seltext = 'Planungsposition' .

  APPEND ls_fcat TO pt_fieldcat .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'KOSTENART' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '10' .
  ls_fcat-coltext = 'Kostenart' .
  ls_fcat-seltext = 'Kostenart' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'PLANBETRAG' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '20' .
  ls_fcat-coltext = 'Planbetrag' .
  ls_fcat-seltext = 'Planbetrag' .

  APPEND ls_fcat TO pt_fieldcat .


ENDFORM.                    "build_fieldcatalog

1 ACCEPTED SOLUTION
Read only

uwe_schieferstein
Active Contributor
0 Likes
2,437

Hello Tapio

Where is your CALL SCREEN '0100' statement?

You need a dynpro (= screen) to display your control.

For an example have a look at sample report ZUS_SDN_TWO_ALV_GRIDS in .

Regards

Uwe

Hi,

this is my first try to write a simple report which just reads a textfile and display it in an ALV Grid. As a basis, I used some examples from SDN, but it did not work as expected

I would like just to use a docking container. I do not need a separate area for the ALV Grid. The report gives no syntax errors, but it just display the report title, nothing else. SAP R/3 Release is 4.7. Below is the source code of the report. Any idea what is missing?

*&---------------------------------------------------------------------*
*& Report  Z_PLAN_TEXT_UPLOAD                                          *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*
REPORT z_plan_text_upload.

INCLUDE <icon>.

************************************************************************
* Data Declaration
************************************************************************
DATA:
  gf_dynnr TYPE sy-dynnr,
  gf_repid TYPE sy-repid.

DATA:
  go_docking_container TYPE REF TO cl_gui_docking_container,
  go_alv_grid TYPE REF TO cl_gui_alv_grid.

DATA:
  gt_fieldcat TYPE lvc_t_fcat,
  gs_fieldcat LIKE LINE OF gt_fieldcat.


TYPES:
  BEGIN OF gy_text_input,
    firma(20)           TYPE c,
    kostenstelle(20)    TYPE c,
    datenart1(10)       TYPE c,
    planjahr(10)        TYPE c,
*    planperiode         TYPE co_perio,
    planperiode(5)      TYPE c,
    datenart2(10)       TYPE c,
    planungposition(10) TYPE c,
*    kostenart           TYPE koart,
    kostenart(10)       TYPE c,
*    planbetrag          TYPE bapicurr_d,
    planbetrag(20)      TYPE c,
  END OF gy_text_input.

DATA:
  gt_text_input TYPE TABLE OF gy_text_input,
  gs_text_input LIKE LINE OF gt_text_input.


************************************************************************
* Local Class Definition
************************************************************************



************************************************************************
* Local Class Implementation
************************************************************************



************************************************************************
* Selection-Screen
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1
  WITH FRAME TITLE text-001.

SKIP.

PARAMETERS:
  gp_file TYPE localfile,
  gp_head TYPE checkbox DEFAULT 'X'.

SKIP.

PARAMETERS:
  gp_gjahr LIKE coep-gjahr,
  gp_versn LIKE coep-versn.

SELECTION-SCREEN END OF BLOCK b1.


************************************************************************
* Initialization
************************************************************************
INITIALIZATION.

  DATA:
    lf_sapworkdir TYPE string.

  CALL METHOD cl_gui_frontend_services=>get_sapgui_workdir
    CHANGING
      sapworkdir            = lf_sapworkdir
    EXCEPTIONS
      get_sapworkdir_failed = 1
      cntl_error            = 2
      error_no_gui          = 3
      not_supported_by_gui  = 4
      OTHERS                = 5.

  IF sy-subrc <> 0 OR lf_sapworkdir = ''.

    CALL METHOD cl_gui_frontend_services=>directory_get_current
      CHANGING
        current_directory            = lf_sapworkdir
      EXCEPTIONS
        directory_get_current_failed = 1
        cntl_error                   = 2
        error_no_gui                 = 3
        not_supported_by_gui         = 4
        OTHERS                       = 5.

    CALL METHOD cl_gui_cfw=>flush.

  ENDIF."sy-subrc <> 0 OR sapworkdir = ''

  gp_file = lf_sapworkdir.

  gf_dynnr = sy-dynnr.
  gf_repid = sy-repid.


************************************************************************
* At Selection-Screen
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR gp_file.

  DATA:
    lt_filetable TYPE filetable,
    ls_filetable LIKE LINE OF lt_filetable,
    lt_rc TYPE i.

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
*  EXPORTING
*    WINDOW_TITLE            =
*    DEFAULT_EXTENSION       =
*    DEFAULT_FILENAME        =
*    FILE_FILTER             =
*    INITIAL_DIRECTORY       =
*    MULTISELECTION          =
*    WITH_ENCODING           =
    CHANGING
      file_table              = lt_filetable
      rc                      = lt_rc
*    USER_ACTION             =
*    FILE_ENCODING           =
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS                  = 5.

  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  READ TABLE lt_filetable INDEX 1
    INTO
      ls_filetable.

  gp_file = ls_filetable-filename.

  CALL METHOD cl_gui_cfw=>flush.


************************************************************************
* Start-Of-Selection
************************************************************************
START-OF-SELECTION.

  DATA:
    lf_filename LIKE filename-fileintern.

  lf_filename = gp_file.

  CALL FUNCTION 'FILE_READ_AND_CONVERT_SAP_DATA'
    EXPORTING
      i_filename                 = lf_filename
      i_servertyp                = 'PRS '
      i_fileformat               = 'TXT'
*     I_FIELD_SEPERATOR          =
      i_line_header              = gp_head
*   IMPORTING
*     E_BIN_FILELENGTH           =
   TABLES
     i_tab_receiver             = gt_text_input
   EXCEPTIONS
     file_not_found             = 1
     close_failed               = 2
     authorization_failed       = 3
     open_failed                = 4
     conversion_failed          = 5
     OTHERS                     = 6.

  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

*------ Build the Field Catalog ---------------------------------------*
  PERFORM build_fieldcatalog
    CHANGING gt_fieldcat.


*------ Create the docking container ----------------------------------*
  IF go_docking_container IS INITIAL.

    CREATE OBJECT go_docking_container
      EXPORTING
*      PARENT                      =
        repid                       = gf_repid
        dynnr                       = gf_dynnr
*     SIDE                        = go_docking_container->DOCK_AT_bottom
*      EXTENSION                   = 200
*      STYLE                       =
*      LIFETIME                    = lifetime_default
*      CAPTION                     =
*      METRIC                      = 0
*      RATIO                       =
*      NO_AUTODEF_PROGID_DYNNR     =
*      NAME                        =
      EXCEPTIONS
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5
        OTHERS                      = 6.

    IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

  ENDIF."go_docking_container IS INITIAL

*------ Create the ALV Grid -------------------------------------------*
  IF go_alv_grid IS INITIAL.

    CREATE OBJECT go_alv_grid
      EXPORTING
*      I_SHELLSTYLE      = 0
*      I_LIFETIME        =
        i_parent          = go_docking_container
*      I_APPL_EVENTS     = space
*      I_PARENTDBG       =
*      I_APPLOGPARENT    =
*      I_GRAPHICSPARENT  =
*      I_NAME            =
      EXCEPTIONS
        error_cntl_create = 1
        error_cntl_init   = 2
        error_cntl_link   = 3
        error_dp_create   = 4
        OTHERS            = 5.

    IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDIF."go_alv_grid is initial

*------ Call ALV Grid -------------------------------------------------*
  CALL METHOD go_alv_grid->set_table_for_first_display
*     EXPORTING
*      I_BUFFER_ACTIVE               =
*      I_BYPASSING_BUFFER            =
*      I_CONSISTENCY_CHECK           =
*      I_STRUCTURE_NAME              =
*      IS_VARIANT                    =
*      I_SAVE                        =
*      I_DEFAULT                     = 'X'
*      IS_LAYOUT                     =
*      IS_PRINT                      =
*      IT_SPECIAL_GROUPS             =
*      IT_TOOLBAR_EXCLUDING          =
*      IT_HYPERLINK                  =
*      IT_ALV_GRAPHICS               =
*      IT_EXCEPT_QINFO               =
    CHANGING
      it_outtab                     = gt_text_input
      it_fieldcatalog               = gt_fieldcat
*      IT_SORT                       =
*      IT_FILTER                     =
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.

  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  build_fieldcatalog
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_FIELDCAT  text
*----------------------------------------------------------------------*
FORM build_fieldcatalog
  CHANGING
    pt_fieldcat TYPE lvc_t_fcat.


  DATA ls_fcat TYPE lvc_s_fcat.

  ls_fcat-fieldname = 'FIRMA' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '20' .
  ls_fcat-coltext = 'Firma' .
  ls_fcat-seltext = 'Firma' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'KOSTENSTELLE' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '20' .
  ls_fcat-coltext = 'Kostenstelle' .
  ls_fcat-seltext = 'Kostenstelle' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'DATENART1' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '10' .
  ls_fcat-coltext = 'Datenart1' .
  ls_fcat-seltext = 'Datenart1' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'PLANJAHR' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '10' .
  ls_fcat-coltext = 'Planjahr' .
  ls_fcat-seltext = 'Planjahr' .

  APPEND ls_fcat TO pt_fieldcat .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'PLANPERIODE' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '5' .
  ls_fcat-coltext = 'Planperiode' .
  ls_fcat-seltext = 'Planperiode' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'DATENART2' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '10' .
  ls_fcat-coltext = 'Datenart2' .
  ls_fcat-seltext = 'Datenart2' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'PLANUNGSPOSITION' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '10' .
  ls_fcat-coltext = 'Planungsposition' .
  ls_fcat-seltext = 'Planungsposition' .

  APPEND ls_fcat TO pt_fieldcat .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'KOSTENART' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '10' .
  ls_fcat-coltext = 'Kostenart' .
  ls_fcat-seltext = 'Kostenart' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'PLANBETRAG' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '20' .
  ls_fcat-coltext = 'Planbetrag' .
  ls_fcat-seltext = 'Planbetrag' .

  APPEND ls_fcat TO pt_fieldcat .


ENDFORM.                    "build_fieldcatalog

15 REPLIES 15
Read only

uwe_schieferstein
Active Contributor
0 Likes
2,438

Hello Tapio

Where is your CALL SCREEN '0100' statement?

You need a dynpro (= screen) to display your control.

For an example have a look at sample report ZUS_SDN_TWO_ALV_GRIDS in .

Regards

Uwe

Read only

0 Likes
2,437

Hi Uwe,

I know your reports very well. Keep on with this great work! But for this I used another example as a basis.

[https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/117beb90-0201-0010-67a8-fff1482209ae]

There is also no Call Screen statement. I thought, this is the most simplest solution. Sorry for maybe stupid questions, but it's my first try with GRID/OO. I could do this with FB REUSE_ALV_GRID_Display very easy, but I try to switch to OO environment.

Best Regards

Tapio

Read only

0 Likes
2,437

Hello Tapio

If you have the new ALV object model available (>= ECC 5.0) then have a look at sample report ZUS_SDN_CL_SALV_TABLE_INTERACT in thread .

If you want to use fm-based ALV list (e.g. for rapid prototyping or testing) then please stay away from the old-fashioned SLIS-based function modules and use REUSE_ALV_GRID_DISPLAY_LVC instead (e.g. see .

Regards

Uwe

Read only

0 Likes
2,437

Hi Uwe,

Unfortunately in this case Release is 4.7 (Basis Release 6.20, Support Package 43).

Well, I will try a new approach with the Call-Screen Statement. But I really wondering why the report works in the example and my report did not work?? Does it have something to do, that the example report calls the method set_table_for_first_display during event AT SELECTION-SCREEN?

Best regards

Tapio

Read only

0 Likes
2,437

Hello Tapio

You may give it a try. However, the document you mentioned does not state the system requirements which obviously is crucial information.

Even if it does work I would not use such an approach except for testing and rapid prototyping.

Regards

Uwe

Read only

0 Likes
2,437

Hi Uwe,

finally I could manage to create the ALV-Grid display

[http://img171.imagevenue.com/img.php?image=04335_sapalv01_122_787lo.jpg]

I was struggling a little bit the the Menu Painter stuff (Status, OK Code Handling etc..) To be honest, I thought I can get rid off these things with the ALV-Grid.

Anyway, this was only the start. Now I need a lot more functionality...

Best regards

Tapio

Read only

Former Member
0 Likes
2,437

I have added some more functionality to my report. The good thing is, the report works as it should.

BUT, I'm not really sure, whether this is a good (correct) design. The report works the following way:

1. Read planning data form text file into internal table

2. Display the internal table

3. Convert the data and display the converted result

4. Post the converted data to the system

5. Display log with messages

The main thing is, I would like to know, do i really need two dynros, to display the two different internal tables or is it possible just to use one ALV-Grid? I was not able to find another solution. Any comment or help to the report is appreciated.

*&---------------------------------------------------------------------*
*& Report  Z_PLAN_TEXT_UPLOAD_TEST                                     *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*
REPORT z_plan_text_upload_test.

INCLUDE <icon>.

************************************************************************
* Data Declaration
************************************************************************
DATA:
  gf_okcode TYPE ui_func,
  gf_balloghndl TYPE balloghndl.

DATA:
  go_docking_container TYPE REF TO cl_gui_docking_container,
  go_alv_grid_0100 TYPE REF TO cl_gui_alv_grid,
  go_alv_grid_0200 TYPE REF TO cl_gui_alv_grid.


DATA:
  gt_fieldcat TYPE lvc_t_fcat,
  gs_fieldcat LIKE LINE OF gt_fieldcat.

TYPES:
  BEGIN OF gy_text_input,
    firma(20)            TYPE c,
    kostenstelle(20)     TYPE c,
    datenart1(10)        TYPE c,
    planjahr(10)         TYPE c,
*    planperiode         TYPE co_perio,
    planperiode(5)       TYPE c,
    datenart2(10)        TYPE c,
    planungsposition(10) TYPE c,
*    kostenart           TYPE koart,
    kostenart(10)        TYPE c,
*    planbetrag          TYPE bapicurr_d,
    planbetrag(20)       TYPE c,
  END OF gy_text_input.

DATA:
  gt_text_input TYPE TABLE OF gy_text_input,
  gs_text_input LIKE LINE OF gt_text_input.


* Bapi Strukturen
DATA:
  gs_headerinfo TYPE bapiplnhdr,
  gt_indexstructure TYPE TABLE OF bapiacpstru,
  gs_indexstructure LIKE LINE OF gt_indexstructure,
  gt_coobject TYPE TABLE OF bapipcpobj,
  gs_coobject LIKE LINE OF gt_coobject,
  gt_pervalue TYPE TABLE OF bapipcpval,
  gs_pervalue LIKE LINE OF gt_pervalue,
  gt_return TYPE TABLE OF bapiret2,
  gs_return LIKE LINE OF gt_return,
  gt_control TYPE TABLE OF bapipcpctrl,
  gt_totvalue TYPE TABLE OF bapipcptot.

TYPES:
  BEGIN OF gy_bapi_input,
    version      TYPE versn,
*    perio       TYPE co_perio,
    fisc_year    TYPE gjahr,
    coobject(10) TYPE c,
    cost_elem    TYPE kstar,
    wkgbtr01     TYPE wkgxxx,
    wkgbtr02     TYPE wkgxxx,
    wkgbtr03     TYPE wkgxxx,
    wkgbtr04     TYPE wkgxxx,
    wkgbtr05     TYPE wkgxxx,
    wkgbtr06     TYPE wkgxxx,
    wkgbtr07     TYPE wkgxxx,
    wkgbtr08     TYPE wkgxxx,
    wkgbtr09     TYPE wkgxxx,
    wkgbtr10     TYPE wkgxxx,
    wkgbtr11     TYPE wkgxxx,
    wkgbtr12     TYPE wkgxxx,
  END OF gy_bapi_input.

DATA:
  gt_bapi_input TYPE TABLE OF gy_bapi_input,
  gs_bapi_input LIKE LINE OF gt_bapi_input.


* Anwendungs-Log
DATA: gs_balsmsg TYPE bal_s_msg.


************************************************************************
* Selection-Screen
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1
  WITH FRAME TITLE text-001.

PARAMETERS:
  gp_file TYPE localfile,
  gp_head TYPE checkbox DEFAULT 'X'.

SELECTION-SCREEN SKIP.

PARAMETERS:
  gp_kokrs  LIKE coep-kokrs,
  gp_gjahr LIKE coep-gjahr,
  gp_versn LIKE coep-versn,
  gp_test AS CHECKBOX DEFAULT 'X'.

SELECTION-SCREEN END OF BLOCK b1.

************************************************************************
* Local Class Definition
************************************************************************
CLASS lcl_event_handler DEFINITION.

  PUBLIC SECTION.

    METHODS:

    handle_toolbar_0100 FOR EVENT toolbar OF cl_gui_alv_grid
      IMPORTING
        e_object
        e_interactive,

    handle_user_command_0100 FOR EVENT user_command OF cl_gui_alv_grid
      IMPORTING
        e_ucomm,

    handle_toolbar_0200 FOR EVENT toolbar OF cl_gui_alv_grid
      IMPORTING
        e_object
        e_interactive,

    handle_user_command_0200 FOR EVENT user_command OF cl_gui_alv_grid
      IMPORTING
        e_ucomm.

  PRIVATE SECTION.

ENDCLASS.                    "lcl_event_handler DEFINITION


************************************************************************
* Local Class Implementation
************************************************************************
CLASS lcl_event_handler IMPLEMENTATION.

  METHOD handle_toolbar_0100.

    PERFORM handle_toolbar_0100
      USING
        e_object.
*        e_interactive.

  ENDMETHOD.                    "handle_toolbar_0100

  METHOD handle_user_command_0100.

    PERFORM handle_user_command_0100
      USING
        e_ucomm.

  ENDMETHOD.                    "handle_user_command_0100

  METHOD handle_toolbar_0200.

    PERFORM handle_toolbar_0200
      USING
        e_object.
*        e_interactive.

  ENDMETHOD.                    "handle_toolbar_0100

  METHOD handle_user_command_0200.

    PERFORM handle_user_command_0200
      USING
        e_ucomm.

  ENDMETHOD.                    "handle_user_command_0100



ENDCLASS.                    "lcl_event_handler IMPLEMENTATION

************************************************************************
* Initialization
************************************************************************
INITIALIZATION.

  DATA:
    lf_sapworkdir TYPE string.

  CALL METHOD cl_gui_frontend_services=>get_sapgui_workdir
    CHANGING
      sapworkdir            = lf_sapworkdir
    EXCEPTIONS
      get_sapworkdir_failed = 1
      cntl_error            = 2
      error_no_gui          = 3
      not_supported_by_gui  = 4
      OTHERS                = 5.

  IF sy-subrc <> 0 OR lf_sapworkdir = ''.

    CALL METHOD cl_gui_frontend_services=>directory_get_current
      CHANGING
        current_directory            = lf_sapworkdir
      EXCEPTIONS
        directory_get_current_failed = 1
        cntl_error                   = 2
        error_no_gui                 = 3
        not_supported_by_gui         = 4
        OTHERS                       = 5.

    CALL METHOD cl_gui_cfw=>flush.

  ENDIF."sy-subrc <> 0 OR sapworkdir = ''

  gp_file = lf_sapworkdir.

************************************************************************
* At Selection-Screen
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR gp_file.

  DATA:
    lt_filetable TYPE filetable,
    ls_filetable LIKE LINE OF lt_filetable,
    lt_rc TYPE i.


  CALL METHOD cl_gui_frontend_services=>file_open_dialog
*  EXPORTING
*    WINDOW_TITLE            =
*    DEFAULT_EXTENSION       =
*    DEFAULT_FILENAME        =
*    FILE_FILTER             =
*    INITIAL_DIRECTORY       =
*    MULTISELECTION          =
*    WITH_ENCODING           =
    CHANGING
      file_table              = lt_filetable
      rc                      = lt_rc
*    USER_ACTION             =
*    FILE_ENCODING           =
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS                  = 5.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  READ TABLE lt_filetable INDEX 1
    INTO
      ls_filetable.

  gp_file = ls_filetable-filename.

  CALL METHOD cl_gui_cfw=>flush.


************************************************************************
* Start-Of-Selection
************************************************************************
START-OF-SELECTION.

  DATA:
    lf_filename LIKE filename-fileintern.

  PERFORM create_log.

  gs_return-type = 'I'.

  IF gp_test = 'X'.
    gs_return-message = text-010.
  ELSE.
    gs_return-message = text-020.
  ENDIF.

  PERFORM add_log_message_free_text
    USING
       gs_return-type
       gs_return-message.


  lf_filename = gp_file.

  CALL FUNCTION 'FILE_READ_AND_CONVERT_SAP_DATA'
    EXPORTING
      i_filename                 = lf_filename
      i_servertyp                = 'PRS '
      i_fileformat               = 'TXT'
*     I_FIELD_SEPERATOR          =
      i_line_header              = gp_head
*   IMPORTING
*     E_BIN_FILELENGTH           =
   TABLES
     i_tab_receiver             = gt_text_input
   EXCEPTIONS
     file_not_found             = 1
     close_failed               = 2
     authorization_failed       = 3
     open_failed                = 4
     conversion_failed          = 5
     OTHERS                     = 6.

  IF sy-subrc <> 0.

    gs_balsmsg-msgty = sy-msgty.
    gs_balsmsg-msgid = sy-msgid.
    gs_balsmsg-msgno = sy-msgno.
    gs_balsmsg-msgv1 = sy-msgv1.
    gs_balsmsg-msgv2 = sy-msgv2.
    gs_balsmsg-msgv3 = sy-msgv3.
    gs_balsmsg-msgv4 = sy-msgv4.

    PERFORM add_log_message
      USING
        gs_balsmsg.

  ENDIF.

  CALL SCREEN '0100'.


*&---------------------------------------------------------------------
*
*&      Module  status_0100  OUTPUT
*&---------------------------------------------------------------------
*
*       text
*----------------------------------------------------------------------
*
MODULE status_0100 OUTPUT.

  SET PF-STATUS 'STATUS_0100'.

*------ Create the docking container ----------------------------------*
  IF go_docking_container IS INITIAL.

    CREATE OBJECT go_docking_container
      EXPORTING
        parent                      = cl_gui_container=>screen0
*        repid                       = gf_repid
*        dynnr                       = gf_dynnr
*     SIDE                        = go_docking_container->DOCK_AT_bottom
*       EXTENSION                   = 200
*      STYLE                       =
*      LIFETIME                    = lifetime_default
*      CAPTION                     =
*      METRIC                      = 0
        ratio                       = 95
*      NO_AUTODEF_PROGID_DYNNR     =
*      NAME                        =
      EXCEPTIONS
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5
        OTHERS                      = 6.

    IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.


*------ Expand  docking container to full screen    -------------------*
    CALL METHOD go_docking_container->set_extension
      EXPORTING
        extension  = 99999  "full-screen size !!!
      EXCEPTIONS
        cntl_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.


  ENDIF."go_docking_container IS INITIAL


*------ Link docking container to screen ------------------------------*
  CALL METHOD go_docking_container->link
    EXPORTING
      repid                       = sy-repid
      dynnr                       = '0100'
*      CONTAINER                   =
    EXCEPTIONS
      cntl_error                  = 1
      cntl_system_error           = 2
      lifetime_dynpro_dynpro_link = 3
      OTHERS                      = 4
          .
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


*------ Build the Field Catalog ---------------------------------------*
  PERFORM build_fieldcatalog_input
    CHANGING gt_fieldcat.

*------ Create the ALV Grid -------------------------------------------*
  IF go_alv_grid_0100 IS INITIAL.

    CREATE OBJECT go_alv_grid_0100
      EXPORTING
*      I_SHELLSTYLE      = 0
*      I_LIFETIME        =
        i_parent          = go_docking_container
*      I_APPL_EVENTS     = space
*      I_PARENTDBG       =
*      I_APPLOGPARENT    =
*      I_GRAPHICSPARENT  =
*      I_NAME            =
      EXCEPTIONS
        error_cntl_create = 1
        error_cntl_init   = 2
        error_cntl_link   = 3
        error_dp_create   = 4
        OTHERS            = 5.

    IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

  ENDIF."go_alv_grid_0100 is initial

*------ Create instance for event handler -----------------------------*
  DATA: go_event_handler_0100 TYPE REF TO lcl_event_handler.

  CREATE OBJECT go_event_handler_0100.

*------ Register event handler ----------------------------------------*
  SET HANDLER go_event_handler_0100->handle_toolbar_0100
    FOR go_alv_grid_0100.
  SET HANDLER go_event_handler_0100->handle_user_command_0100
    FOR go_alv_grid_0100.

*------ Call ALV Grid -------------------------------------------------*
  CALL METHOD go_alv_grid_0100->set_table_for_first_display
*     EXPORTING
*      I_BUFFER_ACTIVE               =
*      I_BYPASSING_BUFFER            =
*      I_CONSISTENCY_CHECK           =
*      I_STRUCTURE_NAME              =
*      IS_VARIANT                    =
*      I_SAVE                        =
*      I_DEFAULT                     = 'X'
*      IS_LAYOUT                     =
*      IS_PRINT                      =
*      IT_SPECIAL_GROUPS             =
*      IT_TOOLBAR_EXCLUDING          =
*      IT_HYPERLINK                  =
*      IT_ALV_GRAPHICS               =
*      IT_EXCEPT_QINFO               =
    CHANGING
      it_outtab                     = gt_text_input
      it_fieldcatalog               = gt_fieldcat
*      IT_SORT                       =
*      IT_FILTER                     =
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.

  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

*---- Call method 'set_toolbar_interactive' to raise event TOOLBAR.
  CALL METHOD go_alv_grid_0100->set_toolbar_interactive.


ENDMODULE.                 " status_0100  OUTPUT
*&---------------------------------------------------------------------
*
*&      Module  status_0200  OUTPUT
*&---------------------------------------------------------------------
*
*       text
*----------------------------------------------------------------------
*
MODULE status_0200 OUTPUT.

  SET PF-STATUS 'STATUS_0100'.

*------ Create the docking container ----------------------------------*
  IF go_docking_container IS INITIAL.

    CREATE OBJECT go_docking_container
      EXPORTING
        parent                      = cl_gui_container=>screen0
*        repid                       = gf_repid
*        dynnr                       = gf_dynnr
*     SIDE                        = go_docking_container->DOCK_AT_bottom
*       EXTENSION                   = 200
*      STYLE                       =
*      LIFETIME                    = lifetime_default
*      CAPTION                     =
*      METRIC                      = 0
        ratio                       = 95
*      NO_AUTODEF_PROGID_DYNNR     =
*      NAME                        =
      EXCEPTIONS
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5
        OTHERS                      = 6.

    IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.


*------ Expand  docking container to full screen    -------------------*
    CALL METHOD go_docking_container->set_extension
      EXPORTING
        extension  = 99999
      EXCEPTIONS
        cntl_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.


  ENDIF."go_docking_container IS INITIAL


*------ Link docking container to screen ------------------------------*
  CALL METHOD go_docking_container->link
    EXPORTING
      repid                       = sy-repid
      dynnr                       = '0200'
*      CONTAINER                   =
    EXCEPTIONS
      cntl_error                  = 1
      cntl_system_error           = 2
      lifetime_dynpro_dynpro_link = 3
      OTHERS                      = 4
          .
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


*------ Build the Field Catalog---------------------------------------*
  PERFORM build_fieldcatalog_bapi_input
    CHANGING
      gt_fieldcat.

*------ Create the ALV Grid -------------------------------------------*
  IF go_alv_grid_0200 IS INITIAL.

    CREATE OBJECT go_alv_grid_0200
      EXPORTING
*      I_SHELLSTYLE      = 0
*      I_LIFETIME        =
       i_parent          = go_docking_container
*      I_APPL_EVENTS     = space
*      I_PARENTDBG       =
*      I_APPLOGPARENT    =
*      I_GRAPHICSPARENT  =
*      I_NAME            =
      EXCEPTIONS
        error_cntl_create = 1
        error_cntl_init   = 2
        error_cntl_link   = 3
        error_dp_create   = 4
        OTHERS            = 5.

    IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

  ENDIF."go_alv_grid_0200 is initial

*------ Create instance for event handler -----------------------------*
  DATA: go_event_handler_0200 TYPE REF TO lcl_event_handler.

  CREATE OBJECT go_event_handler_0200.

*------ Register event handler ----------------------------------------*
  SET HANDLER go_event_handler_0200->handle_toolbar_0200
    FOR go_alv_grid_0200.
  SET HANDLER go_event_handler_0200->handle_user_command_0200
    FOR go_alv_grid_0200.

*------ Call ALV Grid -------------------------------------------------*
  CALL METHOD go_alv_grid_0200->set_table_for_first_display
*     EXPORTING
*      I_BUFFER_ACTIVE               =
*      I_BYPASSING_BUFFER            =
*      I_CONSISTENCY_CHECK           =
*      I_STRUCTURE_NAME              =
*      IS_VARIANT                    =
*      I_SAVE                        =
*      I_DEFAULT                     = 'X'
*      IS_LAYOUT                     =
*      IS_PRINT                      =
*      IT_SPECIAL_GROUPS             =
*      IT_TOOLBAR_EXCLUDING          =
*      IT_HYPERLINK                  =
*      IT_ALV_GRAPHICS               =
*      IT_EXCEPT_QINFO               =
    CHANGING
      it_outtab                     = gt_bapi_input
      it_fieldcatalog               = gt_fieldcat
*      IT_SORT                       =
*      IT_FILTER                     =
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.

  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

*---- Call method 'set_toolbar_interactive' to raise event TOOLBAR.
  CALL METHOD go_alv_grid_0200->set_toolbar_interactive.

  CALL METHOD go_alv_grid_0200->refresh_table_display
*  EXPORTING
*    IS_STABLE      =
*    I_SOFT_REFRESH =
    EXCEPTIONS
      finished       = 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.

  CALL METHOD cl_gui_control=>set_focus
    EXPORTING
      control = go_alv_grid_0200.

ENDMODULE.                 " status_0200  OUTPUT
*&---------------------------------------------------------------------
*
*&      Module  user_command_0100  INPUT
*&---------------------------------------------------------------------
*
*       text
*----------------------------------------------------------------------
MODULE user_command_0100 INPUT.

  CASE gf_okcode.

    WHEN 'BACK' OR 'END' OR 'CANC'.

      PERFORM exit_program.

    WHEN OTHERS.

  ENDCASE.

  CLEAR gf_okcode.

ENDMODULE.                 " user_command_0100  INPUT
*&---------------------------------------------------------------------
*
*&      Module  user_command_0200  INPUT
*&---------------------------------------------------------------------
*
*       text
*----------------------------------------------------------------------
MODULE user_command_0200 INPUT.

  CASE gf_okcode.

    WHEN 'BACK' OR 'END' OR 'CANC'.

      PERFORM exit_program.

    WHEN OTHERS.

  ENDCASE.

  CLEAR gf_okcode.

ENDMODULE.                 " user_command_0200  INPUT

*&---------------------------------------------------------------------*
*&      Form  build_fieldcatalog
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_FIELDCAT  text
*----------------------------------------------------------------------*
FORM build_fieldcatalog_input
  CHANGING
    pt_fieldcat TYPE lvc_t_fcat.


  DATA ls_fcat TYPE lvc_s_fcat.

  CLEAR pt_fieldcat.

  ls_fcat-fieldname = 'FIRMA' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '20' .
  ls_fcat-coltext = 'Firma' .
  ls_fcat-seltext = 'Firma' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'KOSTENSTELLE' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '20' .
  ls_fcat-coltext = 'CO-Objekt' .
  ls_fcat-seltext = 'CO-Objekt' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'DATENART1' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '10' .
  ls_fcat-coltext = 'Datenart1' .
  ls_fcat-seltext = 'Datenart1' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'PLANJAHR' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '10' .
  ls_fcat-coltext = 'Planjahr' .
  ls_fcat-seltext = 'Planjahr' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'PLANPERIODE' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '5' .
  ls_fcat-coltext = 'Planperiode' .
  ls_fcat-seltext = 'Planperiode' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'DATENART2' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '10' .
  ls_fcat-coltext = 'Datenart2' .
  ls_fcat-seltext = 'Datenart2' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'PLANUNGSPOSITION' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '10' .
  ls_fcat-coltext = 'Planungsposition' .
  ls_fcat-seltext = 'Planungsposition' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'KOSTENART' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '10' .
  ls_fcat-coltext = 'Kostenart' .
  ls_fcat-seltext = 'Kostenart' .

  APPEND ls_fcat TO pt_fieldcat .

  ls_fcat-fieldname = 'PLANBETRAG' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '20' .
  ls_fcat-coltext = 'Planbetrag' .
  ls_fcat-seltext = 'Planbetrag' .

  APPEND ls_fcat TO pt_fieldcat .


ENDFORM.                    "build_fieldcatalog
*&---------------------------------------------------------------------*
*&      Form  handle_toolbar_0100
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_OBJECT  text
*      -->P_E_INTERACTIVE  text
*----------------------------------------------------------------------*
FORM handle_toolbar_0100
  USING
    po_object TYPE REF TO cl_alv_event_toolbar_set.

  DATA: ls_toolbar TYPE stb_button.

  CLEAR ls_toolbar.

  ls_toolbar-butn_type  = 0.
  ls_toolbar-function   = 'KONV'.
  ls_toolbar-quickinfo  = 'Konvertieren'.
  ls_toolbar-text       = 'Konvertieren'.
  ls_toolbar-disabled   = ' '.

  APPEND ls_toolbar TO po_object->mt_toolbar.

ENDFORM.                    " handle_toolbar_0100
*&---------------------------------------------------------------------*
*&      Form  handle_user_command_0100
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_UCOMM  text
*----------------------------------------------------------------------*
FORM handle_user_command_0100
  USING
    pf_ucomm TYPE syucomm.

  CASE pf_ucomm.

    WHEN 'KONV'.

      PERFORM convert_data.

  ENDCASE.

ENDFORM.                    " handle_user_command_0100
*&---------------------------------------------------------------------*
*&      Form  exit_program
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM exit_program.

  CALL METHOD go_alv_grid_0100->free.

  IF NOT go_alv_grid_0200 IS INITIAL.
    CALL METHOD go_alv_grid_0200->free.
  ENDIF.

  CALL METHOD go_docking_container->free.

  CALL METHOD cl_gui_cfw=>flush.

  IF sy-subrc NE 0.
* add your handling, for example
    CALL FUNCTION 'POPUP_TO_INFORM'
      EXPORTING
        titel = sy-repid
        txt2  = sy-subrc
        txt1  = 'Error in Flush'(500).
  ENDIF.

  LEAVE PROGRAM.

ENDFORM.                    " exit_program
*&---------------------------------------------------------------------*
*&      Form  handle_toolbar_0200
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_OBJECT  text
*      -->P_E_INTERACTIVE  text
*----------------------------------------------------------------------*
FORM handle_toolbar_0200
  USING
    po_object TYPE REF TO cl_alv_event_toolbar_set.

  DATA: ls_toolbar TYPE stb_button.

  CLEAR ls_toolbar.

  ls_toolbar-butn_type  = 0.
  ls_toolbar-function   = 'POST'.
  ls_toolbar-quickinfo  = 'Buchen'.
  ls_toolbar-text       = 'Buchen'.
  ls_toolbar-disabled   = ' '.

  APPEND ls_toolbar TO po_object->mt_toolbar.

ENDFORM.                    " handle_toolbar_0200
*&---------------------------------------------------------------------*
*&      Form  handle_user_command_0200
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_UCOMM  text
*----------------------------------------------------------------------*
FORM handle_user_command_0200
  USING
    pf_ucomm TYPE syucomm.

  CASE pf_ucomm.

    WHEN 'POST'.

      PERFORM post.

  ENDCASE.

ENDFORM.                    " handle_user_command_0200
*&---------------------------------------------------------------------*
*&      Form  convert_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM convert_data.

  DATA: lf_perio(3) TYPE n.

  LOOP AT gt_text_input INTO gs_text_input.

    TRANSLATE gs_text_input-planbetrag USING '. '.
    TRANSLATE gs_text_input-planbetrag USING ',.'.
    CONDENSE gs_text_input-planbetrag.

    gs_bapi_input-version   = gp_versn.
    gs_bapi_input-fisc_year = gp_gjahr.
    gs_bapi_input-coobject  = gs_text_input-kostenstelle.
    gs_bapi_input-cost_elem = gs_text_input-kostenart.

    lf_perio = gs_text_input-planperiode.

    CASE lf_perio.

      WHEN '001'.
        gs_bapi_input-wkgbtr01 = gs_text_input-planbetrag.
      WHEN '002'.
        gs_bapi_input-wkgbtr02 = gs_text_input-planbetrag.
      WHEN '003'.
        gs_bapi_input-wkgbtr03 = gs_text_input-planbetrag.
      WHEN '004'.
        gs_bapi_input-wkgbtr04 = gs_text_input-planbetrag.
      WHEN '005'.
        gs_bapi_input-wkgbtr05 = gs_text_input-planbetrag.
      WHEN '006'.
        gs_bapi_input-wkgbtr06 = gs_text_input-planbetrag.
      WHEN '007'.
        gs_bapi_input-wkgbtr07 = gs_text_input-planbetrag.
      WHEN '008'.
        gs_bapi_input-wkgbtr08 = gs_text_input-planbetrag.
      WHEN '009'.
        gs_bapi_input-wkgbtr09 = gs_text_input-planbetrag.
      WHEN '010'.
        gs_bapi_input-wkgbtr10 = gs_text_input-planbetrag.
      WHEN '011'.
        gs_bapi_input-wkgbtr11 = gs_text_input-planbetrag.
      WHEN '012'.
        gs_bapi_input-wkgbtr12 = gs_text_input-planbetrag.

    ENDCASE.

    COLLECT gs_bapi_input INTO gt_bapi_input.

    CLEAR gs_bapi_input.

  ENDLOOP. "at gt_text_input

  CALL SCREEN 0200.

ENDFORM.                    " convert_data
*&---------------------------------------------------------------------*
*&      Form  build_fieldcatalog_bapi_input
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_FIELDCAT  text
*----------------------------------------------------------------------*
FORM build_fieldcatalog_bapi_input
  CHANGING
    pt_fieldcat TYPE lvc_t_fcat.

  DATA ls_fcat TYPE lvc_s_fcat.

  CLEAR pt_fieldcat.

  CLEAR ls_fcat.
  ls_fcat-fieldname = 'VERSION' .
  ls_fcat-ref_table = 'BAPIPLNHDR' .
  APPEND ls_fcat TO pt_fieldcat .

  CLEAR ls_fcat.
  ls_fcat-fieldname = 'FISC_YEAR' .
  ls_fcat-ref_table = 'BAPIPLNHDR' .

  APPEND ls_fcat TO pt_fieldcat .

  CLEAR ls_fcat.
  ls_fcat-fieldname = 'COOBJECT' .
  ls_fcat-inttype = 'C' .
  ls_fcat-outputlen = '20' .
  ls_fcat-coltext = 'CO-Objekt' .
  ls_fcat-seltext = 'CO-Objekt' .

  APPEND ls_fcat TO pt_fieldcat .

  CLEAR ls_fcat.
  ls_fcat-fieldname = 'COST_ELEM' .
  ls_fcat-ref_table = 'BAPIPCPVAL' .

  APPEND ls_fcat TO pt_fieldcat .

  CLEAR ls_fcat.
  ls_fcat-fieldname = 'WKGBTR01'.
  ls_fcat-ref_table = 'COEP' .
  ls_fcat-ref_field = 'WKGBTR'.

  APPEND ls_fcat TO pt_fieldcat .
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'WKGBTR02'.
  ls_fcat-ref_table = 'COEP' .
  ls_fcat-ref_field = 'WKGBTR'.

  APPEND ls_fcat TO pt_fieldcat .
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'WKGBTR03'.
  ls_fcat-ref_table = 'COEP' .
  ls_fcat-ref_field = 'WKGBTR'.

  APPEND ls_fcat TO pt_fieldcat .
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'WKGBTR04'.
  ls_fcat-ref_table = 'COEP' .
  ls_fcat-ref_field = 'WKGBTR'.

  APPEND ls_fcat TO pt_fieldcat .
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'WKGBTR05'.
  ls_fcat-ref_table = 'COEP' .
  ls_fcat-ref_field = 'WKGBTR'.

  APPEND ls_fcat TO pt_fieldcat .
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'WKGBTR06'.
  ls_fcat-ref_table = 'COEP' .
  ls_fcat-ref_field = 'WKGBTR'.

  APPEND ls_fcat TO pt_fieldcat .
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'WKGBTR07'.
  ls_fcat-ref_table = 'COEP' .
  ls_fcat-ref_field = 'WKGBTR'.

  APPEND ls_fcat TO pt_fieldcat .
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'WKGBTR08'.
  ls_fcat-ref_table = 'COEP' .
  ls_fcat-ref_field = 'WKGBTR'.

  APPEND ls_fcat TO pt_fieldcat .
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'WKGBTR09'.
  ls_fcat-ref_table = 'COEP' .
  ls_fcat-ref_field = 'WKGBTR'.

  APPEND ls_fcat TO pt_fieldcat .
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'WKGBTR10'.
  ls_fcat-ref_table = 'COEP' .
  ls_fcat-ref_field = 'WKGBTR'.

  APPEND ls_fcat TO pt_fieldcat .
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'WKGBTR11'.
  ls_fcat-ref_table = 'COEP' .
  ls_fcat-ref_field = 'WKGBTR'.

  APPEND ls_fcat TO pt_fieldcat .
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'WKGBTR12'.
  ls_fcat-ref_table = 'COEP' .
  ls_fcat-ref_field = 'WKGBTR'.

  APPEND ls_fcat TO pt_fieldcat .

ENDFORM.                    " build_fieldcatalog_bapi_input
*&---------------------------------------------------------------------*
*&      Form  post
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM post.

  DATA:
    lf_index(6) TYPE n,
    lf_kostl    LIKE csks-kostl,
    lf_aufnr    LIKE aufk-aufnr,
    lf_kstar    LIKE cska-kstar.

  DATA:
    lt_csks TYPE TABLE OF csks.

  break c5085345.

* Header
  gs_headerinfo-co_area       = gp_kokrs.
  gs_headerinfo-fisc_year     = gp_gjahr.
  gs_headerinfo-period_from   = '001'.
  gs_headerinfo-period_to     = '012'.
  gs_headerinfo-version       = gp_versn.
  gs_headerinfo-plan_currtype = 'C'.


  LOOP AT gt_bapi_input INTO gs_bapi_input.

*   Fill index structure
    CLEAR gs_indexstructure.
    lf_index = sy-tabix.
    gs_indexstructure-object_index = lf_index.
    gs_indexstructure-value_index  = lf_index.
    gs_indexstructure-attrib_index = '000000'.

    INSERT gs_indexstructure INTO TABLE gt_indexstructure.


*   Fill coobject
    CLEAR gs_coobject.
    gs_coobject-object_index = lf_index.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = gs_bapi_input-coobject
      IMPORTING
        output = lf_kostl.

    SELECT * FROM csks INTO TABLE lt_csks
      WHERE
        kokrs = gp_kokrs AND
        kostl = lf_kostl.

    IF sy-subrc = 0.

      gs_coobject-costcenter = lf_kostl.

    ELSE.

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = gs_bapi_input-coobject
        IMPORTING
          output = lf_aufnr.

      CALL FUNCTION 'K_ORDER_READ'
        EXPORTING
          aufnr     = lf_aufnr
        EXCEPTIONS
          not_found = 1.

      IF NOT sy-subrc = 0.

        gs_return-type = 'E'.

        gs_return-message+0(10)  = 'CO-Objekt '.
        gs_return-message+10(10) = gs_bapi_input-coobject.
        gs_return-message+20(20)  = ' existiert nicht.'.

        CONDENSE gs_return-message.

        PERFORM add_log_message_free_text
          USING
            gs_return-type
            gs_return-message.

        EXIT.

      ENDIF. "IF NOT sy-subrc = 0

      gs_coobject-orderid = lf_aufnr.

    ENDIF. "sy-subrc = 0

    INSERT gs_coobject INTO TABLE gt_coobject.

*   Period value
    gs_pervalue-value_index = lf_index.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = gs_bapi_input-cost_elem
      IMPORTING
        output = lf_kstar.

    gs_pervalue-cost_elem = lf_kstar.

    gs_pervalue-fix_val_per01 = gs_bapi_input-wkgbtr01.
    gs_pervalue-fix_val_per02 = gs_bapi_input-wkgbtr02.
    gs_pervalue-fix_val_per03 = gs_bapi_input-wkgbtr03.
    gs_pervalue-fix_val_per04 = gs_bapi_input-wkgbtr04.
    gs_pervalue-fix_val_per05 = gs_bapi_input-wkgbtr05.
    gs_pervalue-fix_val_per06 = gs_bapi_input-wkgbtr06.
    gs_pervalue-fix_val_per07 = gs_bapi_input-wkgbtr07.
    gs_pervalue-fix_val_per08 = gs_bapi_input-wkgbtr08.
    gs_pervalue-fix_val_per09 = gs_bapi_input-wkgbtr09.
    gs_pervalue-fix_val_per10 = gs_bapi_input-wkgbtr10.
    gs_pervalue-fix_val_per11 = gs_bapi_input-wkgbtr11.
    gs_pervalue-fix_val_per12 = gs_bapi_input-wkgbtr12.

    INSERT gs_pervalue INTO TABLE gt_pervalue.

  ENDLOOP. "at gt_bapi_input

* Buchungsbaustein
  CALL FUNCTION 'BAPI_PRIM_COST_CHECK_AND_POST'
    EXPORTING
      header_info         = gs_headerinfo
      testrun             = gp_test
*   DELTA               = ' '
    TABLES
      idx_structure       = gt_indexstructure
      object              = gt_coobject
      per_value           = gt_pervalue
      tot_value           = gt_totvalue
      contrl              = gt_control
      return              = gt_return.

  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
*   EXPORTING
*     WAIT          =
*   IMPORTING
*     RETURN        =

  LOOP AT gt_return INTO gs_return.

    gs_balsmsg-msgty = gs_return-type.
    gs_balsmsg-msgid = gs_return-id.
    gs_balsmsg-msgno = gs_return-number.
    gs_balsmsg-msgv1 = gs_return-message_v1.
    gs_balsmsg-msgv2 = gs_return-message_v2.
    gs_balsmsg-msgv3 = gs_return-message_v3.
    gs_balsmsg-msgv4 = gs_return-message_v4.

    PERFORM add_log_message
      USING
        gs_balsmsg.

  ENDLOOP. "AT gt_return

  PERFORM show_log.

ENDFORM.                    " post
*&---------------------------------------------------------------------*
*&      Form  create_log
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_log .

  DATA: ls_balslog TYPE bal_s_log.

* Einige Verwaltungsdaten
  ls_balslog-extnumber = 'ZPLAN010'.
  ls_balslog-aluser    = sy-uname.
  ls_balslog-alprog    = sy-repid.

* Create
  CALL FUNCTION 'BAL_LOG_CREATE'
    EXPORTING
      i_s_log                 = ls_balslog
*    IMPORTING
*      e_log_handle            = gf_balloghndl
    EXCEPTIONS
      log_header_inconsistent = 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.


ENDFORM.                    " create_log
*&---------------------------------------------------------------------*
*&      Form  add_log_message
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GS_BALSMSG  text
*----------------------------------------------------------------------*
FORM add_log_message
  USING
    ps_balsmsg TYPE bal_s_msg.

  break c5085345.

  CALL FUNCTION 'BAL_LOG_MSG_ADD'
    EXPORTING
*       I_LOG_HANDLE              =
      i_s_msg                   = ps_balsmsg
*     IMPORTING
*       E_S_MSG_HANDLE            =
*       E_MSG_WAS_LOGGED          =
*       E_MSG_WAS_DISPLAYED       =
   EXCEPTIONS
     log_not_found             = 1
     msg_inconsistent          = 2
     log_is_full               = 3
     OTHERS                    = 4.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ENDIF.


ENDFORM.                    " add_log_messa
*&---------------------------------------------------------------------*
*&      Form  add_log_message_free_text
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GS_RETURN_TYPE  text
*      -->P_GS_RETURN_MESSAGE  text
*----------------------------------------------------------------------*
FORM add_log_message_free_text
  USING
    ps_type
    ps_message.

  CALL FUNCTION 'BAL_LOG_MSG_ADD_FREE_TEXT'
    EXPORTING
*       I_LOG_HANDLE              =
      i_msgty                   = ps_type
*       I_PROBCLASS               = '4'
      i_text                    = ps_message
*       I_S_CONTEXT               =
*       I_S_PARAMS                =
*     IMPORTING
*       E_S_MSG_HANDLE            =
*       E_MSG_WAS_LOGGED          =
*       E_MSG_WAS_DISPLAYED       =
   EXCEPTIONS
     log_not_found             = 1
     msg_inconsistent          = 2
     log_is_full               = 3
     OTHERS                    = 4.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.


ENDFORM.                    " add_log_message_free_text
*&---------------------------------------------------------------------*
*&      Form  show_log
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM show_log .

  DATA:
    l_s_display_profile TYPE bal_s_prof.

* get display profile
  CALL FUNCTION 'BAL_DSP_PROFILE_NO_TREE_GET'
    IMPORTING
      e_s_display_profile = l_s_display_profile
    EXCEPTIONS
      OTHERS              = 1.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

* use grid for display if wanted
  l_s_display_profile-use_grid = 'X'.

* set report to allow saving of variants
  l_s_display_profile-disvariant-report = sy-repid.

* when you use also other ALV lists in your report,
* please specify a handle to distinguish between the display
* variants of these different lists, e.g:
  l_s_display_profile-disvariant-handle = 'LOG'.

* call display function module
* We do not specify any filter (like I_S_LOG_FILTER, ...,
* I_T_MSG_HANDLE) since we want to display all logs available
  CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'
    EXPORTING
      i_s_display_profile = l_s_display_profile
    EXCEPTIONS
      OTHERS              = 1.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

Read only

0 Likes
2,437

Hello Tapio

If you need to display a message list in addition to your main ALV list then I would recommend to use the ultimate message handler: IF_RECA_MESSAGE_LIST.

You may have a look at my Wiki posting [Message Handling - Finding the Needle in the Haystack|https://wiki.sdn.sap.com/wiki/display/profile/2007/07/09/MessageHandling-FindingtheNeedleintheHaystack]

Sample report ZUS_SDN_ALV_WITH_BAL_LOG demonstrates how to display error messages. The main ALV list display sales areas of customers. The sales orders per customer per sales area are read using BAPI_SALESORDER_GETLIST. The RETURN messages of the BAPI are collected using the message handler and displayed as second ALV list (using a second docking container) on the same screen where the main ALV list is displayed.


*&---------------------------------------------------------------------*
*& Report  ZUS_SDN_ALV_WITH_BAL_LOG
*&
*&---------------------------------------------------------------------*
*& Thread: First try with ALV Grid and Abap Objects
*& <a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="751361"></a>
*&
*& Log function based on SBAL_DEMO_04_CONTROL (package SZAL)
*&---------------------------------------------------------------------*

REPORT  zus_sdn_alv_with_bal_log.


DATA:
  gd_okcode        TYPE ui_func,
  gd_repid         TYPE syrepid,
*
  gt_fcat          TYPE lvc_t_fcat,
  gs_layout        TYPE lvc_s_layo,
  go_docking       TYPE REF TO cl_gui_docking_container,
  go_docking_log   TYPE REF TO cl_gui_docking_container,
  go_grid          TYPE REF TO cl_gui_alv_grid.

DATA: gt_outtab    TYPE STANDARD TABLE OF knvv.

DATA: go_msglist   TYPE REF TO cl_reca_message_list.


START-OF-SELECTION.

  SELECT * FROM  knvv INTO TABLE gt_outtab UP TO 1000 ROWS.
**         WHERE  vkorg  = '1000'.


  PERFORM get_salesorder_of_customer.

  PERFORM init_log.


  PERFORM init_controls.

* Build fieldcatalog
  PERFORM build_fieldcatalog.
  PERFORM set_layout_and_variant.


  CALL METHOD go_grid->set_table_for_first_display
    EXPORTING
*      i_buffer_active               =
*      i_bypassing_buffer            =
*      i_consistency_check           =
*      i_structure_name              =
*      is_variant                    =
*      i_save                        =
*      i_default                     = 'X'
      is_layout                     = gs_layout
*      is_print                      =
*      it_special_groups             =
*      it_toolbar_excluding          =
*      it_hyperlink                  =
*      it_alv_graphics               =
*      it_except_qinfo               =
*      ir_salv_adapter               =
    CHANGING
      it_outtab                     = gt_outtab
      it_fieldcatalog               = gt_fcat
*      it_sort                       =
*      it_filter                     =
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


* Link the docking container to the target dynpro
  CALL METHOD go_docking->link
    EXPORTING
      repid                       = syst-repid
      dynnr                       = '0100'
*      CONTAINER                   =
    EXCEPTIONS
      OTHERS                      = 4.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  CALL METHOD go_docking_log->link
    EXPORTING
      repid                       = syst-repid
      dynnr                       = '0100'
*      CONTAINER                   =
    EXCEPTIONS
      OTHERS                      = 4.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


* ok-code field = GD_OKCODE
  CALL SCREEN '0100'.


END-OF-SELECTION.



*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_0100'.
*  SET TITLEBAR 'xxx'.

* Display data
  CALL METHOD go_grid->set_table_for_first_display
    CHANGING
      it_outtab       = gt_outtab
      it_fieldcatalog = gt_fcat
    EXCEPTIONS
      OTHERS          = 4.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDMODULE.                 " STATUS_0100  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  TRANSLATE gd_okcode TO UPPER CASE.

  CASE gd_okcode.
    WHEN 'BACK' OR
         'EXIT'  OR
         'CANC'.
      SET SCREEN 0. LEAVE SCREEN.

    WHEN OTHERS.
  ENDCASE.

  CLEAR: gd_okcode.

ENDMODULE.                 " USER_COMMAND_0100  INPUT



*&---------------------------------------------------------------------*
*&      Form  INIT_CONTROLS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM init_controls .

* Create docking container
  CREATE OBJECT go_docking
    EXPORTING
      parent = cl_gui_container=>screen0
      ratio  = 90
    EXCEPTIONS
      OTHERS = 6.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


* Create ALV grid
  CREATE OBJECT go_grid
    EXPORTING
      i_parent = go_docking
    EXCEPTIONS
      OTHERS   = 5.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " INIT_CONTROLS


*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_fieldcatalog.
* define local data
  DATA:
    ls_fcat        TYPE lvc_s_fcat.

  REFRESH: gt_fcat.  " !!! otherwise columns are appended
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
*     I_BUFFER_ACTIVE              =
      i_structure_name             = 'KNVV'
*     I_CLIENT_NEVER_DISPLAY       = 'X'
*     I_BYPASSING_BUFFER           =
*     I_INTERNAL_TABNAME           =
    CHANGING
      ct_fieldcat                  = gt_fcat
    EXCEPTIONS
      inconsistent_interface       = 1
      program_error                = 2
      OTHERS                       = 3.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*&      Form  SET_LAYOUT_AND_VARIANT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_layout_and_variant .

  CLEAR: gs_layout.

  gs_layout-cwidth_opt = 'X'.
  gs_layout-zebra      = 'X'.

ENDFORM.                    " SET_LAYOUT_AND_VARIANT

*&---------------------------------------------------------------------*
*&      Form  GET_SALESORDER_OF_CUSTOMER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_salesorder_of_customer .
* define local data
  DATA: ls_outtab     LIKE LINE OF gt_outtab,
        ls_bapireturn TYPE bapireturn,
        ls_return     TYPE bapiret2,
        lt_orders     TYPE STANDARD TABLE OF bapiorders.

  DATA: ld_count      TYPE i,
        ld_perc       TYPE i,
        ld_text(50)   TYPE c.

  DATA: lif_msglist   TYPE REF TO if_reca_message_list,
        ls_msg        TYPE recamsg.

  " Create message handler
  CALL METHOD cf_reca_message_list=>create
*    EXPORTING
*      id_object    = 'RECA'
*      id_subobject = 'MISC'
*      id_extnumber =
    RECEIVING
      ro_instance  = lif_msglist.
  go_msglist ?= lif_msglist.



  DESCRIBE TABLE gt_outtab.
  ld_count = syst-tfill.

  LOOP AT gt_outtab INTO ls_outtab.
    ld_perc = ( syst-tabix * 100 ) / ld_count.
    WRITE ld_perc TO ld_text.
    CONDENSE ld_text NO-GAPS.
    CONCATENATE ld_text '%' INTO ld_text.
    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
      EXPORTING
        percentage = ld_perc
        text       = ld_text.

    CLEAR: ls_bapireturn,
           ls_return.
    REFRESH: lt_orders.

    CALL FUNCTION 'BAPI_SALESORDER_GETLIST'
      EXPORTING
        customer_number             = ls_outtab-kunnr
        sales_organization          = ls_outtab-vkorg
*       MATERIAL                    =
*       DOCUMENT_DATE               =
*       DOCUMENT_DATE_TO            =
*       PURCHASE_ORDER              =
*       TRANSACTION_GROUP           = 0
*       PURCHASE_ORDER_NUMBER       =
*       MATERIAL_EVG                =
      IMPORTING
        return                      = ls_bapireturn
      TABLES
        sales_orders                = lt_orders.

    IF ( ls_bapireturn IS NOT INITIAL ).
      CALL FUNCTION 'BALW_RETURN_TO_RET2'
        EXPORTING
          return_in = ls_bapireturn
        IMPORTING
          return_ou = ls_return.

      CLEAR: ls_msg.
      ls_msg-msgty = 'I'.
      ls_msg-msgid = '00'.
      ls_msg-msgno = '398'.
      ls_msg-msgv1 = 'Customer:'.
      ls_msg-msgv2 = ls_outtab-kunnr.
      ls_msg-msgv3 = 'SalesOrg:'.
      ls_msg-msgv4 = ls_outtab-vkorg.
      ls_msg-detlevel = '1'.

      CALL METHOD go_msglist->add
        EXPORTING
          is_message = ls_msg.

      CALL METHOD go_msglist->set_detail_level
        EXPORTING
          id_absolute = '2'
*          id_relative =
          .


      " Collect message
      CALL METHOD go_msglist->add_from_bapi
        EXPORTING
*          it_bapiret     =
          is_bapiret     = ls_return
*        IMPORTING
*          ef_add_error   =
*          ef_add_warning =
          .
    ENDIF.

  ENDLOOP.

ENDFORM.                    " GET_SALESORDER_OF_CUSTOMER

*&---------------------------------------------------------------------*
*&      Form  INIT_LOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM init_log .
  DATA:
    ld_log_handle         TYPE balloghndl,
    g_control_handle     TYPE balcnthndl,
**  g_container          TYPE REF TO cl_gui_dialogbox_container,
    g_s_log              TYPE bal_s_log,
    lt_log_handle       TYPE bal_t_logh,
    g_s_msg              TYPE bal_s_msg,
    ls_display_profile  TYPE bal_s_prof,
    g_msgno              TYPE bal_s_msg-msgno VALUE '300'.


  CREATE OBJECT go_docking_log
    EXPORTING
*      parent                      =
*      repid                       =
*      dynnr                       =
      side                        = cl_gui_docking_container=>dock_at_bottom
*      extension                   = 50
*      style                       =
*      lifetime                    = lifetime_default
*      caption                     =
*      metric                      = 0
      ratio                       = 25
*      no_autodef_progid_dynnr     =
*      name                        =
    EXCEPTIONS
      cntl_error                  = 1
      cntl_system_error           = 2
      create_error                = 3
      lifetime_error              = 4
      lifetime_dynpro_dynpro_link = 5
      OTHERS                      = 6.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


  ld_log_handle = go_msglist->get_handle( ).
  APPEND ld_log_handle TO lt_log_handle.


* get a display profile which describes how to display messages
**  CALL FUNCTION 'BAL_DSP_PROFILE_NO_TREE_GET'
**    IMPORTING
**      e_s_display_profile = ls_display_profile.
**  ls_display_profile-no_toolbar = 'X'.

  CALL FUNCTION 'BAL_DSP_PROFILE_DETLEVEL_GET'
    IMPORTING
      E_S_DISPLAY_PROFILE       = ls_display_profile.



* create control to display data
  CALL FUNCTION 'BAL_CNTL_CREATE'
       EXPORTING
            i_container         = go_docking_log
            i_s_display_profile = ls_display_profile
            i_t_log_handle      = lt_log_handle
*       IMPORTING
*            e_control_handle    = g_control_handle
       EXCEPTIONS
            OTHERS              = 1.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    " INIT_LOG

Regards

Uwe

Read only

0 Likes
2,437

Hi Uwe,

thanks again for your very valueable input. I will check your report for the application log. Have you an idea, for my question just to use one Grid-Object and Dynpro, to display two different internal tables? With my solution, you have to double anything, Grid, Dynpro, message handler, etc...

Regards

Tapio

Read only

0 Likes
2,437

Hello Tapio

If you want to display two different itabs you need to different grid instances. However, you can always display them on a single screen by using a splitter container.

You may have a look a sample report ZUS_SDN_TWO_ALV_GRIDS:

(1) Create docking container

(2) Create splitter container (e.g. 2 rows, i.e. top & bottom grid) having docking container as parent

(3) Get the container cells from the splitter container

(4) Use the container cells as parent for your two ALV grid instances

That's all. And the fun part is if you want to change the layout of your ALV grid, e.g. left & right instead of top & bottom.

Then just change the instantiation of your splitter container (2 columns instead of two rows) and change the way you retrieve the container cells.

Regards

Uwe

Read only

0 Likes
2,437

Yes, I already looked at the report with two alv grids at one screen, but I don't want to have them at the time on the screen, just dispaly first table and after some transformations the second one. But if there is no other option, I may come back to the two ALV-Grid solution at the same time. Now I will have look at the message handling stuff

Kind regards

Tapio

Read only

0 Likes
2,437

Hello Tapio

In this case you can use two docking containers.

First you display you main ALV grid using the first docking container (DOCK_AT_LEFT).

When the user pushes the function to start the transformation of the data you create your second docking container and link it to the same screen (DOCK_AT_BOTTOM).

Regards

Uwe

Read only

0 Likes
2,437

Hi Uwe

Thanks!!!  How do I get detail _ level to work???  Whne I am viewing the logs in SLG1

go_msglist      TYPE REF TO if_reca_message_list,

“Create

go_msglist =  creat( .. ).

“Add MSG

go_msglist ->SET_DETAIL_LEVEL( ID_RELATIVE = '1' )

go_msglist->add( is_message = gs_msg ).

go_msglist->store( ).
cf_reca_storable
=>commit( ).

“Add MSG

go_msglist ->SET_DETAIL_LEVEL( ID_RELATIVE = '2' )

go_msglist->add( is_message = gs_msg ).

go_msglist->store( ).
cf_reca_storable
=>commit( ).

go_msglist->free( ).

When I go to SLG1 they are not in hierarchy

Any tip???

Read only

Former Member
0 Likes
2,437

Hi,follow standard exmples by giving bcalv in se38

Read only

Former Member
0 Likes
2,437

hi ,

please follw the below code for ALV 3grids and using objects and methods....

using this program logic you can create 3grids,as per your requirement you need to create 2grids....

go thru the code and program logic contain the docking containers,splitters as left and right ,obejects and methods....

REPORT ZAREPAS19.

&----


&

*& Here we declared the required tables which is used in program *&

&----


&

Tables : vbak,kna1,vbap.

&----


&

*&here we are declaring the containers like docking and splitter and splitter2 and *&

&and we mentined the loation in main screen and declaring the GRID's as shown below&

&----


&

DATA : OK_CODE LIKE SY-UCOMM,

G_CONTAINER TYPE SCRFNAME VALUE 'BCALV5_GRID_DEMO_0100_VASU',

DOCKING TYPE REF TO CL_GUI_DOCKING_CONTAINER,

SPLITTER TYPE REF TO CL_GUI_SPLITTER_CONTAINER,

SPLITTER_2 TYPE REF TO CL_GUI_SPLITTER_CONTAINER,

CELL_TOP TYPE REF TO CL_GUI_CONTAINER,

CELL_BOTTOM TYPE REF TO CL_GUI_CONTAINER,

CELL_LEFT TYPE REF TO CL_GUI_CONTAINER,

CELL_RIGHT TYPE REF TO CL_GUI_CONTAINER,

GRID1 TYPE REF TO CL_GUI_ALV_GRID,

GRID2 TYPE REF TO CL_GUI_ALV_GRID,

GRID3 TYPE REF TO CL_GUI_ALV_GRID.

DATA : GT_VBAK TYPE STANDARD TABLE OF VBAK,

GT_VBAP TYPE STANDARD TABLE OF VBAP,

GT_KNA1 TYPE STANDARD TABLE OF KNA1.

&----


&

*&

PARAMETERS : P_KUNNR TYPE KUNNR DEFAULT '500'.

----


  • CLASS lcl_eventhandler DEFINITION

----


*

----


CLASS lcl_eventhandler DEFINITION.

PUBLIC SECTION.

CLASS-METHODS:

handle_double_click FOR EVENT double_click OF cl_gui_alv_grid

IMPORTING

e_row

e_column

es_row_no

sender. " sending control, i.e. ALV grid that raised event

ENDCLASS. "lcl_eventhandler DEFINITION

----


  • CLASS lcl_eventhandler IMPLEMENTATION

----


*

----


CLASS lcl_eventhandler IMPLEMENTATION.

METHOD HANDLE_DOUBLE_CLICK.

*DEFINE LOCAL DATA.

DATA : itab_VBAK type VBAK,

itab_VBAP type VBAP,

itab_KNA1 type kna1.

*DISTINGUISH ACCORDING TO SENDING GRID INSTANCE

CASE SENDER.

WHEN GRID1.

READ TABLE gt_KNA1 INTO ITAB_KNA1 INDEX E_ROW-INDEX.

  • CHECK (ITAB_KNA1-KUNNR IS NOT INITIAL).

CALL METHOD GRID1->SET_CURRENT_CELL_VIA_ID

EXPORTING

  • Is_ROW_ID =

  • Is_COLUMN_ID =

Is_ROW_NO = ES_ROW_NO.

  • Triggers PAI of the dynpro with the specified ok-code

CALL METHOD cl_gui_cfw=>set_new_ok_code( 'ORDERS' ).

WHEN grid2.

READ TABLE gt_vbak INTO itab_vbak INDEX e_row-index.

CHECK ( itab_vbak-vbeln IS NOT INITIAL ).

CALL METHOD grid1->set_current_cell_via_id

EXPORTING

  • is_ROW_ID =

  • is_COLUMN_ID =

is_row_no = es_row_no.

  • Triggers PAI of the dynpro with the specified ok-code

CALL METHOD cl_gui_cfw=>set_new_ok_code( 'ORDER_DETAILS' ).

WHEN grid3.

READ TABLE gt_vbap INTO itab_vbap INDEX e_row-index.

CHECK ( itab_vbap-matnr IS NOT INITIAL ).

SET PARAMETER ID 'MAT' FIELD itab_vbap-matnr.

CALL TRANSACTION 'MM02' AND SKIP FIRST SCREEN.

WHEN OTHERS.

RETURN.

ENDCASE.

endmethod.

endclass. "lcl_eventhandler IMPLEMENTATION

start-of-selection.

*write 😕 'FEDEX INT''''L' .

SELECT * FROM kna1 INTO TABLE gt_kna1

where kunnr = p_kunnr. " and vbeln = itab_vbak-vbeln.

  • creating docking container

create object docking

exporting

parent = cl_gui_container=>screen0

ratio = 95

exceptions

others = 6.

if sy-subrc eq 0.

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

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

ENDIF.

  • Create splitter container

CREATE OBJECT splitter

EXPORTING

parent = docking

rows = 1

columns = 2

  • NO_AUTODEF_PROGID_DYNNR =

  • NAME =

EXCEPTIONS

cntl_error = 1

cntl_system_error = 2

OTHERS = 3.

IF sy-subrc eq 0.

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

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

ENDIF.

  • Get cell container

CALL METHOD splitter->get_container

EXPORTING

row = 1

column = 1

RECEIVING

container = cell_left.

CALL METHOD splitter->get_container

EXPORTING

row = 1

column = 2

RECEIVING

container = cell_right.

  • Create 2nd splitter container

CREATE OBJECT splitter_2

EXPORTING

parent = cell_left

rows = 2

columns = 1

  • NO_AUTODEF_PROGID_DYNNR =

  • NAME =

EXCEPTIONS

cntl_error = 1

cntl_system_error = 2

OTHERS = 3.

IF sy-subrc eq 0.

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

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

ENDIF.

  • Get cell container

CALL METHOD splitter_2->get_container

EXPORTING

row = 1

column = 1

RECEIVING

container = cell_top.

CALL METHOD splitter_2->get_container

EXPORTING

row = 2

column = 1

RECEIVING

container = cell_bottom.

  • Create ALV grids

CREATE OBJECT grid1

EXPORTING

i_parent = cell_top

EXCEPTIONS

OTHERS = 5.

IF sy-subrc eq 0.

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

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

ENDIF.

CREATE OBJECT grid2

EXPORTING

i_parent = cell_bottom

EXCEPTIONS

OTHERS = 5.

IF sy-subrc eq 0.

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

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

ENDIF.

CREATE OBJECT grid3

EXPORTING

i_parent = cell_right

EXCEPTIONS

OTHERS = 5.

IF sy-subrc eq 0.

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

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

ENDIF.

  • Set event handler

SET HANDLER: lcl_eventhandler=>handle_double_click FOR grid1.

SET HANDLER: lcl_eventhandler=>handle_double_click FOR grid2.

SET HANDLER: lcl_eventhandler=>handle_double_click FOR grid3.

  • Display data

CALL METHOD grid1->set_table_for_first_display

EXPORTING

i_structure_name = 'KNA1'

CHANGING

it_outtab = gt_kna1

EXCEPTIONS

OTHERS = 4.

IF sy-subrc eq 0.

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

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

ENDIF.

REFRESH: gt_vbak.

CALL METHOD grid2->set_table_for_first_display

EXPORTING

i_structure_name = 'VBAK'

CHANGING

it_outtab = gt_vbak " empty !!!

EXCEPTIONS

OTHERS = 4.

IF sy-subrc eq 0.

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

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

ENDIF.

REFRESH: gt_vbap.

CALL METHOD grid3->set_table_for_first_display

EXPORTING

i_structure_name = 'VBAP'

CHANGING

it_outtab = gt_vbap " empty !!!

EXCEPTIONS

OTHERS = 4.

IF sy-subrc eq 0.

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

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

ENDIF.

  • Link the docking container to the target dynpro

CALL METHOD docking->link

EXPORTING

repid = syst-repid

dynnr = '0100'

  • CONTAINER =

EXCEPTIONS

OTHERS = 4.

IF sy-subrc eq 0.

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

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

ENDIF.

  • NOTE: dynpro does not contain any elements (ok_code -> GD_OKCODE)

CALL SCREEN '0100'.

  • Flow logic of dynpro:

*

end-of-selection.

&----


*& Module STATUS_0100 OUTPUT

&----


  • text

----


MODULE STATUS_0100 OUTPUT.

SET PF-STATUS 'STATUS_0100'. "CONTAINS PUSHBUTTONS "ORDERS"

  • SET TITLEBAR 'xxx'.

  • Refresh display of detail ALV list

CALL METHOD grid2->refresh_table_display

  • EXPORTING

  • IS_STABLE =

  • I_SOFT_REFRESH =

EXCEPTIONS

OTHERS = 2.

IF sy-subrc eq 0.

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

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

ENDIF.

  • Refresh display of detail ALV list

CALL METHOD grid3->refresh_table_display

  • EXPORTING

  • IS_STABLE =

  • I_SOFT_REFRESH =

EXCEPTIONS

OTHERS = 2.

IF sy-subrc eq 0.

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

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

ENDIF.

ENDMODULE. " STATUS_0100 OUTPUT

&----


*& Module USER_COMMAND_0100 INPUT

&----


  • text

----


MODULE USER_COMMAND_0100 INPUT.

CASE SY-UCOMM.

WHEN 'BACK' OR

'EXIT' OR

'CANCEL'.

SET SCREEN 0.LEAVE SCREEN.

  • USER HAS PUSHED BUTTON "DISPLAY OREDERS"

*

WHEN 'ORDERS'.

PERFORM CUSTOMER_SHOW_ORDERS.

WHEN 'ORDER_DETAILS'.

PERFORM ORDER_SHOW_DETAILS.

WHEN OTHERS.

ENDCASE.

CLEAR : OK_CODE.

ENDMODULE. " USER_COMMAND_0100 INPUT

&----


*& Form CUSTOMER_SHOW_ORDERS

&----


  • text

----


FORM customer_show_orders .

  • define local data

DATA:

ld_row TYPE i,

ITAB_kna1 TYPE kna1.

CALL METHOD grid1->get_current_cell

IMPORTING

e_row = ld_row.

READ TABLE gt_kna1 INTO itab_kna1 INDEX ld_row.

CHECK ( syst-subrc = 0 ).

SELECT * FROM vbak INTO TABLE gt_vbak

WHERE kunnr = itab_kna1-kunnr.

REFRESH: gt_vbap.

ENDFORM. " CUSTOMER_SHOW_ORDERS

&----


*& Form ORDER_SHOW_DETAILS

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM order_show_details .

  • define local data

DATA:

ld_row TYPE i,

itab_vbak TYPE vbak.

CALL METHOD grid1->get_current_cell

IMPORTING

e_row = ld_row.

READ TABLE gt_vbak INTO itab_vbak INDEX ld_row.

CHECK ( syst-subrc = 0 ).

SELECT * FROM vbap INTO TABLE gt_vbap

WHERE vbeln = itab_vbak-vbeln.

ENDFORM. " ORDER_SHOW_DETAILS