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

Problem with input screen disappering in editable ALV Grid.

Former Member
0 Kudos

Hi Friends,

I have created one Editable ALV using cl_gui_alv_grid.

I have placed some validations on the input given by the user in the editable mode.

My problem is that whenever i'm displaying an error message after my validation failing if i press any key , the whole screen is disappering or it comes out of the program.

I also tried to activate the debugger and then press a key , but still it dosent goin in debugging mode.

Not able to understand why this is happening.

Any help would be greatly appreciated.

Regards,

Amit

10 REPLIES 10

Former Member
0 Kudos

Hi Amit,

         Better you could you paste your code here, i want to see it. So that ill try to find out the mistake.

Regards,

Sudheer Kumar.

0 Kudos

Hi Sudheer,

Please have a look on this.

   *&---------------------------------------------------------------------*
*& Report  Z080_POCONF
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  z080_poconf.
TABLES: ekpo,rm06e,lfa1,ekes,t163g.

TYPES: BEGIN OF ty_ekes,
       ebeln TYPE ekes-ebeln,
       ebelp TYPE ekes-ebelp,
       ebtyp TYPE ekes-ebtyp,
       eindt TYPE datum,"ekes-eindt,
       lpein TYPE ekes-lpein,
       uzeit TYPE ekes-uzeit,
       erdat TYPE ekes-erdat,
       menge TYPE ekes-menge,
       dabmg TYPE ekes-dabmg,
       xblnr TYPE ekes-xblnr,
       END OF ty_ekes.

TYPES: BEGIN OF ty_ekpo,
       ebeln TYPE ebeln,
       ebelp TYPE ebelp,
       matnr TYPE matnr_d,
       menge TYPE ekpo-menge,
       bstae  TYPE bstae,
       END OF ty_ekpo.

TYPES: BEGIN OF ty_ekko,
       ebeln TYPE ekko-ebeln,
       lifnr TYPE lifnr,
       bedat TYPE datum,
       END OF ty_ekko.


TYPES: BEGIN OF ty_ekes_1,
       ebeln TYPE ekes-ebeln,
       ebelp TYPE ekes-ebelp,
       etens TYPE ekes-etens,
       END OF ty_ekes_1.

TYPES: BEGIN OF ty_output,
       ebeln TYPE ebeln,
       ebelp TYPE ebelp,
       eindt TYPE datum,"ekes-EINDT,
       menge TYPE ekpo-menge,
       bstae  TYPE bstae,
       ebtyp TYPE ekes-ebtyp,
       lpein TYPE ekes-lpein,
       eindt_conf TYPE sy-datum,
       uzeit TYPE ekes-uzeit,
       menge_conf TYPE ekes-menge,
       xblnr TYPE ekes-xblnr,
       erdat TYPE ekes-erdat,
       changed(1) TYPE c,
       END OF ty_output.

TYPES: BEGIN OF ty_eket,
      ebeln TYPE  ebeln,
      ebelp TYPE  ebelp,
      etenr  TYPE eeten,
      eindt  TYPE eindt,
      END OF ty_eket.

TYPES: BEGIN OF ty_ekpo_chk,
       ebeln TYPE ebeln,
       ebelp TYPE ebelp,
       END OF ty_ekpo_chk.

TYPES: BEGIN OF ty_lfa1_chk,
       lifnr TYPE lifnr,
       END OF ty_lfa1_chk.


*ALV data declarations
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: it_fieldcat TYPE lvc_t_fcat,
      wa_fieldcat TYPE lvc_s_fcat,
      gd_tab_group TYPE slis_t_sp_group_alv,
      gd_layout    TYPE lvc_s_layo,
      gd_repid     LIKE sy-repid.

