‎2020 May 23 6:36 PM
I have added a "save edit"button with function code 'SVE'. The function code 'switch' is to switch to editable and non-editable mode.
When i clickon 'SVE' in editable mode (upon clicking 'switch'), it should update value into database. How do i join the 'switch' event and 'SVE' event together? Which syntax to use
*&---------------------------------------------------------------------*
*& Include MZDLGPROG_03_REPORTI01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9002 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9002 INPUT.
CASE OK_CODE.
WHEN 'BACK'.
SET SCREEN 0.
LEAVE TO SCREEN 0.
WHEN 'DEL'.
GET CURSOR LINE GV_TABIX.
F1 = 1.
PERFORM FETCH_DATA.
IF F1 = 1.
DELETE ZEKKO_03 FROM TABLE GT_ZEKKO.
DELETE FROM ZEKPO_03 WHERE EBELN = GWA_ZEKKO-EBELN.
COMMIT WORK.
ENDIF.
WHEN 'SVE'.
MODIFY ZEKKO_03 FROM TABLE GT_ZEKKO.
ENDCASE.
CLEAR GT_ZEKKO.
CLEAR GT_ZEKPO.
Full code and screen code as shown below:

PROGRAM SAPMZDLGPROG_03_REPORT.
TABLES: ZEKKO_03,
ZEKPO_03.
CONTROLS: TC_ZEKPO TYPE TABLEVIEW USING SCREEN 9002.
DATA : OK_CODE TYPE SY-UCOMM,
GT_ZEKKO TYPE TABLE OF ZEKKO_03,
GWA_ZEKKO TYPE ZEKKO_03,
GT_ZEKPO TYPE TABLE OF ZEKPO_03,
GWA_ZEKPO LIKE LINE OF GT_ZEKPO,
F1 TYPE CHAR1,
GV_LINES TYPE I,
GV_TABIX TYPE SY-TABIX,
ON_OFF TYPE C LENGTH 1 VALUE '0',
GV_ACTION TYPE I.
*&---------------------------------------------------------------------*
*& Include MZDLGPROG_03_REPORTO01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_9001 OUTPUT.
SET PF-STATUS 'ZSTATUS'.
SET TITLEBAR 'ZTITLE'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module FETCH_DATA OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE FETCH_DATA OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
SELECT EBELN LIFNR EKORG EKGRP BUKRS WAERS ZTERM ZDESC FROM ZEKKO_03
INTO CORRESPONDING FIELDS OF TABLE GT_ZEKKO
WHERE EBELN = GWA_ZEKKO-EBELN.
SELECT SINGLE EBELN LIFNR EKORG EKGRP BUKRS WAERS ZTERM ZDESC FROM ZEKKO_03
INTO CORRESPONDING FIELDS OF GWA_ZEKKO
WHERE EBELN = GWA_ZEKKO-EBELN.
READ TABLE GT_ZEKKO INTO GWA_ZEKKO INDEX SY-TABIX.
SELECT EBELP MATNR WERKS LGORT MENGE MEINS
INTO CORRESPONDING FIELDS OF TABLE GT_ZEKPO FROM ZEKPO_03
WHERE EBELN = GWA_ZEKKO-EBELN.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SWITCH OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE SWITCH OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
CASE OK_CODE.
WHEN 'SWITCH'.
IF ON_OFF = '0'.
GV_ACTION = 0.
ON_OFF = '1'.
ELSE.
GV_ACTION = 1.
ON_OFF = '0'.
ENDIF.
LOOP AT SCREEN.
"""header
IF SCREEN-NAME = 'GWA_ZEKKO-EKGRP'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-EKORG'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-BUKRS'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-LIFNR'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-WAERS'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-ZTERM'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-ZDESC'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
LOOP AT SCREEN.
"""line item
IF ( SCREEN-GROUP1 = 'GRP' ).
SCREEN-INPUT = GV_ACTION.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_9002 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_9002 OUTPUT.
SET PF-STATUS 'ZSTATUS'.
SET TITLEBAR 'ZTITLE1'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module MODIFY_IT_ZEKPO INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE MODIFY_GT_ZEKPO INPUT.
MODIFY GT_ZEKPO FROM GWA_ZEKPO
INDEX TC_ZEKPO-CURRENT_LINE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Include MZDLGPROG_03_REPORTI01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9002 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9002 INPUT.
CASE OK_CODE.
WHEN 'BACK'.
SET SCREEN 0.
LEAVE TO SCREEN 0.
WHEN 'DEL'.
GET CURSOR LINE GV_TABIX.
F1 = 1.
PERFORM FETCH_DATA.
IF F1 = 1.
DELETE ZEKKO_03 FROM TABLE GT_ZEKKO.
DELETE FROM ZEKPO_03 WHERE EBELN = GWA_ZEKKO-EBELN.
COMMIT WORK.
ENDIF.
WHEN 'SVE'.
MODIFY ZEKKO_03 FROM TABLE GT_ZEKKO.
ENDCASE.
CLEAR GT_ZEKKO.
CLEAR GT_ZEKPO.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9001 INPUT.
CASE OK_CODE.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
LEAVE PROGRAM.
WHEN 'DELETE' OR 'DISPLAY'.
IF GWA_ZEKKO-EBELN IS INITIAL .
MESSAGE 'Please enter document number' TYPE 'E'.
ELSE.
PERFORM FETCH_DATA.
CALL SCREEN 9002.
ENDIF.
WHEN 'EDIT' .
CALL SCREEN 9002.
WHEN 'CREATE'.
CALL SCREEN 9002.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FETCH_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FETCH_DATA .
IF F1 NE 1.
SELECT EBELN LIFNR EKORG EKGRP BUKRS WAERS ZTERM ZDESC FROM ZEKKO_03
INTO CORRESPONDING FIELDS OF TABLE GT_ZEKKO
WHERE EBELN = GWA_ZEKKO-EBELN.
SELECT SINGLE EBELN LIFNR EKORG EKGRP BUKRS WAERS ZTERM ZDESC FROM ZEKKO_03
INTO CORRESPONDING FIELDS OF GWA_ZEKKO
WHERE EBELN = GWA_ZEKKO-EBELN.
READ TABLE GT_ZEKKO INTO GWA_ZEKKO INDEX SY-TABIX.
SELECT EBELP MATNR WERKS LGORT MENGE MEINS
INTO CORRESPONDING FIELDS OF TABLE GT_ZEKPO FROM ZEKPO_03
WHERE EBELN = GWA_ZEKKO-EBELN.
ENDIF.
ENDFORM.
‎2020 May 24 3:44 PM
Dear A.S.
The issue is with the PO number, You need to add the leading zeros to the PO number. That is why the Database record is not updated and you get sy-subrc as 4.
Before update make sure that the PO number of that header and detail has leading zeros.
To add leading zeros to the EBELN - use CONVERSION_EXIT_ALPHA_INPUT function
Regards,
Venkat
‎2020 May 23 6:41 PM
Hi arnold92
Something like this?
WHEN 'SVE'.
IF on_off = 0. " edit mode
MODIFY ZEKKO_03 FROM TABLE GT_ZEKKO.
ENDIF.
Regards,Edit: You should probably modify your status to disable the SAVE button in display mode.
Have a look at the SET PF-STATUS keyword with EXCLUDING option.
‎2020 May 23 7:06 PM
Hi Matersz
Thanks for your reply, I am looking into it
Logically, the set pf-status excluding should apply to MODULE USER_COMMAND_9002 INPUT?
‎2020 May 23 7:15 PM
Hi
Something like this:
DATA:
gt_excluded_function TYPE TABLE of syst_ucomm.
CLEAR gt_excluded_functions.
IF on_off = 0. " edit mode.
" add functions disabled in edit mode
ELSE.
" add functions disabled in display mode
APPEND 'SVE' TO gt_excluded_functions.
ENDIF.
SET PF-STATUS 'ZSTATUS' EXCLUDING gt_excluded_functions.
SET TITLEBAR 'ZTITLE1'.<br>
Regards,‎2020 May 23 7:26 PM
‎2020 May 23 7:40 PM
Just would like to clarify, gv_excluded_function variable should be gt_excluded_functions?
‎2020 May 23 7:44 PM
‎2020 May 24 9:16 AM
Ive tried with the following:
*&---------------------------------------------------------------------*
*& Module SVE OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE SVE OUTPUT.
DATA: GT_FUNCTION TYPE TABLE OF sy-ucomm.
CLEAR GT_FUNCTION.
IF
on_off = '1'. '"""edit mode
SET PF-STATUS 'ZSTATUS' EXCLUDING 'SAVE'.
APPEND 'SVE' TO GT_FUNCTION.
ELSE.
ON_OFF = '0'.
SET PF-STATUS 'ZSTATUS' .
ENDIF.
ENDMODULE.<br>then i tried to click on switch edit mode, make changes to value in zekko field with 'sve' event, then it switches back to display mode without making any changes to the field
PROCESS BEFORE OUTPUT.
MODULE STATUS_9002.
MODULE fetch_data.
LOOP AT GT_ZEKPO INTO GWA_ZEKPO WITH CONTROL TC_ZEKPO CURSOR
TC_ZEKPO-CURRENT_LINE.
ENDLOOP.
MODULE switch.
MODULE sve.
PROCESS AFTER INPUT.
loop at gt_zekpo.
* MODULE modify_gt_zekpo.
endloop.
MODULE USER_COMMAND_9002.<br>
*&---------------------------------------------------------------------*
*& Include MZDLGPROG_03_REPORTI01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9002 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9002 INPUT.
SET PF-STATUS 'ZSTATUS' .
SET TITLEBAR 'ZTITLE1'.
CASE OK_CODE.
WHEN 'BACK'.
SET SCREEN 0.
LEAVE TO SCREEN 0.
WHEN 'DEL'.
GET CURSOR LINE GV_TABIX.
F1 = 1.
PERFORM FETCH_DATA.
IF F1 = 1.
DELETE ZEKKO_03 FROM TABLE GT_ZEKKO.
DELETE FROM ZEKPO_03 WHERE EBELN = GWA_ZEKKO-EBELN.
COMMIT WORK.
ENDIF.
WHEN 'SVE'.
IF ON_OFF EQ '1'.
MODIFY ZEKKO_03 FROM TABLE GT_ZEKKO.
COMMIT WORK.
ENDIF.
ENDCASE.
CLEAR GT_ZEKKO.
CLEAR GT_ZEKPO.
ENDMODULE.<br>
‎2020 May 24 10:43 AM
Hi
Please make a habit of naming variables with names which mean something. What does on_off variable mean? What its values mean? Is 1 on? Is 0 on? You try to remove the SAVE button when on_off = 1.
IF
on_off = '1'. '"""edit mode
SET PF-STATUS 'ZSTATUS' EXCLUDING 'SAVE'.
APPEND 'SVE' TO GT_FUNCTION.
ELSE.
ON_OFF = '0'.
SET PF-STATUS 'ZSTATUS' .
ENDIF.
But later you try to modify the data in DB when on_off = 1.
WHEN 'SVE'.
IF ON_OFF EQ '1'.
MODIFY ZEKKO_03 FROM TABLE GT_ZEKKO.
COMMIT WORK.
ENDIF.
Is on_off = 1 an EDIT or DISPLAY mode? No one can tell...
It would be much better if you had a boolean variable named for example GV_IS_EDIT_MODE which would have values 'X' = Yes and ' ' = No. This way you (and any other developer for that matter) would always be able to tell, if it's an EDIT or DISPLAY mode.
As to the button removal, you have to add the 'SVE' user command before you set the PF-STATUS of the screen. And in the SET PF-STATUS you need to use the GT_FUNCTION table. Like so:
APPEND 'SVE' TO GT_FUNCTION.
SET PF-STATUS 'ZSTATUS' EXCLUDING gt_function.
The way you did it won't work. You add 'SVE' just after you set the PF-STATUS and excluding the 'SAVE' user command won't disable the SAVE button, as it has the 'SVE' user command assigned.
Regards,
Mateusz
‎2020 May 24 1:26 PM
I did as follows. In term of exlcuding pf_status, anything have i missed? Logically is there any issue with modify for event sve?
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9002 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9002 INPUT.
SET PF-STATUS 'ZSTATUS' EXCLUDING gt_function.
SET TITLEBAR 'ZTITLE1'.
CASE OK_CODE.
WHEN 'BACK'.
SET SCREEN 0.
LEAVE TO SCREEN 0.
WHEN 'DEL'.
GET CURSOR LINE GV_TABIX.
F1 = 1.
PERFORM FETCH_DATA.
IF F1 = 1.
DELETE ZEKKO_03 FROM TABLE GT_ZEKKO.
DELETE FROM ZEKPO_03 WHERE EBELN = GWA_ZEKKO-EBELN.
COMMIT WORK.
ENDIF.
WHEN 'SVE'.
IF GV_EDIT EQ 'X'.
MODIFY ZEKKO_03 FROM TABLE GT_ZEKKO.
COMMIT WORK.
ENDIF.
ENDCASE.
CLEAR GT_ZEKKO.
CLEAR GT_ZEKPO.
ENDMODULE.<br>
*&---------------------------------------------------------------------*
*& Module SVE OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE SVE OUTPUT.
DATA: GT_FUNCTION TYPE TABLE OF SY-UCOMM.
CLEAR GT_FUNCTION.
IF
GV_EDIT = 'X'.
APPEND 'SVE' TO GT_FUNCTION. """""assign sve
SET PF-STATUS 'ZSTATUS' EXCLUDING GT_FUNCTION. """"set pf-status
ELSE.
GV_EDIT = ' '.
APPEND 'SVE' TO GT_FUNCTION. """""assign sve
SET PF-STATUS 'ZSTATUS' EXCLUDING GT_FUNCTION. """"set pf-status
ENDIF.
ENDMODULE.<br>I have added sve user command as below screenshot
Full code as shown below
*&---------------------------------------------------------------------*
*& Include MZDLGPROG_03_REPORTTOP - Module Pool
*&---------------------------------------------------------------------*
PROGRAM SAPMZDLGPROG_03_REPORT.
TABLES: ZEKKO_03,
ZEKPO_03.
CONTROLS: TC_ZEKPO TYPE TABLEVIEW USING SCREEN 9002.
DATA : OK_CODE TYPE SY-UCOMM,
GT_ZEKKO TYPE TABLE OF ZEKKO_03,
GWA_ZEKKO TYPE ZEKKO_03,
GT_ZEKPO TYPE TABLE OF ZEKPO_03,
GWA_ZEKPO LIKE LINE OF GT_ZEKPO,
F1 TYPE CHAR1,
GV_LINES TYPE I,
GV_TABIX TYPE SY-TABIX,
GV_EDIT TYPE BOOLEAN,
GV_ACTION TYPE I.
*&---------------------------------------------------------------------*
*& Include MZDLGPROG_03_REPORTO01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_9001 OUTPUT.
SET PF-STATUS 'ZSTATUS'.
SET TITLEBAR 'ZTITLE'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module FETCH_DATA OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE FETCH_DATA OUTPUT.
SELECT EBELN LIFNR EKORG EKGRP BUKRS WAERS ZTERM ZDESC FROM ZEKKO_03
INTO CORRESPONDING FIELDS OF TABLE GT_ZEKKO
WHERE EBELN = GWA_ZEKKO-EBELN.
SELECT SINGLE EBELN LIFNR EKORG EKGRP BUKRS WAERS ZTERM ZDESC FROM ZEKKO_03
INTO CORRESPONDING FIELDS OF GWA_ZEKKO
WHERE EBELN = GWA_ZEKKO-EBELN.
READ TABLE GT_ZEKKO INTO GWA_ZEKKO INDEX SY-TABIX.
SELECT EBELP MATNR WERKS LGORT MENGE MEINS
INTO CORRESPONDING FIELDS OF TABLE GT_ZEKPO FROM ZEKPO_03
WHERE EBELN = GWA_ZEKKO-EBELN.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SVE OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE SVE OUTPUT.
DATA: GT_FUNCTION TYPE TABLE OF SY-UCOMM.
CLEAR GT_FUNCTION.
IF
GV_EDIT = 'X'.
APPEND 'SVE' TO GT_FUNCTION. """""assign sve
SET PF-STATUS 'ZSTATUS' EXCLUDING GT_FUNCTION. """"set pf-status
ELSE.
GV_EDIT = ' '.
APPEND 'SVE' TO GT_FUNCTION. """""assign sve
SET PF-STATUS 'ZSTATUS' EXCLUDING GT_FUNCTION. """"set pf-status
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SWITCH OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE SWITCH OUTPUT.
CASE OK_CODE.
WHEN 'SWITCH'.
IF
GV_EDIT = ' '.
GV_ACTION = 0.
GV_EDIT = 'X'.
ELSE.
GV_ACTION = 1.
GV_EDIT = ' '.
ENDIF.
LOOP AT SCREEN.
"""header
IF SCREEN-NAME = 'GWA_ZEKKO-EKGRP'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-EKORG'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-BUKRS'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-LIFNR'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-WAERS'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-ZTERM'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-ZDESC'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'SWITCH'.
IF GV_EDIT = ' '.
SCREEN-INVISIBLE = 1.
ENDIF.
IF GV_EDIT = 'X'.
SCREEN-INVISIBLE = 0.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
LOOP AT SCREEN.
"""line item
IF ( SCREEN-GROUP1 = 'GRP' ).
SCREEN-INPUT = GV_ACTION.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_9002 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_9002 OUTPUT.
SET PF-STATUS 'ZSTATUS'.
SET TITLEBAR 'ZTITLE1'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Include MZDLGPROG_03_REPORTI01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9002 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9002 INPUT.
SET PF-STATUS 'ZSTATUS' EXCLUDING gt_function.
SET TITLEBAR 'ZTITLE1'.
CASE OK_CODE.
WHEN 'BACK'.
SET SCREEN 0.
LEAVE TO SCREEN 0.
WHEN 'DEL'.
GET CURSOR LINE GV_TABIX.
F1 = 1.
PERFORM FETCH_DATA.
IF F1 = 1.
DELETE ZEKKO_03 FROM TABLE GT_ZEKKO.
DELETE FROM ZEKPO_03 WHERE EBELN = GWA_ZEKKO-EBELN.
COMMIT WORK.
ENDIF.
WHEN 'SVE'.
IF GV_EDIT EQ 'X'.
MODIFY ZEKKO_03 FROM TABLE GT_ZEKKO.
COMMIT WORK.
ENDIF.
ENDCASE.
CLEAR GT_ZEKKO.
CLEAR GT_ZEKPO.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9001 INPUT.
CASE OK_CODE.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
LEAVE PROGRAM.
WHEN 'DELETE' OR 'DISPLAY'.
IF GWA_ZEKKO-EBELN IS INITIAL .
MESSAGE 'Please enter document number' TYPE 'E'.
ELSE.
PERFORM FETCH_DATA.
CALL SCREEN 9002.
ENDIF.
WHEN 'EDIT' .
CALL SCREEN 9002.
WHEN 'CREATE'.
CALL SCREEN 9002.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FETCH_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FETCH_DATA .
IF F1 NE 1.
SELECT EBELN LIFNR EKORG EKGRP BUKRS WAERS ZTERM ZDESC FROM ZEKKO_03
INTO CORRESPONDING FIELDS OF TABLE GT_ZEKKO
WHERE EBELN = GWA_ZEKKO-EBELN.
SELECT SINGLE EBELN LIFNR EKORG EKGRP BUKRS WAERS ZTERM ZDESC FROM ZEKKO_03
INTO CORRESPONDING FIELDS OF GWA_ZEKKO
WHERE EBELN = GWA_ZEKKO-EBELN.
READ TABLE GT_ZEKKO INTO GWA_ZEKKO INDEX SY-TABIX.
SELECT EBELP MATNR WERKS LGORT MENGE MEINS
INTO CORRESPONDING FIELDS OF TABLE GT_ZEKPO FROM ZEKPO_03
WHERE EBELN = GWA_ZEKKO-EBELN.
ENDIF.
ENDFORM.<br>
‎2020 May 23 7:02 PM
Hi A.S.
As Mateusz suggested, we should disable the SAVE button when it is in display mode.
To help you, can you please show us the latest code of your "SWITCH" code. Also update the name of the SAVE button
Regards,
Venkat
‎2020 May 23 7:25 PM
Hi sir,
The statement "Update name of save button", sorry i dont get it.
Here is my latest switch code
*&---------------------------------------------------------------------*
*& Module SWITCH OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE SWITCH OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
CASE OK_CODE.
WHEN 'SWITCH'.
IF ON_OFF = '0'.
GV_ACTION = 0.
ON_OFF = '1'.
ELSE.
GV_ACTION = 1.
ON_OFF = '0'.
ENDIF.
LOOP AT SCREEN.
"""header
IF SCREEN-NAME = 'GWA_ZEKKO-EKGRP'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-EKORG'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-BUKRS'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-LIFNR'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-WAERS'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-ZTERM'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-ZDESC'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
LOOP AT SCREEN.
"""line item
IF ( SCREEN-GROUP1 = 'GRP' ).
SCREEN-INPUT = GV_ACTION.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDCASE.
ENDMODULE.
‎2020 May 23 9:49 PM
Add this statement in header section screen-loop
IF SCREEN-NAME = 'your_button_name'. "your button name for the switch
if ON_OFF = '1'. "if display hide
screen-invisible = '1'.
endif.
if ON_OFF = '0'.
screen-invisible = '0'.
screen-input = '1'
endif.
MODIFY SCREEN.
ENDIF.Regards,
Venkat
‎2020 May 23 10:15 PM
You say "IF SCREEN-NAME = 'your_button_name'. I thought that the OP had designed the buttons in the application toolbar (SET PF-STATUS). Are you sure the OP has defined a "switch" button in the layout of the dynpro?
‎2020 May 23 10:32 PM
Yes Sandra,
In the screen above the Table Control - there is a button called INPUT.. (Which he assigned as SWITCH) user-command
Regards,
Venkat
‎2020 May 24 7:14 AM
‎2020 May 24 7:20 AM
I think Yes, Anyways, You can try in both way.. 0 or 1.. Just try in both option. This code should work
‎2020 May 24 8:28 AM
‎2020 May 24 9:43 AM
‎2020 May 24 11:36 AM
Hi sir,
correct me if im wrong, your logic is
when in edit mode (upon pressing switch)
it will hide the switch button when in edit mode?
I should apply the same for for sve?
‎2020 May 24 11:40 AM
Yes, When in Edit mode, it should be displayed, When in display mode it should be hidden
The code logic is for that,,
You just try with pressing it and find it how it behaves.
‎2020 May 24 12:34 PM
Yes it behaved that way for the hide switch button when in edit mode but value not being updated into db table
im trying to get sve work, upon pressing sve button, it will save into database,
meanwhile im trying out Mateusz's suggestion
‎2020 May 24 1:13 PM
Okay, Just to make it clear.
1. Now you are hide/display issue of the SAVE button is resolved - correct?
2. Now upon pressing the SAVE button - your data is not saved - is the issue?
If that is the case, just paste the screen shot of debug screen of the
a) internal table with data you changed, and
b) db strcture of your ztable
c) your sy-subrc value after update/modify statement.
Regards,
Venkat
‎2020 May 24 2:22 PM
Hi sir
1. Yes im able to hide the switch button. Just to clarify, in "your_button_name" you mentioned switch? the reason to allow to hide switch is to allow for screen-input?
2. yes i created a button sve to save value in editable mode
‎2020 May 24 2:24 PM
‎2020 May 24 2:28 PM
When changed,example, zdesc, it didnt update the latest value

