Listing 5.5  Quelltext des Includes LZPTB00_OBJ_BTAI01
*&----------------------------------------------------*
*&  Include           LZPTB00_OBJ_BTAI01              *
*&----------------------------------------------------*

*&SPWIZARD: INPUT MODULE FOR TC 'POSITION_TABLE'. 
*DO NOT CHANGE THIS LINE
*&SPWIZARD: MODIFY TABLE
MODULE POSITION_TABLE_MODIFY INPUT.
  MOVE-CORRESPONDING ZPTB00_BTAITEM TO 
  G_POSITION_TABLE_WA.
  MODIFY G_POSITION_TABLE_ITAB
    FROM G_POSITION_TABLE_WA
    INDEX POSITION_TABLE-CURRENT_LINE.
ENDMODULE.                 "POSITION_TABLE_MODIFY INPUT

*&SPWIZARD: INPUT MODULE FOR TC 'POSITION_TABLE'. 
*DO NOT CHANGE THIS LIN
*&SPWIZARD: MARK TABLE
MODULE POSITION_TABLE_MARK INPUT.
  MODIFY G_POSITION_TABLE_ITAB
    FROM G_POSITION_TABLE_WA
    INDEX POSITION_TABLE-CURRENT_LINE
    TRANSPORTING FLAG.
ENDMODULE.                  "POSITION_TABLE_MARK INPUT

*&SPWIZARD: INPUT MODULE FOR TC 'POSITION_TABLE'. 
*DO NOT CHANGE THIS LIN
*&SPWIZARD: PROCESS USER COMMAND
MODULE POSITION_TABLE_USER_COMMAND INPUT.
  PERFORM USER_OK_TC USING    'POSITION_TABLE'
                              'G_POSITION_TABLE_ITAB'
                              'FLAG'
                     CHANGING OK_CODE.
ENDMODULE.           "POSITION_TABLE_USER_COMMAND INPUT

*&----------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT              *
*&----------------------------------------------------*
*       text                                          *
*-----------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  DATA:
* Popup
    g_answer TYPE c,
* Position checking
    g_index TYPE sy-tabix,
    g_str_item TYPE zptb00_btaitem.
*  save_ok LIKE ok_code.
  FIELD-SYMBOLS:
* Position checking
    <position_str> TYPE T_POSITION_TABLE.

  IF  ok_code = 'BACK' OR ok_code = 'QUIT'.
    CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
      EXPORTING
*         DEFAULTOPTION        = 'Y'
        textline1            = text-003
*         TEXTLINE2            = ' '
        title                = text-001
*         START_COLUMN         = 25
*         START_ROW            = 6
*         CANCEL_DISPLAY       = 'X'
      IMPORTING
        ANSWER               = g_answer .
    IF g_answer = 'N'.
      CLEAR g_str_bta.
      LEAVE TO SCREEN 0.
    ELSEIF g_answer = 'J'.
      ok_code = 'SAVE'.
    ENDIF.
  ENDIF.
  IF ok_code = 'SAVE'.
* check header data
    IF ZPTB00_STR_BTA-BTtype IS INITIAL.
      MESSAGE i006(zptb00_bta) WITH g_index.
      RETURN.
    ENDIF.
    IF ZPTB00_STR_BTA-btdate IS INITIAL.
      MESSAGE i007(zptb00_bta) WITH g_index.
      RETURN.
    ENDIF.
* check position data
    LOOP AT G_POSITION_TABLE_ITAB ASSIGNING 
    <position_str>.
      g_index = sy-tabix.
      IF <position_str>-pr_id IS INITIAL.
        MESSAGE i000(zptb00_bta) WITH g_index.
        RETURN.
      ENDIF.
      IF <position_str>-pstype IS INITIAL.
        MESSAGE i001(zptb00_bta) WITH g_index.
        RETURN.
      ENDIF.
      IF <position_str>-amount IS INITIAL.
        MESSAGE i002(zptb00_bta) WITH g_index.
        RETURN.
      ENDIF.
      IF <position_str>-currency IS INITIAL.
        MESSAGE i003(zptb00_bta) WITH g_index.
        RETURN.
      ENDIF.
      IF <position_str>-quantity IS INITIAL.
        MESSAGE i004(zptb00_bta) WITH g_index.
        RETURN.
      ENDIF.
      IF <position_str>-unit IS INITIAL.
        MESSAGE i005(zptb00_bta) WITH g_index.
        RETURN.
      ENDIF.
* put header data into communication structure 
* g_str_bta
      IF g_str_bta-id IS INITIAL.
        CALL FUNCTION 'GUID_CREATE'
            IMPORTING
*             EV_GUID_16       =
*             EV_GUID_22       =
              ev_guid_32       = g_str_bta-id.
      ENDIF.
      g_str_bta-bp_id = ZPTB00_BTAHEADER-bp_id.
      g_str_bta-bttype = ZPTB00_BTAHEADER-bttype.
      g_str_bta-btdate = ZPTB00_BTAHEADER-btdate.

* put position data into communication structure 
* g_str_bta
      READ TABLE g_str_bta-tab_item INDEX g_index INTO 
      g_str_item.
      IF sy-subrc <> 0.
        CALL FUNCTION 'GUID_CREATE'
            IMPORTING
*             EV_GUID_16       =
*             EV_GUID_22       =
              ev_guid_32       = g_str_item-id.
        g_str_item-HEADER_ID = g_str_bta-id.
        MOVE-CORRESPONDING <position_str> TO 
        g_str_item.
        APPEND g_str_item TO g_str_bta-tab_item.
      ELSE.
        IF g_str_item-id IS INITIAL.
         CALL FUNCTION 'GUID_CREATE'
              IMPORTING
*               EV_GUID_16       =
*               EV_GUID_22       =
                ev_guid_32       = g_str_item-id.
          g_str_item-HEADER_ID = g_str_bta-id.
        ENDIF.
        MOVE-CORRESPONDING <position_str> TO 
        g_str_item.
        MODIFY g_str_bta-tab_item FROM g_str_item INDEX 
        g_index.
      ENDIF.
    ENDLOOP.
    LEAVE TO SCREEN 0.
  ENDIF.
  CLEAR ok_code.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&----------------------------------------------------*
*&      Module  user_exit_0100  INPUT                 *
*&----------------------------------------------------*
*       text                                          *
*-----------------------------------------------------*
MODULE user_exit_0100 INPUT.
* has the user typed in any data? ...
  IF sy-datar = 'X'.
* ... then we have to confirm the cancel process
    CALL FUNCTION 'POPUP_TO_CONFIRM_LOSS_OF_DATA'
      EXPORTING
        textline1           = text-002
*     TEXTLINE2           = ' '
        titel               = text-001
*     START_COLUMN        = 25
*     START_ROW           = 6
*     DEFAULTOPTION       = 'N'
      IMPORTING
        answer              = g_answer .
  ELSE.
* ... otherwise we need no confirmation
    g_answer = 'J'.
  ENDIF.
  IF g_answer = 'J'.
    CLEAR g_str_bta.
    LEAVE TO SCREEN 0.
  ENDIF.

ENDMODULE.                 " user_exit_0100  INPUT