DATA: gt_ekes TYPE STANDARD TABLE OF ty_ekes,
      gs_ekes TYPE ty_ekes,
      gt_ekko TYPE STANDARD TABLE OF ty_ekko,
      gs_ekko TYPE ty_ekko,
      gt_ekpo TYPE STANDARD TABLE OF ty_ekpo,
      gs_ekpo TYPE ty_ekpo,
      gt_output TYPE STANDARD TABLE OF ty_output,
      gs_output TYPE ty_output,
      gt_ekpo_temp TYPE STANDARD TABLE OF ty_ekpo,
      gt_ekes_1 TYPE STANDARD TABLE OF ty_ekes_1,
      gs_ekes_1 TYPE ty_ekes_1,
      gt_eket TYPE STANDARD TABLE OF ty_eket,
      gs_eket TYPE ty_eket,
      dats(10) TYPE c,
      gt_ekpo_chk TYPE STANDARD TABLE OF ty_ekpo_chk,
      gt_lfa1_chk TYPE STANDARD TABLE OF ty_lfa1_chk.


CLASS lcl_events_d0100 DEFINITION DEFERRED.
DATA: event_receiver1  TYPE REF TO lcl_events_d0100,
      i_selected_rows TYPE lvc_t_row,
      w_selected_rows TYPE lvc_s_row.

DATA:   bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE.
DATA:   messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.

*---------------------------------------------------------------------*
*       CLASS lcl_events_d0100 DEFINITION
*---------------------------------------------------------------------*
CLASS lcl_events_d0100 DEFINITION.
  PUBLIC SECTION.

    METHODS handle_data_changed                 " DATA_CHANGED
     FOR EVENT data_changed OF cl_gui_alv_grid
       IMPORTING
         er_data_changed
         e_onf4
         e_onf4_before
         e_onf4_after
         e_ucomm.

ENDCLASS.                    "lcl_events_d0100 DEFINITION

TYPE-POOLS cndp.
DATA ok_code TYPE sy-ucomm.
*----------------------------------------------------------------------*
*                       FOR VARIANT
*----------------------------------------------------------------------*
DATA st_var TYPE disvariant .
DATA save TYPE c.
st_var-report = 'YKC_ALV_OOPS'.
save = 'A'.
*----------------------------------------------------------------------*
*         FOR LAYOUT
*----------------------------------------------------------------------*
DATA loyo TYPE lvc_s_layo.
loyo-zebra = 'X'.
loyo-detailinit = 'X'.
loyo-info_fname = 'RED'.
loyo-cwidth_opt = 'X'.
*----------------------------------------------------------------------*
*           FOR FIELD CATALOG
*----------------------------------------------------------------------*
DATA fcat TYPE lvc_t_fcat.
DATA wa_fcat LIKE LINE OF fcat.
*--Declaration for toolbar buttons
DATA : ty_toolbar      TYPE stb_button.
DATA : e_object        TYPE REF TO cl_alv_event_toolbar_set,
       io_alv_toolbar  TYPE REF TO cl_alv_event_toolbar_set.
*---custom container
DATA container TYPE REF TO cl_gui_custom_container.
DATA ref_grid TYPE REF TO cl_gui_alv_grid.

FIELD-SYMBOLS: <mod_cell> TYPE any. "TABLE


CREATE OBJECT container
  EXPORTING
    container_name = 'CONTAINER'.
CREATE OBJECT ref_grid
  EXPORTING
    i_parent = container.
*---------------------------------------------------------------------*
*       CLASS lcl_events_d0100 IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS lcl_events_d0100 IMPLEMENTATION.

  METHOD handle_data_changed.
    DATA: ls_modi TYPE lvc_s_modi,
          lv_ebtyp TYPE EBTYP,
          lv_bstae TYPE bstae,
          lv_ekwsl TYPE ekwsl,
          lv_length TYPE i,
          lv_value(4) TYPE c.


    CLEAR:lv_EBTYP,lv_ekwsl,lv_bstae.

    LOOP AT er_data_changed->mt_mod_cells
      INTO ls_modi.

      READ TABLE gt_output INTO gs_output INDEX ls_modi-row_id.

      IF sy-subrc = 0.
