*&---------------------------------------------------------------------*
*& Form ZBAPI
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM ZBAPI .


  DATA HEADERDATA          TYPE BAPI_INCINV_CREATE_HEADER.
  DATA INVOICEDOCNUMBER    LIKE BAPI_INCINV_FLD-INV_DOC_NO.
  DATA FISCALYEAR          LIKE BAPI_INCINV_FLD-FISC_YEAR.
  DATA:ITEMDATA    TYPE STANDARD TABLE OF BAPI_INCINV_CREATE_ITEM,
       LS_ITEMDATA TYPE BAPI_INCINV_CREATE_ITEM.
  DATA:TAXDATA    TYPE STANDARD TABLE OF BAPI_INCINV_CREATE_TAX,
       LS_TAXDATA TYPE BAPI_INCINV_CREATE_TAX.
  DATA RETURN              TYPE STANDARD TABLE OF BAPIRET2.
  DATA:TM_ITEMDATA    TYPE STANDARD TABLE OF BAPI_INCINV_CREATE_TM_ITEM,
       LS_TM_ITEMDATA TYPE BAPI_INCINV_CREATE_TM_ITEM.




  TYPES:BEGIN OF TY_ZDZD_SATNR,
          ZDZD  TYPE ZTMM_CGDZ-ZDZD,
          SATNR TYPE ZTMM_CGDZ-SATNR,
        END OF TY_ZDZD_SATNR.
  DATA:LT_ZDZD_SATNR      TYPE TABLE OF TY_ZDZD_SATNR,
       LS_ZDZD_SATNR      TYPE TY_ZDZD_SATNR,
       LT_ZDZD_SATNR1     TYPE TABLE OF TY_ZDZD_SATNR,
       LT_ZDZD_SATNR2     TYPE TABLE OF TY_ZDZD_SATNR,
       LT_ZDZD_SATNR_TEMP TYPE TABLE OF TY_ZDZD_SATNR.

  DATA:LT_OUTPUT        TYPE TABLE OF TY_OUTPUT.
  DATA:LT_OUTPUT1      TYPE TABLE OF TY_OUTPUT, "没有补款扣款的放在这里
       LT_OUTPUT1_TEMP TYPE TABLE OF TY_OUTPUT, "没有补款扣款的放在这里
       LT_OUTPUT2      TYPE TABLE OF TY_OUTPUT, "否则放在这里
       LT_OUTPUT2_TEMP TYPE TABLE OF TY_OUTPUT, "否则放在这里
       LT_OUTPUT2_LOOP TYPE TABLE OF TY_OUTPUT. "否则放在这里
  DATA:LS_OUTPUT1 TYPE TY_OUTPUT,
       LS_OUTPUT2 TYPE TY_OUTPUT.

  DATA:LT_ZTMM_CGDZ TYPE TABLE OF ZTMM_CGDZ,
       LS_ZTMM_CGDZ LIKE LINE OF LT_ZTMM_CGDZ.

  DATA:L_TABIX TYPE SY-TABIX,
       L_ROWS  TYPE I.
  DATA:L_ZDZJE     TYPE ZZEZDZJE."对账金额
  DATA:L_POSNR     TYPE BAPI_INCINV_CREATE_TM_ITEM-INVOICE_DOC_ITEM.
  DATA:L_CREATE    TYPE C."是否创建
  DATA:L_ZBKJE TYPE ZTMM_CGDZ-ZBKJE, "补款金额
       L_ZZKJE TYPE ZTMM_CGDZ-ZZKJE. "折扣金额
  DATA:L_ZITM     TYPE ZTMM_CGDZ-ZITM.





  CLEAR:HEADERDATA,
        INVOICEDOCNUMBER,
        FISCALYEAR,
        ITEMDATA,
        LS_ITEMDATA,
        TAXDATA,
        LS_TAXDATA,
        RETURN,
        TM_ITEMDATA,
        LS_TM_ITEMDATA,
        LT_OUTPUT,
        LT_OUTPUT1,
        LT_OUTPUT1_TEMP,
        LT_OUTPUT2,
        LT_OUTPUT2_TEMP,
        LT_ZTMM_CGDZ.


