*&---------------------------------------------------------------------*
*& Report Z02MMR022
*&
*&---------------------------------------------------------------------*
* Author: Vince
* Closeing Date:
* Description: List of Billing Notification
************************************************************************
* Ver Date Author Modify Des
************************************************************************
* 1. 2013/03/10 Vince New Program
************************************************************************
REPORT YTEST999 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,
BOX_NAME ,
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 SLIS_T_FIELDCAT_ALV,
GS_FCAT TYPE LINE OF SLIS_T_FIELDCAT_ALV,
GT_SORT TYPE SLIS_T_SORTINFO_ALV,
GS_SORT TYPE LINE OF SLIS_T_SORTINFO_ALV,
GS_LAYO TYPE SLIS_LAYOUT_ALV,
GS_SETTINGS TYPE LVC_S_GLAY.
**********************************************************************
* 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.
**********************************************************************
* END OF SELECTION
**********************************************************************
END-OF-SELECTION.
PERFORM FRM_BUILD_FIELDCAT.
PERFORM FRM_SET_LAYOUT.
PERFORM FRM_DISPLAY_ALV.
**********************************************************************
* 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_L = '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_L = &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) '' '' '6'.
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'.
* GS_LAYO-COLWIDTH_OPTIMIZE = 'X'.
GS_LAYO-BOX_FIELDNAME = 'BOX_NAME'.
ENDFORM. " FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY_ALV .
GS_SETTINGS-EDT_CLL_CB = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT = GS_LAYO
IT_FIELDCAT = GT_FCAT
I_GRID_SETTINGS = GS_SETTINGS
I_CALLBACK_PF_STATUS_SET = 'FRM_SET_STATUS'
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND'
I_SAVE = 'A'
I_DEFAULT = 'X'
TABLES
T_OUTTAB = GT_OUT.
ENDFORM. " FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& Form frm_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_UCOMM text
* -->SELFIELD text
*----------------------------------------------------------------------*
FORM FRM_USER_COMMAND USING P_UCOMM TYPE SY-UCOMM SELFIELD TYPE SLIS_SELFIELD.
CASE P_UCOMM.
WHEN '&SALL'.
PERFORM FRM_SELECT_ALL USING 'X'.
SELFIELD-REFRESH = 'X'.
WHEN '&DESAL'.
PERFORM FRM_SELECT_ALL USING ' '.
SELFIELD-REFRESH = 'X'.
WHEN '&PRINT'.
PERFORM FRM_PRINT_BN.
WHEN '&CBN'.
PERFORM FRM_GENERATE_BN.
SELFIELD-REFRESH = 'X'.
ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form FRM_SET_STATUS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_EXTAB text
*----------------------------------------------------------------------*
FORM FRM_SET_STATUS USING P_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STATUS01'.
ENDFORM. "f_status
*&---------------------------------------------------------------------*
*& 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.
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.
MODIFY GT_OUT FROM GS_OUT INDEX SY-TABIX.
ENDLOOP.
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
*& Report Z02MMR022
*&
*&---------------------------------------------------------------------*
* Author: Vince
* Closeing Date:
* Description: List of Billing Notification
************************************************************************
* Ver Date Author Modify Des
************************************************************************
* 1. 2013/03/10 Vince New Program
************************************************************************
REPORT YTEST999 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,
BOX_NAME ,
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 SLIS_T_FIELDCAT_ALV,
GS_FCAT TYPE LINE OF SLIS_T_FIELDCAT_ALV,
GT_SORT TYPE SLIS_T_SORTINFO_ALV,
GS_SORT TYPE LINE OF SLIS_T_SORTINFO_ALV,
GS_LAYO TYPE SLIS_LAYOUT_ALV,
GS_SETTINGS TYPE LVC_S_GLAY.
**********************************************************************
* 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.
**********************************************************************
* END OF SELECTION
**********************************************************************
END-OF-SELECTION.
PERFORM FRM_BUILD_FIELDCAT.
PERFORM FRM_SET_LAYOUT.
PERFORM FRM_DISPLAY_ALV.
**********************************************************************
* 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_L = '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_L = &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) '' '' '6'.
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'.
* GS_LAYO-COLWIDTH_OPTIMIZE = 'X'.
GS_LAYO-BOX_FIELDNAME = 'BOX_NAME'.
ENDFORM. " FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY_ALV .
GS_SETTINGS-EDT_CLL_CB = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT = GS_LAYO
IT_FIELDCAT = GT_FCAT
I_GRID_SETTINGS = GS_SETTINGS
I_CALLBACK_PF_STATUS_SET = 'FRM_SET_STATUS'
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND'
I_SAVE = 'A'
I_DEFAULT = 'X'
TABLES
T_OUTTAB = GT_OUT.
ENDFORM. " FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& Form frm_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_UCOMM text
* -->SELFIELD text
*----------------------------------------------------------------------*
FORM FRM_USER_COMMAND USING P_UCOMM TYPE SY-UCOMM SELFIELD TYPE SLIS_SELFIELD.
CASE P_UCOMM.
WHEN '&SALL'.
PERFORM FRM_SELECT_ALL USING 'X'.
SELFIELD-REFRESH = 'X'.
WHEN '&DESAL'.
PERFORM FRM_SELECT_ALL USING ' '.
SELFIELD-REFRESH = 'X'.
WHEN '&PRINT'.
PERFORM FRM_PRINT_BN.
WHEN '&CBN'.
PERFORM FRM_GENERATE_BN.
SELFIELD-REFRESH = 'X'.
ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form FRM_SET_STATUS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_EXTAB text
*----------------------------------------------------------------------*
FORM FRM_SET_STATUS USING P_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STATUS01'.
ENDFORM. "f_status
*&---------------------------------------------------------------------*
*& 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.
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.
MODIFY GT_OUT FROM GS_OUT INDEX SY-TABIX.
ENDLOOP.
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
本文介绍了一个 SAP ABAP 程序,该程序用于处理合同通知单(BN)的生成和打印任务。通过读取合同详细信息,并收集相关服务订单的数据,程序实现了BN编号的自动分配及更新合同金额的功能。此外,还提供了通过 ALV 选择并打印 BN 的功能。
2078

被折叠的 条评论
为什么被折叠?