‎2020 May 23 10:24 PM
You ask "How do i join the 'switch' event and 'SVE' event together?" ("switch" being the toggle between display and edit mode, and "SVE" being SAVE)
I don't understand the question.
Classical logic:
(and if the user presses the save button, just save, that's all)
‎2020 May 24 9:31 AM
‎2020 May 24 3:44 PM
Dear A.S.
The issue is with the PO number, You need to add the leading zeros to the PO number. That is why the Database record is not updated and you get sy-subrc as 4.
Before update make sure that the PO number of that header and detail has leading zeros.
To add leading zeros to the EBELN - use CONVERSION_EXIT_ALPHA_INPUT function
Regards,
Venkat
‎2020 May 24 6:48 PM
I have tried the conversion input it shows results as follows.


Basically it does CONVERSION_EXIT_ALPHA_INPUT does both deleting and adding zeros?
My zebeln field is limited to 8 characters, the first digit is non zero, it would still show as leading zero for preceding ones?
Here is my latest code
PROGRAM SAPMZDLGPROG_03_REPORT.
TABLES: ZEKKO_03,
ZEKPO_03.
CONTROLS: TC_ZEKPO TYPE TABLEVIEW USING SCREEN 9002.
DATA : OK_CODE TYPE SY-UCOMM,
GT_ZEKKO TYPE TABLE OF ZEKKO_03,
GWA_ZEKKO TYPE ZEKKO_03,
GT_ZEKPO TYPE TABLE OF ZEKPO_03,
GWA_ZEKPO LIKE LINE OF GT_ZEKPO,
F1 TYPE CHAR1,
GV_LINES TYPE I,
GV_TABIX TYPE SY-TABIX,
GV_EDIT TYPE BOOLEAN,
GV_ACTION TYPE I.
*&---------------------------------------------------------------------*
*& Include MZDLGPROG_03_REPORTO01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_9001 OUTPUT.
SET PF-STATUS 'ZSTATUS'.
SET TITLEBAR 'ZTITLE'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module FETCH_DATA OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE FETCH_DATA OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
SELECT EBELN LIFNR EKORG EKGRP BUKRS WAERS ZTERM ZDESC FROM ZEKKO_03
INTO CORRESPONDING FIELDS OF TABLE GT_ZEKKO
WHERE EBELN = GWA_ZEKKO-EBELN.
SELECT SINGLE EBELN LIFNR EKORG EKGRP BUKRS WAERS ZTERM ZDESC FROM ZEKKO_03
INTO CORRESPONDING FIELDS OF GWA_ZEKKO
WHERE EBELN = GWA_ZEKKO-EBELN.
READ TABLE GT_ZEKKO INTO GWA_ZEKKO INDEX SY-TABIX.
SELECT EBELP MATNR WERKS LGORT MENGE MEINS
INTO CORRESPONDING FIELDS OF TABLE GT_ZEKPO FROM ZEKPO_03
WHERE EBELN = GWA_ZEKKO-EBELN.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SWITCH OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE SWITCH OUTPUT.
CASE OK_CODE.
WHEN 'SWITCH'.
IF
GV_EDIT = ' '.
GV_ACTION = 0.
GV_EDIT = 'X'.
ELSE.
GV_ACTION = 1.
GV_EDIT = ' '.
ENDIF.
LOOP AT SCREEN.
"""header
IF SCREEN-NAME = 'GWA_ZEKKO-EKGRP'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-EKORG'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-BUKRS'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-LIFNR'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-WAERS'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-ZTERM'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'GWA_ZEKKO-ZDESC'.
SCREEN-INPUT = GV_ACTION.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'SWITCH'.
IF GV_EDIT = ' '.
SCREEN-INVISIBLE = 1.
ENDIF.
IF GV_EDIT = 'X'.
SCREEN-INVISIBLE = 0.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
LOOP AT SCREEN.
"""line item
IF ( SCREEN-GROUP1 = 'GRP' ).
SCREEN-INPUT = GV_ACTION.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_9002 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_9002 OUTPUT.
SET PF-STATUS 'ZSTATUS'.
SET TITLEBAR 'ZTITLE1'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module MODIFY_IT_ZEKPO INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE MODIFY_GT_ZEKPO INPUT.
MODIFY GT_ZEKPO FROM GWA_ZEKPO
INDEX TC_ZEKPO-CURRENT_LINE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Include MZDLGPROG_03_REPORTI01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9002 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9002 INPUT.
SET PF-STATUS 'ZSTATUS' .
SET TITLEBAR 'ZTITLE1'.
CASE OK_CODE.
WHEN 'BACK'.
SET SCREEN 0.
LEAVE TO SCREEN 0.
WHEN 'DEL'.
GET CURSOR LINE GV_TABIX.
F1 = 1.
PERFORM FETCH_DATA.
IF F1 = 1.
DELETE ZEKKO_03 FROM TABLE GT_ZEKKO.
DELETE FROM ZEKPO_03 WHERE EBELN = GWA_ZEKKO-EBELN.
COMMIT WORK.
ENDIF.
WHEN 'SVE'.
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
* EXPORTING
* INPUT = gwa_zekko-ebeln
* IMPORTING
* OUTPUT = gwa_zekko-ebeln .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = GWA_ZEKKO-EBELN
IMPORTING
OUTPUT = GWA_ZEKKO-EBELN.
IF GV_EDIT EQ 'X' .
IF SY-SUBRC = 0.
MODIFY ZEKKO_03 FROM TABLE GT_ZEKKO.
COMMIT WORK.
ENDIF.
ENDIF.
ENDCASE.
CLEAR GT_ZEKKO.
CLEAR GT_ZEKPO.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9001 INPUT.
CASE OK_CODE.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
LEAVE PROGRAM.
WHEN 'DELETE' OR 'DISPLAY'.
IF GWA_ZEKKO-EBELN IS INITIAL .
MESSAGE 'Please enter document number' TYPE 'E'.
ELSE.
PERFORM FETCH_DATA.
CALL SCREEN 9002.
ENDIF.
WHEN 'EDIT' .
CALL SCREEN 9002.
WHEN 'CREATE'.
CALL SCREEN 9002.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FETCH_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FETCH_DATA .
IF F1 NE 1.
SELECT EBELN LIFNR EKORG EKGRP BUKRS WAERS ZTERM ZDESC FROM ZEKKO_03
INTO CORRESPONDING FIELDS OF TABLE GT_ZEKKO
WHERE EBELN = GWA_ZEKKO-EBELN.
SELECT SINGLE EBELN LIFNR EKORG EKGRP BUKRS WAERS ZTERM ZDESC FROM ZEKKO_03
INTO CORRESPONDING FIELDS OF GWA_ZEKKO
WHERE EBELN = GWA_ZEKKO-EBELN.
READ TABLE GT_ZEKKO INTO GWA_ZEKKO INDEX SY-TABIX.
SELECT EBELP MATNR WERKS LGORT MENGE MEINS
INTO CORRESPONDING FIELDS OF TABLE GT_ZEKPO FROM ZEKPO_03
WHERE EBELN = GWA_ZEKKO-EBELN.
ENDIF.
ENDFORM.<br>
‎2020 May 24 7:07 PM
Dear A.S.
Generally the PO number is 10 Char length width. But in your Z-table it 8 digits only. Kindly confirm that.
However, it shows 45000000 - and sy-subrc as 4. - which means record not found.
Moreover why you check IF sy-subrc = 0. ? Remove that
But if it is a single record modificaiton, they why you need MODIFY ZEKKO_03 FROM TABLE.
It should be MODIFY ZEKKO_03 FROM GWA_ZEKKO.
Please review on these two points.
‎2020 May 25 3:17 AM
Thanks for your highlight, I managed to do the modify
However, sy-subrc still return as 4.
To determine if there is leading 0. theres 0 in front 04000000, thats hw i determine theres leading 0?
I have removed sy-subrc, i added just to debug, before added sy subrc its already showing 4