*****************有折扣金额和折扣金额的放在一堆(1),没有的放在另一丟(2);接着(1)的按对账单号+款号生成预制发票,(2)是按对账单号生成预制发票
*****************       ADD BY HANDLH 20180628


  LOOP AT GT_OUTPUT ASSIGNING FIELD-SYMBOL(<FW_GS_OUTPUT>) WHERE CHECKBOX EQ 'X'.
    MOVE-CORRESPONDING <FW_GS_OUTPUT> TO LS_ZDZD_SATNR.
    SELECT SINGLE *
      INTO LS_ZTMM_CGDZ
      FROM ZTMM_CGDZ
     WHERE   ZDZD  EQ LS_ZDZD_SATNR-ZDZD
       AND   SATNR EQ LS_ZDZD_SATNR-SATNR
       AND ( ZBKJE NE 0 OR ZZKJE NE 0 OR ZJPF NE 0 OR ZTHFXYF NE 0 OR ZCWRJE NE 0 OR ZCLWTJE NE 0 OR ZQTKK NE 0 ).
    IF SY-SUBRC NE 0.
      APPEND LS_ZDZD_SATNR TO LT_ZDZD_SATNR1."没有补款扣款的 生成一张
    ELSE.
      APPEND LS_ZDZD_SATNR TO LT_ZDZD_SATNR2."有补款扣款的
    ENDIF.
  ENDLOOP.


  SORT LT_ZDZD_SATNR1.
  DELETE ADJACENT DUPLICATES FROM LT_ZDZD_SATNR1.

  SORT LT_ZDZD_SATNR2.
  DELETE ADJACENT DUPLICATES FROM LT_ZDZD_SATNR2.

  LOOP AT LT_ZDZD_SATNR1 INTO LS_ZDZD_SATNR.
    LOOP AT GT_OUTPUT INTO GS_OUTPUT WHERE ZDZD  EQ LS_ZDZD_SATNR-ZDZD AND SATNR EQ LS_ZDZD_SATNR-SATNR.
      APPEND GS_OUTPUT TO LT_OUTPUT1.
      APPEND GS_OUTPUT TO LT_OUTPUT1_TEMP.
    ENDLOOP.
  ENDLOOP.


  "(1)没有补款/折扣 的过账规则
  LOOP AT LT_OUTPUT1 ASSIGNING FIELD-SYMBOL(<FW_OUTPUT1>).
    AT NEW ZDZD.
      MOVE 0 TO L_ROWS.
      PERFORM GET_HEAD1 TABLES TAXDATA USING <FW_OUTPUT1> CHANGING HEADERDATA .
    ENDAT.

    ADD 1 TO L_ROWS.
    PERFORM GET_ITEM TABLES TAXDATA ITEMDATA USING <FW_OUTPUT1> HEADERDATA L_ROWS.

    "300张对账单生成一张发票
    IF L_ROWS EQ 300.
      MOVE 'X' TO L_CREATE.
      PERFORM CREATE_MBLNR  TABLES   TAXDATA  ITEMDATA  RETURN               USING   HEADERDATA CHANGING INVOICEDOCNUMBER FISCALYEAR.
      PERFORM FILL_MESSAGE1 TABLES   RETURN   LT_ZTMM_CGDZ  LT_OUTPUT1_TEMP  USING   <FW_OUTPUT1>-ZDZD  INVOICEDOCNUMBER  FISCALYEAR.

      CLEAR:HEADERDATA,
            INVOICEDOCNUMBER,
            FISCALYEAR,
            ITEMDATA,
            LS_ITEMDATA,
            TAXDATA,
            LS_TAXDATA,
            RETURN,
            TM_ITEMDATA,
            LS_TM_ITEMDATA,
            L_ROWS
            .
    ENDIF.

    "或者是最后一行生成一张发票
    AT END OF ZDZD.
      CLEAR:L_CREATE.
      IF L_CREATE NE 'X'.
        PERFORM CREATE_MBLNR  TABLES   TAXDATA  ITEMDATA      RETURN           USING  HEADERDATA CHANGING INVOICEDOCNUMBER FISCALYEAR.
        PERFORM FILL_MESSAGE1 TABLES   RETURN   LT_ZTMM_CGDZ  LT_OUTPUT1_TEMP  USING  <FW_OUTPUT1>-ZDZD   INVOICEDOCNUMBER FISCALYEAR.
        CLEAR:L_CREATE.
        CLEAR:HEADERDATA,
              INVOICEDOCNUMBER,
              FISCALYEAR,
              ITEMDATA,
              LS_ITEMDATA,
              TAXDATA,
              LS_TAXDATA,
              RETURN,
              TM_ITEMDATA,
              LS_TM_ITEMDATA,
              L_ROWS
              .
      ENDIF.
    ENDAT.
  ENDLOOP.

  LOOP AT LT_OUTPUT1_TEMP INTO LS_OUTPUT1.
    READ TABLE GT_OUTPUT INTO GS_OUTPUT WITH KEY ZDZD = LS_OUTPUT1-ZDZD ZITM = LS_OUTPUT1-ZITM.
    IF SY-SUBRC EQ 0.
      MOVE '2'                TO LS_OUTPUT1-ZFPZT."预制发票创建日期
      MOVE SY-DATUM           TO LS_OUTPUT1-ZFPRQ."发票状态
      MODIFY GT_OUTPUT FROM LS_OUTPUT1 INDEX SY-TABIX.
    ENDIF.
  ENDLOOP.

  SORT LT_ZDZD_SATNR2.
  DELETE ADJACENT DUPLICATES FROM LT_ZDZD_SATNR2.

  LOOP AT LT_ZDZD_SATNR2 INTO LS_ZDZD_SATNR.

    CLEAR:LT_OUTPUT2,
          LT_OUTPUT2_TEMP.
    LOOP AT GT_OUTPUT INTO GS_OUTPUT WHERE ZDZD  EQ LS_ZDZD_SATNR-ZDZD AND SATNR EQ LS_ZDZD_SATNR-SATNR.
      APPEND GS_OUTPUT TO LT_OUTPUT2.
      APPEND GS_OUTPUT TO LT_OUTPUT2_TEMP.
      MOVE-CORRESPONDING GS_OUTPUT TO LS_ZDZD_SATNR.
    ENDLOOP.


    "(2)有补款/扣款 的过账规则
    CLEAR:LT_OUTPUT2_LOOP.
    CLEAR:HEADERDATA,
          INVOICEDOCNUMBER,
          FISCALYEAR,
          ITEMDATA,
          LS_ITEMDATA,
          TAXDATA,
          LS_TAXDATA,
          RETURN,
          TM_ITEMDATA,
          LS_TM_ITEMDATA,
          L_ROWS,
          LT_OUTPUT2_LOOP .
    LOOP AT LT_OUTPUT2 ASSIGNING FIELD-SYMBOL(<FW_OUTPUT2>) WHERE ZDZD EQ LS_ZDZD_SATNR-ZDZD AND SATNR EQ LS_ZDZD_SATNR-SATNR.
      APPEND <FW_OUTPUT2> TO LT_OUTPUT2_LOOP.
    ENDLOOP.

    "对账单 + 款号生成预制发票
    LOOP AT LT_OUTPUT2_LOOP ASSIGNING FIELD-SYMBOL(<FW_OUTPUT2_LOOP>).
      AT FIRST.
        MOVE 0 TO L_ROWS.
        PERFORM GET_HEAD2 TABLES TAXDATA CHANGING <FW_OUTPUT2_LOOP> HEADERDATA.
      ENDAT.

      ADD 1 TO L_ROWS.
      PERFORM GET_ITEM TABLES TAXDATA ITEMDATA USING <FW_OUTPUT2_LOOP> HEADERDATA L_ROWS.

      "300张对账单生成一张发票
      IF L_ROWS EQ 300.
        MOVE 'X' TO L_CREATE.
        PERFORM CREATE_MBLNR  TABLES   TAXDATA  ITEMDATA  RETURN
                              USING    HEADERDATA
                              CHANGING INVOICEDOCNUMBER FISCALYEAR.
        PERFORM FILL_MESSAGE2 TABLES   RETURN  LT_ZTMM_CGDZ  LT_OUTPUT2_TEMP
                              USING    <FW_OUTPUT2_LOOP>-ZDZD  <FW_OUTPUT2_LOOP>-SATNR  INVOICEDOCNUMBER  FISCALYEAR.

        CLEAR:HEADERDATA,
              INVOICEDOCNUMBER,
              FISCALYEAR,
              ITEMDATA,
              LS_ITEMDATA,
              TAXDATA,
              LS_TAXDATA,
              RETURN,
              TM_ITEMDATA,
              LS_TM_ITEMDATA,
              L_ROWS
              .
      ENDIF.


      "或者是最后一行生成一张发票
      AT END OF SATNR.
        CLEAR:L_CREATE.
        IF L_CREATE NE 'X'.
          PERFORM CREATE_MBLNR  TABLES   TAXDATA  ITEMDATA  RETURN
                                USING    HEADERDATA
                                CHANGING INVOICEDOCNUMBER FISCALYEAR.
          PERFORM FILL_MESSAGE2 TABLES   RETURN  LT_ZTMM_CGDZ  LT_OUTPUT2_TEMP
                                USING    <FW_OUTPUT2_LOOP>-ZDZD <FW_OUTPUT2_LOOP>-SATNR INVOICEDOCNUMBER FISCALYEAR.
          CLEAR:L_CREATE.
          CLEAR:HEADERDATA,
                INVOICEDOCNUMBER,
                FISCALYEAR,
                ITEMDATA,
                LS_ITEMDATA,
                TAXDATA,
                LS_TAXDATA,
                RETURN,
                TM_ITEMDATA,
                LS_TM_ITEMDATA,
                L_ROWS
                .
        ENDIF.
      ENDAT.
    ENDLOOP.
