12-21-2012 8:31 AM
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
12-21-2012 8:38 AM
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.
12-21-2012 8:41 AM
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
12-21-2012 8:48 AM
Hi
After the error message you have command EXIT.Please check.
Regards
12-21-2012 8:52 AM
The code is fine, better once contact your basis team. might be an problem with configuration issue.
12-21-2012 9:00 AM
Hi ,
That exit will take me out of the loop.
But tried what you said , still the same.
Regards,
Amit
12-21-2012 9:05 AM
You should call the SET HANDLER events just above the call of the method SET_TABLE_FOR_FIRST_DISPLAY.
Hope this helps.
12-21-2012 9:12 AM
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.
12-21-2012 9:13 AM
Hi Venkat ,
Tried calling the Set handler just befor Set table for first display .
Still same , the screen disappears.
Regards,
Amit
12-21-2012 9:16 AM
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
12-21-2012 9:29 AM
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