*Conf Control Key check
        IF ls_modi-fieldname = 'BSTAE'.

          lv_length = strlen( ls_modi-value ).

          IF lv_length < 4.
            CLEAR: lv_value.
            CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
              EXPORTING
                input  = ls_modi-value
              IMPORTING
                output = lv_value.

            IF lv_value IS NOT INITIAL.
              ls_modi-value = lv_value.
            ENDIF.
          ENDIF.

          CALL FUNCTION 'FVD_CONVERT_TO_UPPERCASE'
            EXPORTING
              if_input  = ls_modi-value
              if_langu  = sy-langu
            IMPORTING
              ef_output = ls_modi-value.


          SELECT SINGLE bstae
            FROM t163l
            INTO lv_bstae
            WHERE bstae = ls_modi-value.

          IF sy-subrc = 0.
*Continue further
          ELSE.
            MESSAGE: e999(z080) WITH 'Conf. Contrl Key Invalid'.
            EXIT.
          ENDIF.
*Qty Validation Check
        ELSEIF ls_modi-fieldname = 'MENGE_CONF'.

          IF ls_modi-value < gs_output-menge.
            MESSAGE: i999(z080) WITH 'Quantity confirmed is less than Ordered Quantity'.
          ELSEIF ls_modi-value > gs_output-menge.
*Check If the Un-limited Flag is set
            CLEAR:gs_output.
            READ TABLE gt_ekpo INTO gs_ekpo WITH KEY ebeln = gs_output-ebeln
                                                     ebelp = gs_output-ebelp.
            IF sy-subrc = 0.
              SELECT SINGLE ekwsl
              FROM mara
              INTO lv_ekwsl
              WHERE matnr = gs_ekpo-matnr
                AND ( ekwsl = 3 OR ekwsl = 'ZMOD' ).

              IF sy-subrc = 0.
*Un-linited falg is set , Give Warning message and continue
                MESSAGE: w999(z080) WITH 'Quantity confirmed is more than Ordered Quantity'.
              ELSE.
*Un-linited falg is not set , Give Error message and Stop
                MESSAGE: e999(z080) WITH 'Quantity confirmed is more than Ordered Quantity'.
                EXIT.
              ENDIF.
            ENDIF.
          ENDIF.

        ELSEIF ls_modi-fieldname = 'EINDT'.

          IF ls_modi-value < gs_output-eindt.
            MESSAGE: i999(z080) WITH 'Confirmed Delivery Date is different from PO Delivery Date'.
          ENDIF.

        ELSEIF ls_modi-fieldname = 'EBTYP'.

          CALL FUNCTION 'FVD_CONVERT_TO_UPPERCASE'
            EXPORTING
              if_input  = ls_modi-value
              if_langu  = sy-langu
            IMPORTING
              ef_output = ls_modi-value.

          SELECT SINGLE EBTYP
            INTO lv_ebtyp
            FROM t163g
            WHERE bstae = ls_modi-value
            AND blfdn = 1.

          IF lv_ebtyp <> LS_MODI-VALUE.

            MESSAGE: e999(z080) WITH ls_modi-value 'Not Allowed with' gs_output-bstae.
            exit.
          ENDIF.
        ENDIF.
        gs_output-changed = 'X'.
        MODIFY gt_output FROM gs_output INDEX ls_modi-row_id
        TRANSPORTING changed.
      ENDIF.
    ENDLOOP.

  ENDMETHOD.                    "handle_data_changed
ENDCLASS.                    "lcl_events_d0100 IMPLEMENTATION




SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_ebeln FOR ekpo-ebeln,
                s_ebelp FOR ekpo-ebelp,
                s_date FOR ekes-eindt OBLIGATORY,
                s_vendor FOR lfa1-lifnr.
SELECTION-SCREEN END OF BLOCK a.