*      ENDLOOP.

    LOOP AT LT_OUTPUT2_TEMP INTO LS_OUTPUT2.
*        MODIFY TABLE GT_OUTPUT FROM LS_OUTPUT2 ."WHERE ZDZD EQ LS_OUTPUT2-ZDZD AND ZITM EQ LS_OUTPUT2-ZITM..
      LOOP AT GT_OUTPUT INTO GS_OUTPUT WHERE ZDZD = LS_ZDZD_SATNR-ZDZD AND SATNR = LS_ZDZD_SATNR-SATNR.


        MOVE LS_OUTPUT2-MESSAGE TO GS_OUTPUT-MESSAGE."消息
        MOVE LS_OUTPUT2-STATUS  TO GS_OUTPUT-STATUS."状态灯
        MOVE LS_OUTPUT2-BELNR   TO GS_OUTPUT-BELNR."发票凭证的凭证编号
        MOVE LS_OUTPUT2-GJAHR   TO GS_OUTPUT-GJAHR."财年
        MOVE '2'                TO GS_OUTPUT-ZFPZT."预制发票创建日期
        MOVE SY-DATUM           TO GS_OUTPUT-ZFPRQ."发票状态
        MODIFY GT_OUTPUT FROM GS_OUTPUT.
      ENDLOOP.
    ENDLOOP.
  ENDLOOP.


  "更新自建表
  IF LT_ZTMM_CGDZ IS NOT INITIAL.
    MODIFY ZTMM_CGDZ FROM TABLE LT_ZTMM_CGDZ.
  ENDIF.

  "刷新ALV
  PERFORM REFRESH_ALV.

