销售合同抬头开票计划实现方法

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'
                                '=T5'.

  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'
                                '=T1'.

  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.


关键词: ABAP

网友评论

发表评论