AT SELECTION-SCREEN .

  IF s_ebeln IS INITIAL AND s_ebelp IS NOT INITIAL.
    MESSAGE: e999(z080) WITH  'Item cannot be given alone without PO Number'.
    ELSE.

    SELECT ebeln ebelp
      FROM ekpo
      INTO TABLE gt_ekpo_chk
      WHERE ebeln In s_ebeln
      AND ebelp In s_ebelp.

      IF sy-subrc <> 0.
        MESSAGE: e999(z080) WITH  'Invalid PO Number or Item'.
      ENDIF.
  ENDIF.

  IF s_vendor IS NOT INITIAL.

    SELECT lifnr
      FROM lfa1
      INTO TABLE gt_lfa1_chk
      WHERE lifnr in s_vendor.

      IF sy-subrc <> 0.
        MESSAGE: e999(z080) WITH 'Invalid Vandor'.
      ENDIF.
  ENDIF.

START-OF-SELECTION.
*Data Selection
  PERFORM get_data.
*Process Data
  PERFORM data_processing.
*Display Processed Data
  PERFORM display_prc_data.
*Update the PO changes
  PERFORM update_po.

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

  SELECT ebeln lifnr bedat
  FROM ekko
  INTO TABLE gt_ekko
  WHERE ebeln IN s_ebeln
  AND lifnr IN s_vendor
  AND bedat IN s_date.

  IF sy-subrc = 0.
    SORT gt_ekko BY ebeln.

    SELECT ebeln ebelp matnr menge bstae
      FROM ekpo
      INTO TABLE gt_ekpo
      FOR ALL ENTRIES IN gt_ekko
      WHERE ebeln = gt_ekko-ebeln
      AND ebelp IN s_ebelp.

    IF sy-subrc = 0.
      SORT gt_ekpo BY ebeln ebelp.

      SELECT ebeln ebelp etenr eindt
        FROM eket
        INTO TABLE gt_eket
        FOR ALL ENTRIES IN gt_ekpo
        WHERE ebeln = gt_ekpo-ebeln
        AND ebelp = gt_ekpo-ebelp.
    ENDIF.

    SELECT ebeln ebelp ebtyp eindt lpein uzeit erdat menge dabmg xblnr
    FROM ekes
    INTO TABLE gt_ekes
    FOR ALL ENTRIES IN gt_ekko
    WHERE ebeln = gt_ekko-ebeln
    AND ebelp IN s_ebelp.

    IF sy-subrc = 0.
      SORT gt_ekes BY ebeln ebelp.
    ENDIF.
  ENDIF.
ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  DATA_PROCESSING
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM data_processing .

*Prepare Final Output table
  CLEAR:gs_ekpo.
  REFRESH: gt_output.
  LOOP AT gt_ekpo INTO gs_ekpo.
    CLEAR: gs_ekko.
    READ TABLE gt_ekko INTO gs_ekko WITH KEY ebeln = gs_ekpo-ebeln
    BINARY SEARCH.
    IF sy-subrc = 0.
      gs_output-ebeln = gs_ekko-ebeln.
      gs_output-ebelp = gs_ekpo-ebelp.
      gs_output-menge = gs_ekpo-menge.
      gs_output-bstae = gs_ekpo-bstae.
    ENDIF.
    gs_output-erdat = sy-datum.
    CLEAR: gs_ekes.
    READ TABLE gt_ekes INTO gs_ekes WITH KEY ebeln = gs_ekpo-ebeln
                                             ebelp = gs_ekpo-ebelp
                                             BINARY SEARCH.
    IF sy-subrc = 0 .
      gs_output-ebtyp = gs_ekes-ebtyp.
      gs_output-lpein = gs_ekes-lpein.
      gs_output-uzeit = gs_ekes-uzeit.
      gs_output-menge_conf = gs_ekes-menge.
      gs_output-xblnr = gs_ekes-xblnr.
    ENDIF.

    CLEAR:gs_eket.
      READ TABLE gt_eket INTO gs_eket WITH KEY  ebeln = gs_ekpo-ebeln
                                                   ebelp = gs_ekpo-ebelp.
      IF sy-subrc = 0.
        gs_output-eindt = gs_eket-eindt.
        gs_output-eindt_conf = gs_eket-eindt.
      ENDIF.

    IF gs_output IS NOT INITIAL.
      IF gs_ekes-menge GE gs_ekpo-menge.
      ELSE.
        APPEND gs_output TO gt_output.
      ENDIF.
      CLEAR: gs_output.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " DATA_PROCESSING
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_PRC_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_prc_data .