ENDFORM.

 

*&---------------------------------------------------------------------*
*& Form CREATE_MBLNR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> HEADERDATA
*&      --> TAXDATA
*&      --> RETURN
*&      <-- INVOICEDOCNUMBER
*&      <-- FISCALYEAR
*&---------------------------------------------------------------------*
FORM CREATE_MBLNR TABLES    TAXDATA     STRUCTURE BAPI_INCINV_CREATE_TAX
                            ITEMDATA    STRUCTURE BAPI_INCINV_CREATE_ITEM
                            RETURN      STRUCTURE BAPIRET2
                   USING    HEADERDATA
                   CHANGING INVOICEDOCNUMBER
                            FISCALYEAR.


  CALL FUNCTION 'BAPI_INCOMINGINVOICE_PARK'
    EXPORTING
      HEADERDATA       = HEADERDATA
*     ADDRESSDATA      = ADDRESSDATA
    IMPORTING
      INVOICEDOCNUMBER = INVOICEDOCNUMBER
      FISCALYEAR       = FISCALYEAR
    TABLES
      ITEMDATA         = ITEMDATA
*     ACCOUNTINGDATA   = ACCOUNTINGDATA
*     GLACCOUNTDATA    = GLACCOUNTDATA
*     MATERIALDATA     = MATERIALDATA
      TAXDATA          = TAXDATA
