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

Modify in Switch mode in dialog programming

Former Member
0 Likes
17,426

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.
1 ACCEPTED SOLUTION
Read only

venkateswaran_k
Active Contributor
0 Likes
17,266

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

31 REPLIES 31
Read only

MateuszAdamus
Active Contributor
0 Likes
17,266

Hi arnold92

Something like this?

WHEN 'SVE'.
  IF on_off = 0. " edit mode
    MODIFY ZEKKO_03 FROM TABLE GT_ZEKKO.
  ENDIF.
Regards,
Mateusz

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.

Read only

0 Likes
17,266

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?

Read only

0 Likes
17,266

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,
Mateusz
Read only

0 Likes
17,266

Thank you for your suggestion, im trying out

Read only

0 Likes
17,266

Just would like to clarify, gv_excluded_function variable should be gt_excluded_functions?

Read only

0 Likes
17,266

Yes, correct.


Regards,
Mateusz
Read only

0 Likes
17,266

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>
Read only

0 Likes
17,266

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

Read only

0 Likes
17,266

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>
Read only

venkateswaran_k
Active Contributor
0 Likes
17,266

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

Read only

0 Likes
17,266

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.
Read only

venkateswaran_k
Active Contributor
17,266

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

Read only

0 Likes
17,266

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?

Read only

17,266

Yes Sandra,

In the screen above the Table Control - there is a button called INPUT.. (Which he assigned as SWITCH) user-command

Regards,

Venkat

Read only

0 Likes
17,266

the on-off = 1 is display mode instead of edit?

Read only

0 Likes
17,266

I think Yes, Anyways, You can try in both way.. 0 or 1.. Just try in both option. This code should work

Read only

0 Likes
17,266
arnold92 The name "on_off" is horrible, change it to a meaningful name as per Clean ABAP.
Read only

0 Likes
17,266

Hi Sandra, yes will change it

Read only

0 Likes
17,266

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?

Read only

0 Likes
17,266

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.

Read only

0 Likes
17,266

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

Read only

0 Likes
17,266

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

Read only

0 Likes
17,266

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

Read only

0 Likes
17,266

the rest of the screenshots as below

Read only

0 Likes
17,266

When changed,example, zdesc, it didnt update the latest value

Read only

Sandra_Rossi
Active Contributor
0 Likes
17,266

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:

  1. If you are in display mode, the Save button must be disabled
  2. If you switch from display mode to edit mode, the Save button must be enabled
  3. If you switch from edit mode to display mode, make sure that the user did not change the input. If so, display a popup to ask "save", "lose data", "cancel".

(and if the user presses the save button, just save, that's all)

Read only

0 Likes
17,266

Hi Sandra,

Ive incorporated your second point in code above

Read only

venkateswaran_k
Active Contributor
0 Likes
17,267

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

Read only

0 Likes
17,266

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>
Read only

17,266

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.

Read only

0 Likes
17,266

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