*Build Field Cat
  PERFORM field_cat.
*Display Data
  IF gt_output IS NOT INITIAL.
    PERFORM display.
  ELSE.
    MESSAGE: i999(z080) WITH 'No Value for this selection.'.
  ENDIF.
ENDFORM.                    " DISPLAY_PRC_DATA
*&---------------------------------------------------------------------*
*&      Form  FIELD_CAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM field_cat .
  REFRESH fcat.
  DATA: lv_pos TYPE i.
*PO Number
  lv_pos = lv_pos + 1.
  wa_fcat-fieldname = 'EBELN'.
  wa_fcat-coltext = 'PO'.
  wa_fcat-col_pos = lv_pos.
  APPEND wa_fcat TO fcat.
*Item
  CLEAR wa_fcat.
  lv_pos = lv_pos + 1.
  wa_fcat-fieldname = 'EBELP'.
  wa_fcat-coltext = 'Item'.
  wa_fcat-col_pos = lv_pos.
  APPEND wa_fcat TO fcat.

*Required Delivery Date
  CLEAR wa_fcat.
  lv_pos = lv_pos + 1.
  wa_fcat-fieldname = 'EINDT'.
  wa_fcat-coltext = 'Required Delivery Date'.
  wa_fcat-col_pos = lv_pos.
  APPEND wa_fcat TO fcat.

*Order Qty
  CLEAR wa_fcat.
  lv_pos = lv_pos + 1.
  wa_fcat-fieldname = 'MENGE'.
  wa_fcat-coltext = 'Order Quantity'.
  wa_fcat-col_pos = lv_pos.
  APPEND wa_fcat TO fcat.

*Conf Control Key
  CLEAR wa_fcat.
  lv_pos = lv_pos + 1.
  wa_fcat-fieldname = 'BSTAE'.
  wa_fcat-coltext = 'Conf. Control Key'.
  wa_fcat-col_pos = lv_pos.
  wa_fcat-ref_table = 'T163G'.
  wa_fcat-ref_field = 'BSTAE'.
  wa_fcat-edit = 'X'.
  APPEND wa_fcat TO fcat.

*CC
  CLEAR wa_fcat.
  lv_pos = lv_pos + 1.
  wa_fcat-fieldname = 'EBTYP'.
  wa_fcat-coltext = 'CC'.
  wa_fcat-col_pos = lv_pos.
  wa_fcat-ref_table = 'T163G'.
  wa_fcat-ref_field = 'EBTYP'.
  wa_fcat-edit = 'X'.
  APPEND wa_fcat TO fcat.


*Date Format
  CLEAR wa_fcat.
  lv_pos = lv_pos + 1.
  wa_fcat-fieldname = 'LPEIN'.
  wa_fcat-coltext = 'Date Format'.
  wa_fcat-col_pos = lv_pos.
  wa_fcat-edit = 'X'.
  wa_fcat-ref_table = 'EKES'.
  wa_fcat-ref_field = 'LPEIN'.
  APPEND wa_fcat TO fcat.

*Delivery Date

  CLEAR wa_fcat.
  lv_pos = lv_pos + 1.
  wa_fcat-fieldname = 'EINDT_CONF'.
  wa_fcat-coltext = 'Delivery Date'.
  wa_fcat-col_pos = lv_pos.
  wa_fcat-edit = 'X'.
  wa_fcat-inttype = 'D'.
  wa_fcat-ref_table = 'EKES'.
  wa_fcat-ref_field = 'EINDT'.
  APPEND wa_fcat TO fcat.
*Time
  CLEAR wa_fcat.
  lv_pos = lv_pos + 1.
  wa_fcat-fieldname = 'UZEIT'.
  wa_fcat-coltext = 'Time'.
  wa_fcat-col_pos = lv_pos.
  wa_fcat-edit = 'X'.
  wa_fcat-ref_table = 'EKES'.
  wa_fcat-ref_field = 'UZEIT'.
  APPEND wa_fcat TO fcat.