*     WITHTAXDATA      = WITHTAXDATA
*     VENDORITEMSPLITDATA       = VENDORITEMSPLITDATA
      RETURN           = RETURN
*     EXTENSIONIN      = EXTENSIONIN
*     TM_ITEMDATA      = TM_ITEMDATA
*     NFMETALLITMS     = NFMETALLITMS
*     ASSETDATA        = ASSETDATA
    .

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FILL_MESSAGE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> RETURN
*&---------------------------------------------------------------------*
FORM FILL_MESSAGE1  TABLES   RETURN         STRUCTURE BAPIRET2
                             LT_ZTMM_CGDZ    STRUCTURE ZTMM_CGDZ
                             LT_OUTPUT1_TEMP STRUCTURE GS_OUTPUT
                     USING   P_ZDZD
                             INVOICEDOCNUMBER
                             FISCALYEAR.

  DATA:LV_MSG TYPE STRING.
  DATA:LS_OUTPUT1_TEMP TYPE TY_OUTPUT.

  READ TABLE RETURN ASSIGNING FIELD-SYMBOL(<FW_RETURN>) WITH KEY TYPE = 'E'.
  IF SY-SUBRC EQ 0."error
    ROLLBACK WORK.
    CLEAR:LV_MSG.
    LOOP AT RETURN ASSIGNING <FW_RETURN> WHERE TYPE = 'E'.
      CONCATENATE LV_MSG <FW_RETURN>-MESSAGE ';' INTO LV_MSG.
    ENDLOOP.
    CONCATENATE '创建失败' LV_MSG INTO LV_MSG.
    LOOP AT LT_OUTPUT1_TEMP INTO LS_OUTPUT1_TEMP WHERE ZDZD EQ P_ZDZD.
      MOVE LV_MSG        TO LS_OUTPUT1_TEMP-MESSAGE.
      MOVE GC_LIGHT_R    TO LS_OUTPUT1_TEMP-STATUS.
      MODIFY LT_OUTPUT1_TEMP FROM LS_OUTPUT1_TEMP.
    ENDLOOP.
  ELSE."right
    COMMIT WORK AND WAIT.
    LOOP AT LT_OUTPUT1_TEMP INTO LS_OUTPUT1_TEMP WHERE ZDZD EQ P_ZDZD.
      CONCATENATE  '预制凭证' INVOICEDOCNUMBER '财年' FISCALYEAR '创建成功' INTO LS_OUTPUT1_TEMP-MESSAGE.
      MOVE INVOICEDOCNUMBER TO LS_OUTPUT1_TEMP-BELNR."凭证
      MOVE FISCALYEAR       TO LS_OUTPUT1_TEMP-GJAHR."财年
      MOVE GC_LIGHT_G       TO LS_OUTPUT1_TEMP-STATUS.
      MODIFY LT_OUTPUT1_TEMP FROM LS_OUTPUT1_TEMP.


      "重新取数,因为计算的值不写会自建表
      SELECT SINGLE
        *
        INTO @DATA(LS_ZTMM_CGDZ)
        FROM ZTMM_CGDZ
        WHERE ZDZD EQ @LS_OUTPUT1_TEMP-ZDZD
          AND ZITM EQ @LS_OUTPUT1_TEMP-ZITM.
      MOVE 2 TO LS_ZTMM_CGDZ-ZFPZT .
      MOVE INVOICEDOCNUMBER TO LS_ZTMM_CGDZ-BELNR."凭证
      MOVE FISCALYEAR       TO LS_ZTMM_CGDZ-GJAHR."财年
      MOVE SY-DATUM         TO LS_ZTMM_CGDZ-ZFPRQ ."预制发票创建日期
      MOVE SY-UNAME         TO LS_ZTMM_CGDZ-UPNAM ."最后更改者
      MOVE SY-DATUM         TO LS_ZTMM_CGDZ-UPDAT ."最后更改日期
      MOVE SY-UZEIT         TO LS_ZTMM_CGDZ-UPTIM ."最后更改时间
      APPEND LS_ZTMM_CGDZ   TO LT_ZTMM_CGDZ.       "发票过账状态
    ENDLOOP.
  ENDIF.

