*&---------------------------------------------------------------------*
*& Report Z02MMR022
*&
*&---------------------------------------------------------------------*
* Author: Vince
* Closeing Date:
* Description: List of Billing Notification
************************************************************************
* Ver Date Author Modify Des
************************************************************************
* 1. 2013/03/10 Vince New Program
************************************************************************
REPORT Z02MMR022 MESSAGE-ID ZHR01.
**********************************************************************
* TABLES
**********************************************************************
**********************************************************************
* TYPES
**********************************************************************
TYPES:BEGIN OF TP_HEAD,
EBELN LIKE EKKO-EBELN,"Contract Number
CONTRNAME TYPE STRING,"Contract Description
DEPARTMENT TYPE STRING,"Department
WAERS LIKE EKKO-WAERS,"Currency
KTWRT LIKE EKKO-KTWRT,"Contract Amount
KDATB LIKE EKKO-KDATB,"Contract Start Date
KDATE LIKE EKKO-KDATE,"Contract End Date
LIFNR LIKE EKKO-LIFNR,"vendor
NAME1 TYPE CHAR200,"Vendor name
BAMOUNT LIKE EKKO-KTWRT,"Billing Amount
END OF TP_HEAD.
TYPES:BEGIN OF TP_OUT,
CBOX TYPE AQ_MARKBG,
EBELN LIKE EKPO-EBELN,"Service Order
EBELP LIKE EKPO-EBELP,"Line Item
MATKL TYPE CHAR100,"Service Category
TXZ01 LIKE EKPO-TXZ01,"Short Text
MBLNR LIKE MKPF-MBLNR,"Service Receipt
WRBTR LIKE EKBE-WRBTR,"Amount
BNNUM LIKE Z02MMBNNO-BNNUM,"BN Number
BNDAT LIKE Z02MMBNNO-BNDAT,"BN Date
GJAHR LIKE EKBE-GJAHR,
END OF TP_OUT.
**********************************************************************
* DATA
**********************************************************************
DATA: GS_HEAD TYPE TP_HEAD.
DATA: GT_OUT TYPE TABLE OF TP_OUT,
GS_OUT TYPE TP_OUT.
DATA: GT_PRINT TYPE TABLE OF TP_OUT,
GS_PRINT TYPE TP_OUT.
DATA:GT_FCAT TYPE LVC_T_FCAT,
GS_FCAT TYPE LVC_S_FCAT,
GS_LAYO TYPE LVC_S_LAYO,
GT_SORT TYPE LVC_T_SORT,
GS_SORT TYPE LVC_S_SORT,
GT_EXCLUDE TYPE TABLE OF SY-UCOMM,
GS_EXCLUDE TYPE SY-UCOMM,
G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
G_GRID TYPE REF TO CL_GUI_ALV_GRID,
SCRFNAME TYPE SCRFNAME VALUE 'CC01',
SAVE_OK TYPE OK,
OK_CODE TYPE OK.
**********************************************************************
* CONSTANTS
**********************************************************************
**********************************************************************
* SELECTION SCREEN
**********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK BL01 WITH FRAME TITLE TEXT-001.
PARAMETERS:P_BUKRS LIKE EKKO-BUKRS DEFAULT '1000' OBLIGATORY.
PARAMETERS:P_EBELN LIKE EKKO-EBELN OBLIGATORY.
SELECTION-SCREEN END OF BLOCK BL01.
**********************************************************************
* START OF SELECTION
**********************************************************************
START-OF-SELECTION.
PERFORM FRM_GET_HEAD.
PERFORM FRM_GET_ITEM.
PERFORM FRM_BUILD_FIELDCAT.
PERFORM FRM_SET_LAYOUT.
CALL SCREEN 100.
**********************************************************************
* END OF SELECTION
**********************************************************************
END-OF-SELECTION.
**********************************************************************
* SUBROUTINES
**********************************************************************
*&---------------------------------------------------------------------*
*& Form FRM_GET_HEAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_HEAD .
DATA: LT_READ LIKE TABLE OF TLINE WITH HEADER LINE.
DATA: L_NAME LIKE THEAD-TDNAME.
DATA: L_ADRNR LIKE LFA1-ADRNR,
LS_ADRC LIKE ADRC.
SELECT SINGLE EBELN WAERS KTWRT KDATB KDATE LIFNR
INTO CORRESPONDING FIELDS OF GS_HEAD
FROM EKKO
WHERE EBELN = P_EBELN
AND BUKRS = P_BUKRS
AND BSART = 'CCTR'.
IF SY-SUBRC EQ 0.
L_NAME = P_EBELN.
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = 'K93'
LANGUAGE = SY-LANGU
NAME = L_NAME
OBJECT = 'EKKO'
TABLES
LINES = LT_READ
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
IF SY-SUBRC EQ 0.
LOOP AT LT_READ.
CONCATENATE GS_HEAD-CONTRNAME LT_READ-TDLINE INTO GS_HEAD-CONTRNAME.
ENDLOOP.
ENDIF.
SELECT SINGLE ADRNR INTO L_ADRNR
FROM LFA1
WHERE LIFNR = GS_HEAD-LIFNR.
SELECT SINGLE * INTO LS_ADRC
FROM ADRC
WHERE ADDRNUMBER = L_ADRNR.
CONCATENATE LS_ADRC-NAME1 LS_ADRC-NAME2 INTO GS_HEAD-NAME1.
ELSE.
MESSAGE S000(ZHR01) DISPLAY LIKE 'E'.
STOP.
ENDIF.
ENDFORM. " FRM_GET_HEAD
*&---------------------------------------------------------------------*
*& Form FRM_GET_ITEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_ITEM .
DATA: LT_EKPO TYPE TABLE OF EKPO,
LS_EKPO TYPE EKPO,
LT_EKBE TYPE TABLE OF EKBE,
LS_EKBE TYPE EKBE,
LT_T023T TYPE TABLE OF T023T,
LS_T023T TYPE T023T,
LT_EKKO TYPE TABLE OF EKKO,
LS_EKKO TYPE EKKO,
L_INDEX TYPE SY-INDEX.
CLEAR:LT_EKPO,LT_EKBE,LT_T023T,LT_EKKO,L_INDEX.
SELECT * FROM EKPO INTO TABLE LT_EKPO
WHERE KONNR = GS_HEAD-EBELN.
CHECK LT_EKPO IS NOT INITIAL.
SELECT * FROM EKKO INTO TABLE LT_EKKO
FOR ALL ENTRIES IN LT_EKPO
WHERE EBELN = LT_EKPO-EBELN
AND BSART = 'ZSPO'.
LOOP AT LT_EKPO INTO LS_EKPO.
L_INDEX = SY-TABIX.
READ TABLE LT_EKKO INTO LS_EKKO WITH KEY EBELN = LS_EKPO-EBELN.
IF SY-SUBRC NE 0.
DELETE LT_EKPO INDEX L_INDEX.
ENDIF.
ENDLOOP.
CHECK LT_EKPO IS NOT INITIAL.
SELECT * FROM EKBE INTO TABLE LT_EKBE
FOR ALL ENTRIES IN LT_EKPO
WHERE EBELN = LT_EKPO-EBELN
AND EBELP = LT_EKPO-EBELP
AND VGABE = '1'.
SELECT * FROM T023T INTO TABLE LT_T023T
FOR ALL ENTRIES IN LT_EKPO
WHERE MATKL = LT_EKPO-MATKL.
LOOP AT LT_EKBE INTO LS_EKBE.
GS_OUT-EBELN = LS_EKBE-EBELN.
GS_OUT-EBELP = LS_EKBE-EBELP.
READ TABLE LT_EKPO INTO LS_EKPO WITH KEY EBELN = GS_OUT-EBELN EBELP = GS_OUT-EBELP.
READ TABLE LT_T023T INTO LS_T023T WITH KEY MATKL = LS_EKPO-MATKL.
GS_OUT-MATKL = LS_T023T-WGBEZ60.
GS_OUT-TXZ01 = LS_EKPO-TXZ01.
GS_OUT-MBLNR = LS_EKBE-BELNR.
GS_OUT-WRBTR = LS_EKBE-WRBTR.
IF LS_EKBE-SHKZG EQ 'H'.
GS_OUT-WRBTR = - GS_OUT-WRBTR.
ENDIF.
GS_OUT-GJAHR = LS_EKBE-GJAHR.
SELECT SINGLE BNNUM BNDAT INTO (GS_OUT-BNNUM,GS_OUT-BNDAT)
FROM Z02MMBNNO
WHERE MBLNR = GS_OUT-MBLNR
AND GJAHR = GS_OUT-GJAHR.
IF GS_OUT-BNNUM IS NOT INITIAL.
GS_HEAD-BAMOUNT = GS_HEAD-BAMOUNT + GS_OUT-WRBTR.
ENDIF.
APPEND GS_OUT TO GT_OUT.
CLEAR: GS_OUT,LS_EKPO,LS_T023T.
ENDLOOP.
ENDFORM. " FRM_GET_ITEM
*&---------------------------------------------------------------------*
*& Form FRM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_BUILD_FIELDCAT .
CLEAR GS_FCAT.
GS_FCAT-FIELDNAME = 'CBOX'.
GS_FCAT-SELTEXT = GS_FCAT-COLTEXT = 'Select'.
GS_FCAT-CHECKBOX = 'X'.
GS_FCAT-FIX_COLUMN = 'X'.
GS_FCAT-EDIT = 'X'.
GS_FCAT-OUTPUTLEN = '5'.
APPEND GS_FCAT TO GT_FCAT.
DEFINE APPEND_FCAT.
CLEAR GS_FCAT.
GS_FCAT-FIELDNAME = &1.
GS_FCAT-SELTEXT = GS_FCAT-COLTEXT = &2.
GS_FCAT-NO_OUT = &3.
GS_FCAT-NO_ZERO = &4.
GS_FCAT-OUTPUTLEN = &5.
APPEND GS_FCAT TO GT_FCAT.
END-OF-DEFINITION.
APPEND_FCAT 'EBELN' 'Service Order'(001) '' '' '12'.
APPEND_FCAT 'EBELP' 'Line Item'(002) '' '' '8'.
APPEND_FCAT 'MATKL' 'Service Category'(003) '' '' '50'.
APPEND_FCAT 'TXZ01' 'Short Text'(004) '' '' '30'.
APPEND_FCAT 'MBLNR' 'Service Receipt'(005) '' '' '12'.
APPEND_FCAT 'WRBTR' 'Amount'(006) '' '' '13'.
APPEND_FCAT 'BNNUM' 'BN Number'(007) '' '' '20'.
APPEND_FCAT 'BNDAT' 'BN Date'(008) '' '' '12'.
ENDFORM. " FRM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SET_LAYOUT .
GS_LAYO-ZEBRA = 'X'.
ENDFORM. " FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& Form frm_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_UCOMM text
* -->SELFIELD text
*----------------------------------------------------------------------*
FORM FRM_USER_COMMAND.
SAVE_OK = OK_CODE.
CLEAR OK_CODE.
CASE SAVE_OK.
WHEN '&SALL'.
PERFORM FRM_SELECT_ALL USING 'X'.
WHEN '&DESAL'.
PERFORM FRM_SELECT_ALL USING ' '.
WHEN '&PRINT'.
PERFORM FRM_PRINT_BN.
WHEN '&CBN'.
PERFORM FRM_GENERATE_BN.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form FRM_SELECT_ALL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0737 text
*----------------------------------------------------------------------*
FORM FRM_SELECT_ALL USING VALUE(P_X).
DATA LS_OUT LIKE GS_OUT.
LOOP AT GT_OUT INTO LS_OUT.
LS_OUT-CBOX = P_X.
MODIFY GT_OUT FROM LS_OUT INDEX SY-TABIX.
ENDLOOP.
CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.
ENDFORM. " FRM_SELECT_ALL
*&---------------------------------------------------------------------*
*& Form FRM_GENERATE_BN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GENERATE_BN .
DATA:L_BN(3) TYPE N.
DATA:LS_Z02MMBNNO LIKE Z02MMBNNO.
CLEAR L_BN.
SELECT MAX( BMSNO ) INTO L_BN FROM Z02MMBNNO WHERE EBELN = P_EBELN.
LOOP AT GT_OUT INTO GS_OUT WHERE BNNUM = '' AND CBOX = 'X' .
L_BN = L_BN + 1.
CONCATENATE 'BN' P_EBELN '-' L_BN INTO GS_OUT-BNNUM.
GS_OUT-BNDAT = SY-DATUM.
GS_HEAD-BAMOUNT = GS_HEAD-BAMOUNT + GS_OUT-WRBTR.
CLEAR LS_Z02MMBNNO.
LS_Z02MMBNNO-MBLNR = GS_OUT-MBLNR.
LS_Z02MMBNNO-GJAHR = GS_OUT-GJAHR.
LS_Z02MMBNNO-EBELN = P_EBELN.
LS_Z02MMBNNO-BMSNO = L_BN .
LS_Z02MMBNNO-BNNUM = GS_OUT-BNNUM.
LS_Z02MMBNNO-BNDAT = GS_OUT-BNDAT.
INSERT Z02MMBNNO FROM LS_Z02MMBNNO.
IF SY-SUBRC EQ 0.
COMMIT WORK AND WAIT.
ENDIF.
MODIFY GT_OUT FROM GS_OUT INDEX SY-TABIX.
ENDLOOP.
CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.
ENDFORM. " FRM_GENERATE_BN
*&---------------------------------------------------------------------*
*& Form FRM_PRINT_BN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_PRINT_BN .
DATA: FUNC_MOD_NAME TYPE RS38L_FNAM, " 子程序名
OUTPUT_OPTIONS TYPE SSFCOMPOP, " SAP Smart Forms: 智能写作器 (传输) 选项
IT_JOB_OUTPUT_INFO TYPE SSFCRESCL,
CONTROL_PARAMETERS TYPE SSFCTRLOP. " Smart Forms: 控制结构
CLEAR GT_PRINT.
LOOP AT GT_OUT INTO GS_OUT WHERE CBOX = 'X' AND BNNUM NE ''.
GS_PRINT = GS_OUT.
APPEND GS_PRINT TO GT_PRINT.
CLEAR: GS_PRINT,GS_OUT.
ENDLOOP.
CHECK GT_PRINT IS NOT INITIAL.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZMM_FORM_06'
IMPORTING
FM_NAME = FUNC_MOD_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
OUTPUT_OPTIONS-TDNEWID = 'X'.
CONTROL_PARAMETERS-NO_CLOSE = SPACE.
* control_parameters-no_open = 'X'.
CONTROL_PARAMETERS-PREVIEW = 'X'.
* control_parameters-no_dialog = 'X'.
CALL FUNCTION FUNC_MOD_NAME
EXPORTING
CONTROL_PARAMETERS = CONTROL_PARAMETERS
OUTPUT_OPTIONS = OUTPUT_OPTIONS
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
ENDIF.
ENDFORM. " FRM_PRINT_BN
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'STATUS01'.
SET TITLEBAR 'TITLE01'.
PERFORM FRM_DISABLE_INPUT.
PERFORM FRM_SCREEN_DISPLAY.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
PERFORM FRM_USER_COMMAND.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_SCREEN_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SCREEN_DISPLAY .
IF G_CUSTOM_CONTAINER IS INITIAL.
CREATE OBJECT G_CUSTOM_CONTAINER
EXPORTING
CONTAINER_NAME = SCRFNAME.
CREATE OBJECT G_GRID
EXPORTING
I_PARENT = G_CUSTOM_CONTAINER.
PERFORM FRM_EXCLUDE_BUTTON.
CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_SAVE = 'U'
I_DEFAULT = 'X'
IS_LAYOUT = GS_LAYO
IT_TOOLBAR_EXCLUDING = GT_EXCLUDE
CHANGING
IT_OUTTAB = GT_OUT
IT_FIELDCATALOG = GT_FCAT
* IT_SORT = GT_SORT
* IT_FILTER =
.
CALL METHOD G_GRID->SET_READY_FOR_INPUT
EXPORTING
I_READY_FOR_INPUT = 1.
CALL METHOD G_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.
CALL METHOD G_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.
ELSE.
CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.
ENDIF.
ENDFORM. " FRM_SCREEN_DISPLAY
*&---------------------------------------------------------------------*
*& Form frm_exclude_button
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_EXCLUDE_BUTTON .
DATA LS_EXCLUDE TYPE UI_FUNC.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_LY_NO_DELETE_ROWS.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = '&CHECK'.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = '&LOCAL&UNDO'.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
ENDFORM. " EXCLUDE_BUTTON
*&---------------------------------------------------------------------*
*& Form FRM_DISABLE_INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DISABLE_INPUT .
LOOP AT SCREEN.
IF SCREEN-NAME CS 'GS_HEAD-'.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDFORM. " FRM_DISABLE_INPUT
*& Report Z02MMR022
*&
*&---------------------------------------------------------------------*
* Author: Vince
* Closeing Date:
* Description: List of Billing Notification
************************************************************************
* Ver Date Author Modify Des
************************************************************************
* 1. 2013/03/10 Vince New Program
************************************************************************
REPORT Z02MMR022 MESSAGE-ID ZHR01.
**********************************************************************
* TABLES
**********************************************************************
**********************************************************************
* TYPES
**********************************************************************
TYPES:BEGIN OF TP_HEAD,
EBELN LIKE EKKO-EBELN,"Contract Number
CONTRNAME TYPE STRING,"Contract Description
DEPARTMENT TYPE STRING,"Department
WAERS LIKE EKKO-WAERS,"Currency
KTWRT LIKE EKKO-KTWRT,"Contract Amount
KDATB LIKE EKKO-KDATB,"Contract Start Date
KDATE LIKE EKKO-KDATE,"Contract End Date
LIFNR LIKE EKKO-LIFNR,"vendor
NAME1 TYPE CHAR200,"Vendor name
BAMOUNT LIKE EKKO-KTWRT,"Billing Amount
END OF TP_HEAD.
TYPES:BEGIN OF TP_OUT,
CBOX TYPE AQ_MARKBG,
EBELN LIKE EKPO-EBELN,"Service Order
EBELP LIKE EKPO-EBELP,"Line Item
MATKL TYPE CHAR100,"Service Category
TXZ01 LIKE EKPO-TXZ01,"Short Text
MBLNR LIKE MKPF-MBLNR,"Service Receipt
WRBTR LIKE EKBE-WRBTR,"Amount
BNNUM LIKE Z02MMBNNO-BNNUM,"BN Number
BNDAT LIKE Z02MMBNNO-BNDAT,"BN Date
GJAHR LIKE EKBE-GJAHR,
END OF TP_OUT.
**********************************************************************
* DATA
**********************************************************************
DATA: GS_HEAD TYPE TP_HEAD.
DATA: GT_OUT TYPE TABLE OF TP_OUT,
GS_OUT TYPE TP_OUT.
DATA: GT_PRINT TYPE TABLE OF TP_OUT,
GS_PRINT TYPE TP_OUT.
DATA:GT_FCAT TYPE LVC_T_FCAT,
GS_FCAT TYPE LVC_S_FCAT,
GS_LAYO TYPE LVC_S_LAYO,
GT_SORT TYPE LVC_T_SORT,
GS_SORT TYPE LVC_S_SORT,
GT_EXCLUDE TYPE TABLE OF SY-UCOMM,
GS_EXCLUDE TYPE SY-UCOMM,
G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
G_GRID TYPE REF TO CL_GUI_ALV_GRID,
SCRFNAME TYPE SCRFNAME VALUE 'CC01',
SAVE_OK TYPE OK,
OK_CODE TYPE OK.
**********************************************************************
* CONSTANTS
**********************************************************************
**********************************************************************
* SELECTION SCREEN
**********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK BL01 WITH FRAME TITLE TEXT-001.
PARAMETERS:P_BUKRS LIKE EKKO-BUKRS DEFAULT '1000' OBLIGATORY.
PARAMETERS:P_EBELN LIKE EKKO-EBELN OBLIGATORY.
SELECTION-SCREEN END OF BLOCK BL01.
**********************************************************************
* START OF SELECTION
**********************************************************************
START-OF-SELECTION.
PERFORM FRM_GET_HEAD.
PERFORM FRM_GET_ITEM.
PERFORM FRM_BUILD_FIELDCAT.
PERFORM FRM_SET_LAYOUT.
CALL SCREEN 100.
**********************************************************************
* END OF SELECTION
**********************************************************************
END-OF-SELECTION.
**********************************************************************
* SUBROUTINES
**********************************************************************
*&---------------------------------------------------------------------*
*& Form FRM_GET_HEAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_HEAD .
DATA: LT_READ LIKE TABLE OF TLINE WITH HEADER LINE.
DATA: L_NAME LIKE THEAD-TDNAME.
DATA: L_ADRNR LIKE LFA1-ADRNR,
LS_ADRC LIKE ADRC.
SELECT SINGLE EBELN WAERS KTWRT KDATB KDATE LIFNR
INTO CORRESPONDING FIELDS OF GS_HEAD
FROM EKKO
WHERE EBELN = P_EBELN
AND BUKRS = P_BUKRS
AND BSART = 'CCTR'.
IF SY-SUBRC EQ 0.
L_NAME = P_EBELN.
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = 'K93'
LANGUAGE = SY-LANGU
NAME = L_NAME
OBJECT = 'EKKO'
TABLES
LINES = LT_READ
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
IF SY-SUBRC EQ 0.
LOOP AT LT_READ.
CONCATENATE GS_HEAD-CONTRNAME LT_READ-TDLINE INTO GS_HEAD-CONTRNAME.
ENDLOOP.
ENDIF.
SELECT SINGLE ADRNR INTO L_ADRNR
FROM LFA1
WHERE LIFNR = GS_HEAD-LIFNR.
SELECT SINGLE * INTO LS_ADRC
FROM ADRC
WHERE ADDRNUMBER = L_ADRNR.
CONCATENATE LS_ADRC-NAME1 LS_ADRC-NAME2 INTO GS_HEAD-NAME1.
ELSE.
MESSAGE S000(ZHR01) DISPLAY LIKE 'E'.
STOP.
ENDIF.
ENDFORM. " FRM_GET_HEAD
*&---------------------------------------------------------------------*
*& Form FRM_GET_ITEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_ITEM .
DATA: LT_EKPO TYPE TABLE OF EKPO,
LS_EKPO TYPE EKPO,
LT_EKBE TYPE TABLE OF EKBE,
LS_EKBE TYPE EKBE,
LT_T023T TYPE TABLE OF T023T,
LS_T023T TYPE T023T,
LT_EKKO TYPE TABLE OF EKKO,
LS_EKKO TYPE EKKO,
L_INDEX TYPE SY-INDEX.
CLEAR:LT_EKPO,LT_EKBE,LT_T023T,LT_EKKO,L_INDEX.
SELECT * FROM EKPO INTO TABLE LT_EKPO
WHERE KONNR = GS_HEAD-EBELN.
CHECK LT_EKPO IS NOT INITIAL.
SELECT * FROM EKKO INTO TABLE LT_EKKO
FOR ALL ENTRIES IN LT_EKPO
WHERE EBELN = LT_EKPO-EBELN
AND BSART = 'ZSPO'.
LOOP AT LT_EKPO INTO LS_EKPO.
L_INDEX = SY-TABIX.
READ TABLE LT_EKKO INTO LS_EKKO WITH KEY EBELN = LS_EKPO-EBELN.
IF SY-SUBRC NE 0.
DELETE LT_EKPO INDEX L_INDEX.
ENDIF.
ENDLOOP.
CHECK LT_EKPO IS NOT INITIAL.
SELECT * FROM EKBE INTO TABLE LT_EKBE
FOR ALL ENTRIES IN LT_EKPO
WHERE EBELN = LT_EKPO-EBELN
AND EBELP = LT_EKPO-EBELP
AND VGABE = '1'.
SELECT * FROM T023T INTO TABLE LT_T023T
FOR ALL ENTRIES IN LT_EKPO
WHERE MATKL = LT_EKPO-MATKL.
LOOP AT LT_EKBE INTO LS_EKBE.
GS_OUT-EBELN = LS_EKBE-EBELN.
GS_OUT-EBELP = LS_EKBE-EBELP.
READ TABLE LT_EKPO INTO LS_EKPO WITH KEY EBELN = GS_OUT-EBELN EBELP = GS_OUT-EBELP.
READ TABLE LT_T023T INTO LS_T023T WITH KEY MATKL = LS_EKPO-MATKL.
GS_OUT-MATKL = LS_T023T-WGBEZ60.
GS_OUT-TXZ01 = LS_EKPO-TXZ01.
GS_OUT-MBLNR = LS_EKBE-BELNR.
GS_OUT-WRBTR = LS_EKBE-WRBTR.
IF LS_EKBE-SHKZG EQ 'H'.
GS_OUT-WRBTR = - GS_OUT-WRBTR.
ENDIF.
GS_OUT-GJAHR = LS_EKBE-GJAHR.
SELECT SINGLE BNNUM BNDAT INTO (GS_OUT-BNNUM,GS_OUT-BNDAT)
FROM Z02MMBNNO
WHERE MBLNR = GS_OUT-MBLNR
AND GJAHR = GS_OUT-GJAHR.
IF GS_OUT-BNNUM IS NOT INITIAL.
GS_HEAD-BAMOUNT = GS_HEAD-BAMOUNT + GS_OUT-WRBTR.
ENDIF.
APPEND GS_OUT TO GT_OUT.
CLEAR: GS_OUT,LS_EKPO,LS_T023T.
ENDLOOP.
ENDFORM. " FRM_GET_ITEM
*&---------------------------------------------------------------------*
*& Form FRM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_BUILD_FIELDCAT .
CLEAR GS_FCAT.
GS_FCAT-FIELDNAME = 'CBOX'.
GS_FCAT-SELTEXT = GS_FCAT-COLTEXT = 'Select'.
GS_FCAT-CHECKBOX = 'X'.
GS_FCAT-FIX_COLUMN = 'X'.
GS_FCAT-EDIT = 'X'.
GS_FCAT-OUTPUTLEN = '5'.
APPEND GS_FCAT TO GT_FCAT.
DEFINE APPEND_FCAT.
CLEAR GS_FCAT.
GS_FCAT-FIELDNAME = &1.
GS_FCAT-SELTEXT = GS_FCAT-COLTEXT = &2.
GS_FCAT-NO_OUT = &3.
GS_FCAT-NO_ZERO = &4.
GS_FCAT-OUTPUTLEN = &5.
APPEND GS_FCAT TO GT_FCAT.
END-OF-DEFINITION.
APPEND_FCAT 'EBELN' 'Service Order'(001) '' '' '12'.
APPEND_FCAT 'EBELP' 'Line Item'(002) '' '' '8'.
APPEND_FCAT 'MATKL' 'Service Category'(003) '' '' '50'.
APPEND_FCAT 'TXZ01' 'Short Text'(004) '' '' '30'.
APPEND_FCAT 'MBLNR' 'Service Receipt'(005) '' '' '12'.
APPEND_FCAT 'WRBTR' 'Amount'(006) '' '' '13'.
APPEND_FCAT 'BNNUM' 'BN Number'(007) '' '' '20'.
APPEND_FCAT 'BNDAT' 'BN Date'(008) '' '' '12'.
ENDFORM. " FRM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SET_LAYOUT .
GS_LAYO-ZEBRA = 'X'.
ENDFORM. " FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& Form frm_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_UCOMM text
* -->SELFIELD text
*----------------------------------------------------------------------*
FORM FRM_USER_COMMAND.
SAVE_OK = OK_CODE.
CLEAR OK_CODE.
CASE SAVE_OK.
WHEN '&SALL'.
PERFORM FRM_SELECT_ALL USING 'X'.
WHEN '&DESAL'.
PERFORM FRM_SELECT_ALL USING ' '.
WHEN '&PRINT'.
PERFORM FRM_PRINT_BN.
WHEN '&CBN'.
PERFORM FRM_GENERATE_BN.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form FRM_SELECT_ALL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0737 text
*----------------------------------------------------------------------*
FORM FRM_SELECT_ALL USING VALUE(P_X).
DATA LS_OUT LIKE GS_OUT.
LOOP AT GT_OUT INTO LS_OUT.
LS_OUT-CBOX = P_X.
MODIFY GT_OUT FROM LS_OUT INDEX SY-TABIX.
ENDLOOP.
CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.
ENDFORM. " FRM_SELECT_ALL
*&---------------------------------------------------------------------*
*& Form FRM_GENERATE_BN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GENERATE_BN .
DATA:L_BN(3) TYPE N.
DATA:LS_Z02MMBNNO LIKE Z02MMBNNO.
CLEAR L_BN.
SELECT MAX( BMSNO ) INTO L_BN FROM Z02MMBNNO WHERE EBELN = P_EBELN.
LOOP AT GT_OUT INTO GS_OUT WHERE BNNUM = '' AND CBOX = 'X' .
L_BN = L_BN + 1.
CONCATENATE 'BN' P_EBELN '-' L_BN INTO GS_OUT-BNNUM.
GS_OUT-BNDAT = SY-DATUM.
GS_HEAD-BAMOUNT = GS_HEAD-BAMOUNT + GS_OUT-WRBTR.
CLEAR LS_Z02MMBNNO.
LS_Z02MMBNNO-MBLNR = GS_OUT-MBLNR.
LS_Z02MMBNNO-GJAHR = GS_OUT-GJAHR.
LS_Z02MMBNNO-EBELN = P_EBELN.
LS_Z02MMBNNO-BMSNO = L_BN .
LS_Z02MMBNNO-BNNUM = GS_OUT-BNNUM.
LS_Z02MMBNNO-BNDAT = GS_OUT-BNDAT.
INSERT Z02MMBNNO FROM LS_Z02MMBNNO.
IF SY-SUBRC EQ 0.
COMMIT WORK AND WAIT.
ENDIF.
MODIFY GT_OUT FROM GS_OUT INDEX SY-TABIX.
ENDLOOP.
CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.
ENDFORM. " FRM_GENERATE_BN
*&---------------------------------------------------------------------*
*& Form FRM_PRINT_BN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_PRINT_BN .
DATA: FUNC_MOD_NAME TYPE RS38L_FNAM, " 子程序名
OUTPUT_OPTIONS TYPE SSFCOMPOP, " SAP Smart Forms: 智能写作器 (传输) 选项
IT_JOB_OUTPUT_INFO TYPE SSFCRESCL,
CONTROL_PARAMETERS TYPE SSFCTRLOP. " Smart Forms: 控制结构
CLEAR GT_PRINT.
LOOP AT GT_OUT INTO GS_OUT WHERE CBOX = 'X' AND BNNUM NE ''.
GS_PRINT = GS_OUT.
APPEND GS_PRINT TO GT_PRINT.
CLEAR: GS_PRINT,GS_OUT.
ENDLOOP.
CHECK GT_PRINT IS NOT INITIAL.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZMM_FORM_06'
IMPORTING
FM_NAME = FUNC_MOD_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
OUTPUT_OPTIONS-TDNEWID = 'X'.
CONTROL_PARAMETERS-NO_CLOSE = SPACE.
* control_parameters-no_open = 'X'.
CONTROL_PARAMETERS-PREVIEW = 'X'.
* control_parameters-no_dialog = 'X'.
CALL FUNCTION FUNC_MOD_NAME
EXPORTING
CONTROL_PARAMETERS = CONTROL_PARAMETERS
OUTPUT_OPTIONS = OUTPUT_OPTIONS
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
ENDIF.
ENDFORM. " FRM_PRINT_BN
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'STATUS01'.
SET TITLEBAR 'TITLE01'.
PERFORM FRM_DISABLE_INPUT.
PERFORM FRM_SCREEN_DISPLAY.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
PERFORM FRM_USER_COMMAND.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_SCREEN_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SCREEN_DISPLAY .
IF G_CUSTOM_CONTAINER IS INITIAL.
CREATE OBJECT G_CUSTOM_CONTAINER
EXPORTING
CONTAINER_NAME = SCRFNAME.
CREATE OBJECT G_GRID
EXPORTING
I_PARENT = G_CUSTOM_CONTAINER.
PERFORM FRM_EXCLUDE_BUTTON.
CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_SAVE = 'U'
I_DEFAULT = 'X'
IS_LAYOUT = GS_LAYO
IT_TOOLBAR_EXCLUDING = GT_EXCLUDE
CHANGING
IT_OUTTAB = GT_OUT
IT_FIELDCATALOG = GT_FCAT
* IT_SORT = GT_SORT
* IT_FILTER =
.
CALL METHOD G_GRID->SET_READY_FOR_INPUT
EXPORTING
I_READY_FOR_INPUT = 1.
CALL METHOD G_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.
CALL METHOD G_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.
ELSE.
CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.
ENDIF.
ENDFORM. " FRM_SCREEN_DISPLAY
*&---------------------------------------------------------------------*
*& Form frm_exclude_button
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_EXCLUDE_BUTTON .
DATA LS_EXCLUDE TYPE UI_FUNC.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_LY_NO_DELETE_ROWS.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = '&CHECK'.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = '&LOCAL&UNDO'.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
ENDFORM. " EXCLUDE_BUTTON
*&---------------------------------------------------------------------*
*& Form FRM_DISABLE_INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DISABLE_INPUT .
LOOP AT SCREEN.
IF SCREEN-NAME CS 'GS_HEAD-'.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDFORM. " FRM_DISABLE_INPUT