*Qty
  CLEAR wa_fcat.
  lv_pos = lv_pos + 1.
  wa_fcat-fieldname = 'MENGE_CONF'.
  wa_fcat-coltext = 'Quantity '.
  wa_fcat-col_pos = lv_pos.
  wa_fcat-edit = 'X'.
  wa_fcat-inttype = 'QUAN'.
  APPEND wa_fcat TO fcat.
*Ref
  CLEAR wa_fcat.
  lv_pos = lv_pos + 1.
  wa_fcat-fieldname = 'XBLNR'.
  wa_fcat-coltext = 'Ref'.
  wa_fcat-col_pos = lv_pos.
  wa_fcat-edit = 'X'.
  APPEND wa_fcat TO fcat.
*Creted On.
  CLEAR wa_fcat.
  lv_pos = lv_pos + 1.
  wa_fcat-fieldname = 'ERDAT'.
  wa_fcat-coltext = 'Created on'.
  wa_fcat-col_pos = lv_pos.
  wa_fcat-edit = 'X'.
  wa_fcat-inttype = 'D'.
  wa_fcat-ref_table = 'EKES'.
  wa_fcat-ref_field = 'ERDAT'.
  APPEND wa_fcat TO fcat.

ENDFORM.                    " FIELD_CAT
*&---------------------------------------------------------------------*
*&      Form  DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display .

  CREATE OBJECT event_receiver1.
*---setting event handlers
*  SET HANDLER event_receiver1->handle_toolbar_set   FOR ref_grid.
*  SET HANDLER event_receiver1->handle_user_command  FOR ref_grid.
**  SET HANDLER event_receiver1->handle_hotspot_click FOR ref_grid.
  SET HANDLER event_receiver1->handle_data_changed  FOR ref_grid.
*----------------------------------------------------------------------*
*           ALV GRID DISPLAY
*----------------------------------------------------------------------*

*ENTER key is pressed or
  CALL METHOD ref_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_enter.

*   data is changed and cursor is moved from the cell
  CALL METHOD ref_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified.

  CALL METHOD ref_grid->set_table_for_first_display
    EXPORTING
      is_variant      = st_var
      i_save          = save
      is_layout       = loyo
    CHANGING
      it_outtab       = gt_output[]
      it_fieldcatalog = fcat.

  CALL SCREEN 100.