ENDFORM.

 

*&---------------------------------------------------------------------*
*& Form GET_HEAD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> <FW_OUTPUT>
*&      <-- HEADERDATA
*&---------------------------------------------------------------------*
FORM GET_HEAD1  TABLES   TAXDATA STRUCTURE BAPI_INCINV_CREATE_TAX
                USING    FW_OUTPUT TYPE TY_OUTPUT
               CHANGING  HEADERDATA TYPE BAPI_INCINV_CREATE_HEADER.


  DATA: LS_TAXDATA TYPE BAPI_INCINV_CREATE_TAX.


  IF FW_OUTPUT-ZYF GT 0.
    HEADERDATA-INVOICE_IND    = 'X'.       "发票
    HEADERDATA-DELIV_POSTING  = 'S'.
    HEADERDATA-RETURN_POSTING = 'H'.
    HEADERDATA-GROSS_AMOUNT   =  FW_OUTPUT-ZYF.
  ELSE.
    HEADERDATA-INVOICE_IND    = ''.        "贷项凭证
    HEADERDATA-DELIV_POSTING  = 'H'.
    HEADERDATA-RETURN_POSTING = 'H'.
    HEADERDATA-GROSS_AMOUNT   =  FW_OUTPUT-ZYF * -1.
  ENDIF.

  HEADERDATA-DOC_DATE       =  SY-DATUM.
  HEADERDATA-PSTNG_DATE     =  SY-DATUM.
  HEADERDATA-BLINE_DATE     =  SY-DATUM.

**  公司代码取值逻辑
  SELECT SINGLE
    BUKRS
    INTO HEADERDATA-COMP_CODE
    FROM T001K
    WHERE BWKEY EQ   FW_OUTPUT-WERKS.

  SELECT SINGLE
    WAERS
    INTO HEADERDATA-CURRENCY
    FROM EKKO
    WHERE EBELN EQ FW_OUTPUT-EBELN.

  HEADERDATA-DEL_COSTS  = 0.

  SELECT SINGLE
    LIFN2
    INTO HEADERDATA-DIFF_INV
    FROM WYT3
    WHERE LIFNR EQ FW_OUTPUT-LIFNR
    AND   PARVW EQ 'RS'.
  HEADERDATA-REF_DOC_NO    = FW_OUTPUT-ZDZD.    "对账单号
  HEADERDATA-HEADER_TXT    = FW_OUTPUT-ZHTBM.   "采购合同号
  HEADERDATA-ITEM_TEXT     = FW_OUTPUT-ZINVOC.  "供应商发票号


  CASE FW_OUTPUT-MWSKZ.
    WHEN 'J0'.
      LS_TAXDATA-TAX_CODE   = 'J0'.
      LS_TAXDATA-TAX_AMOUNT = 0  .
    WHEN 'J1'.
      LS_TAXDATA-TAX_CODE   = 'J1'.
      LS_TAXDATA-TAX_AMOUNT = HEADERDATA-GROSS_AMOUNT   * 17 / 117.
    WHEN 'J2'.
      LS_TAXDATA-TAX_CODE   = 'J2'.
      LS_TAXDATA-TAX_AMOUNT = HEADERDATA-GROSS_AMOUNT   * 16 / 116.
    WHEN 'J3'.
      LS_TAXDATA-TAX_CODE   = 'J3'.
      LS_TAXDATA-TAX_AMOUNT = HEADERDATA-GROSS_AMOUNT   * 11 / 111.
    WHEN 'J4'.
      LS_TAXDATA-TAX_CODE   = 'J4'.
      LS_TAXDATA-TAX_AMOUNT = HEADERDATA-GROSS_AMOUNT   * 10 / 110.
    WHEN 'J5'.
      LS_TAXDATA-TAX_CODE   = 'J5'.
      LS_TAXDATA-TAX_AMOUNT = HEADERDATA-GROSS_AMOUNT   * 6 / 106.
    WHEN 'J6'.
      LS_TAXDATA-TAX_CODE   = 'J6'.
      LS_TAXDATA-TAX_AMOUNT = HEADERDATA-GROSS_AMOUNT   * 5 / 105.
    WHEN 'J7'.
      LS_TAXDATA-TAX_CODE   = 'J6'.
      LS_TAXDATA-TAX_AMOUNT = HEADERDATA-GROSS_AMOUNT   * 3 / 103.
    WHEN OTHERS.
  ENDCASE.
  APPEND LS_TAXDATA   TO TAXDATA.
