FUNCTION ZFM_SD_BILLING_PLAN_CREATE.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(I_VBELN) TYPE VBELN
*" EXPORTING
*" REFERENCE(E_CODE) TYPE CHAR1
*" REFERENCE(E_MSG) TYPE STRING
*" TABLES
*" IT_BILLING_PLAN STRUCTURE ZSDS_BILLING_PLAN
*" ET_RETURN STRUCTURE BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------
CLEAR:BDCDATA,BDCDATA[].
PERFORM BDC_DYNPRO USING 'SAPMV45A' '0102'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'VBAK-VBELN'
I_VBELN.
PERFORM BDC_DYNPRO USING 'SAPMV45A' '4001'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=HEAD'.
PERFORM BDC_DYNPRO USING 'SAPMV45A' '4002'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=T 5'.
PERFORM BDC_DYNPRO USING 'SAPLCNMS' '1300'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/EESC'.
PERFORM BDC_DYNPRO USING 'SAPLV60F' '4001'.
DATA:LV_AFDAT TYPE DYNFNAM,
LV_TETXT TYPE DYNFNAM,
LV_FPROZ TYPE DYNFNAM,
LV_ZTERM TYPE DYNFNAM,
LV_NUMS TYPE P.
LOOP AT IT_BILLING_PLAN.
LV_NUMS = LV_NUMS + 1.
IF LV_NUMS > 2.
PERFORM BDC_DYNPRO USING 'SAPLV60F' '4001'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=ANLE'. " 第三行开始每次都点新增行将数据添加到屏幕第二行
LV_NUMS = 2.
ENDIF.
LV_AFDAT = 'FPLT-AFDAT(' && LV_NUMS && ')'.
LV_TETXT = 'FPLT-TETXT(' && LV_NUMS && ')'.
LV_FPROZ = 'FPLT-FPROZ(' && LV_NUMS && ')'.
LV_ZTERM = 'FPLT-ZTERM(' && LV_NUMS && ')'.
* 开票日期
PERFORM BDC_FIELD USING LV_AFDAT
IT_BILLING_PLAN-AFDAT.
* 日期描述
PERFORM BDC_FIELD USING LV_TETXT
IT_BILLING_PLAN-TETXT.
* 百分比
PERFORM BDC_FIELD USING LV_FPROZ
IT_BILLING_PLAN-FPROZ.
* 付款条件
PERFORM BDC_FIELD USING LV_ZTERM
IT_BILLING_PLAN-ZTERM.
CLEAR:LV_AFDAT,LV_TETXT,LV_ZTERM,LV_FPROZ.
IF LV_NUMS = 2.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=ANLE'. " 第三行开始每次都点新增行将数据添加到屏幕第二行
ENDIF.
ENDLOOP.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_DYNPRO USING 'SAPLV60F' '4001'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=T 1'.
PERFORM BDC_DYNPRO USING 'SAPMV45A' '4002'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=SICH'.
CALL TRANSACTION 'VA42'
USING BDCDATA
UPDATE 'S'
MODE 'P'
MESSAGES INTO GT_MESSTAB.
"提交事务代码
CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
TABLES
IMT_BDCMSGCOLL = GT_MESSTAB
EXT_RETURN = GT_MSG.
APPEND LINES OF GT_MSG TO ET_RETURN.
FREE:GT_MESSTAB,GT_MSG.
DELETE ET_RETURN WHERE TYPE EQ 'S' OR TYPE EQ 'I' OR TYPE EQ 'W'.
IF LINES( GT_MSG[] ) GT 0.
E_CODE = 'E'.
E_MSG = '存在错误信息,请查看详细记录'.
ELSE.
E_CODE = 'S'.
E_MSG = '处理完成!'.
DATA WA_BILLING_APD TYPE ZSDT_BILLING_APD.
SELECT FPLT~FPLNR,FPLT~FPLTR,FPLT~FKDAT
INTO TABLE @DATA(T_FPLT) FROM FPLT
INNER JOIN VBKD ON VBKD~FPLNR = FPLT~FPLNR
WHERE VBKD~VBELN = @I_VBELN AND VBKD~POSNR = '000000'.
IF SY-SUBRC = 0.
LOOP AT T_FPLT ASSIGNING FIELD-SYMBOL(<FS_FPLT>).
CLEAR WA_BILLING_APD.
READ TABLE IT_BILLING_PLAN INDEX SY-TABIX."WITH KEY AFDAT = <FS_FPLT>-FKDAT.
IF SY-SUBRC = 0.
WA_BILLING_APD-FPLNR = <FS_FPLT>-FPLNR.
WA_BILLING_APD-FPLTR = <FS_FPLT>-FPLTR.
WA_BILLING_APD-ZZFKTJ = IT_BILLING_PLAN-ZZFKTJ.
WA_BILLING_APD-ZZJSZQTS = IT_BILLING_PLAN-ZZJSZQTS.
WA_BILLING_APD-ZZSKZQTS = IT_BILLING_PLAN-ZZSKZQTS.
MODIFY ZSDT_BILLING_APD FROM WA_BILLING_APD.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDFUNCTION.
网友评论