ENDFORM.                    " DISPLAY
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  CALL METHOD ref_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified.
  SET PF-STATUS 'S100'.
  SET TITLEBAR 'XXX'.

ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  DATA: lv_flag(1) TYPE c.
  CASE sy-ucomm.
    WHEN 'EXIT' OR 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'SAVE'.
      CLEAR:lv_flag.
      LOOP AT gt_output INTO gs_output
        WHERE changed IS NOT INITIAL.

        IF gs_output-ebtyp IS NOT INITIAL
          AND gs_output-eindt IS NOT INITIAL
          AND gs_output-menge_conf  IS NOT INITIAL.
          lv_flag = 'X'.
          EXIT.
        ENDIF.
      ENDLOOP.

      IF lv_flag IS NOT INITIAL.
        PERFORM update_po.
      ELSE.
        MESSAGE: e999(z080) WITH 'CC,Delivery Date,Qty' 'Are Mandatory'.
      ENDIF.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Form  UPDATE_PO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM update_po .
  DATA: ls_ekes TYPE uekes,
        lt_ekes TYPE TABLE OF uekes,
        lt_tekes TYPE TABLE OF uekes,
        lv_index TYPE sy-tabix.

  DELETE gt_output WHERE changed IS INITIAL.

  IF gt_output IS NOT INITIAL.

    SELECT ebeln ebelp etens
      FROM ekes
      INTO TABLE gt_ekes_1
      FOR ALL ENTRIES IN gt_output
      WHERE ebeln = gt_output-ebeln.

    IF sy-subrc = 0.
      SORT gt_ekes_1 BY ebeln ebelp.
    ENDIF.

    LOOP AT gt_output INTO gs_output.

      ls_ekes-ebeln = gs_output-ebeln.
      ls_ekes-ebelp = gs_output-ebelp.
      READ TABLE gt_ekes_1 INTO gs_ekes_1 WITH KEY ebeln = gs_output-ebeln
                                                   ebelp = gs_output-ebelp
                                                   BINARY SEARCH.

      IF sy-subrc = 0.
        ls_ekes-etens = gs_ekes_1-etens + 1.
        ls_ekes-kz = 'I'.
      ELSE.
        ls_ekes-etens = '001'.
        ls_ekes-kz = 'I'.
      ENDIF.


      ls_ekes-ebtyp = gs_output-ebtyp."'AB'.
      ls_ekes-eindt = gs_output-eindt."'20120919'.
      ls_ekes-lpein = gs_output-lpein."'1'.
      ls_ekes-menge = gs_output-menge_conf."'3'.
      ls_ekes-xblnr = gs_output-xblnr.
      ls_ekes-erdat = gs_output-erdat.
      ls_ekes-uzeit = gs_output-uzeit.
      ls_ekes-kzdis = 'X'.

      APPEND ls_ekes TO lt_ekes.

      CALL FUNCTION 'ME_CONFIRMATION_UPDATE'
        EXPORTING
          i_ebeln = gs_output-ebeln
        TABLES
          xekes   = lt_ekes.

      IF sy-subrc = 0.
        COMMIT WORK AND WAIT.

        LOOP AT gt_ekpo INTO gs_ekpo
  WHERE ebeln = gs_output-ebeln.
          APPEND gs_ekpo TO gt_ekpo_temp.

        ENDLOOP.

        IF gt_ekpo_temp IS NOT INITIAL.
          CLEAR:gs_ekpo.
          READ TABLE gt_ekpo_temp INTO gs_ekpo WITH KEY ebeln gs_output-ebeln
                                                        ebelp = gs_output-ebelp.
          IF sy-subrc = 0.
            lv_index = sy-tabix.
            PERFORM po_save USING gs_output
                                  lv_index.
          ENDIF.


        ENDIF.


      ENDIF.

    ENDLOOP.
  ENDIF.
ENDFORM.                    " UPDATE_PO
*&---------------------------------------------------------------------*
*&      Form  PO_SAVE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GS_OUTPUT  text
*----------------------------------------------------------------------*
FORM po_save  USING    p_gs_output TYPE ty_output
                       lv_index TYPE sy-tabix.

  DATA: ls_ctu_params TYPE ctu_params,
        ls_char(3) TYPE c,
        ls_ind(5) TYPE c.
  ls_ctu_params-dismode = 'N'.

  ls_ind = lv_index.

  CONCATENATE ls_char ls_ind INTO ls_ind.

  PERFORM bdc_dynpro      USING 'SAPLMEGUI' '0014'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=MECHOB'.
  PERFORM bdc_field       USING 'MEPO_TOPLINE-BSART'
                                'NB'.
  PERFORM bdc_field       USING 'DYN_6000-LIST'
                                '   1'.