ENDFORM.

 

*&---------------------------------------------------------------------*
*& Form GET_ITEM
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> TAXDATA
*&      --> <FW_OUTPUT>
*&---------------------------------------------------------------------*
FORM GET_ITEM  TABLES  TAXDATA    STRUCTURE BAPI_INCINV_CREATE_TAX
                        ITEMDATA   STRUCTURE BAPI_INCINV_CREATE_ITEM
               USING    FW_OUTPUT  TYPE TY_OUTPUT
                        HEADERDATA TYPE BAPI_INCINV_CREATE_HEADER
                        P_L_ROWS
                        .
  DATA:LS_ITEMDATA TYPE BAPI_INCINV_CREATE_ITEM.
  DATA:L_ZDZJE     TYPE ZZEZDZJE."对账金额


*   "ITEM
  MOVE    P_L_ROWS                 TO LS_ITEMDATA-INVOICE_DOC_ITEM."行号
  MOVE    FW_OUTPUT-EBELN          TO LS_ITEMDATA-PO_NUMBER.
  MOVE    FW_OUTPUT-EBELP          TO LS_ITEMDATA-PO_ITEM.
  MOVE    FW_OUTPUT-ZDDZSL         TO LS_ITEMDATA-QUANTITY.
  LS_ITEMDATA-QUANTITY = ABS( LS_ITEMDATA-QUANTITY )."add by handlh 20180610 行项目存绝对值
  MOVE    FW_OUTPUT-MWSKZ   TO LS_ITEMDATA-TAX_CODE.
  LS_ITEMDATA-PO_UNIT = |{ FW_OUTPUT-MEINS ALPHA = IN }|.

  CASE FW_OUTPUT-MWSKZ.
    WHEN 'J0'.
      MOVE ABS( FW_OUTPUT-ZDDZJE )             TO LS_ITEMDATA-ITEM_AMOUNT.
    WHEN 'J1'.
      L_ZDZJE = ABS( FW_OUTPUT-ZDDZJE ) * 100 / 117 .
      MOVE L_ZDZJE TO LS_ITEMDATA-ITEM_AMOUNT.
    WHEN 'J2'.
      L_ZDZJE = ABS( FW_OUTPUT-ZDDZJE * 100 / 116 ).
      MOVE L_ZDZJE TO LS_ITEMDATA-ITEM_AMOUNT.
    WHEN 'J3'.
      L_ZDZJE = ABS( FW_OUTPUT-ZDDZJE * 100 / 111 ).
      MOVE L_ZDZJE TO LS_ITEMDATA-ITEM_AMOUNT.
    WHEN 'J4'.
      L_ZDZJE = ABS( FW_OUTPUT-ZDDZJE * 100 / 110 ).
      MOVE L_ZDZJE TO LS_ITEMDATA-ITEM_AMOUNT.
    WHEN 'J5'.
      L_ZDZJE = ABS( FW_OUTPUT-ZDDZJE * 100 / 106 ).
      MOVE L_ZDZJE TO LS_ITEMDATA-ITEM_AMOUNT.
    WHEN 'J6'.
      L_ZDZJE = ABS( FW_OUTPUT-ZDDZJE * 100 / 105 ).
      MOVE L_ZDZJE TO LS_ITEMDATA-ITEM_AMOUNT.
    WHEN 'J7'.
      L_ZDZJE = ABS( FW_OUTPUT-ZDDZJE * 100 / 103 ).
      MOVE L_ZDZJE TO LS_ITEMDATA-ITEM_AMOUNT.
    WHEN OTHERS.
  ENDCASE.

  APPEND  LS_ITEMDATA    TO ITEMDATA.
ENDFORM.

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