FI-成品未分配差异调整(开发笔记)

xiaoxiao2025-07-24  11

*&---------------------------------------------------------------------**& Report ZFIR094*&---------------------------------------------------------------------**& Author              :  NathanSun*& Create Date         :  2018-10-16*& Program Type        :  Report*& Description         :  成品未分配差异调整*&---------------------------------------------------------------------*REPORT ZFIR094.*&---------------------------------------------------------------------**& 包含               ZFIR092_TOP*&---------------------------------------------------------------------*TABLES:ACDOCA,BKPF,EKKN,VBAP.TYPE-POOLS:SLIS."定义ALV输出所需变量DATAS_LAYOUT    TYPE SLIS_LAYOUT_ALV,      GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.DATAGT_RETURN   LIKE BAPIRET2 OCCURS WITH HEADER LINE.DATAGS_ZTFI94A  TYPE ZTFI94A .DATAU_BUDAT   TYPE BUDAT.DATAN_BUDAT   TYPE BUDAT.TYPESBEGIN OF GTS_DATA,        VBELN_IM      TYPE  MSEG-VBELN_IM,          "交货单        VBELP_IM      TYPE  MSEG-VBELP_IM,          "DN行项目        RBUKRS        TYPE  ACDOCA-RBUKRS,          "公司代码        WERKS         TYPE  ACDOCA-WERKS,           "工厂        PRCTR         TYPE  MSEG-PRCTR,             "利润中心        FISCYEARPER   TYPE  ACDOCA-FISCYEARPER,     "年度期间        KUNNR         TYPE  MSEG-KUNNR,             "客户        VBUND         TYPE  KNA1-VBUND,             "贸易伙伴        MATNR         TYPE  ACDOCA-MATNR,           "成品        MAKTG         TYPE  MAKT-MAKTG,             "成品描述        RACCT         TYPE  ACDOCA-RACCT,           "差异科目        HSL           TYPE  ACDOCA-HSL,             "未分配差异        RHCUR         TYPE  ACDOCA-RHCUR,           "币别        MEINS         TYPE  MSEG-MEINS,             "基本单位        MENGE         TYPE  MSEG-MENGE,             "交货数量        DFNGE         TYPE  MSEG-MENGE,             "当期分配交货数量        LKLMG         TYPE  VBRP-FKLMG,             "累计开票数量        DKLMG         TYPE  VBRP-FKLMG,             "当期开票数量        UKLMG         TYPE  VBRP-FKLMG,             "未开票数量        FCSPC         TYPE  ACDOCA-HSL,             "发出商品金额        FCCCT         TYPE  ACDOCA-RACCT,           "发出商品科目        ZCBJE         TYPE  ACDOCA-HSL,             "成本金额        KONTS         TYPE  T030-KONTS,             "成本科目        BKLAS         TYPE  MBEW-BKLAS,             "评估类        GZDAT         TYPE  VBRK-FKDAT,             "过账日期        CXDAT         TYPE  VBRK-FKDAT,             "冲销日期        DMATNR        TYPE  MSEG-MATNR,             "成品        DWERKS        TYPE  MSEG-WERKS,             "工厂        SHKZG         TYPE  MSEG-SHKZG,             "借贷标识        WEMPF         TYPE  MSEG-WEMPF,             "收货方        FKDAT         TYPE  VBRK-FKDAT,             "出具发票日期        FKLMG         TYPE  VBRP-FKLMG,             "开票数量        VGBEL         TYPE  VBRP-VGBEL,             "交货单        VGPOS         TYPE  VBRP-VGPOS,             "DN行项目        SHKZT         TYPE  VBRP-SHKZG,             "退货项目       END OF GTS_DATA.DATAGT_DATA   TYPE TABLE OF GTS_DATA WITH HEADER LINE.DATAGT_DATA_C TYPE TABLE OF GTS_DATA WITH HEADER LINE.DATAGT_DATA_D TYPE TABLE OF GTS_DATA WITH HEADER LINE.DATAGT_DATA_E TYPE TABLE OF GTS_DATA WITH HEADER LINE.DATAGT_DATA_F TYPE TABLE OF GTS_DATA WITH HEADER LINE.DATAGT_DATA_G TYPE TABLE OF GTS_DATA WITH HEADER LINE.DATAGS_DATA   TYPE GTS_DATA .DATAGT_REVERSAL TYPE TABLE OF BAPIACREV WITH HEADER LINE.DATAGT_ZTFI94B  TYPE TABLE OF ZTFI94B WITH HEADER LINE.SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.PARAMETERSP_BUKRS LIKE ACDOCA-RBUKRS MODIF ID C1 OBLIGATORY ,              "公司代码            P_BUDAT LIKE ACDOCA-BUDAT  MODIF ID C1 OBLIGATORY .              "截止日期SELECTION-SCREEN END OF BLOCK B1.*&SPWIZARD: DECLARATION OF TABLECONTROL 'C_TAB' ITSELFCONTROLSC_TAB TYPE TABLEVIEW USING SCREEN 0100.*&SPWIZARD: LINES OF TABLECONTROL 'C_TAB'DATA:     G_C_TAB_LINES  LIKE SY-LOOPC.DATA:     OK_CODE LIKE SY-UCOMM.*&---------------------------------------------------------------------**& 包含               ZFIR094_PBO*&---------------------------------------------------------------------**&---------------------------------------------------------------------**& Module STATUS_0100 OUTPUT*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*MODULE STATUS_0100 OUTPUT.  SET PF-STATUS '0100'.  SET TITLEBAR '100'.ENDMODULE.*&SPWIZARD: OUTPUT MODULE FOR TC 'C_TAB'. DO NOT CHANGE THIS LINE!*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBARMODULE C_TAB_CHANGE_TC_ATTR OUTPUT.   DESCRIBE TABLE GT_RETURN LINES C_TAB-lines.ENDMODULE.*&SPWIZARD: OUTPUT MODULE FOR TC 'C_TAB'. DO NOT CHANGE THIS LINE!*&SPWIZARD: GET LINES OF TABLECONTROLMODULE C_TAB_GET_LINES OUTPUT.  G_C_TAB_LINES SY-LOOPC.ENDMODULE.*&---------------------------------------------------------------------**& 包含               ZFIR094_PAI*&---------------------------------------------------------------------**&---------------------------------------------------------------------**&      Module  USER_COMMAND_0100  INPUT*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------*MODULE USER_COMMAND_0100 INPUT.ENDMODULE.*&---------------------------------------------------------------------**&      Module  EXIT01  INPUT*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------*MODULE EXIT01 INPUT.  LEAVE TO SCREEN .ENDMODULE.*&SPWIZARD: INPUT MODULE FOR TC 'C_TAB'. DO NOT CHANGE THIS LINE!*&SPWIZARD: PROCESS USER COMMANDMODULE C_TAB_USER_COMMAND INPUT.  OK_CODE SY-UCOMM.   PERFORM USER_OK_TC USING    'C_TAB'                               'GT_RETURN'                               ' '                      CHANGING OK_CODE.  SY-UCOMM OK_CODE.ENDMODULE.*&---------------------------------------------------------------------**& 包含               ZFIR092_FOM*&---------------------------------------------------------------------**&---------------------------------------------------------------------**&      Form  FRM_EXCLUDE_OPTION*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  -->  p1        text*  <--  p2        text*----------------------------------------------------------------------*FORM FRM_EXCLUDE_OPTION .ENDFORM.*&---------------------------------------------------------------------**& Form SCREEN_OUTPUT*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& -->  p1        text*& <--  p2        text*&---------------------------------------------------------------------*FORM SCREEN_OUTPUT .   LOOP AT SCREEN.     CASE SCREEN-GROUP1.       WHEN 'M1'.         SCREEN-INPUT '0'.     ENDCASE.     MODIFY SCREEN.   ENDLOOP.ENDFORM.*&---------------------------------------------------------------------**& Form SCREEN_SETTING*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& -->  p1        text*& <--  p2        text*&---------------------------------------------------------------------*FORM SCREEN_SETTING .  AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'   ID 'BUKRS' FIELD P_BUKRS.   IF SY-SUBRC <> 0.     MESSAGE '您没有公司:'&& P_BUKRS && '  的权限!TYPE 'E' .   ENDIF.   MESSAGE I000(0KWITH TEXT-115 SPACE SPACE SPACE.ENDFORM.*&---------------------------------------------------------------------**& Form FOM_GETDATA*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& -->  p1        text*& <--  p2        text*&---------------------------------------------------------------------*FORM FOM_GETDATA .   FIELD-SYMBOLS <FS> .   DATAG_FIELD(40).   DATAGS_ZTFI94 TYPE ZTFI94.*取所选期间的第一天  U_BUDAT P_BUDAT(6&& '01' .*取所选期间的最后一天   CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'     EXPORTING       I_DATE        P_BUDAT     IMPORTING       E_DATE        P_BUDAT        .*取所选期间次月的第一天  N_BUDAT P_BUDAT + .   CLEAR GT_DATA[] .   SELECT    ACDOCA~RBUKRS     ACDOCA~WERKS     ACDOCA~FISCYEARPER     ACDOCA~MATNR     ACDOCA~RACCT     ACDOCA~HSL     ACDOCA~RHCUR   INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]     FROM ACDOCA     WHERE ACDOCA~RBUKRS  =  P_BUKRS       AND ACDOCA~BUDAT  <=  P_BUDAT       AND ACDOCA~RLDNR   =  '0L'       AND ACDOCA~RRCTY   =   0       AND ACDOCA~RACCT   =  '1405010200'       .   CLEAR GT_DATA_C[] .  GT_DATA_C[] GT_DATA[] .   SORT GT_DATA BY WERKS MATNR RACCT .   DELETE ADJACENT DUPLICATES FROM GT_DATA[] COMPARING WERKS MATNR RACCT.   LOOP AT GT_DATA.     CLEAR GT_DATA-HSL .     LOOP AT GT_DATA_C WHERE WERKS GT_DATA-WERKS                         AND MATNR GT_DATA-MATNR                         AND RACCT GT_DATA-RACCT                         .      GT_DATA-HSL GT_DATA-HSL + GT_DATA_C-HSL .       CLEAR GT_DATA_C .     ENDLOOP.     SELECT SINGLE BKLAS INTO GT_DATA-BKLAS FROM MBEW       WHERE BWKEY GT_DATA-WERKS         AND MATNR GT_DATA-MATNR         .     SELECT SINGLE KONTS INTO GT_DATA-KONTS FROM T030       WHERE KTOPL 'CP11'         AND KTOSL 'GBB'         AND KOMOK 'VAX'         AND BKLAS GT_DATA-BKLAS         .     MODIFY GT_DATA .     CLEAR GT_DATA .   ENDLOOP.   DELETE GT_DATA[] WHERE HSL .   IF GT_DATA[] IS NOT INITIAL .*只取成品     CLEAR GT_DATA_D[].     SELECT      MSEG~VBELN_IM       MSEG~VBELP_IM       MSEG~MEINS       MSEG~MENGE       MSEG~PRCTR       MSEG~SHKZG       MSEG~KUNNR       MSEG~WEMPF       MSEG~MATNR AS DMATNR       MSEG~WERKS AS DWERKS     INTO CORRESPONDING FIELDS OF TABLE GT_DATA_D[]       FROM MSEG       FOR ALL ENTRIES IN GT_DATA[]       WHERE MSEG~MATNR GT_DATA-MATNR         AND MSEG~WERKS GT_DATA-WERKS         AND MSEG~BWART IN '601','602','633','634','643','644' )         AND MSEG~BUDAT_MKPF <= P_BUDAT         .     CLEAR GT_DATA_E[] .    GT_DATA_E[] GT_DATA_D[] .     SORT GT_DATA_D BY VBELN_IM VBELP_IM .     DELETE ADJACENT DUPLICATES FROM GT_DATA_D[] COMPARING VBELN_IM VBELP_IM.     LOOP AT GT_DATA_D.       CLEAR GT_DATA_D-MENGE .       LOOP AT GT_DATA_E WHERE VBELN_IM GT_DATA_D-VBELN_IM                           AND VBELP_IM GT_DATA_D-VBELP_IM                           .         IF GT_DATA_E-SHKZG 'S'.          GT_DATA_E-MENGE GT_DATA_E-MENGE * -.         ENDIF.        GT_DATA_D-MENGE GT_DATA_D-MENGE + GT_DATA_E-MENGE .         CLEAR GT_DATA_E .       ENDLOOP.       IF GT_DATA_D-KUNNR IS INITIAL .        GT_DATA_D-KUNNR GT_DATA_D-WEMPF .       ENDIF.       SELECT SINGLE VBUND INTO GT_DATA_D-VBUND FROM KNA1         WHERE KUNNR GT_DATA_D-KUNNR           .       MODIFY GT_DATA_D .       CLEAR GT_DATA_D .     ENDLOOP.     DELETE GT_DATA_D[] WHERE MENGE .     IF GT_DATA_D[] IS NOT INITIAL.       CLEAR GT_DATA_F[] .       SELECT         VBRK~FKDAT          VBRP~VGBEL          VBRP~VGPOS          VBRP~FKLMG          VBRP~SHKZG AS SHKZT        INTO CORRESPONDING FIELDS OF TABLE GT_DATA_F[]          FROM VBRK          INNER JOIN VBRP ON VBRK~VBELN VBRP~VBELN          FOR ALL ENTRIES IN GT_DATA_D[]          WHERE VBRP~VGBEL  GT_DATA_D-VBELN_IM            AND VBRP~VGPOS  GT_DATA_D-VBELP_IM            AND VBRK~BUCHK  'C'            AND VBRK~FKDAT <= P_BUDAT            .       CLEAR GT_DATA_G[] .      GT_DATA_G[] GT_DATA_F[] .       SORT GT_DATA_F BY VGBEL VGPOS .       DELETE ADJACENT DUPLICATES FROM GT_DATA_F[] COMPARING VGBEL VGPOS.       LOOP AT GT_DATA_F.         CLEAR GT_DATA_F-FKLMG .         CLEAR GT_DATA_F-LKLMG .         CLEAR GT_DATA_F-DKLMG .         LOOP AT GT_DATA_G WHERE VGBEL GT_DATA_F-VGBEL                             AND VGPOS GT_DATA_F-VGPOS                             .           IF GT_DATA_G-SHKZT 'X'.            GT_DATA_G-FKLMG GT_DATA_G-FKLMG * -.           ENDIF.          GT_DATA_F-LKLMG GT_DATA_F-LKLMG + GT_DATA_G-FKLMG .           IF GT_DATA_G-FKDAT >= U_BUDAT.            GT_DATA_F-DKLMG GT_DATA_F-DKLMG + GT_DATA_G-FKLMG .           ENDIF.           CLEAR GT_DATA_G .         ENDLOOP.         MODIFY GT_DATA_F .         CLEAR  GT_DATA_F .       ENDLOOP.     ENDIF.     LOOP AT GT_DATA_D.       READ TABLE GT_DATA WITH KEY MATNR GT_DATA_D-DMATNR WERKS GT_DATA_D-DWERKS .      GT_DATA_D-RBUKRS      GT_DATA-RBUKRS .      GT_DATA_D-WERKS       GT_DATA-WERKS .      GT_DATA_D-FISCYEARPER GT_DATA-FISCYEARPER .      GT_DATA_D-MATNR       GT_DATA-MATNR .      GT_DATA_D-RACCT       GT_DATA-RACCT .      GT_DATA_D-HSL         GT_DATA-HSL .      GT_DATA_D-RHCUR       GT_DATA-RHCUR .      GT_DATA_D-BKLAS       GT_DATA-BKLAS .      GT_DATA_D-KONTS       GT_DATA-KONTS .       READ TABLE GT_DATA_F WITH KEY VGBEL GT_DATA_D-VBELN_IM VGPOS GT_DATA_D-VBELP_IM .      GT_DATA_D-FKDAT       GT_DATA_F-FKDAT .      GT_DATA_D-VGBEL       GT_DATA_F-VGBEL .      GT_DATA_D-VGPOS       GT_DATA_F-VGPOS .      GT_DATA_D-LKLMG       GT_DATA_F-LKLMG .      GT_DATA_D-DKLMG       GT_DATA_F-DKLMG .      GT_DATA_D-SHKZT       GT_DATA_F-SHKZT .       SELECT SINGLE MAKTG INTO GT_DATA_D-MAKTG FROM MAKT         WHERE MATNR GT_DATA_D-MATNR           AND SPRAS 1           .*当期分配交货数量:交货数量 加上 当期开票数量 减去 累计开票数量;      GT_DATA_D-DFNGE GT_DATA_D-MENGE + GT_DATA_D-DKLMG GT_DATA_D-LKLMG .*未开票数量:交货数量 减去 累计开票数量      GT_DATA_D-UKLMG GT_DATA_D-MENGE GT_DATA_D-LKLMG .*发出商品金额:该成品的未分配差异 除以 该成品对应的交货单的交货数量汇总数 乘以 该条目的未开票数量;     IF GT_DATA_D-MENGE * GT_DATA_D-UKLMG <> 0.      GT_DATA_D-FCSPC GT_DATA_D-HSL / GT_DATA_D-MENGE * GT_DATA_D-UKLMG.     ENDIF.*ZTFI94     CLEAR GS_ZTFI94 .     SELECT SINGLE INTO CORRESPONDING FIELDS OF GS_ZTFI94 FROM ZTFI94       WHERE BUKRS P_BUKRS       .       IF GS_ZTFI94-ZSFDQ IS INITIAL.*成本金额:自建表中公司代码的是否当期为空时 该成品的未分配差异 除以 该成品对应的交货单的交货数量汇总数 乘以 该条目的累计开票数量;      GT_DATA_D-ZCBJE GT_DATA_D-HSL / GT_DATA_D-MENGE * GT_DATA_D-LKLMG.       ELSE .*成本金额:自建表中公司代码的是否当期不为空时该成品的未分配差异 除以 该成品对应的交货单的当期分配交货数量汇总数 乘以 该条目的当期开票数量;      GT_DATA_D-ZCBJE GT_DATA_D-HSL / GT_DATA_D-MENGE * GT_DATA_D-DKLMG.       ENDIF.      GT_DATA_D-FCCCT '1406010100'.      GT_DATA_D-GZDAT P_BUDAT.      GT_DATA_D-CXDAT N_BUDAT.*删除发出商品金额、成本金额均等于0的条目       IF GT_DATA_D-FCSPC AND GT_DATA_D-ZCBJE 0.         DELETE GT_DATA_D .       ELSE .         MODIFY GT_DATA_D .       ENDIF.       CLEAR  GT_DATA_D .     ENDLOOP.   ELSE .     MESSAGE 'NO_DATA!'TYPE'S'DISPLAY LIKE 'E'.   ENDIF.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_DISPLAY*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& -->  p1        text*& <--  p2        text*&---------------------------------------------------------------------*FORM FRM_DISPLAY .   CLEAR S_LAYOUT.  S_LAYOUT-ZEBRA 'X'.  S_LAYOUT-COLWIDTH_OPTIMIZE 'X'.*  s_layout-box_fieldname    = 'BOX'.   PERFORM FRM_FILL_FIELD .   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'     EXPORTING      IS_LAYOUT                S_LAYOUT       IT_FIELDCAT              GT_FIELDCAT       I_CALLBACK_PROGRAM       SY-REPID       I_CALLBACK_PF_STATUS_SET 'PF_STATUS_SET'*     i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'      I_CALLBACK_USER_COMMAND  'USER_COMMAND'     TABLES      T_OUTTAB                 GT_DATA_D[].ENDFORM.FORM FRM_FILL_FIELD .   DATA:  WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.   DEFINE FILL_FIELD.    wa_fieldcat-fieldname &1.    wa_fieldcat-seltext_l &2.*    IF wa_fieldcat-fieldname =  'MSLJH' or wa_fieldcat-fieldname =  'WCBJH'.*      wa_fieldcat-EMPHASIZE = 'C600'. "设置字段的颜色*    ENDIF.**    IF wa_fieldcat-fieldname =  'MSLMB' or wa_fieldcat-fieldname =  'WCBMB'.*      wa_fieldcat-EMPHASIZE = 'C710'. "设置字段的颜色*    ENDIF.     IF wa_fieldcat-fieldname 'PLNBEZ' OR wa_fieldcat-fieldname 'MATNR' .      wa_fieldcat-ref_tabname 'MARA'.      wa_fieldcat-ref_fieldname 'MATNR'.     ENDIF.     IF wa_fieldcat-fieldname 'ARKTX' OR wa_fieldcat-fieldname 'WAKTX' .      wa_fieldcat-ref_tabname 'VBAP'.      wa_fieldcat-ref_fieldname 'ARKTX'.     ENDIF.     IF wa_fieldcat-fieldname 'AUFNR' .      wa_fieldcat-ref_tabname 'AUFK'.      wa_fieldcat-ref_fieldname 'AUFNR'.     ENDIF.     APPEND wa_fieldcat TO gt_fieldcat.     CLEAR wa_fieldcat.   END-OF-DEFINITION.  FILL_FIELD :         'RBUKRS'         '公司代码',         'WERKS'          '工厂',         'PRCTR'          '利润中心',         'FISCYEARPER'    '年度期间',         'KUNNR'          '客户',         'VBUND'          '贸易伙伴',         'MATNR'          '成品',         'MAKTG'          '成品描述',         'RACCT'          '差异科目',         'HSL'            '未分配差异',         'RHCUR'          '币别',         'VBELN_IM'       '交货单',         'VBELP_IM'       'DN行项目',         'MEINS'          '基本单位',         'MENGE'          '交货数量',         'DFNGE'          '当期分配交货数量',         'LKLMG'          '累计开票数量',         'DKLMG'          '当期开票数量',         'UKLMG'          '未开票数量',         'FCSPC'          '发出商品金额',         'FCCCT'          '发出商品科目',         'ZCBJE'          '成本金额',         'KONTS'          '成本科目',         'BKLAS'          '评估类',         'GZDAT'          '过账日期',         'CXDAT'          '冲销日期'.ENDFORM.FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.   SET PF-STATUS 'STANDARD_FULLSCREEN'.ENDFORM.FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM                     IS_SELFIELD TYPE SLIS_SELFIELD.   DATAREF TYPE REF TO CL_GUI_ALV_GRID.   DATA LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性   RANGESL_WERKS FOR T001W-WERKS.   RANGESL_MATNR FOR MARA-MATNR.   DATA:L_BUKRS TYPE T001K-BUKRS.  LV_STABLE-ROW '1'.  LV_STABLE-COL '1'.   CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'     IMPORTING      E_GRID REF.   CALL METHOD REF->CHECK_CHANGED_DATA.   CASE I_UCOMM.     WHEN 'POST_T'.       CLEAR GT_RETURN[] .       PERFORM FRM_DATA_POST_TF .       PERFORM FRM_DATA_POST_TC .       LOOP AT GT_RETURN WHERE TYPE 'E'.       ENDLOOP.       IF SY-SUBRC 0.         CALL SCREEN 100 STARTING AT 20 3        ENDING AT 130 20.       ELSE .         MESSAGE '模拟过账成功TYPE 'S' .       ENDIF.     WHEN 'POST'.       IF GT_RETURN[] IS INITIAL.         MESSAGE '请先进行模拟过账!TYPE 'S' DISPLAY LIKE 'W'.       ELSE .         LOOP AT GT_RETURN WHERE TYPE 'E'.         ENDLOOP.         IF SY-SUBRC 0.           MESSAGE '模拟过账时出错!TYPE 'S' DISPLAY LIKE 'E'.         ELSE .           SELECT SINGLE INTO CORRESPONDING FIELDS OF GS_ZTFI94A FROM ZTFI94A           WHERE BUKRS P_BUKRS             AND BUDAT P_BUDAT(6)             .           IF SY-SUBRC 0.             MESSAGE '当前选择的期间已经过账,不能重复执行!' TYPE 'S' DISPLAY LIKE 'E'.           ELSE .             CLEAR GT_RETURN[] .             CLEAR GT_REVERSAL[] .             PERFORM FRM_DATA_POST_F .             PERFORM FRM_DATA_POST_C .             IF GT_REVERSAL[] IS NOT INITIAL.               PERFORM FRM_DATA_POST_REV_C .             ENDIF.             LOOP AT GT_RETURN WHERE TYPE 'E'.             ENDLOOP.             IF SY-SUBRC 0.               CALL SCREEN 100 STARTING AT 20 3              ENDING AT 130 20.             ELSE .               CLEAR GS_ZTFI94A .              GS_ZTFI94A-BUKRS P_BUKRS .              GS_ZTFI94A-BUDAT P_BUDAT .               MODIFY ZTFI94A FROM GS_ZTFI94A .               CLEAR GT_ZTFI94B[].               LOOP AT GT_DATA_D.                 MOVE-CORRESPONDING GT_DATA_D to GT_ZTFI94B .                 APPEND GT_ZTFI94B .                 CLEAR  GT_ZTFI94B .               ENDLOOP.               MODIFY ZTFI94B FROM TABLE GT_ZTFI94B[] .               COMMIT WORK .               MESSAGE '期间过账成功TYPE 'S' .             ENDIF.           ENDIF.         ENDIF.       ENDIF.   ENDCASE.   CALL METHOD REF->REFRESH_TABLE_DISPLAY     EXPORTING      IS_STABLE LV_STABLE.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_DATA_POST_T*&---------------------------------------------------------------------**& text发出商品凭证:*&---------------------------------------------------------------------**& -->  p1        text*& <--  p2        text*&---------------------------------------------------------------------*FORM FRM_DATA_POST_TF .   DATA:    TEMP_MONTH(2),            "输入月份    HEADER_TXT(25),           "取会计年月+固定文本制费及研发费分摊    TEMP_AUT_MSG(30),    LAST_DATA          LIKE SY-DATUM"一个月的最后一天    TEMP_OBJ_KEY       TYPE AWKEY,  "是否生成     HEADER             LIKE BAPIACHE09  OCCURS WITH HEADER LINE,    WA_ACCOUNTGL       LIKE BAPIACGL09  OCCURS WITH HEADER LINE,    LT_ACCOUNTGL       TYPE STANDARD TABLE OF BAPIACGL09,    WA_CURRENCY_AMOUNT LIKE BAPIACCR09  OCCURS WITH HEADER LINE,    LT_CURRENCY_AMOUNT TYPE STANDARD TABLE OF BAPIACCR09,    IT_EXTENSION2      TYPE STANDARD TABLE OF BAPIPAREX WITH HEADER LINE,    LT_RETURN          LIKE BAPIRET2 OCCURS WITH HEADER LINE,    GST_RETURN         LIKE BAPIRET2 OCCURS WITH HEADER LINE,    LS_ZFI002          TYPE ZFI002,    FT_FLAG   ,               "= ‘X'表示分摊过    LV_ANSWER(1),    TEMP_BWTAR_AUFNR   LIKE AFPO-AUFNR.   DATAGS_EXTENSION2  TYPE ZSFI_EXTEN,                              "会计凭证过账增强extension2        LT_EXTENSION2  TYPE TABLE OF BAPIPAREX WITH HEADER LINE.     "返回参数   DATALV_OBJ_TYPE    LIKE BAPIACHE09-OBJ_TYPE,        LV_OBJ_KEY     LIKE BAPIACHE09-OBJ_KEY,        LV_OBJ_SYS     LIKE BAPIACHE09-OBJ_SYS.   DATALV_DMBTR       TYPE BAPIWRBTR,        LV_LINES       TYPE SY-TABIX,        ZCOUNT         TYPE SY-TABIX,        LV_WRBTR       TYPE BSEG-WRBTR,        DO_POST        TYPE CHAR1,        LS_EXTEN       TYPE ZSFI_EXTEN.   DATALS_BKPF        TYPE BKPF,        LS_REVERSAL    TYPE BAPIACREV.   DATAGV_OBJ_TYPE    TYPE BAPIACHE09-OBJ_TYPE,                      "参考过程        GV_OBJ_KEY     TYPE BAPIACHE09-OBJ_KEY,                       "对象键值        GV_OBJ_SYS     TYPE BAPIACHE09-OBJ_SYS.   DATA LV_BELNR_01     TYPE BKPF-BELNR.   DATA LV_WAERS        TYPE T001-WAERS.   CLEAR GST_RETURN[] .*会计凭证抬头数据  HEADER_TXT '未分配差异调整到发出商品'.   CLEAR HEADER.   HEADER-DOC_DATE   P_BUDAT.       "凭证日期   HEADER-PSTNG_DATE P_BUDAT.       "凭证中的过帐日期   HEADER-USERNAME   SY-UNAME.      "用户名   HEADER-DOC_TYPE   'SA'.          "凭证类型   HEADER-COMP_CODE  P_BUKRS.       "公司代码*  HEADER-BUS_ACT    = 'RFBU'.        "业务事务   HEADER-FISC_YEAR  P_BUDAT(4).    "财年   HEADER-FIS_PERIOD P_BUDAT+4(2).  "会计期间   HEADER-HEADER_TXT HEADER_TXT.    "凭证抬头文本   DATA LV_ROWCNT TYPE I.   DATA LV_ZCOUNT TYPE I.   DATA LV_ZCOUNT_01 TYPE I.   DESCRIBE TABLE GT_DATA_D LINES LV_ROWCNT.   CLEAR GST_RETURN .   IF LV_ROWCNT < 499.     LOOP AT GT_DATA_D.*    写入借方       ADD TO LV_LINES.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-FCSPC.                        "金额       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-FCCCT.                             "发出商品科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到发出商品'.                    "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)      WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-UKLMG ) .                     "数量      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-FCSPC  > 0.        GS_EXTENSION2-BSCHL '40'.       ELSE.        GS_EXTENSION2-BSCHL '50'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.*    写入贷方       ADD TO LV_LINES.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-FCSPC * -1.                   "金额       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-RACCT.                             "差异科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到发出商品'.                    "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)      WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-UKLMG ) .                     "数量      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-FCSPC  > 0.        GS_EXTENSION2-BSCHL '50'.       ELSE.        GS_EXTENSION2-BSCHL '40'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.     ENDLOOP.     CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'       EXPORTING        DOCUMENTHEADER HEADER       IMPORTING        OBJ_TYPE       LV_OBJ_TYPE         OBJ_KEY        LV_OBJ_KEY         OBJ_SYS        LV_OBJ_SYS       TABLES        ACCOUNTGL      LT_ACCOUNTGL         "总帐科目项        CURRENCYAMOUNT LT_CURRENCY_AMOUNT   "货币项目        EXTENSION2     LT_EXTENSION2         RETURN         LT_RETURN.           "返回值     CLEAR LT_RETURN.     LOOP AT LT_RETURN .       APPEND LT_RETURN TO GST_RETURN .       CLEAR LT_RETURN .     ENDLOOP.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.     CLEAR:HEADER.     FREE:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_RETURN.   ELSE .    LV_ZCOUNT LV_ROWCNT.     CLEAR :LV_LINES,LV_ZCOUNT_01.     CLEAR ZCOUNT.     LOOP AT GT_DATA_D.      ZCOUNT ZCOUNT + 1.       IF ZCOUNT > 499.         CLEAR:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_EXTENSION2[],LT_RETURN.        LV_LINES 0.        ZCOUNT 1.        LV_ZCOUNT LV_ROWCNT LV_ZCOUNT_01.         CLEAR LV_LINES.       ENDIF.      LV_ZCOUNT_01 LV_ZCOUNT_01 + 1.*    写入借方       ADD TO LV_LINES.       IF LV_ZCOUNT >= 499 AND ZCOUNT 499 OR LV_ZCOUNT < 499 AND LV_ZCOUNT ZCOUNT ) .        DO_POST 'X'.       ENDIF.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-FCSPC.                        "金额       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-FCCCT.                             "发出商品科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到发出商品'.                    "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)      WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-UKLMG ) .                     "数量      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-FCSPC  > 0.        GS_EXTENSION2-BSCHL '40'.       ELSE.        GS_EXTENSION2-BSCHL '50'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.*    写入贷方       ADD TO LV_LINES.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-FCSPC * -1.                   "金额       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-RACCT.                             "差异科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到发出商品'.                    "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)      WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-UKLMG ) .                     "数量      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-FCSPC  > 0.        GS_EXTENSION2-BSCHL '50'.       ELSE.        GS_EXTENSION2-BSCHL '40'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.       IF DO_POST 'X'.         CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'           EXPORTING            DOCUMENTHEADER HEADER           IMPORTING            OBJ_TYPE       LV_OBJ_TYPE             OBJ_KEY        LV_OBJ_KEY             OBJ_SYS        LV_OBJ_SYS           TABLES            ACCOUNTGL      LT_ACCOUNTGL          "总帐科目项            CURRENCYAMOUNT LT_CURRENCY_AMOUNT    "货币项目            EXTENSION2     LT_EXTENSION2             RETURN         LT_RETURN.            "返回值         CLEAR LT_RETURN.         LOOP AT LT_RETURN .           APPEND LT_RETURN TO GST_RETURN .           CLEAR LT_RETURN .         ENDLOOP.         CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.         FREE:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_RETURN.        DO_POST ''.       ENDIF.     ENDLOOP.   ENDIF.   SORT GST_RETURN[] BY MESSAGE .   DELETE ADJACENT DUPLICATES FROM GST_RETURN[] COMPARING MESSAGE.   LOOP AT GST_RETURN.    GST_RETURN-MESSAGE '模拟过账-发出商品凭证: ' && GST_RETURN-MESSAGE .     APPEND GST_RETURN TO GT_RETURN .     CLEAR  GST_RETURN .   ENDLOOP.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_DATA_POST_TC*&---------------------------------------------------------------------**& text成本凭证:*&---------------------------------------------------------------------**& -->  p1        text*& <--  p2        text*&---------------------------------------------------------------------*FORM FRM_DATA_POST_TC .   DATAGS_ZTFI94 TYPE ZTFI94.   DATA:    TEMP_MONTH(2),            "输入月份    HEADER_TXT(25),           "取会计年月+固定文本制费及研发费分摊    TEMP_AUT_MSG(30),    LAST_DATA          LIKE SY-DATUM"一个月的最后一天    TEMP_OBJ_KEY       TYPE AWKEY,  "是否生成     HEADER             LIKE BAPIACHE09  OCCURS WITH HEADER LINE,    WA_ACCOUNTGL       LIKE BAPIACGL09  OCCURS WITH HEADER LINE,    LT_ACCOUNTGL       TYPE STANDARD TABLE OF BAPIACGL09,    WA_CURRENCY_AMOUNT LIKE BAPIACCR09  OCCURS WITH HEADER LINE,    LT_CURRENCY_AMOUNT TYPE STANDARD TABLE OF BAPIACCR09,    IT_EXTENSION2      TYPE STANDARD TABLE OF BAPIPAREX WITH HEADER LINE,    LT_RETURN          LIKE BAPIRET2 OCCURS WITH HEADER LINE,    GST_RETURN         LIKE BAPIRET2 OCCURS WITH HEADER LINE,    LS_ZFI002          TYPE ZFI002,    FT_FLAG   ,               "= ‘X'表示分摊过    LV_ANSWER(1),    TEMP_BWTAR_AUFNR   LIKE AFPO-AUFNR.   DATAGS_EXTENSION2  TYPE ZSFI_EXTEN,                              "会计凭证过账增强extension2        LT_EXTENSION2  TYPE TABLE OF BAPIPAREX WITH HEADER LINE.     "返回参数   DATALV_OBJ_TYPE    LIKE BAPIACHE09-OBJ_TYPE,        LV_OBJ_KEY     LIKE BAPIACHE09-OBJ_KEY,        LV_OBJ_SYS     LIKE BAPIACHE09-OBJ_SYS.   DATALV_DMBTR       TYPE BAPIWRBTR,        LV_LINES       TYPE SY-TABIX,        ZCOUNT         TYPE SY-TABIX,        LV_WRBTR       TYPE BSEG-WRBTR,        DO_POST        TYPE CHAR1,        LS_EXTEN       TYPE ZSFI_EXTEN.   DATALS_BKPF        TYPE BKPF,        LS_REVERSAL    TYPE BAPIACREV.   DATAGV_OBJ_TYPE    TYPE BAPIACHE09-OBJ_TYPE,                      "参考过程        GV_OBJ_KEY     TYPE BAPIACHE09-OBJ_KEY,                       "对象键值        GV_OBJ_SYS     TYPE BAPIACHE09-OBJ_SYS.   DATA LV_BELNR_01     TYPE BKPF-BELNR.   DATA LV_WAERS        TYPE T001-WAERS.   CLEAR GST_RETURN[] .*会计凭证抬头数据  HEADER_TXT '未分配差异调整到主营业务成本'.   CLEAR HEADER.   HEADER-DOC_DATE   P_BUDAT.       "凭证日期   HEADER-PSTNG_DATE P_BUDAT.       "凭证中的过帐日期   HEADER-USERNAME   SY-UNAME.      "用户名   HEADER-DOC_TYPE   'SA'.          "凭证类型   HEADER-COMP_CODE  P_BUKRS.       "公司代码*  HEADER-BUS_ACT    = 'RFBU'.        "业务事务   HEADER-FISC_YEAR  P_BUDAT(4).    "财年   HEADER-FIS_PERIOD P_BUDAT+4(2).  "会计期间   HEADER-HEADER_TXT HEADER_TXT.    "凭证抬头文本   DATA LV_ROWCNT TYPE I.   DATA LV_ZCOUNT TYPE I.   DATA LV_ZCOUNT_01 TYPE I.   DESCRIBE TABLE GT_DATA_D LINES LV_ROWCNT.   CLEAR GST_RETURN .   IF LV_ROWCNT < 499.     LOOP AT GT_DATA_D.*    写入借方       ADD TO LV_LINES.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-ZCBJE.                        "成本金额       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-KONTS.                             "成本科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到主营业务成本'.                "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)*ZTFI94       CLEAR GS_ZTFI94 .       SELECT SINGLE INTO CORRESPONDING FIELDS OF GS_ZTFI94 FROM ZTFI94         WHERE BUKRS P_BUKRS         .       IF GS_ZTFI94-ZSFDQ IS INITIAL.        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-LKLMG ) .                     "数量       ELSE .        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-DKLMG ) .                     "数量       ENDIF.      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-ZCBJE  > 0.        GS_EXTENSION2-BSCHL '40'.       ELSE.        GS_EXTENSION2-BSCHL '50'.        GS_EXTENSION2-XNEGP 'X'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.*    写入贷方       ADD TO LV_LINES.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-ZCBJE * -1.                   "取负数的成本金额,       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-RACCT.                             "差异科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到主营业务成本'.                "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)*ZTFI94       CLEAR GS_ZTFI94 .       SELECT SINGLE INTO CORRESPONDING FIELDS OF GS_ZTFI94 FROM ZTFI94         WHERE BUKRS P_BUKRS         .       IF GS_ZTFI94-ZSFDQ IS INITIAL.        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-LKLMG ) .                     "数量       ELSE .        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-DKLMG ) .                     "数量       ENDIF.      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-ZCBJE  > 0.        GS_EXTENSION2-BSCHL '50'.       ELSE.        GS_EXTENSION2-BSCHL '40'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.     ENDLOOP.     CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'       EXPORTING        DOCUMENTHEADER HEADER       IMPORTING        OBJ_TYPE       LV_OBJ_TYPE         OBJ_KEY        LV_OBJ_KEY         OBJ_SYS        LV_OBJ_SYS       TABLES        ACCOUNTGL      LT_ACCOUNTGL         "总帐科目项        CURRENCYAMOUNT LT_CURRENCY_AMOUNT   "货币项目        EXTENSION2     LT_EXTENSION2         RETURN         LT_RETURN.           "返回值     CLEAR LT_RETURN.     LOOP AT LT_RETURN .       APPEND LT_RETURN TO GST_RETURN .       CLEAR LT_RETURN .     ENDLOOP.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.     CLEAR:HEADER.     FREE:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_RETURN.   ELSE .    LV_ZCOUNT LV_ROWCNT.     CLEAR :LV_LINES,LV_ZCOUNT_01.     CLEAR ZCOUNT.     LOOP AT GT_DATA_D.      ZCOUNT ZCOUNT + 1.       IF ZCOUNT > 499.         CLEAR:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_EXTENSION2[],LT_RETURN.        LV_LINES 0.        ZCOUNT 1.        LV_ZCOUNT LV_ROWCNT LV_ZCOUNT_01.         CLEAR LV_LINES.       ENDIF.      LV_ZCOUNT_01 LV_ZCOUNT_01 + 1.*    写入借方       ADD TO LV_LINES.       IF LV_ZCOUNT >= 499 AND ZCOUNT 499 OR LV_ZCOUNT < 499 AND LV_ZCOUNT ZCOUNT ) .        DO_POST 'X'.       ENDIF.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-ZCBJE.                        "成本金额       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-KONTS.                             "成本科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到主营业务成本'.                "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)*ZTFI94       CLEAR GS_ZTFI94 .       SELECT SINGLE INTO CORRESPONDING FIELDS OF GS_ZTFI94 FROM ZTFI94         WHERE BUKRS P_BUKRS         .       IF GS_ZTFI94-ZSFDQ IS INITIAL.        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-LKLMG ) .                     "数量       ELSE .        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-DKLMG ) .                     "数量       ENDIF.      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-ZCBJE  > 0.        GS_EXTENSION2-BSCHL '40'.       ELSE.        GS_EXTENSION2-BSCHL '50'.        GS_EXTENSION2-XNEGP 'X'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.*    写入贷方       ADD TO LV_LINES.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-ZCBJE * -1.                   "取负数的成本金额,       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-RACCT.                             "差异科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到主营业务成本'.                "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)*ZTFI94       CLEAR GS_ZTFI94 .       SELECT SINGLE INTO CORRESPONDING FIELDS OF GS_ZTFI94 FROM ZTFI94         WHERE BUKRS P_BUKRS         .       IF GS_ZTFI94-ZSFDQ IS INITIAL.        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-LKLMG ) .                     "数量       ELSE .        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-DKLMG ) .                     "数量       ENDIF.      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-ZCBJE  > 0.        GS_EXTENSION2-BSCHL '50'.       ELSE.        GS_EXTENSION2-BSCHL '40'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.       IF DO_POST 'X'.         CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'           EXPORTING            DOCUMENTHEADER HEADER           IMPORTING            OBJ_TYPE       LV_OBJ_TYPE             OBJ_KEY        LV_OBJ_KEY             OBJ_SYS        LV_OBJ_SYS           TABLES            ACCOUNTGL      LT_ACCOUNTGL          "总帐科目项            CURRENCYAMOUNT LT_CURRENCY_AMOUNT    "货币项目            EXTENSION2     LT_EXTENSION2             RETURN         LT_RETURN.            "返回值         CLEAR LT_RETURN.         LOOP AT LT_RETURN .           APPEND LT_RETURN TO GST_RETURN .           CLEAR LT_RETURN .         ENDLOOP.         CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.         FREE:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_RETURN.        DO_POST ''.       ENDIF.     ENDLOOP.   ENDIF.   SORT GST_RETURN[] BY MESSAGE .   DELETE ADJACENT DUPLICATES FROM GST_RETURN[] COMPARING MESSAGE.   LOOP AT GST_RETURN.    GST_RETURN-MESSAGE '模拟过账-成本凭证: ' && GST_RETURN-MESSAGE .     APPEND GST_RETURN TO GT_RETURN .     CLEAR  GST_RETURN .   ENDLOOP.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_DATA_POST_F*&---------------------------------------------------------------------**& text发出商品凭证:*&---------------------------------------------------------------------**& -->  p1        text*& <--  p2        text*&---------------------------------------------------------------------*FORM FRM_DATA_POST_F .   DATA:    TEMP_MONTH(2),            "输入月份    HEADER_TXT(25),           "取会计年月+固定文本制费及研发费分摊    TEMP_AUT_MSG(30),    LAST_DATA          LIKE SY-DATUM"一个月的最后一天    TEMP_OBJ_KEY       TYPE AWKEY,  "是否生成     HEADER             LIKE BAPIACHE09  OCCURS WITH HEADER LINE,    WA_ACCOUNTGL       LIKE BAPIACGL09  OCCURS WITH HEADER LINE,    LT_ACCOUNTGL       TYPE STANDARD TABLE OF BAPIACGL09,    WA_CURRENCY_AMOUNT LIKE BAPIACCR09  OCCURS WITH HEADER LINE,    LT_CURRENCY_AMOUNT TYPE STANDARD TABLE OF BAPIACCR09,    IT_EXTENSION2      TYPE STANDARD TABLE OF BAPIPAREX WITH HEADER LINE,    LT_RETURN          LIKE BAPIRET2 OCCURS WITH HEADER LINE,    GST_RETURN         LIKE BAPIRET2 OCCURS WITH HEADER LINE,    LS_ZFI002          TYPE ZFI002,    FT_FLAG   ,               "= ‘X'表示分摊过    LV_ANSWER(1),    TEMP_BWTAR_AUFNR   LIKE AFPO-AUFNR.   DATAGS_EXTENSION2  TYPE ZSFI_EXTEN,                              "会计凭证过账增强extension2        LT_EXTENSION2  TYPE TABLE OF BAPIPAREX WITH HEADER LINE.     "返回参数   DATALV_OBJ_TYPE    LIKE BAPIACHE09-OBJ_TYPE,        LV_OBJ_KEY     LIKE BAPIACHE09-OBJ_KEY,        LV_OBJ_SYS     LIKE BAPIACHE09-OBJ_SYS.   DATALV_DMBTR       TYPE BAPIWRBTR,        LV_LINES       TYPE SY-TABIX,        ZCOUNT         TYPE SY-TABIX,        LV_WRBTR       TYPE BSEG-WRBTR,        DO_POST        TYPE CHAR1,        LS_EXTEN       TYPE ZSFI_EXTEN.   DATALS_BKPF        TYPE BKPF,        LS_REVERSAL    TYPE BAPIACREV.   DATAGV_OBJ_TYPE    TYPE BAPIACHE09-OBJ_TYPE,                      "参考过程        GV_OBJ_KEY     TYPE BAPIACHE09-OBJ_KEY,                       "对象键值        GV_OBJ_SYS     TYPE BAPIACHE09-OBJ_SYS.   DATA LV_BELNR_01     TYPE BKPF-BELNR.   DATA LV_WAERS        TYPE T001-WAERS.   CLEAR GST_RETURN[] .*会计凭证抬头数据  HEADER_TXT '未分配差异调整到发出商品'.   CLEAR HEADER.   HEADER-DOC_DATE   P_BUDAT.       "凭证日期   HEADER-PSTNG_DATE P_BUDAT.       "凭证中的过帐日期   HEADER-USERNAME   SY-UNAME.      "用户名   HEADER-DOC_TYPE   'SA'.          "凭证类型   HEADER-COMP_CODE  P_BUKRS.       "公司代码*  HEADER-BUS_ACT    = 'RFBU'.        "业务事务   HEADER-FISC_YEAR  P_BUDAT(4).    "财年   HEADER-FIS_PERIOD P_BUDAT+4(2).  "会计期间   HEADER-HEADER_TXT HEADER_TXT.    "凭证抬头文本   DATA LV_ROWCNT TYPE I.   DATA LV_ZCOUNT TYPE I.   DATA LV_ZCOUNT_01 TYPE I.   DESCRIBE TABLE GT_DATA_D LINES LV_ROWCNT.   CLEAR GST_RETURN .   IF LV_ROWCNT < 499.     LOOP AT GT_DATA_D.*    写入借方       ADD TO LV_LINES.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-FCSPC.                        "金额       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-FCCCT.                             "发出商品科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到发出商品'.                    "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)      WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-UKLMG ) .                     "数量      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-FCSPC  > 0.        GS_EXTENSION2-BSCHL '40'.       ELSE.        GS_EXTENSION2-BSCHL '50'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.*    写入贷方       ADD TO LV_LINES.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-FCSPC * -1.                   "金额       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-RACCT.                             "差异科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到发出商品'.                    "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)      WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-UKLMG ) .                     "数量      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-FCSPC  > 0.        GS_EXTENSION2-BSCHL '50'.       ELSE.        GS_EXTENSION2-BSCHL '40'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.     ENDLOOP.     CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'       EXPORTING        DOCUMENTHEADER HEADER       IMPORTING        OBJ_TYPE       LV_OBJ_TYPE         OBJ_KEY        LV_OBJ_KEY         OBJ_SYS        LV_OBJ_SYS       TABLES        ACCOUNTGL      LT_ACCOUNTGL         "总帐科目项        CURRENCYAMOUNT LT_CURRENCY_AMOUNT   "货币项目        EXTENSION2     LT_EXTENSION2         RETURN         LT_RETURN.           "返回值     CLEAR LT_RETURN.     LOOP AT LT_RETURN .       APPEND LT_RETURN TO GST_RETURN .       CLEAR LT_RETURN .     ENDLOOP.     LOOP AT LT_RETURN WHERE TYPE 'E'.     ENDLOOP.     IF SY-SUBRC .       CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.     ELSE.       CLEAR GT_REVERSAL .      GT_REVERSAL-OBJ_TYPE LV_OBJ_TYPE .      GT_REVERSAL-OBJ_KEY  LV_OBJ_KEY .      GT_REVERSAL-OBJ_SYS  LV_OBJ_SYS .       APPEND GT_REVERSAL .       CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'         EXPORTING           WAIT 'X'.     ENDIF.     CLEAR:HEADER.     FREE:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_RETURN.   ELSE .    LV_ZCOUNT LV_ROWCNT.     CLEAR :LV_LINES,LV_ZCOUNT_01.     CLEAR ZCOUNT.     LOOP AT GT_DATA_D.      ZCOUNT ZCOUNT + 1.       IF ZCOUNT > 499.         CLEAR:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_EXTENSION2[],LT_RETURN.        LV_LINES 0.        ZCOUNT 1.        LV_ZCOUNT LV_ROWCNT LV_ZCOUNT_01.         CLEAR LV_LINES.       ENDIF.      LV_ZCOUNT_01 LV_ZCOUNT_01 + 1.*    写入借方       ADD TO LV_LINES.       IF LV_ZCOUNT >= 499 AND ZCOUNT 499 OR LV_ZCOUNT < 499 AND LV_ZCOUNT ZCOUNT ) .        DO_POST 'X'.       ENDIF.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-FCSPC.                        "金额       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-FCCCT.                             "发出商品科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到发出商品'.                    "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)      WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-UKLMG ) .                     "数量      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-FCSPC  > 0.        GS_EXTENSION2-BSCHL '40'.       ELSE.        GS_EXTENSION2-BSCHL '50'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.*    写入贷方       ADD TO LV_LINES.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-FCSPC * -1.                   "金额       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-RACCT.                             "差异科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到发出商品'.                    "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)      WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-UKLMG ) .                     "数量      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-FCSPC  > 0.        GS_EXTENSION2-BSCHL '50'.       ELSE.        GS_EXTENSION2-BSCHL '40'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.       IF DO_POST 'X'.         CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'           EXPORTING            DOCUMENTHEADER HEADER           IMPORTING            OBJ_TYPE       LV_OBJ_TYPE             OBJ_KEY        LV_OBJ_KEY             OBJ_SYS        LV_OBJ_SYS           TABLES            ACCOUNTGL      LT_ACCOUNTGL          "总帐科目项            CURRENCYAMOUNT LT_CURRENCY_AMOUNT    "货币项目            EXTENSION2     LT_EXTENSION2             RETURN         LT_RETURN.            "返回值         CLEAR LT_RETURN.         LOOP AT LT_RETURN .           APPEND LT_RETURN TO GST_RETURN .           CLEAR LT_RETURN .         ENDLOOP.         LOOP AT LT_RETURN WHERE TYPE 'E'.         ENDLOOP.         IF SY-SUBRC .           CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.         ELSE.           CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'             EXPORTING               WAIT 'X'.           CLEAR GT_REVERSAL .          GT_REVERSAL-OBJ_TYPE LV_OBJ_TYPE .          GT_REVERSAL-OBJ_KEY  LV_OBJ_KEY .          GT_REVERSAL-OBJ_SYS  LV_OBJ_SYS .           APPEND GT_REVERSAL .         ENDIF.         FREE:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_RETURN.        DO_POST ''.       ENDIF.     ENDLOOP.   ENDIF.   SORT GST_RETURN[] BY MESSAGE .   DELETE ADJACENT DUPLICATES FROM GST_RETURN[] COMPARING MESSAGE.   LOOP AT GST_RETURN.    GST_RETURN-MESSAGE '模拟过账-发出商品凭证: ' && GST_RETURN-MESSAGE .     APPEND GST_RETURN TO GT_RETURN .     CLEAR  GST_RETURN .   ENDLOOP.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_DATA_POST_C*&---------------------------------------------------------------------**& text成本凭证:*&---------------------------------------------------------------------**& -->  p1        text*& <--  p2        text*&---------------------------------------------------------------------*FORM FRM_DATA_POST_C .   DATAGS_ZTFI94 TYPE ZTFI94.   DATA:    TEMP_MONTH(2),            "输入月份    HEADER_TXT(25),           "取会计年月+固定文本制费及研发费分摊    TEMP_AUT_MSG(30),    LAST_DATA          LIKE SY-DATUM"一个月的最后一天    TEMP_OBJ_KEY       TYPE AWKEY,  "是否生成     HEADER             LIKE BAPIACHE09  OCCURS WITH HEADER LINE,    WA_ACCOUNTGL       LIKE BAPIACGL09  OCCURS WITH HEADER LINE,    LT_ACCOUNTGL       TYPE STANDARD TABLE OF BAPIACGL09,    WA_CURRENCY_AMOUNT LIKE BAPIACCR09  OCCURS WITH HEADER LINE,    LT_CURRENCY_AMOUNT TYPE STANDARD TABLE OF BAPIACCR09,    IT_EXTENSION2      TYPE STANDARD TABLE OF BAPIPAREX WITH HEADER LINE,    LT_RETURN          LIKE BAPIRET2 OCCURS WITH HEADER LINE,    GST_RETURN         LIKE BAPIRET2 OCCURS WITH HEADER LINE,    LS_ZFI002          TYPE ZFI002,    FT_FLAG   ,               "= ‘X'表示分摊过    LV_ANSWER(1),    TEMP_BWTAR_AUFNR   LIKE AFPO-AUFNR.   DATAGS_EXTENSION2  TYPE ZSFI_EXTEN,                              "会计凭证过账增强extension2        LT_EXTENSION2  TYPE TABLE OF BAPIPAREX WITH HEADER LINE.     "返回参数   DATALV_OBJ_TYPE    LIKE BAPIACHE09-OBJ_TYPE,        LV_OBJ_KEY     LIKE BAPIACHE09-OBJ_KEY,        LV_OBJ_SYS     LIKE BAPIACHE09-OBJ_SYS.   DATALV_DMBTR       TYPE BAPIWRBTR,        LV_LINES       TYPE SY-TABIX,        ZCOUNT         TYPE SY-TABIX,        LV_WRBTR       TYPE BSEG-WRBTR,        DO_POST        TYPE CHAR1,        LS_EXTEN       TYPE ZSFI_EXTEN.   DATALS_BKPF        TYPE BKPF,        LS_REVERSAL    TYPE BAPIACREV.   DATAGV_OBJ_TYPE    TYPE BAPIACHE09-OBJ_TYPE,                      "参考过程        GV_OBJ_KEY     TYPE BAPIACHE09-OBJ_KEY,                       "对象键值        GV_OBJ_SYS     TYPE BAPIACHE09-OBJ_SYS.   DATA LV_BELNR_01     TYPE BKPF-BELNR.   DATA LV_WAERS        TYPE T001-WAERS.   CLEAR GST_RETURN[] .*会计凭证抬头数据  HEADER_TXT '未分配差异调整到主营业务成本'.   CLEAR HEADER.   HEADER-DOC_DATE   P_BUDAT.       "凭证日期   HEADER-PSTNG_DATE P_BUDAT.       "凭证中的过帐日期   HEADER-USERNAME   SY-UNAME.      "用户名   HEADER-DOC_TYPE   'SA'.          "凭证类型   HEADER-COMP_CODE  P_BUKRS.       "公司代码*  HEADER-BUS_ACT    = 'RFBU'.        "业务事务   HEADER-FISC_YEAR  P_BUDAT(4).    "财年   HEADER-FIS_PERIOD P_BUDAT+4(2).  "会计期间   HEADER-HEADER_TXT HEADER_TXT.    "凭证抬头文本   DATA LV_ROWCNT TYPE I.   DATA LV_ZCOUNT TYPE I.   DATA LV_ZCOUNT_01 TYPE I.   DESCRIBE TABLE GT_DATA_D LINES LV_ROWCNT.   CLEAR GST_RETURN .   IF LV_ROWCNT < 499.     LOOP AT GT_DATA_D.*    写入借方       ADD TO LV_LINES.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-ZCBJE.                        "成本金额       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-KONTS.                             "成本科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到主营业务成本'.                "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)*ZTFI94       CLEAR GS_ZTFI94 .       SELECT SINGLE INTO CORRESPONDING FIELDS OF GS_ZTFI94 FROM ZTFI94         WHERE BUKRS P_BUKRS         .       IF GS_ZTFI94-ZSFDQ IS INITIAL.        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-LKLMG ) .                     "数量       ELSE .        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-DKLMG ) .                     "数量       ENDIF.      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-ZCBJE  > 0.        GS_EXTENSION2-BSCHL '40'.       ELSE.        GS_EXTENSION2-BSCHL '50'.        GS_EXTENSION2-XNEGP 'X'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.*    写入贷方       ADD TO LV_LINES.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-ZCBJE * -1.                   "取负数的成本金额,       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-RACCT.                             "差异科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到主营业务成本'.                "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)*ZTFI94       CLEAR GS_ZTFI94 .       SELECT SINGLE INTO CORRESPONDING FIELDS OF GS_ZTFI94 FROM ZTFI94         WHERE BUKRS P_BUKRS         .       IF GS_ZTFI94-ZSFDQ IS INITIAL.        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-LKLMG ) .                     "数量       ELSE .        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-DKLMG ) .                     "数量       ENDIF.      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-ZCBJE  > 0.        GS_EXTENSION2-BSCHL '50'.       ELSE.        GS_EXTENSION2-BSCHL '40'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.     ENDLOOP.     CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'       EXPORTING        DOCUMENTHEADER HEADER       IMPORTING        OBJ_TYPE       LV_OBJ_TYPE         OBJ_KEY        LV_OBJ_KEY         OBJ_SYS        LV_OBJ_SYS       TABLES        ACCOUNTGL      LT_ACCOUNTGL         "总帐科目项        CURRENCYAMOUNT LT_CURRENCY_AMOUNT   "货币项目        EXTENSION2     LT_EXTENSION2         RETURN         LT_RETURN.           "返回值     CLEAR LT_RETURN.     LOOP AT LT_RETURN .       APPEND LT_RETURN TO GST_RETURN .       CLEAR LT_RETURN .     ENDLOOP.     LOOP AT LT_RETURN WHERE TYPE 'E'.     ENDLOOP.     IF SY-SUBRC .       CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.     ELSE.       CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'         EXPORTING           WAIT 'X'.     ENDIF.     CLEAR:HEADER.     FREE:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_RETURN.   ELSE .    LV_ZCOUNT LV_ROWCNT.     CLEAR :LV_LINES,LV_ZCOUNT_01.     CLEAR ZCOUNT.     LOOP AT GT_DATA_D.      ZCOUNT ZCOUNT + 1.       IF ZCOUNT > 499.         CLEAR:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_EXTENSION2[],LT_RETURN.        LV_LINES 0.        ZCOUNT 1.        LV_ZCOUNT LV_ROWCNT LV_ZCOUNT_01.         CLEAR LV_LINES.       ENDIF.      LV_ZCOUNT_01 LV_ZCOUNT_01 + 1.*    写入借方       ADD TO LV_LINES.       IF LV_ZCOUNT >= 499 AND ZCOUNT 499 OR LV_ZCOUNT < 499 AND LV_ZCOUNT ZCOUNT ) .        DO_POST 'X'.       ENDIF.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-ZCBJE.                        "成本金额       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-KONTS.                             "成本科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到主营业务成本'.                "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)*ZTFI94       CLEAR GS_ZTFI94 .       SELECT SINGLE INTO CORRESPONDING FIELDS OF GS_ZTFI94 FROM ZTFI94         WHERE BUKRS P_BUKRS         .       IF GS_ZTFI94-ZSFDQ IS INITIAL.        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-LKLMG ) .                     "数量       ELSE .        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-DKLMG ) .                     "数量       ENDIF.      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-ZCBJE  > 0.        GS_EXTENSION2-BSCHL '40'.       ELSE.        GS_EXTENSION2-BSCHL '50'.        GS_EXTENSION2-XNEGP 'X'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.*    写入贷方       ADD TO LV_LINES.       CLEAR WA_CURRENCY_AMOUNT.      WA_CURRENCY_AMOUNT-ITEMNO_ACC LV_LINES.                               "会计凭证行项目编号      WA_CURRENCY_AMOUNT-CURRENCY   GT_DATA_D-RHCUR.                        "货币码      WA_CURRENCY_AMOUNT-AMT_DOCCUR GT_DATA_D-ZCBJE * -1.                   "取负数的成本金额,       APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .       CLEAR WA_ACCOUNTGL.      WA_ACCOUNTGL-ITEMNO_ACC  LV_LINES .                                   "会计凭证行项目编号      WA_ACCOUNTGL-GL_ACCOUNT  GT_DATA_D-RACCT.                             "差异科目      WA_ACCOUNTGL-ITEM_TEXT   '未分配差异调整到主营业务成本'.                "项目文本      WA_ACCOUNTGL-PROFIT_CTR  GT_DATA_D-PRCTR.                             "利润中心      WA_ACCOUNTGL-PLANT       GT_DATA_D-WERKS.                             "工厂      WA_ACCOUNTGL-TR_PART_BA  GT_DATA_D-VBUND.                             "贸易伙伴      WA_ACCOUNTGL-MATERIAL    GT_DATA_D-MATNR.                             "物料编号(18 个字符)      WA_ACCOUNTGL-BASE_UOM    GT_DATA_D-MEINS.                             "基本计量单位 个字符)*ZTFI94       CLEAR GS_ZTFI94 .       SELECT SINGLE INTO CORRESPONDING FIELDS OF GS_ZTFI94 FROM ZTFI94         WHERE BUKRS P_BUKRS         .       IF GS_ZTFI94-ZSFDQ IS INITIAL.        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-LKLMG ) .                     "数量       ELSE .        WA_ACCOUNTGL-QUANTITY    ABSGT_DATA_D-DKLMG ) .                     "数量       ENDIF.      WA_ACCOUNTGL-ALLOC_NMBR  GT_DATA_D-VBELN_IM && GT_DATA_D-VBELP_IM .   "分配号       APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.       CLEAR GS_EXTENSION2.       CLEAR LT_EXTENSION2.       IF GT_DATA_D-ZCBJE  > 0.        GS_EXTENSION2-BSCHL '50'.       ELSE.        GS_EXTENSION2-BSCHL '40'.       ENDIF.      LT_EXTENSION2-STRUCTURE  'ZSFI_EXTEN'.      LT_EXTENSION2-VALUEPART1 GS_EXTENSION2.       APPEND LT_EXTENSION2.       IF DO_POST 'X'.         CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'           EXPORTING            DOCUMENTHEADER HEADER           IMPORTING            OBJ_TYPE       LV_OBJ_TYPE             OBJ_KEY        LV_OBJ_KEY             OBJ_SYS        LV_OBJ_SYS           TABLES            ACCOUNTGL      LT_ACCOUNTGL          "总帐科目项            CURRENCYAMOUNT LT_CURRENCY_AMOUNT    "货币项目            EXTENSION2     LT_EXTENSION2             RETURN         LT_RETURN.            "返回值         CLEAR LT_RETURN.         LOOP AT LT_RETURN .           APPEND LT_RETURN TO GST_RETURN .           CLEAR LT_RETURN .         ENDLOOP.         LOOP AT LT_RETURN WHERE TYPE 'E'.         ENDLOOP.         IF SY-SUBRC .           CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.         ELSE.           CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'             EXPORTING               WAIT 'X'.         ENDIF.         FREE:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_RETURN.        DO_POST ''.       ENDIF.     ENDLOOP.   ENDIF.   SORT GST_RETURN[] BY MESSAGE .   DELETE ADJACENT DUPLICATES FROM GST_RETURN[] COMPARING MESSAGE.   LOOP AT GST_RETURN.    GST_RETURN-MESSAGE '发出商品凭证冲销: ' && GST_RETURN-MESSAGE .     APPEND GST_RETURN TO GT_RETURN .     CLEAR  GST_RETURN .   ENDLOOP.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_DATA_ACC_POST_C*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& -->  p1        text*& <--  p2        text*&---------------------------------------------------------------------*FORM FRM_DATA_POST_REV_C .   DATALV_DMBTR    TYPE BAPIWRBTR,        LV_LINES    TYPE SY-TABIX,        ZCOUNT      TYPE SY-TABIX,        LV_WRBTR    TYPE BSEG-WRBTR,        DO_POST     TYPE CHAR1,        LS_EXTEN    TYPE ZSFI_EXTEN.   DATALS_BKPF     TYPE BKPF,        LS_REVERSAL TYPE BAPIACREV.   DATALT_RETURN   TYPE TABLE OF BAPIRET2 WITH HEADER LINE.   DATAGST_RETURN  TYPE TABLE OF BAPIRET2 WITH HEADER LINE.   DATAGV_OBJ_TYPE TYPE BAPIACHE09-OBJ_TYPE,                      "参考过程        GV_OBJ_KEY  TYPE BAPIACHE09-OBJ_KEY,                       "对象键值        GV_OBJ_SYS  TYPE BAPIACHE09-OBJ_SYS.   DATALV_BELNR_01 TYPE BKPF-BELNR.   DATALV_WAERS    TYPE T001-WAERS.   LOOP AT GT_REVERSAL.     CLEAR LS_REVERSAL .    LS_REVERSAL-OBJ_TYPE   GT_REVERSAL-OBJ_TYPE.    LS_REVERSAL-OBJ_KEY    GT_REVERSAL-OBJ_KEY.    LS_REVERSAL-OBJ_KEY_R  GT_REVERSAL-OBJ_KEY_R.    LS_REVERSAL-PSTNG_DATE N_BUDAT.    LS_REVERSAL-COMP_CODE  P_BUKRS.    LS_REVERSAL-REASON_REV '03'.     CLEAR LS_BKPF .     SELECT SINGLE BUKRS GJAHR BUDAT MONAT AWTYP AWKEY STGRD GLVOR       FROM BKPF      INTO CORRESPONDING FIELDS OF LS_BKPF       WHERE BELNR GT_REVERSAL-OBJ_KEY(10)           AND  BUKRS P_BUKRS           AND  GJAHR P_BUDAT(4).     CLEAR LT_RETURN[] .     CALL FUNCTION 'BAPI_ACC_DOCUMENT_REV_POST'       EXPORTING        REVERSAL LS_REVERSAL         BUS_ACT  LS_BKPF-GLVOR       IMPORTING        OBJ_TYPE GV_OBJ_TYPE         OBJ_KEY  GV_OBJ_KEY         OBJ_SYS  GV_OBJ_SYS       TABLES         RETURN   LT_RETURN.     LOOP AT GT_RETURN WHERE TYPE 'E'.       APPEND GT_RETURN TO GST_RETURN .       CLEAR GT_RETURN .     ENDLOOP.     IF SY-SUBRC <> 0.       CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'         EXPORTING           WAIT 'X'.     ELSE.       CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.     ENDIF.   ENDLOOP.   SORT GST_RETURN[] BY MESSAGE .   DELETE ADJACENT DUPLICATES FROM GST_RETURN[] COMPARING MESSAGE.   LOOP AT GST_RETURN.    GST_RETURN-MESSAGE '正式过账-成本凭证: ' && GST_RETURN-MESSAGE .     APPEND GST_RETURN TO GT_RETURN .     CLEAR  GST_RETURN .   ENDLOOP.ENDFORM.*----------------------------------------------------------------------**   INCLUDE TABLECONTROL_FORMS                                         **----------------------------------------------------------------------**&---------------------------------------------------------------------**&      Form  USER_OK_TC                                               **&---------------------------------------------------------------------*  FORM USER_OK_TC USING    P_TC_NAME TYPE DYNFNAM                           P_TABLE_NAME                           P_MARK_NAME                  CHANGING P_OK      LIKE SY-UCOMM.*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*    DATAL_OK              TYPE SY-UCOMM,         L_OFFSET          TYPE I.*&SPWIZARD: END OF LOCAL DATA------------------------------------------**&SPWIZARD: Table control specific operations                          **&SPWIZARD: evaluate TC name and operations                            *    SEARCH P_OK FOR P_TC_NAME.    IF SY-SUBRC <> 0.      EXIT.    ENDIF.   L_OFFSET STRLENP_TC_NAME 1.   L_OK P_OK+L_OFFSET.*&SPWIZARD: execute general and TC specific operations                 *    CASE L_OK.      WHEN 'INSR'.                      "insert row        PERFORM FCODE_INSERT_ROW USING    P_TC_NAME                                          P_TABLE_NAME.        CLEAR P_OK.      WHEN 'DELE'.                      "delete row        PERFORM FCODE_DELETE_ROW USING    P_TC_NAME                                          P_TABLE_NAME                                          P_MARK_NAME.        CLEAR P_OK.      WHEN 'P--' OR                     "top of list           'P-'  OR                     "previous page           'P+'  OR                     "next page           'P++'.                       "bottom of list        PERFORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME                                              L_OK.        CLEAR P_OK.*     WHEN 'L--'.                       "total left*       PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME.**     WHEN 'L-'.                        "column left*       PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME.**     WHEN 'R+'.                        "column right*       PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME.**     WHEN 'R++'.                       "total right*       PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME.*      WHEN 'MARK'.                      "mark all filled lines        PERFORM FCODE_TC_MARK_LINES USING P_TC_NAME                                          P_TABLE_NAME                                          P_MARK_NAME   .        CLEAR P_OK.      WHEN 'DMRK'.                      "demark all filled lines        PERFORM FCODE_TC_DEMARK_LINES USING P_TC_NAME                                            P_TABLE_NAME                                            P_MARK_NAME .        CLEAR P_OK.*     WHEN 'SASCEND'   OR*          'SDESCEND'.                  "sort column*       PERFORM FCODE_SORT_TC USING P_TC_NAME*                                   l_ok.    ENDCASE.  ENDFORM.                              " USER_OK_TC*&---------------------------------------------------------------------**&      Form  FCODE_INSERT_ROW                                         **&---------------------------------------------------------------------*  FORM FCODE_INSERT_ROW                USING    P_TC_NAME           TYPE DYNFNAM                         P_TABLE_NAME             .*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*    DATA L_LINES_NAME       LIKE FELD-NAME.    DATA L_SELLINE          LIKE SY-STEPL.    DATA L_LASTLINE         TYPE I.    DATA L_LINE             TYPE I.    DATA L_TABLE_NAME       LIKE FELD-NAME.    FIELD-SYMBOLS <TC>                 TYPE CXTAB_CONTROL.    FIELD-SYMBOLS <TABLE>              TYPE STANDARD TABLE.    FIELD-SYMBOLS <LINES>              TYPE I.*&SPWIZARD: END OF LOCAL DATA------------------------------------------*    ASSIGN (P_TC_NAMETO <TC>.*&SPWIZARD: get the table, which belongs to the tc                     *    CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME"table body    ASSIGN (L_TABLE_NAMETO <TABLE>.                "not headerline*&SPWIZARD: get looplines of TableControl                              *    CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_LINES_NAME.    ASSIGN (L_LINES_NAMETO <LINES>.*&SPWIZARD: get current line                                           *    GET CURSOR LINE L_SELLINE.    IF SY-SUBRC <> 0.                   " append line to table     L_SELLINE <TC>-LINES 1.*&SPWIZARD: set top line                                               *      IF L_SELLINE > <LINES>.       <TC>-TOP_LINE L_SELLINE <LINES> + .      ELSE.       <TC>-TOP_LINE 1.      ENDIF.    ELSE.                               " insert line into table     L_SELLINE <TC>-TOP_LINE + L_SELLINE 1.     L_LASTLINE <TC>-TOP_LINE + <LINES> 1.    ENDIF.*&SPWIZARD: set new cursor line                                        *   L_LINE L_SELLINE <TC>-TOP_LINE + 1.*&SPWIZARD: insert initial line                                        *    INSERT INITIAL LINE INTO <TABLE> INDEX L_SELLINE.   <TC>-LINES <TC>-LINES 1.*&SPWIZARD: set cursor                                                 *    SET CURSOR LINE L_LINE.  ENDFORM.                              " FCODE_INSERT_ROW*&---------------------------------------------------------------------**&      Form  FCODE_DELETE_ROW                                         **&---------------------------------------------------------------------*  FORM FCODE_DELETE_ROW                USING    P_TC_NAME           TYPE DYNFNAM                         P_TABLE_NAME                         P_MARK_NAME   .*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*    DATA L_TABLE_NAME       LIKE FELD-NAME.    FIELD-SYMBOLS <TC>         TYPE CXTAB_CONTROL.    FIELD-SYMBOLS <TABLE>      TYPE STANDARD TABLE.    FIELD-SYMBOLS <WA>.    FIELD-SYMBOLS <MARK_FIELD>.*&SPWIZARD: END OF LOCAL DATA------------------------------------------*    ASSIGN (P_TC_NAMETO <TC>.*&SPWIZARD: get the table, which belongs to the tc                     *    CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME"table body    ASSIGN (L_TABLE_NAMETO <TABLE>.                "not headerline*&SPWIZARD: delete marked lines                                        *    DESCRIBE TABLE <TABLE> LINES <TC>-LINES.    LOOP AT <TABLE> ASSIGNING <WA>.*&SPWIZARD: access to the component 'FLAG' of the table header         *      ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.      IF <MARK_FIELD> 'X'.        DELETE <TABLE> INDEX SYST-TABIX.        IF SY-SUBRC 0.         <TC>-LINES <TC>-LINES 1.        ENDIF.      ENDIF.    ENDLOOP.  ENDFORM.                              " FCODE_DELETE_ROW*&---------------------------------------------------------------------**&      Form  COMPUTE_SCROLLING_IN_TC*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**      -->P_TC_NAME  name of tablecontrol*      -->P_OK       ok code*----------------------------------------------------------------------*  FORM COMPUTE_SCROLLING_IN_TC USING    P_TC_NAME                                        P_OK.*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*    DATA L_TC_NEW_TOP_LINE     TYPE I.    DATA L_TC_NAME             LIKE FELD-NAME.    DATA L_TC_LINES_NAME       LIKE FELD-NAME.    DATA L_TC_FIELD_NAME       LIKE FELD-NAME.    FIELD-SYMBOLS <TC>         TYPE CXTAB_CONTROL.    FIELD-SYMBOLS <LINES>      TYPE I.*&SPWIZARD: END OF LOCAL DATA------------------------------------------*    ASSIGN (P_TC_NAMETO <TC>.*&SPWIZARD: get looplines of TableControl                              *    CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_TC_LINES_NAME.    ASSIGN (L_TC_LINES_NAMETO <LINES>.*&SPWIZARD: is no line filled?                                         *    IF <TC>-LINES 0.*&SPWIZARD: yes, ...                                                   *     L_TC_NEW_TOP_LINE 1.    ELSE.*&SPWIZARD: no, ...                                                    *      CALL FUNCTION 'SCROLLING_IN_TABLE'           EXPORTING               ENTRY_ACT             <TC>-TOP_LINE                ENTRY_FROM            1               ENTRY_TO              <TC>-LINES               LAST_PAGE_FULL        'X'               LOOPS                 <LINES>                OK_CODE               P_OK                OVERLAPPING           'X'           IMPORTING               ENTRY_NEW             L_TC_NEW_TOP_LINE           EXCEPTIONS*              NO_ENTRY_OR_PAGE_ACT  = 01*              NO_ENTRY_TO           = 02*              NO_OK_CODE_OR_PAGE_GO = 03                OTHERS                0.    ENDIF.*&SPWIZARD: get actual tc and column                                   *    GET CURSOR FIELD L_TC_FIELD_NAME               AREA  L_TC_NAME.    IF SYST-SUBRC 0.      IF L_TC_NAME P_TC_NAME.*&SPWIZARD: et actual column                                           *        SET CURSOR FIELD L_TC_FIELD_NAME LINE 1.      ENDIF.    ENDIF.*&SPWIZARD: set the new top line                                       *   <TC>-TOP_LINE L_TC_NEW_TOP_LINE.  ENDFORM.                              " COMPUTE_SCROLLING_IN_TC*&---------------------------------------------------------------------**&      Form  FCODE_TC_MARK_LINES*&---------------------------------------------------------------------**       marks all TableControl lines*----------------------------------------------------------------------**      -->P_TC_NAME  name of tablecontrol*----------------------------------------------------------------------*FORM FCODE_TC_MARK_LINES USING P_TC_NAME                                P_TABLE_NAME                                P_MARK_NAME.*&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------*   DATA L_TABLE_NAME       LIKE FELD-NAME.   FIELD-SYMBOLS <TC>         TYPE CXTAB_CONTROL.   FIELD-SYMBOLS <TABLE>      TYPE STANDARD TABLE.   FIELD-SYMBOLS <WA>.   FIELD-SYMBOLS <MARK_FIELD>.*&SPWIZARD: END OF LOCAL DATA------------------------------------------*   ASSIGN (P_TC_NAMETO <TC>.*&SPWIZARD: get the table, which belongs to the tc                     *    CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME"table body    ASSIGN (L_TABLE_NAMETO <TABLE>.                "not headerline*&SPWIZARD: mark all filled lines                                      *   LOOP AT <TABLE> ASSIGNING <WA>.*&SPWIZARD: access to the component 'FLAG' of the table header         *      ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.     <MARK_FIELD> 'X'.   ENDLOOP.ENDFORM.                                          "fcode_tc_mark_lines*&---------------------------------------------------------------------**&      Form  FCODE_TC_DEMARK_LINES*&---------------------------------------------------------------------**       demarks all TableControl lines*----------------------------------------------------------------------**      -->P_TC_NAME  name of tablecontrol*----------------------------------------------------------------------*FORM FCODE_TC_DEMARK_LINES USING P_TC_NAME                                  P_TABLE_NAME                                  P_MARK_NAME .*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*   DATA L_TABLE_NAME       LIKE FELD-NAME.   FIELD-SYMBOLS <TC>         TYPE CXTAB_CONTROL.   FIELD-SYMBOLS <TABLE>      TYPE STANDARD TABLE.   FIELD-SYMBOLS <WA>.   FIELD-SYMBOLS <MARK_FIELD>.*&SPWIZARD: END OF LOCAL DATA------------------------------------------*   ASSIGN (P_TC_NAMETO <TC>.*&SPWIZARD: get the table, which belongs to the tc                     *    CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME"table body    ASSIGN (L_TABLE_NAMETO <TABLE>.                "not headerline*&SPWIZARD: demark all filled lines                                    *   LOOP AT <TABLE> ASSIGNING <WA>.*&SPWIZARD: access to the component 'FLAG' of the table header         *      ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.     <MARK_FIELD> SPACE.   ENDLOOP.ENDFORM.                                          "fcode_tc_mark_linesINITIALIZATION.   PERFORM FRM_EXCLUDE_OPTION.AT SELECTION-SCREEN OUTPUT.   PERFORM SCREEN_OUTPUT.AT SELECTION-SCREEN.   PERFORM SCREEN_SETTING.START-OF-SELECTION.   PERFORM FOM_GETDATA.   PERFORM FRM_DISPLAY.

转载请注明原文地址: https://www.6miu.com/read-5033643.html

最新回复(0)