*perform bdc_field       using 'BDC_CURSOR'
*                              'MEPO1319-MATKL'.
*perform bdc_field       using 'MEPO1319-SPINF'
*                              'X'.
  PERFORM bdc_dynpro      USING 'SAPLMEGUI' '0002'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=MEOK'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'MEPO_SELECT-EBELN'.
  PERFORM bdc_field       USING 'MEPO_SELECT-EBELN'
                                p_gs_output-ebeln."'4580017766'.
  PERFORM bdc_field       USING 'MEPO_SELECT-BSTYP_F'
                                'X'.
  PERFORM bdc_dynpro      USING 'SAPLMEGUI' '0014'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=DDOWN3200'.
  PERFORM bdc_field       USING 'MEPO_TOPLINE-BSART'
                                'NB'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'DYN_6000-LIST'.
  PERFORM bdc_field       USING 'DYN_6000-LIST'
                                ls_ind."'   5'.
  PERFORM bdc_field       USING 'MEPO1319-SPINF'
                                'X'.
  PERFORM bdc_dynpro      USING 'SAPLMEGUI' '0014'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=TABIDT16'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'MEPO_TOPLINE-BSART'.
  PERFORM bdc_field       USING 'MEPO_TOPLINE-BSART'
                                'NB'.
  PERFORM bdc_field       USING 'DYN_6000-LIST'
                                ls_ind."'   5'.
  PERFORM bdc_field       USING 'MEPO1319-SPINF'
                                'X'.
  PERFORM bdc_dynpro      USING 'SAPLMEGUI' '0014'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'MEPO_TOPLINE-BSART'
                                'NB'.
  PERFORM bdc_field       USING 'DYN_6000-LIST'
                                ls_ind."'   5'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'MEPO1334-BSTAE'.
  PERFORM bdc_field       USING 'MEPO1334-BSTAE'
                                 p_gs_output-bstae."'ZCL5'.
  PERFORM bdc_field       USING 'MEPO1334-KZABS'
                                'X'.
  PERFORM bdc_dynpro      USING 'SAPLMEGUI' '0014'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=MESAVE'.
  PERFORM bdc_field       USING 'MEPO_TOPLINE-BSART'
                                'NB'.
  PERFORM bdc_field       USING 'DYN_6000-LIST'
                                ls_ind."'   5'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'MEPO1334-BSTAE'.
  PERFORM bdc_field       USING 'MEPO1334-KZABS'
                                'X'.
Refresh: messtab.
  CALL TRANSACTION 'ME22N' USING bdcdata
                              OPTIONS FROM ls_ctu_params
                              MESSAGES INTO messtab.

LOOP AT  messtab
         WHERE MSGTYP = 'E' or MSGTYP = 'A'.
  ENDLOOP.

IF sy-subrc = 0.

  MESSAGE: i999(z080) WITH 'Error in Update'.

ELSE.
  MESSAGE: s999(z080) WITH 'PO Updated '.

ENDIF.






ENDFORM.                    " PO_SAVE


*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
  IF fval <> ' '.
    CLEAR bdcdata.
    bdcdata-fnam = fnam.
    bdcdata-fval = fval.
    APPEND bdcdata.
  ENDIF.
ENDFORM.                    "BDC_FIELD

*************************************************************

Regards,

Amit

0 Kudos

Hi

After the error message you have command EXIT.Please check.

Regards

0 Kudos

The code is fine, better once contact your basis team. might be an problem with configuration issue.

0 Kudos

Hi ,

That exit will take me out of the loop.

But tried what you said , still the same.

Regards,

Amit

0 Kudos

You should call the SET HANDLER events just above the call of the method SET_TABLE_FOR_FIRST_DISPLAY.

Hope this helps.

0 Kudos

Hi Amit,

Here you can use warning message instead of error. It doesn't prompt an empty screen.

And Error can be handled further using some variable. Like set error flag after message, and

handle it after.

0 Kudos

Hi Venkat ,

Tried calling the Set handler just befor Set table for first display .

Still same , the screen disappears.

Regards,

Amit

0 Kudos

Hi Amit,

don't do the message output within method on_data_chenaged directly. You should add the error message to the alv error protocol with method  er_data_changed->ADD_PROTOCOL_ENTRY. Do also all checks in one step and don't leave the method on_data-changed whne the first error is found.

The ALV will show the whole error log. All error fields will be marked with red borders.

Regards

Hendrik

0 Kudos

I dont think you need these methods

*ENTER key is pressed or

  CALL METHOD ref_grid->register_edit_event

    EXPORTING

      i_event_id = cl_gui_alv_grid=>mc_evt_enter.

*   data is changed and cursor is moved from the cell

  CALL METHOD ref_grid->register_edit_event

    EXPORTING

      i_event_id = cl_gui_alv_grid=>mc_evt_modified.

Use Event Method : DATA_CHANGED_FINISHED

Check the program BCALV_EDIT_02 for demo... Hope this helps