| REPORT ZRFICO100 NO STANDARD PAGE HEADING MESSAGE-ID ZFI_01. |
| TYPE-POOLS: SLIS,ICON. |
| TABLES: SSCRFIELDS,LAGP. |
| TYPES: BEGIN OF TY_UP, |
| ZCODE TYPE STRING, " 识别码 |
| BLART TYPE STRING, " 凭证类型 |
| BUKRS TYPE STRING, " 公司代码 |
| BLDAT TYPE STRING, " 凭证日期 |
| BUDAT TYPE STRING, " 过账日期 |
| MONAT TYPE STRING, " 过账期间 |
| XBLNR TYPE STRING, " 参照 |
| WAERS TYPE STRING, " 货币 |
| KURSF TYPE STRING, " 汇率 |
| WWERT TYPE STRING, " 换算日期 |
| BKTXT TYPE STRING, " 抬头文本 |
| NUMPG TYPE STRING, " 页数 |
| BSCHL TYPE STRING, " 记账码 |
| KUNNR TYPE STRING, " 客户 |
| LIFNR TYPE STRING, " 供应商 |
| HKONT TYPE STRING, " 总账科目 |
| UMSKZ TYPE STRING, "特别总账标识 |
| WRBTR TYPE STRING, "业务货币金额 |
| GSBER TYPE STRING, " 业务范围 |
| PRCTR TYPE STRING, " 利润中心 |
| KOSTL TYPE STRING, " 成本中心 |
| PROJK TYPE STRING, "WBS元素(工作号) |
| AUFNR TYPE STRING, " 内部订单 |
| ZUONR TYPE STRING, " 分配 |
| SGTXT TYPE STRING, "文本 |
| ZFBDT TYPE STRING, " 到期日 |
| ZTERM TYPE STRING, " 付款条件 |
| KIDNO TYPE STRING, " 付款参考 |
| ZLSCH TYPE STRING, " 付款方式 |
| UZAWE TYPE STRING, " 付款方式补充 |
| XNEGP TYPE STRING, " 反记账 |
| RSTGR TYPE STRING, " 原因代码 |
| XREF1 TYPE STRING, " 参考码1 |
| XREF2 TYPE STRING, " 参考码2 |
| XREF3 TYPE STRING, " 参考码3 |
| MWSKZ TYPE STRING, " 税码 |
| DMBTR TYPE STRING, " 本位币金额 |
| * waers1 TYPE string, " 本位币币码 |
| DMBE2 TYPE STRING, " 集团货币金额 |
| HWAE2 TYPE STRING, " 集团货币币码 |
| MENGE TYPE STRING, " 数量 |
| MEINS TYPE STRING, " 单位 |
| KNDNR TYPE STRING, "客户编码 |
| ARTNR TYPE STRING, "物料编码 |
| FKART TYPE STRING, "开票类型 |
| KAUFN TYPE STRING, "销售订单 |
| KDPOS TYPE STRING, "订单行 |
| AUFNR1 TYPE STRING, "生产或内部订单 |
| SKOST TYPE STRING, "成本中心 |
| VKORG TYPE STRING, "销售组织 |
| VTWEG TYPE STRING, "分销渠道 |
| SPART TYPE STRING, "产品组 |
| PRCTR1 TYPE STRING, "利润中心 |
| BZIRK TYPE STRING, "销售地区 |
| AUART TYPE STRING, "销售凭证类型 |
| KONDM TYPE STRING, "物料定价组 |
| KTGRD TYPE STRING, "物料科目分组 |
| KTGRM TYPE STRING, "客户科目分组 |
| MVGR1 TYPE STRING, "物料组1 |
| MVGR2 TYPE STRING, "物料组2 |
| MVGR3 TYPE STRING, "物料组3 |
| MVGR4 TYPE STRING, "物料组4 |
| MVGR5 TYPE STRING, "物料组5 |
| WW002 TYPE STRING, "合同 |
| END OF TY_UP. |
| TYPES: BEGIN OF TY_ALV, |
| BOX TYPE CHAR1, "选择 |
| ICON TYPE CHAR4, "状态 |
| MSG TYPE STRING, "状态描述 |
| GRP TYPE I, " 用于分组 |
| GJAHR TYPE BKPF-GJAHR, "凭证年度 |
| BELNR TYPE BKPF-BELNR, "会计凭证号 |
| SHKZG TYPE BSEG-SHKZG, |
| KOART TYPE TBSL-KOART, |
| WAERK TYPE T001-WAERS, |
| ROW TYPE I, |
| ZCODE TYPE CHAR3, " 识别码 |
| BLART TYPE BKPF-BLART, " 凭证类型 |
| BUKRS TYPE BKPF-BUKRS, " 公司代码 |
| BLDAT TYPE BKPF-BLDAT, " 凭证日期 |
| BUDAT TYPE BKPF-BUDAT, " 过账日期 |
| MONAT TYPE BKPF-MONAT, " 过账期间 |
| XBLNR TYPE BKPF-XBLNR, " 参照 |
| WAERS TYPE BKPF-WAERS, " 货币 |
| KURSF TYPE BKPF-KURSF, " 汇率 |
| WWERT TYPE BKPF-WWERT, " 换算日期 |
| BKTXT TYPE BKPF-BKTXT, " 抬头文本 |
| NUMPG TYPE BKPF-NUMPG, " 页数 |
| BSCHL TYPE BSEG-BSCHL, " 记账码 |
| KUNNR TYPE BSEG-KUNNR, " 客户 |
| LIFNR TYPE BSEG-LIFNR, " 供应商 |
| HKONT TYPE BSEG-HKONT, " 总账科目 |
| UMSKZ TYPE BSEG-UMSKZ, "特别总账标识 |
| WRBTR TYPE BSEG-WRBTR, "业务货币金额 |
| GSBER TYPE BSEG-GSBER, " 业务范围 |
| PRCTR TYPE BSEG-PRCTR, " 利润中心 |
| KOSTL TYPE BSEG-KOSTL, " 成本中心 |
| PROJK TYPE BSEG-PROJK, "WBS元素(工作号) |
| AUFNR TYPE BSEG-AUFNR, " 内部订单 |
| ZUONR TYPE BSEG-ZUONR, " 分配 |
| SGTXT TYPE BSEG-SGTXT, "文本 |
| ZFBDT TYPE BSEG-ZFBDT, " 到期日 |
| ZTERM TYPE BSEG-ZTERM, " 付款条件 |
| KIDNO TYPE BSEG-KIDNO, " 付款参考 |
| ZLSCH TYPE BSEG-ZLSCH, " 付款方式 |
| UZAWE TYPE BSEG-UZAWE, " 付款方式补充 |
| XNEGP TYPE BSEG-XNEGP, " 反记账 |
| RSTGR TYPE BSEG-RSTGR, " 原因代码 |
| XREF1 TYPE BSEG-XREF1, " 参考码1 |
| XREF2 TYPE BSEG-XREF2, " 参考码2 |
| XREF3 TYPE BSEG-XREF3, " 参考码3 |
| MWSKZ TYPE BSEG-MWSKZ, " 税码 |
| DMBTR TYPE BSEG-DMBTR, " 本位币金额 |
| * waers1 TYPE bseg-waers, " 本位币币码 |
| DMBE2 TYPE BSEG-DMBE2, " 集团货币金额 |
| HWAE2 TYPE BKPF-HWAE2, " 集团货币币码 |
| MENGE TYPE BSEG-MENGE, " 数量 |
| MEINS TYPE BSEG-MEINS, " 单位 |
| KNDNR TYPE STRING, "客户编码 |
| ARTNR TYPE STRING, "物料编码 |
| FKART TYPE STRING, "开票类型 |
| KAUFN TYPE STRING, "销售订单 |
| KDPOS TYPE STRING, "订单行 |
| AUFNR1 TYPE STRING, "生产或内部订单 |
| SKOST TYPE STRING, "成本中心 |
| VKORG TYPE STRING, "销售组织 |
| VTWEG TYPE STRING, "分销渠道 |
| SPART TYPE STRING, "产品组 |
| PRCTR1 TYPE STRING, "利润中心 |
| BZIRK TYPE STRING, "销售地区 |
| AUART TYPE STRING, "销售凭证类型 |
| KONDM TYPE STRING, "物料定价组 |
| KTGRD TYPE STRING, "物料科目分组 |
| KTGRM TYPE STRING, "客户科目分组 |
| MVGR1 TYPE STRING, "物料组1 |
| MVGR2 TYPE STRING, "物料组2 |
| MVGR3 TYPE STRING, "物料组3 |
| MVGR4 TYPE STRING, "物料组4 |
| MVGR5 TYPE STRING, "物料组5 |
| WW002 TYPE STRING, "合同 |
| END OF TY_ALV. |
| CONSTANTS:GC_BUT(20) VALUE '下载模板'. |
| CONSTANTS:C_ICON_W VALUE '@5D@' TYPE ICON-ID . |
| CONSTANTS:C_ICON_S VALUE '@5B@' TYPE ICON-ID . |
| CONSTANTS:C_ICON_E VALUE '@5C@' TYPE ICON-ID . |
| CONSTANTS:C_ICON_I VALUE '@BZ@' TYPE ICON-ID . |
| CONSTANTS C_LINE_TOP VALUE 1 TYPE I. |
| CONSTANTS C_X VALUE 'X'. |
| DATA: GS_ALV TYPE TY_ALV, |
| GT_ALV TYPE TABLE OF TY_ALV. |
| DATA: GT_FIELDCAT TYPE LVC_T_FCAT, |
| GS_FIELDCAT TYPE LVC_S_FCAT, |
| GS_LAYOUT TYPE LVC_S_LAYO. |
| TYPES: BEGIN OF TY_STR, |
| STR1(2500) TYPE C, |
| END OF TY_STR. |
| DATA: GT_STR TYPE STANDARD TABLE OF TY_STR, |
| GS_STR TYPE TY_STR. |
| INCLUDE OLE2INCL. |
| DATA: GS_EXCEL TYPE OLE2_OBJECT, |
| GS_WBOOK TYPE OLE2_OBJECT, |
| GS_SHEET TYPE OLE2_OBJECT, |
| GS_CELL TYPE OLE2_OBJECT, |
| GS_CELL1 TYPE OLE2_OBJECT, |
| GS_CELL2 TYPE OLE2_OBJECT, |
| GS_CELLS TYPE OLE2_OBJECT, |
| GS_ROW TYPE OLE2_OBJECT, |
| GS_RANGE TYPE OLE2_OBJECT, |
| GS_BORDERS TYPE OLE2_OBJECT, |
| GS_FONT TYPE OLE2_OBJECT, |
| GV_EXCEL_E TYPE C. "excel 打开错误 |
| SELECTION-SCREEN BEGIN OF BLOCK BL01 WITH FRAME TITLE TEXT-T01. |
| PARAMETERS PA_FILE TYPE RLGRAP-FILENAME . |
| SELECTION-SCREEN END OF BLOCK BL01 . |
| SELECTION-SCREEN BEGIN OF BLOCK BL02 WITH FRAME TITLE TEXT-T02. |
| SELECTION-SCREEN: PUSHBUTTON 2(10) P_BUT USER-COMMAND CLI1. |
| SELECTION-SCREEN END OF BLOCK BL02 . |
| INITIALIZATION. |
| P_BUT = GC_BUT. |
| AT SELECTION-SCREEN. |
| IF SSCRFIELDS-UCOMM EQ 'CLI1'. |
| PERFORM SUB_DOWNLOAD_EXCELTEMPLATE. |
| ENDIF. |
| AT SELECTION-SCREEN ON VALUE-REQUEST FOR PA_FILE. |
| PERFORM GET_PC_FILENAME USING PA_FILE. |
| START-OF-SELECTION. |
| PERFORM SUB_UPLOAD_DATA. |
| PERFORM SUB_OUTPUT_ALV. |
| *&---------------------------------------------------------------------* |
| *& Form sub_download_exceltemplate |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| * --> p1 text |
| * <-- p2 text |
| *----------------------------------------------------------------------* |
| FORM SUB_DOWNLOAD_EXCELTEMPLATE. |
| DATA: LV_FILE TYPE SAPB-SAPPFAD. |
| PERFORM SUB_OPEN_SAVE_DIALOG CHANGING LV_FILE. |
| CHECK LV_FILE IS NOT INITIAL. |
| PERFORM SUB_DOWNLOAD_EXCEL_FROMSERVER USING 'ZFIR_001' LV_FILE. |
| ENDFORM. " sub_download_exceltemplate |
| *&---------------------------------------------------------------------* |
| *& Form open_save_dialog |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| * <--P_L_FILE text |
| *----------------------------------------------------------------------* |
| FORM SUB_OPEN_SAVE_DIALOG CHANGING P_FILE TYPE SAPB-SAPPFAD. |
| DATA: L_SAVEPATH TYPE RLGRAP-FILENAME. |
| CALL FUNCTION 'WS_FILENAME_GET' |
| EXPORTING |
| DEF_PATH = L_SAVEPATH |
| MASK = ',Excel Files,*.xlsx,Xls,*.xls.' |
| MODE = 'S' |
| TITLE = TEXT-F01 |
| IMPORTING |
| FILENAME = L_SAVEPATH |
| EXCEPTIONS |
| INV_WINSYS = 1 |
| NO_BATCH = 2 |
| SELECTION_CANCEL = 3 |
| SELECTION_ERROR = 4 |
| OTHERS = 5. |
| IF SY-SUBRC NE 0. |
| RETURN. |
| ENDIF. |
| P_FILE = L_SAVEPATH. |
| IF P_FILE CS '.XLS'. |
| ELSE. |
| CONCATENATE P_FILE '.xlsx' INTO P_FILE. |
| CONDENSE P_FILE NO-GAPS. |
| ENDIF. |
| IF P_FILE CS '\.XLSX' OR P_FILE CS '\.XLS' . |
| MESSAGE E001(00) WITH '请输入下载EXCEL模板的名称'. |
| ENDIF. |
| ENDFORM. " open_save_dialog |
| *&---------------------------------------------------------------------* |
| *& Form sub_download_excel_fromserver |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| * -->P_0201 text |
| * -->P_L_FILE text |
| *----------------------------------------------------------------------* |
| FORM SUB_DOWNLOAD_EXCEL_FROMSERVER USING P_OBJID LIKE WWWDATATAB-OBJID |
| P_DEST LIKE SAPB-SAPPFAD. |
| DATA: LO_OBJDATA LIKE WWWDATATAB, |
| LO_MIME LIKE W3MIME, |
| LS_DESTINATION LIKE RLGRAP-FILENAME, |
| LS_OBJNAM TYPE STRING, |
| LI_RC LIKE SY-SUBRC, |
| LS_ERRTXT TYPE STRING. |
| SELECT SINGLE RELID OBJID FROM WWWDATA |
| INTO CORRESPONDING FIELDS OF LO_OBJDATA |
| WHERE SRTF2 = 0 |
| AND RELID = 'MI' |
| AND OBJID = P_OBJID. |
| IF SY-SUBRC NE 0 OR LO_OBJDATA-OBJID EQ SPACE. |
| CONCATENATE '模板文件:' LS_OBJNAM |
| '不存在,请用TCODE:SMW0进行加载' INTO LS_ERRTXT. |
| MESSAGE E000(00) WITH LS_ERRTXT. |
| ENDIF. |
| LS_DESTINATION = P_DEST. |
| CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' |
| EXPORTING |
| KEY = LO_OBJDATA |
| DESTINATION = LS_DESTINATION |
| IMPORTING |
| RC = LI_RC. |
| IF LI_RC NE 0. |
| CONCATENATE '模板文件:' LS_OBJNAM '下载失败' INTO LS_ERRTXT. |
| MESSAGE E000(00) WITH LS_ERRTXT. |
| ENDIF. |
| ENDFORM. " sub_download_excel_fromserver |
| *&---------------------------------------------------------------------* |
| *& Form sub_upload_data |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| * --> p1 text |
| * <-- p2 text |
| *----------------------------------------------------------------------* |
| FORM SUB_UPLOAD_DATA. |
| CLEAR:GT_ALV , |
| GS_ALV . |
| DATA: LT_OUT TYPE TABLE OF TY_UP, |
| LS_OUT TYPE TY_UP. |
| DATA: LV_MSG TYPE STRING, |
| LV_FILE TYPE STRING, |
| LV_LINE TYPE INT4. |
| LV_FILE = PA_FILE. |
| PERFORM UP_FILE USING LV_FILE LV_MSG |
| CHANGING LT_OUT[]. |
| IF LV_MSG IS NOT INITIAL. |
| MESSAGE LV_MSG TYPE 'S' DISPLAY LIKE 'E' . |
| LEAVE LIST-PROCESSING. |
| ENDIF. |
| DESCRIBE TABLE LT_OUT LINES LV_LINE. |
| IF LV_LINE LE 1. |
| MESSAGE '没有获取到' TYPE 'S' DISPLAY LIKE 'E' . |
| LEAVE LIST-PROCESSING. |
| ENDIF. |
| LOOP AT LT_OUT INTO LS_OUT. |
| IF SY-TABIX LE C_LINE_TOP. |
| CONTINUE. |
| ENDIF. |
| MOVE-CORRESPONDING LS_OUT TO GS_ALV. |
| GS_ALV-ROW = SY-TABIX. |
| APPEND GS_ALV TO GT_ALV. |
| CLEAR GS_ALV. |
| ENDLOOP. |
| ENDFORM. " sub_upload_data |
| *&---------------------------------------------------------------------* |
| * & Form sub_check_data |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| * --> p1 text |
| * <-- p2 text |
| *----------------------------------------------------------------------* |
| FORM SUB_CHECK_DATA. |
| DATA LV_TABIX TYPE SY-INDEX. |
| DATA LV_MSG TYPE BAPI_MSG. |
| DATA LV_ERROR TYPE FLAG. |
| DATA: LV_POSID TYPE PRPS-POSID. |
| DATA: LV_DATATYPE TYPE DD01V-DATATYPE. |
| DATA: LS_TBSL TYPE TBSL, |
| LV_GRP TYPE I, |
| LV_NUMPG TYPE BKPF-NUMPG. |
| DATA: LS_HEADER TYPE BAPIACHE09, |
| LS_KNA1 TYPE BAPIACPA09, |
| LV_WAERS TYPE T001-WAERS, "凭证币别 |
| LV_KURSR TYPE CHAR20. "汇率 |
| LOOP AT GT_ALV INTO DATA(LS_ALV) WHERE BOX = 'X' GROUP BY ( KEY1 = LS_ALV-ZCODE ). |
| LOOP AT GT_ALV INTO GS_ALV WHERE ZCODE = LS_ALV-ZCODE. |
| TRANSLATE GS_ALV-BLART TO UPPER CASE."凭证类型 |
| TRANSLATE GS_ALV-XNEGP TO UPPER CASE."反记帐 |
| TRANSLATE GS_ALV-MWSKZ TO UPPER CASE."税码 |
| TRANSLATE GS_ALV-WAERS TO UPPER CASE."货币单位 |
| LV_GRP = LV_GRP + 1. |
| * 权限检查 |
| AUTHORITY-CHECK OBJECT 'F_BKPF_BUK' |
| ID 'BUKRS' FIELD GS_ALV-BUKRS |
| ID 'ACTVT' FIELD '03'. |
| IF SY-SUBRC NE 0. |
| CLEAR: LV_MSG. |
| CONCATENATE '您没有公司代码:' GS_ALV-BUKRS '的操作权限!' INTO LV_MSG. |
| PERFORM SUB_ADD_MSG USING |
| LV_MSG SPACE CHANGING GS_ALV-MSG. |
| LV_ERROR = C_X. |
| ENDIF. |
| SELECT SINGLE * INTO LS_TBSL FROM TBSL WHERE BSCHL = GS_ALV-BSCHL. |
| IF SY-SUBRC <> 0. |
| CLEAR: LV_ERROR,LV_MSG. |
| CONCATENATE '记账码' GS_ALV-BSCHL '不存在' INTO LV_MSG. |
| LV_ERROR = C_X. |
| PERFORM SUB_ADD_MSG USING |
| LV_MSG SPACE CHANGING GS_ALV-MSG. |
| ELSE. |
| GS_ALV-SHKZG = LS_TBSL-SHKZG. " 借方/贷方标识 |
| GS_ALV-KOART = LS_TBSL-KOART. " 科目类型 |
| ENDIF. |
| GS_ALV-GRP = LV_GRP. |
| IF GS_ALV-MSG IS NOT INITIAL. |
| GS_ALV-ICON = C_ICON_E. |
| ENDIF. |
| MODIFY GT_ALV FROM GS_ALV. |
| CLEAR: GS_ALV, |
| LV_ERROR, |
| LV_MSG. |
| PERFORM SUB_INPUT00 CHANGING GS_ALV-KOSTL. |
| ENDLOOP. |
| ENDLOOP. |
| ENDFORM. " sub_check_data |
| *&---------------------------------------------------------------------* |
| *& Form sub_output_alv |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| * --> p1 text |
| * <-- p2 text |
| *----------------------------------------------------------------------* |
| FORM SUB_OUTPUT_ALV. |
| DATA LV_REPID LIKE SY-REPID . |
| LV_REPID = SY-REPID. |
| PERFORM SUB_BUILD_FIELDCAT. |
| PERFORM SUB_SET_LAYOUT. |
| CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' |
| EXPORTING |
| I_CALLBACK_PROGRAM = LV_REPID |
| I_CALLBACK_PF_STATUS_SET = 'SUB_SET_PF_STATUS' |
| I_CALLBACK_USER_COMMAND = 'SUB_F_COMMAND' |
| IS_LAYOUT_LVC = GS_LAYOUT |
| IT_FIELDCAT_LVC = GT_FIELDCAT |
| I_SAVE = 'A' |
| TABLES |
| T_OUTTAB = GT_ALV |
| EXCEPTIONS |
| PROGRAM_ERROR = 1 |
| OTHERS = 2. |
| IF SY-SUBRC <> 0. |
| ENDIF. |
| ENDFORM. " sub_output_alv |
| *&---------------------------------------------------------------------* |
| *& Form SET_PF_STATUS |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| * -->RT_EXTAB excluding button table |
| *----------------------------------------------------------------------* |
| FORM SUB_SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB. |
| SET PF-STATUS 'STANDARD'. |
| ENDFORM. "SET_PF_STATUS |
| *---------------------------------------------------------------------* |
| * FORM f_command * |
| *---------------------------------------------------------------------* |
| * ........ * |
| *---------------------------------------------------------------------* |
| * --> I_UCOMM * |
| * --> IS_SELFIELD * |
| *---------------------------------------------------------------------* |
| FORM SUB_F_COMMAND USING I_UCOMM LIKE SY-UCOMM IS_SELFIELD TYPE SLIS_SELFIELD. |
| DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID. |
| CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' |
| IMPORTING |
| E_GRID = LR_GRID. |
| CALL METHOD LR_GRID->CHECK_CHANGED_DATA. |
| CASE I_UCOMM. |
| WHEN 'TEST'. |
| PERFORM SUB_CHECK_DATA. |
| PERFORM ACC_CHECK . |
| WHEN 'EXECUTE'. |
| PERFORM SUB_CHECK_DATA. |
| PERFORM SUB_CREATE_FB01 . |
| WHEN 'ALL'. |
| PERFORM SUB_SELECT_LINES USING 'X'. |
| WHEN 'QALL'. |
| PERFORM SUB_SELECT_LINES USING SPACE. |
| ENDCASE. |
| IS_SELFIELD-REFRESH = 'X'. |
| IS_SELFIELD-COL_STABLE = 'X'. |
| IS_SELFIELD-ROW_STABLE = 'X'. |
| ENDFORM. "F_COMMAND |
| *&---------------------------------------------------------------------* |
| *& Form sub_build_fieldcat |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| * --> p1 text |
| * <-- p2 text |
| *----------------------------------------------------------------------* |
| FORM SUB_BUILD_FIELDCAT. |
| DEFINE MCR_FILL_FIELDCAT. |
| CLEAR gs_fieldcat. |
| gs_fieldcat-fieldname = &1 . |
| SPLIT &2 AT '-' INTO gs_fieldcat-ref_table gs_fieldcat-ref_field. |
| gs_fieldcat-coltext = &3. |
| gs_fieldcat-col_opt = 'A'. |
| gs_fieldcat-outputlen = 30 . |
| APPEND gs_fieldcat TO gt_fieldcat. |
| END-OF-DEFINITION. |
| MCR_FILL_FIELDCAT: |
| 'BOX' '' '选择', |
| 'ICON' '' '状态' , |
| 'MSG' '' '状态描述' , |
| 'ZCODE' '' '凭证识别号', |
| 'BLART' '' '凭证类型', |
| 'BUKRS' '' '公司代码', |
| 'BLDAT' '' '凭证日期', |
| 'BUDAT' '' '过账日期', |
| 'MONAT' '' '过账期间', |
| 'XBLNR' '' '参照', |
| 'WAERS' '' '货币', |
| 'KURSF' '' '汇率', |
| 'WWERT' '' '换算日期', |
| 'BKTXT' '' '抬头文本', |
| 'NUMPG' '' '页数', |
| 'BSCHL' '' '记账码', |
| 'KUNNR' '' '客户编码', |
| 'LIFNR' '' '供应商编码', |
| 'HKONT' '' '总账科目', |
| 'UMSKZ' '' '特别总账标识', |
| 'WRBTR' '' '业务货币金额', |
| 'GSBER' '' '业务范围', |
| 'PRCTR' '' '利润中心', |
| 'KOSTL' '' '成本中心', |
| 'PROJK' '' 'WBS 元素(工作号)', |
| 'AUFNR' '' '内部订单', |
| 'ZUONR' '' '分配', |
| 'SGTXT' '' '文本', |
| 'ZFBDT' '' '到期日', |
| 'ZTERM' '' '付款条件', |
| 'KIDNO' '' '付款参考', |
| 'ZLSCH' '' '付款方式', |
| 'UZAWE' '' '付款方式补充', |
| 'XNEGP' '' '反记账', |
| 'RSTGR' '' '原因代码', |
| 'XREF1' '' '参考码1', |
| 'XREF2' '' '参考码2', |
| 'XREF3' '' '参考码3', |
| 'MWSKZ' '' '税码', |
| 'DMBTR' '' '本位币金额', |
| 'DMBE2' '' '集团货币金额', |
| 'HWAE2' '' '集团货币货币码', |
| 'MENGE' '' '数量', |
| 'MEINS' '' '单位', |
| 'KNDNR' '' '客户编码', |
| 'ARTNR' '' '物料编码', |
| 'FKART' '' '开票类型', |
| 'KAUFN' '' '销售订单', |
| 'KDPOS' '' '订单行', |
| 'AUFNR1' '' '生产或内部订单', |
| 'SKOST' '' '成本中心', |
| 'VKORG' '' '销售组织', |
| 'VTWEG' '' '分销渠道', |
| 'SPART' '' '产品组', |
| 'PRCTR1' '' '利润中心', |
| 'BZIRK' '' '销售地区', |
| 'AUART' '' '销售凭证类型', |
| 'KONDM' '' '物料定价组', |
| 'KTGRD' '' '物料科目分组', |
| 'KTGRM' '' '客户科目分组', |
| 'MVGR1' '' '物料组1', |
| 'MVGR2' '' '物料组2', |
| 'MVGR3' '' '物料组3', |
| 'MVGR4' '' '物料组4', |
| 'MVGR5' '' '物料组5', |
| 'WW002' '' '合同'. |
| FIELD-SYMBOLS <LINE> TYPE LVC_S_FCAT. |
| LOOP AT GT_FIELDCAT ASSIGNING <LINE>. |
| <LINE>-COL_POS = SY-TABIX. |
| <LINE>-OUTPUTLEN = '30'. |
| <LINE>-TABNAME = 'GT_ALV'. |
| CASE <LINE>-FIELDNAME. |
| WHEN 'BOX'. |
| <LINE>-EDIT = 'X'. |
| <LINE>-CHECKBOX = 'X'. |
| * WHEN 'MAKTX'. |
| * <line>-outputlen = '40'. |
| ENDCASE. |
| ENDLOOP. |
| ENDFORM. " sub_build_fieldcat |
| *&---------------------------------------------------------------------* |
| *& Form sub_set_layout |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| * --> p1 text |
| * <-- p2 text |
| *----------------------------------------------------------------------* |
| FORM SUB_SET_LAYOUT. |
| GS_LAYOUT-ZEBRA = 'X'. |
| GS_LAYOUT-CWIDTH_OPT = 'X'. |
| * gs_layout-NO_ROWMARK = 'X'. |
| ENDFORM. " sub_set_layout |
| *&---------------------------------------------------------------------* |
| *& Form sub_select_lines |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| * -->P_0682 text |
| *----------------------------------------------------------------------* |
| FORM SUB_SELECT_LINES USING P_SEL. |
| IF P_SEL = 'X'. |
| READ TABLE GT_ALV INTO GS_ALV WITH KEY BOX = SPACE |
| ICON = SPACE. |
| GS_ALV-BOX = 'X'. |
| MODIFY GT_ALV FROM GS_ALV TRANSPORTING BOX ICON WHERE BOX EQ SPACE |
| AND ICON EQ SPACE. |
| ELSEIF P_SEL = SPACE. |
| READ TABLE GT_ALV INTO GS_ALV WITH KEY BOX = 'X'. |
| GS_ALV-BOX = SPACE. |
| MODIFY GT_ALV FROM GS_ALV TRANSPORTING BOX WHERE BOX EQ 'X'. |
| ENDIF. |
| ENDFORM. " sub_select_lines |
| *&---------------------------------------------------------------------* |
| *& Form get_pc_filename |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| * -->P_pa_file text |
| *----------------------------------------------------------------------* |
| FORM GET_PC_FILENAME USING P_PA_FILE. |
| CALL FUNCTION 'WS_FILENAME_GET' |
| EXPORTING |
| DEF_FILENAME = ' ' |
| DEF_PATH = ' ' |
| * mask = ',Excel Files,*,xlsx,*.xlsX.' |
| * mask = ',TXT,*.TXT,Excel(2003),*.Xls,Excel,*.xlsx,All,*.*.' |
| MASK = ',*.Xls,*.xlsx,TXT,*.TXT,All,*.*.' |
| MODE = 'O' |
| TITLE = ' ' |
| IMPORTING |
| FILENAME = PA_FILE |
| EXCEPTIONS |
| INV_WINSYS = 1 |
| NO_BATCH = 2 |
| SELECTION_CANCEL = 3 |
| SELECTION_ERROR = 4 |
| OTHERS = 5. |
| ENDFORM. " get_pc_filename |
| *&---------------------------------------------------------------------* |
| *& Form up_file |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| * -->file ev_msg |
| *----------------------------------------------------------------------* |
| FORM UP_FILE USING FILE TYPE STRING |
| EV_MSG TYPE STRING |
| CHANGING ITAB TYPE STANDARD TABLE . |
| REFRESH:ITAB. |
| DATA: LV_I TYPE I, |
| LV_STR1(50), |
| LV_STR2(50). |
| DATA: LS_ITAB TYPE TY_UP. |
| IF FILE IS INITIAL. |
| EV_MSG = '请输入文件名'. |
| RETURN. |
| ENDIF. |
| "__" 检查文件类型 |
| LV_I = STRLEN( FILE ). |
| CHECK LV_I GE 4. |
| SUBTRACT 4 FROM LV_I. |
| SPLIT FILE+LV_I AT '.' INTO LV_STR1 LV_STR2. |
| IF LV_STR2 IS INITIAL. |
| LV_STR2 = LV_STR1. |
| ENDIF. |
| CONDENSE LV_STR2. |
| TRANSLATE LV_STR2 TO UPPER CASE. |
| CASE LV_STR2. |
| WHEN 'TXT'. |
| DATA: LV_FILENAME TYPE STRING. |
| LV_FILENAME = FILE. |
| CALL FUNCTION 'GUI_UPLOAD' |
| EXPORTING |
| FILENAME = LV_FILENAME |
| * FILETYPE = 'ASC' |
| FILETYPE = 'DAT' |
| TABLES |
| DATA_TAB = ITAB |
| * CHANGING |
| * ISSCANPERFORMED = ' ' |
| EXCEPTIONS |
| FILE_OPEN_ERROR = 1 |
| FILE_READ_ERROR = 2 |
| NO_BATCH = 3 |
| GUI_REFUSE_FILETRANSFER = 4 |
| INVALID_TYPE = 5 |
| NO_AUTHORITY = 6 |
| UNKNOWN_ERROR = 7 |
| BAD_DATA_FORMAT = 8 |
| HEADER_NOT_ALLOWED = 9 |
| SEPARATOR_NOT_ALLOWED = 10 |
| HEADER_TOO_LONG = 11 |
| UNKNOWN_DP_ERROR = 12 |
| ACCESS_DENIED = 13 |
| DP_OUT_OF_MEMORY = 14 |
| DISK_FULL = 15 |
| DP_TIMEOUT = 16 |
| OTHERS = 17. |
| WHEN 'XLS' OR 'XLSX'. |
| DATA: LS_TEXT TYPE TRUXS_T_TEXT_DATA. |
| DATA: LV_PATH TYPE RLGRAP-FILENAME. |
| DATA: LT_EXCEL TYPE KCDE_CELLS OCCURS 0 WITH HEADER LINE. |
| FIELD-SYMBOLS: <FS>. |
| * 路径转换大写 |
| TRANSLATE FILE TO UPPER CASE. |
| LV_PATH = FILE. |
| CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT' |
| EXPORTING |
| FILENAME = LV_PATH |
| I_BEGIN_COL = 1 |
| I_BEGIN_ROW = 4 |
| I_END_COL = 63 |
| I_END_ROW = 60000 |
| TABLES |
| INTERN = LT_EXCEL |
| * EXCEPTIONS |
| * INCONSISTENT_PARAMETERS = 1 |
| * UPLOAD_OLE = 2 |
| * OTHERS = 3 |
| . |
| IF SY-SUBRC <> 0. |
| * Implement suitable error handling here |
| ENDIF. |
| IF LT_EXCEL[] IS INITIAL . |
| EXIT. |
| ELSE. |
| SORT LT_EXCEL BY ROW COL. |
| LOOP AT LT_EXCEL. |
| ON CHANGE OF LT_EXCEL-ROW. |
| IF SY-TABIX <> 1. |
| APPEND LS_ITAB TO ITAB. |
| CLEAR LS_ITAB. |
| ENDIF. |
| ENDON. |
| ASSIGN COMPONENT LT_EXCEL-COL OF STRUCTURE LS_ITAB TO <FS>. |
| <FS> = LT_EXCEL-VALUE. |
| ENDLOOP. |
| APPEND LS_ITAB TO ITAB. |
| CLEAR LS_ITAB. |
| ENDIF. |
| IF ITAB[] IS INITIAL. |
| MESSAGE S000 WITH '导入模板的文件数据是空的!' DISPLAY LIKE 'E'. |
| LEAVE LIST-PROCESSING. |
| ENDIF. |
| WHEN OTHERS. |
| EV_MSG = '输入文件不支持导入'. |
| RETURN. |
| ENDCASE. |
| ENDFORM. |
| *----------------------------------------------------------------------* |
| * Start new screen * |
| *----------------------------------------------------------------------* |
| FORM BDC_DYNPRO USING PROGRAM DYNPRO CHANGING BDCDATA TYPE STANDARD TABLE . |
| DATA: BDCDATA1 TYPE BDCDATA. |
| CLEAR BDCDATA1. |
| BDCDATA1-PROGRAM = PROGRAM. |
| BDCDATA1-DYNPRO = DYNPRO. |
| BDCDATA1-DYNBEGIN = 'X'. |
| APPEND BDCDATA1 TO BDCDATA. |
| ENDFORM. "BDC_DYNPRO |
| *----------------------------------------------------------------------* |
| * Insert field * |
| *----------------------------------------------------------------------* |
| FORM BDC_FIELD USING FNAM FVAL CHANGING BDCDATA TYPE STANDARD TABLE. |
| DATA: BDCDATA1 TYPE BDCDATA. |
| CLEAR BDCDATA1. |
| BDCDATA1-FNAM = FNAM. |
| BDCDATA1-FVAL = FVAL. |
| APPEND BDCDATA1 TO BDCDATA. |
| ENDFORM. "BDC_FIELD |
| FORM SUB_DATE_CHECK USING PV_DATE PV_TEXT CHANGING PC_ERR PC_MSG. |
| DATA: LV_I TYPE I, |
| LV_MSG TYPE STRING, |
| LV_DATE TYPE SYDATUM. |
| CHECK PV_DATE IS NOT INITIAL. |
| REPLACE ALL OCCURRENCES OF '-' IN PV_DATE WITH ''. |
| REPLACE ALL OCCURRENCES OF '.' IN PV_DATE WITH ''. |
| REPLACE ALL OCCURRENCES OF '/' IN PV_DATE WITH ''. |
| LV_I = STRLEN( PV_DATE ). |
| IF LV_I NE 8. |
| CONCATENATE PV_TEXT '日期格式不正确' INTO LV_MSG. |
| PERFORM SUB_ADD_MSG USING LV_MSG SPACE CHANGING PC_MSG. |
| PC_ERR = C_X. |
| RETURN. |
| ENDIF. |
| LV_DATE = PV_DATE. |
| CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY' |
| EXPORTING |
| DATE = LV_DATE |
| EXCEPTIONS |
| PLAUSIBILITY_CHECK_FAILED = 1 |
| OTHERS = 2. |
| IF SY-SUBRC <> 0. |
| CONCATENATE PV_TEXT '日期格式不正确' INTO LV_MSG. |
| PERFORM SUB_ADD_MSG USING LV_MSG SPACE CHANGING PC_MSG. |
| PC_ERR = C_X. |
| ENDIF. |
| ENDFORM. |
| *&---------------------------------------------------------------------* |
| *& Form ADD_MSG |
| *&---------------------------------------------------------------------* |
| * text 拼凑信息 |
| *----------------------------------------------------------------------* |
| * -->PA_TXT text |
| * -->PA_SEP text |
| * -->PC_MSG text |
| *----------------------------------------------------------------------* |
| FORM SUB_ADD_MSG |
| USING PA_TXT PA_SEP |
| CHANGING PC_MSG. |
| DATA LV_MSG TYPE STRING. |
| DATA LV_TXT TYPE STRING. |
| LV_MSG = PC_MSG . |
| LV_TXT = PA_TXT . |
| CONDENSE LV_MSG NO-GAPS. |
| CONDENSE LV_TXT NO-GAPS. |
| CHECK NOT LV_TXT IS INITIAL. |
| IF LV_MSG IS INITIAL. |
| LV_MSG = LV_TXT. |
| ELSE. |
| CONCATENATE LV_MSG LV_TXT INTO LV_MSG SEPARATED BY PA_SEP. |
| ENDIF. |
| PC_MSG = LV_MSG. |
| ENDFORM. " add_des |
| FORM SUB_INPUT CHANGING PC_FIELD. |
| CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' |
| EXPORTING |
| INPUT = PC_FIELD |
| IMPORTING |
| OUTPUT = PC_FIELD. |
| ENDFORM. |
| FORM SUB_OPEN_EXCEL. |
| DATA: L_SHTNAME(40) TYPE C VALUE 'SAP财务凭证手工批量创建模板'. |
| PERFORM SUB_CREATEEXCELAPPLICATION. |
| PERFORM SUB_OPENEXCELFILE USING PA_FILE. |
| PERFORM SUB_SETEXCELAPPVISIBLE. |
| PERFORM SUB_ACTIVEEXCELSHEET USING L_SHTNAME. |
| ENDFORM. |
| *&---------------------------------------------------------------------* |
| *& Form CREATEEXCELAPPLICATION |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| FORM SUB_CREATEEXCELAPPLICATION. |
| CREATE OBJECT GS_EXCEL 'EXCEL.APPLICATION'. |
| PERFORM SUB_ERROR_HANDLE. |
| ENDFORM. "CreateExcelApplication |
| *&---------------------------------------------------------------------* |
| *& Form OPENEXCELFILE |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| * -->FILENAME text |
| *----------------------------------------------------------------------* |
| FORM SUB_OPENEXCELFILE USING FILENAME LIKE RLGRAP-FILENAME. |
| CALL METHOD OF GS_EXCEL 'Workbooks' = GS_WBOOK. |
| PERFORM SUB_ERROR_HANDLE. |
| CALL METHOD OF GS_WBOOK 'Open' |
| EXPORTING |
| #1 = FILENAME. |
| PERFORM SUB_ERROR_HANDLE. |
| ENDFORM. "openexcelfile |
| *&---------------------------------------------------------------------* |
| *& Form setexcelappvisible |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| FORM SUB_SETEXCELAPPVISIBLE. |
| SET PROPERTY OF GS_EXCEL 'Visible' = 1 . |
| PERFORM SUB_ERROR_HANDLE. |
| ENDFORM. "setexcelappVisible |
| *&---------------------------------------------------------------------* |
| *& Form activeexcelsheet |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| * -->SHEETNAME text |
| *----------------------------------------------------------------------* |
| FORM SUB_ACTIVEEXCELSHEET USING SHEETNAME. |
| CALL METHOD OF GS_EXCEL 'worksheets' = GS_SHEET |
| EXPORTING |
| #1 = SHEETNAME. |
| CALL METHOD OF GS_SHEET 'activate'. |
| PERFORM SUB_ERROR_HANDLE. |
| ENDFORM. "openexcelfile |
| *&---------------------------------------------------------------------* |
| *& Form ERROR_HANDLE |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| FORM SUB_ERROR_HANDLE. |
| DATA: LV_MES TYPE STRING. |
| IF SY-SUBRC <> 0. |
| GV_EXCEL_E = C_X. |
| LV_MES = SY-SUBRC. |
| CONCATENATE 'Fehler bei OLE-Automation:' LV_MES INTO LV_MES. |
| MESSAGE S001(00) WITH LV_MES DISPLAY LIKE 'E'. |
| ENDIF. |
| ENDFORM. "error_handle |
| FORM SUB_SHOW_PERCENT_15 USING PA_MESSAGE TYPE C |
| PA_PERCENT TYPE I. |
| CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' |
| EXPORTING |
| PERCENTAGE = PA_PERCENT |
| TEXT = PA_MESSAGE. |
| ENDFORM. |
| *&---------------------------------------------------------------------* |
| *& Form SUB_XLS_PASTE_ITAB |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| * -->WORKSHEET text |
| * -->ROW text |
| * -->COL text |
| * -->ITAB text |
| *----------------------------------------------------------------------* |
| FORM SUB_XLS_PASTE_ITAB USING PA_WORKSHEET TYPE OLE2_OBJECT |
| PA_ROW TYPE I |
| PA_COL TYPE I |
| PT_ITAB TYPE ANY TABLE. |
| DATA: LV_RC TYPE I, |
| LV_CELL TYPE OLE2_OBJECT. |
| CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT |
| IMPORTING |
| DATA = PT_ITAB |
| CHANGING |
| RC = LV_RC |
| EXCEPTIONS |
| CNTL_ERROR = 1 |
| ERROR_NO_GUI = 2 |
| NOT_SUPPORTED_BY_GUI = 3 |
| OTHERS = 4. |
| IF SY-SUBRC <> 0. |
| EXIT. |
| ENDIF. |
| CALL METHOD OF |
| PA_WORKSHEET |
| 'CELLS' = LV_CELL |
| EXPORTING |
| #1 = PA_ROW |
| #2 = PA_COL. |
| IF LV_CELL IS INITIAL. |
| EXIT. |
| ENDIF. |
| CALL METHOD OF |
| LV_CELL |
| 'SELECT'. |
| CALL METHOD OF |
| PA_WORKSHEET |
| 'PASTE'. |
| CALL METHOD OF |
| LV_CELL |
| 'SELECT'. |
| ENDFORM. "XLS_PASTE_ITAB |
| *&---------------------------------------------------------------------* |
| *& Form EXISTEXCELAPPLICATION |
| *&---------------------------------------------------------------------* |
| * text |
| *----------------------------------------------------------------------* |
| FORM SUB_EXISTEXCELAPPLICATION. |
| ****保存文件**** |
| GET PROPERTY OF GS_EXCEL 'ActiveSheet' = GS_SHEET. "获取活动SHEET |
| FREE OBJECT GS_SHEET. |
| FREE OBJECT GS_WBOOK. |
| GET PROPERTY OF GS_EXCEL 'ActiveWorkbook' = GS_WBOOK. |
| CALL METHOD OF GS_WBOOK 'SAVE'. |
| ****释放对象**** |
| FREE OBJECT GS_CELL. |
| FREE OBJECT GS_SHEET. |
| FREE OBJECT GS_WBOOK. |
| FREE OBJECT GS_EXCEL. |
| ENDFORM. "ExistExcelApplication |
| FORM SUB_CREATE_FB01 . |
| DATA: LS_DOCUMENTHEADER TYPE BAPIACHE09, |
| LS_ACCOUNTGL TYPE BAPIACGL09, |
| LT_ACCOUNTGL TYPE STANDARD TABLE OF BAPIACGL09, |
| LS_RETURN TYPE BAPIRET2, |
| LT_RETURN TYPE STANDARD TABLE OF BAPIRET2, |
| LS_ACCOUNTRECEIVABLE TYPE BAPIACAR09, |
| LT_ACCOUNTRECEIVABLE TYPE STANDARD TABLE OF BAPIACAR09, |
| LS_CURRENCYAMOUNT TYPE BAPIACCR09, |
| LT_CURRENCYAMOUNT TYPE STANDARD TABLE OF BAPIACCR09, |
| LS_ACCOUNTPAYABLE TYPE BAPIACAP09, |
| LT_ACCOUNTPAYABLE TYPE STANDARD TABLE OF BAPIACAP09, |
| LS_EXTENSION2 TYPE BAPIPAREX, |
| LT_EXTENSION2 TYPE STANDARD TABLE OF BAPIPAREX. |
| DATA LV_ITEMNO_ACC TYPE POSNR_ACC . |
| DATA: LV_MSG TYPE BAPI_MSG, |
| LV_MESSAGE TYPE BAPI_MSG. |
| DATA LV_WAERS2 TYPE T001-WAERS. "公司本位币 |
| DATA:T_TAX_INFO LIKE TABLE OF RTAX1U15, |
| WA_TAX_INFO LIKE RTAX1U15, |
| LT_ACCOUNTTAX LIKE TABLE OF BAPIACTX09, |
| LS_ACCOUNTTAX LIKE BAPIACTX09, |
| I_WRBTR LIKE BSEG-WRBTR. |
| DATA: LS_ZFI_BADI_001 TYPE ZFI_BADI_001. |
| FIELD-SYMBOLS: <L_ALV> TYPE TY_ALV. |
| FIELD-SYMBOLS: <LS_ALV> TYPE TY_ALV. |
| LOOP AT GT_ALV ASSIGNING <L_ALV> WHERE BOX = 'X' GROUP BY ( KEY1 = <L_ALV>-ZCODE ). |
| REFRESH: LT_ACCOUNTGL,LT_RETURN,LT_ACCOUNTRECEIVABLE,LT_CURRENCYAMOUNT, |
| LT_ACCOUNTPAYABLE,T_TAX_INFO,LT_ACCOUNTTAX,LT_EXTENSION2. |
| CLEAR: LS_DOCUMENTHEADER,LS_ACCOUNTGL,LS_RETURN,LS_ACCOUNTRECEIVABLE, |
| LS_CURRENCYAMOUNT,LS_ACCOUNTPAYABLE,LS_EXTENSION2,LS_ACCOUNTTAX, |
| WA_TAX_INFO,LS_ZFI_BADI_001. |
| * 抬头参数 |
| LS_DOCUMENTHEADER-DOC_TYPE = <L_ALV>-BLART. " 凭证类型 |
| LS_DOCUMENTHEADER-COMP_CODE = <L_ALV>-BUKRS. " 公司代码 |
| LS_DOCUMENTHEADER-DOC_DATE = <L_ALV>-BLDAT. " 凭证日期 |
| LS_DOCUMENTHEADER-PSTNG_DATE = <L_ALV>-BUDAT. " 过账日期 |
| LS_DOCUMENTHEADER-FIS_PERIOD = <L_ALV>-MONAT. " 过账期间 |
| LS_DOCUMENTHEADER-REF_DOC_NO = <L_ALV>-XBLNR. " 参照 |
| LS_DOCUMENTHEADER-TRANS_DATE = <L_ALV>-WWERT. " 换算日期 |
| LS_DOCUMENTHEADER-HEADER_TXT = <L_ALV>-BKTXT. " 抬头文本 |
| LS_DOCUMENTHEADER-USERNAME = SY-UNAME. |
| LS_DOCUMENTHEADER-FISC_YEAR = <L_ALV>-BUDAT+0(4). "年度 |
| LS_DOCUMENTHEADER-FIS_PERIOD = <L_ALV>-BUDAT+4(2). " 期间 |
| SELECT SINGLE WAERS INTO LV_WAERS2 |
| FROM T001 WHERE BUKRS EQ LS_DOCUMENTHEADER-COMP_CODE. |
| LOOP AT GT_ALV INTO DATA(LS_ALV) WHERE ZCODE = <L_ALV>-ZCODE . |
| CLEAR LS_ZFI_BADI_001. |
| * 行项目号 |
| LV_ITEMNO_ACC = SY-TABIX. |
| CASE LS_ALV-KOART. |
| WHEN 'D'."客户 |
| "添加前导零 |
| LS_ALV-KUNNR = |{ LS_ALV-KUNNR ALPHA = IN }|. |
| LS_ACCOUNTRECEIVABLE-ITEMNO_ACC = LV_ITEMNO_ACC. "行项目号 |
| LS_ACCOUNTRECEIVABLE-CUSTOMER = LS_ALV-KUNNR. "客户编码 |
| LS_ACCOUNTRECEIVABLE-GL_ACCOUNT = LS_ALV-HKONT. "总账科目 |
| LS_ACCOUNTRECEIVABLE-SP_GL_IND = LS_ALV-UMSKZ. "特别总账标识 |
| LS_ACCOUNTRECEIVABLE-COMP_CODE = <L_ALV>-BUKRS. "公司代码 |
| LS_ACCOUNTRECEIVABLE-BUS_AREA = LS_ALV-GSBER. "业务范围 |
| LS_ACCOUNTRECEIVABLE-PROFIT_CTR = LS_ALV-PRCTR. "利润中心 |
| LS_ACCOUNTRECEIVABLE-ITEM_TEXT = LS_ALV-SGTXT. "文本 |
| LS_ACCOUNTRECEIVABLE-BLINE_DATE = LS_ALV-ZFBDT. "到期日 |
| LS_ACCOUNTRECEIVABLE-ALLOC_NMBR = LS_ALV-ZUONR. " 分配号 |
| LS_ACCOUNTRECEIVABLE-PMNTTRMS = LS_ALV-ZTERM. "付款条件 |
| LS_ACCOUNTRECEIVABLE-PAYMT_REF = LS_ALV-KIDNO. "付款参考 |
| LS_ACCOUNTRECEIVABLE-PYMT_METH = LS_ALV-ZLSCH. "付款方式 |
| LS_ACCOUNTRECEIVABLE-PMTMTHSUPL = LS_ALV-UZAWE. "付款方式补充 |
| LS_ACCOUNTRECEIVABLE-REF_KEY_1 = LS_ALV-XREF1. "参考码1 |
| LS_ACCOUNTRECEIVABLE-REF_KEY_2 = LS_ALV-XREF2. "参考码2 |
| LS_ACCOUNTRECEIVABLE-REF_KEY_3 = LS_ALV-XREF3. "参考码3 |
| LS_ACCOUNTRECEIVABLE-TAX_CODE = LS_ALV-MWSKZ. "税码 |
| APPEND LS_ACCOUNTRECEIVABLE TO LT_ACCOUNTRECEIVABLE. |
| CLEAR LS_ACCOUNTRECEIVABLE. |
| WHEN 'K'."供应商 |
| LS_ALV-LIFNR = |{ LS_ALV-LIFNR ALPHA = IN }|. |
| LS_ACCOUNTPAYABLE-ITEMNO_ACC = LV_ITEMNO_ACC. "行项目号 |
| LS_ACCOUNTPAYABLE-VENDOR_NO = LS_ALV-LIFNR. "供应商编码 |
| LS_ACCOUNTPAYABLE-GL_ACCOUNT = LS_ALV-HKONT. "总账科目 |
| LS_ACCOUNTPAYABLE-SP_GL_IND = LS_ALV-UMSKZ. "特别总账标识 |
| LS_ACCOUNTPAYABLE-COMP_CODE = <L_ALV>-BUKRS. "公司代码 |
| LS_ACCOUNTPAYABLE-BUS_AREA = LS_ALV-GSBER. "业务范围 |
| LS_ACCOUNTPAYABLE-PROFIT_CTR = LS_ALV-PRCTR. "利润中心 |
| LS_ACCOUNTPAYABLE-ITEM_TEXT = LS_ALV-SGTXT. "文本 |
| LS_ACCOUNTPAYABLE-BLINE_DATE = LS_ALV-ZFBDT. "到期日 |
| LS_ACCOUNTPAYABLE-ALLOC_NMBR = LS_ALV-ZUONR. " 分配号 |
| LS_ACCOUNTPAYABLE-PMNTTRMS = LS_ALV-ZTERM. "付款条件 |
| LS_ACCOUNTPAYABLE-PAYMT_REF = LS_ALV-KIDNO. "付款参考 |
| LS_ACCOUNTPAYABLE-PYMT_METH = LS_ALV-ZLSCH. "付款方式 |
| LS_ACCOUNTPAYABLE-PMTMTHSUPL = LS_ALV-UZAWE. "付款方式补充 |
| LS_ACCOUNTPAYABLE-REF_KEY_1 = LS_ALV-XREF1. "参考码1 |
| LS_ACCOUNTPAYABLE-REF_KEY_2 = LS_ALV-XREF2. "参考码2 |
| LS_ACCOUNTPAYABLE-REF_KEY_3 = LS_ALV-XREF3. "参考码3 |
| LS_ACCOUNTPAYABLE-TAX_CODE = LS_ALV-MWSKZ. "税码 |
| APPEND LS_ACCOUNTPAYABLE TO LT_ACCOUNTPAYABLE. |
| CLEAR LS_ACCOUNTPAYABLE. |
| WHEN 'S'."总账科目 |
| LS_ACCOUNTGL-ITEMNO_ACC = LV_ITEMNO_ACC. "行项目号 |
| LS_ACCOUNTGL-GL_ACCOUNT = LS_ALV-HKONT. "总账科目 |
| LS_ACCOUNTGL-BUS_AREA = LS_ALV-GSBER. "业务范围 |
| LS_ACCOUNTGL-PROFIT_CTR = LS_ALV-PRCTR. "利润中心 |
| LS_ACCOUNTGL-ITEM_TEXT = LS_ALV-SGTXT. "文本 |
| LS_ACCOUNTGL-REF_KEY_1 = LS_ALV-XREF1. "参考码1 |
| LS_ACCOUNTGL-REF_KEY_2 = LS_ALV-XREF2. "参考码2 |
| LS_ACCOUNTGL-REF_KEY_3 = LS_ALV-XREF3. "参考码3 |
| LS_ACCOUNTGL-TAX_CODE = LS_ALV-MWSKZ. "税码 |
| LS_ACCOUNTGL-COSTCENTER = LS_ALV-KOSTL. "成本中心 |
| IF LS_ALV-PROJK IS NOT INITIAL. |
| LS_ACCOUNTGL-WBS_ELEMENT = LS_ALV-PROJK. "WBS 元素(工作号) |
| ENDIF. |
| LS_ACCOUNTGL-ORDERID = LS_ALV-AUFNR."内部订单 |
| LS_ACCOUNTGL-QUANTITY = LS_ALV-MENGE. "数量 |
| LS_ACCOUNTGL-BASE_UOM = LS_ALV-MEINS. "单位 |
| APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL. |
| CLEAR LS_ACCOUNTGL. |
| WHEN OTHERS. |
| ENDCASE. |
| LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ITEMNO_ACC. |
| LS_CURRENCYAMOUNT-CURRENCY = LS_ALV-WAERS. " 货币 |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = LS_ALV-WRBTR. |
| IF LS_ALV-SHKZG = 'H'. |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - LS_CURRENCYAMOUNT-AMT_DOCCUR. |
| ENDIF. |
| IF GS_ALV-KURSF IS NOT INITIAL. |
| LS_CURRENCYAMOUNT-EXCH_RATE = LS_ALV-KURSF." 汇率 |
| ENDIF. |
| APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT. |
| CLEAR LS_CURRENCYAMOUNT. |
| IF LS_ALV-WAERS NE LV_WAERS2 AND LS_ALV-DMBTR IS NOT INITIAL. |
| "本位币 |
| LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ITEMNO_ACC. |
| LS_CURRENCYAMOUNT-CURR_TYPE = '10'. |
| LS_CURRENCYAMOUNT-CURRENCY = LV_WAERS2. |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = LS_ALV-DMBTR. |
| IF LS_ALV-SHKZG = 'H'. |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - LS_CURRENCYAMOUNT-AMT_DOCCUR. |
| ENDIF. |
| APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT. |
| CLEAR LS_CURRENCYAMOUNT. |
| ENDIF. |
| "税额计算 |
| IF LS_ALV-MWSKZ IS NOT INITIAL. |
| LV_ITEMNO_ACC = LV_ITEMNO_ACC + 1. |
| LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ITEMNO_ACC. |
| LS_CURRENCYAMOUNT-CURRENCY = LS_ALV-WAERS. " 货币码 |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = LS_ALV-DMBTR. " 税额 |
| LS_CURRENCYAMOUNT-AMT_BASE = LS_ALV-WRBTR. " 凭证货币金额 |
| IF LS_ALV-SHKZG = 'H'. |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - LS_CURRENCYAMOUNT-AMT_DOCCUR. |
| LS_CURRENCYAMOUNT-AMT_BASE = 0 - LS_CURRENCYAMOUNT-AMT_BASE. |
| ENDIF. |
| IF LS_ALV-KURSF IS NOT INITIAL. |
| LS_CURRENCYAMOUNT-EXCH_RATE = LS_ALV-KURSF. " 汇率 |
| ENDIF. |
| APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT. |
| CLEAR LS_CURRENCYAMOUNT. |
| IF LS_ALV-WAERS NE LV_WAERS2 AND LS_ALV-WRBTR IS NOT INITIAL. |
| "税额本位币. |
| LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ITEMNO_ACC. |
| LS_CURRENCYAMOUNT-CURR_TYPE = '10'. " 货币类型 |
| LS_CURRENCYAMOUNT-CURRENCY = LS_ALV-WAERS. " 货币码 |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = LS_ALV-WRBTR. " 税额(本位币) |
| LS_CURRENCYAMOUNT-AMT_BASE = LS_ALV-DMBTR. |
| IF LS_ALV-SHKZG = 'H'. |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - LS_CURRENCYAMOUNT-AMT_DOCCUR. |
| LS_CURRENCYAMOUNT-AMT_BASE = 0 - LS_CURRENCYAMOUNT-AMT_BASE. |
| ENDIF. |
| APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT. |
| CLEAR LS_CURRENCYAMOUNT. |
| ENDIF. |
| CLEAR: T_TAX_INFO,I_WRBTR. |
| I_WRBTR = LS_ALV-WRBTR . |
| CALL FUNCTION 'CALCULATE_TAX_FROM_NET_AMOUNT' |
| EXPORTING |
| I_BUKRS = LS_DOCUMENTHEADER-COMP_CODE "公司代码 |
| I_MWSKZ = LS_ALV-MWSKZ "税码 |
| I_WAERS = LS_ALV-WAERS "币种 |
| I_WRBTR = I_WRBTR "金额 |
| TABLES |
| T_MWDAT = T_TAX_INFO |
| EXCEPTIONS |
| OTHERS = 4. |
| IF SY-SUBRC <> 0. |
| ENDIF. |
| READ TABLE T_TAX_INFO INTO WA_TAX_INFO INDEX 1. |
| CLEAR LS_ACCOUNTTAX. |
| CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' |
| EXPORTING |
| INPUT = WA_TAX_INFO-HKONT |
| IMPORTING |
| OUTPUT = LS_ACCOUNTTAX-GL_ACCOUNT. " 总账科目 |
| LS_ACCOUNTTAX-ITEMNO_ACC = LV_ITEMNO_ACC. |
| LS_ACCOUNTTAX-COND_KEY = WA_TAX_INFO-KSCHL." 条件类型 MWVS |
| LS_ACCOUNTTAX-ACCT_KEY = WA_TAX_INFO-KTOSL." 事务关键字 VST |
| LS_ACCOUNTTAX-TAX_CODE = LS_ALV-MWSKZ. " 税码 J1 |
| LS_ACCOUNTTAX-TAX_RATE = WA_TAX_INFO-MSATZ." 税率 170.000 |
| APPEND LS_ACCOUNTTAX TO LT_ACCOUNTTAX. |
| CLEAR:LS_ACCOUNTTAX. |
| ENDIF. |
| IF LS_ALV-BSCHL IS NOT INITIAL OR LS_ALV-XNEGP IS NOT INITIAL |
| OR LS_ALV-RSTGR IS NOT INITIAL OR LS_ALV-NUMPG IS NOT INITIAL. |
| LS_EXTENSION2-STRUCTURE = 'ZFI_BADI_001'. |
| LS_ZFI_BADI_001-POSNR = LV_ITEMNO_ACC. |
| LS_ZFI_BADI_001-BSCHL = LS_ALV-BSCHL. "记账码 |
| LS_ZFI_BADI_001-XNEGP = LS_ALV-XNEGP. "反记账 |
| LS_ZFI_BADI_001-RSTGR = LS_ALV-RSTGR. "原因代码 |
| LS_ZFI_BADI_001-NUMPG = LS_ALV-NUMPG. "页数 |
| LS_EXTENSION2-VALUEPART1 = LS_ZFI_BADI_001. |
| APPEND LS_EXTENSION2 TO LT_EXTENSION2. |
| CLEAR LS_EXTENSION2. |
| ENDIF. |
| ENDLOOP. |
| CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST' "创建会计凭证 |
| EXPORTING |
| DOCUMENTHEADER = LS_DOCUMENTHEADER |
| * CUSTOMERCPD = |
| * CONTRACTHEADER = |
| TABLES |
| ACCOUNTGL = LT_ACCOUNTGL |
| ACCOUNTRECEIVABLE = LT_ACCOUNTRECEIVABLE |
| ACCOUNTPAYABLE = LT_ACCOUNTPAYABLE |
| * ACCOUNTTAX = |
| CURRENCYAMOUNT = LT_CURRENCYAMOUNT |
| * CRITERIA = |
| * VALUEFIELD = |
| * EXTENSION1 = |
| RETURN = LT_RETURN |
| * PAYMENTCARD = |
| * CONTRACTITEM = |
| EXTENSION2 = LT_EXTENSION2 |
| * REALESTATE = |
| * ACCOUNTWT = |
| . |
| LOOP AT GT_ALV ASSIGNING <LS_ALV> WHERE ZCODE = <L_ALV>-ZCODE. |
| READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'E'. |
| IF SY-SUBRC = 0. |
| IF <LS_ALV>-KUNNR IS NOT INITIAL. |
| READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'E' PARAMETER = 'ACCOUNTRECEIVABLE'. |
| IF SY-SUBRC = 0. |
| <LS_ALV>-ICON = C_ICON_E. |
| <LS_ALV>-MSG = LS_RETURN-MESSAGE. |
| ENDIF. |
| ELSEIF <LS_ALV>-LIFNR IS NOT INITIAL . |
| READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'E' PARAMETER = 'ACCOUNTPAYABLE'. |
| IF SY-SUBRC = 0. |
| <LS_ALV>-ICON = C_ICON_E. |
| <LS_ALV>-MSG = LS_RETURN-MESSAGE. |
| ENDIF. |
| ELSE. |
| READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'E' PARAMETER = 'ACCOUNTGL'. |
| IF SY-SUBRC = 0. |
| <LS_ALV>-ICON = C_ICON_E. |
| <LS_ALV>-MSG = LS_RETURN-MESSAGE. |
| ENDIF. |
| ENDIF. |
| IF <L_ALV>-ICON IS INITIAL. |
| LOOP AT LT_RETURN INTO LS_RETURN. |
| CALL FUNCTION 'MESSAGE_TEXT_BUILD' |
| EXPORTING |
| MSGID = LS_RETURN-ID |
| MSGNR = LS_RETURN-NUMBER |
| MSGV1 = LS_RETURN-MESSAGE_V1 |
| MSGV2 = LS_RETURN-MESSAGE_V2 |
| MSGV3 = LS_RETURN-MESSAGE_V3 |
| MSGV4 = LS_RETURN-MESSAGE_V4 |
| IMPORTING |
| MESSAGE_TEXT_OUTPUT = LV_MSG. |
| CONCATENATE LV_MESSAGE LV_MSG INTO LV_MESSAGE. |
| ENDLOOP. |
| <LS_ALV>-ICON = C_ICON_E. |
| <LS_ALV>-MSG = LV_MESSAGE. |
| CLEAR :LV_MSG,LS_RETURN,LV_MESSAGE. |
| ENDIF. |
| CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. |
| ELSE. |
| READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'S'. |
| IF SY-SUBRC = 0. |
| <LS_ALV>-ICON = C_ICON_S. |
| <LS_ALV>-MSG = '会计凭证' && LS_RETURN-MESSAGE_V2 && '导入成功'. |
| ENDIF. |
| CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' |
| EXPORTING |
| WAIT = 'X'. |
| ENDIF. |
| CLEAR :LS_RETURN. |
| ENDLOOP. |
| ENDLOOP. |
| ENDFORM. |
| FORM SUB_INPUT00 CHANGING PV_FIELD. |
| CHECK PV_FIELD IS NOT INITIAL. |
| PERFORM SUB_INPUT CHANGING PV_FIELD. |
| ENDFORM. |
| *&---------------------------------------------------------------------* |
| *& Form ACC_CHECK |
| *&---------------------------------------------------------------------* |
| *& text |
| *&---------------------------------------------------------------------* |
| *& --> p1 text |
| *& <-- p2 text |
| *&---------------------------------------------------------------------* |
| FORM ACC_CHECK . |
| DATA: LS_DOCUMENTHEADER TYPE BAPIACHE09, |
| LS_ACCOUNTGL TYPE BAPIACGL09, |
| LT_ACCOUNTGL TYPE STANDARD TABLE OF BAPIACGL09, |
| LS_RETURN TYPE BAPIRET2, |
| LT_RETURN TYPE STANDARD TABLE OF BAPIRET2, |
| LS_ACCOUNTRECEIVABLE TYPE BAPIACAR09, |
| LT_ACCOUNTRECEIVABLE TYPE STANDARD TABLE OF BAPIACAR09, |
| LS_CURRENCYAMOUNT TYPE BAPIACCR09, |
| LT_CURRENCYAMOUNT TYPE STANDARD TABLE OF BAPIACCR09, |
| LS_ACCOUNTPAYABLE TYPE BAPIACAP09, |
| LT_ACCOUNTPAYABLE TYPE STANDARD TABLE OF BAPIACAP09, |
| LS_EXTENSION2 TYPE BAPIPAREX, |
| LT_EXTENSION2 TYPE STANDARD TABLE OF BAPIPAREX. |
| DATA LV_ITEMNO_ACC TYPE POSNR_ACC . |
| DATA: LV_MSG TYPE BAPI_MSG, |
| LV_MESSAGE TYPE BAPI_MSG. |
| DATA LV_WAERS2 TYPE T001-WAERS. "公司本位币 |
| DATA:T_TAX_INFO LIKE TABLE OF RTAX1U15, |
| WA_TAX_INFO LIKE RTAX1U15, |
| LT_ACCOUNTTAX LIKE TABLE OF BAPIACTX09, |
| LS_ACCOUNTTAX LIKE BAPIACTX09, |
| I_WRBTR LIKE BSEG-WRBTR. |
| DATA: LS_ZFI_BADI_001 TYPE ZFI_BADI_001. |
| FIELD-SYMBOLS: <L_ALV> TYPE TY_ALV. |
| LOOP AT GT_ALV INTO GS_ALV WHERE BOX = 'X' GROUP BY ( KEY1 = GS_ALV-ZCODE ). |
| * 抬头参数 |
| LS_DOCUMENTHEADER-DOC_TYPE = GS_ALV-BLART. " 凭证类型 |
| LS_DOCUMENTHEADER-COMP_CODE = GS_ALV-BUKRS. " 公司代码 |
| LS_DOCUMENTHEADER-DOC_DATE = GS_ALV-BLDAT. " 凭证日期 |
| LS_DOCUMENTHEADER-PSTNG_DATE = GS_ALV-BUDAT. " 过账日期 |
| LS_DOCUMENTHEADER-FIS_PERIOD = GS_ALV-MONAT. " 过账期间 |
| LS_DOCUMENTHEADER-REF_DOC_NO = GS_ALV-XBLNR. " 参照 |
| LS_DOCUMENTHEADER-TRANS_DATE = GS_ALV-WWERT. " 换算日期 |
| LS_DOCUMENTHEADER-HEADER_TXT = GS_ALV-BKTXT. " 抬头文本 |
| LS_DOCUMENTHEADER-USERNAME = SY-UNAME. |
| LS_DOCUMENTHEADER-FISC_YEAR = GS_ALV-BUDAT+0(4). "年度 |
| LS_DOCUMENTHEADER-FIS_PERIOD = GS_ALV-BUDAT+4(2). " 期间 |
| SELECT SINGLE WAERS INTO LV_WAERS2 |
| FROM T001 WHERE BUKRS EQ LS_DOCUMENTHEADER-COMP_CODE. |
| LOOP AT GT_ALV INTO DATA(LS_ALV) WHERE ZCODE = GS_ALV-ZCODE. |
| CLEAR LS_ZFI_BADI_001. |
| * 行项目号 |
| LV_ITEMNO_ACC = SY-TABIX. |
| CASE LS_ALV-KOART. |
| WHEN 'D'."客户 |
| "添加前导零 |
| LS_ALV-KUNNR = |{ LS_ALV-KUNNR ALPHA = IN }|. |
| LS_ACCOUNTRECEIVABLE-ITEMNO_ACC = LV_ITEMNO_ACC. "行项目号 |
| LS_ACCOUNTRECEIVABLE-CUSTOMER = LS_ALV-KUNNR. "客户编码 |
| LS_ACCOUNTRECEIVABLE-GL_ACCOUNT = LS_ALV-HKONT. "总账科目 |
| LS_ACCOUNTRECEIVABLE-SP_GL_IND = LS_ALV-UMSKZ. "特别总账标识 |
| LS_ACCOUNTRECEIVABLE-COMP_CODE = GS_ALV-BUKRS. "公司代码 |
| LS_ACCOUNTRECEIVABLE-BUS_AREA = LS_ALV-GSBER. "业务范围 |
| LS_ACCOUNTRECEIVABLE-PROFIT_CTR = LS_ALV-PRCTR. "利润中心 |
| LS_ACCOUNTRECEIVABLE-ITEM_TEXT = LS_ALV-SGTXT. "文本 |
| LS_ACCOUNTRECEIVABLE-BLINE_DATE = LS_ALV-ZFBDT. "到期日 |
| LS_ACCOUNTRECEIVABLE-ALLOC_NMBR = LS_ALV-ZUONR. " 分配号 |
| LS_ACCOUNTRECEIVABLE-PMNTTRMS = LS_ALV-ZTERM. "付款条件 |
| LS_ACCOUNTRECEIVABLE-PAYMT_REF = LS_ALV-KIDNO. "付款参考 |
| LS_ACCOUNTRECEIVABLE-PYMT_METH = LS_ALV-ZLSCH. "付款方式 |
| LS_ACCOUNTRECEIVABLE-PMTMTHSUPL = LS_ALV-UZAWE. "付款方式补充 |
| LS_ACCOUNTRECEIVABLE-REF_KEY_1 = LS_ALV-XREF1. "参考码1 |
| LS_ACCOUNTRECEIVABLE-REF_KEY_2 = LS_ALV-XREF2. "参考码2 |
| LS_ACCOUNTRECEIVABLE-REF_KEY_3 = LS_ALV-XREF3. "参考码3 |
| LS_ACCOUNTRECEIVABLE-TAX_CODE = LS_ALV-MWSKZ. "税码 |
| APPEND LS_ACCOUNTRECEIVABLE TO LT_ACCOUNTRECEIVABLE. |
| CLEAR LS_ACCOUNTRECEIVABLE. |
| WHEN 'K'."供应商 |
| LS_ALV-LIFNR = |{ LS_ALV-LIFNR ALPHA = IN }|. |
| LS_ACCOUNTPAYABLE-ITEMNO_ACC = LV_ITEMNO_ACC. "行项目号 |
| LS_ACCOUNTPAYABLE-VENDOR_NO = LS_ALV-LIFNR. "供应商编码 |
| LS_ACCOUNTPAYABLE-GL_ACCOUNT = LS_ALV-HKONT. "总账科目 |
| LS_ACCOUNTPAYABLE-SP_GL_IND = LS_ALV-UMSKZ. "特别总账标识 |
| LS_ACCOUNTPAYABLE-COMP_CODE = GS_ALV-BUKRS. "公司代码 |
| LS_ACCOUNTPAYABLE-BUS_AREA = LS_ALV-GSBER. "业务范围 |
| LS_ACCOUNTPAYABLE-PROFIT_CTR = LS_ALV-PRCTR. "利润中心 |
| LS_ACCOUNTPAYABLE-ITEM_TEXT = LS_ALV-SGTXT. "文本 |
| LS_ACCOUNTPAYABLE-BLINE_DATE = LS_ALV-ZFBDT. "到期日 |
| LS_ACCOUNTPAYABLE-ALLOC_NMBR = LS_ALV-ZUONR. " 分配号 |
| LS_ACCOUNTPAYABLE-PMNTTRMS = LS_ALV-ZTERM. "付款条件 |
| LS_ACCOUNTPAYABLE-PAYMT_REF = LS_ALV-KIDNO. "付款参考 |
| LS_ACCOUNTPAYABLE-PYMT_METH = LS_ALV-ZLSCH. "付款方式 |
| LS_ACCOUNTPAYABLE-PMTMTHSUPL = LS_ALV-UZAWE. "付款方式补充 |
| LS_ACCOUNTPAYABLE-REF_KEY_1 = LS_ALV-XREF1. "参考码1 |
| LS_ACCOUNTPAYABLE-REF_KEY_2 = LS_ALV-XREF2. "参考码2 |
| LS_ACCOUNTPAYABLE-REF_KEY_3 = LS_ALV-XREF3. "参考码3 |
| LS_ACCOUNTPAYABLE-TAX_CODE = LS_ALV-MWSKZ. "税码 |
| APPEND LS_ACCOUNTPAYABLE TO LT_ACCOUNTPAYABLE. |
| CLEAR LS_ACCOUNTPAYABLE. |
| WHEN 'S'."总账科目 |
| LS_ACCOUNTGL-ITEMNO_ACC = LV_ITEMNO_ACC. "行项目号 |
| LS_ACCOUNTGL-GL_ACCOUNT = LS_ALV-HKONT. "总账科目 |
| LS_ACCOUNTGL-BUS_AREA = LS_ALV-GSBER. "业务范围 |
| LS_ACCOUNTGL-PROFIT_CTR = LS_ALV-PRCTR. "利润中心 |
| LS_ACCOUNTGL-ITEM_TEXT = LS_ALV-SGTXT. "文本 |
| LS_ACCOUNTGL-REF_KEY_1 = LS_ALV-XREF1. "参考码1 |
| LS_ACCOUNTGL-REF_KEY_2 = LS_ALV-XREF2. "参考码2 |
| LS_ACCOUNTGL-REF_KEY_3 = LS_ALV-XREF3. "参考码3 |
| LS_ACCOUNTGL-TAX_CODE = LS_ALV-MWSKZ. "税码 |
| LS_ACCOUNTGL-COSTCENTER = LS_ALV-KOSTL. "成本中心 |
| IF LS_ALV-PROJK IS NOT INITIAL. |
| LS_ACCOUNTGL-WBS_ELEMENT = LS_ALV-PROJK. "WBS 元素(工作号) |
| ENDIF. |
| LS_ACCOUNTGL-ORDERID = LS_ALV-AUFNR."内部订单 |
| LS_ACCOUNTGL-QUANTITY = LS_ALV-MENGE. "数量 |
| LS_ACCOUNTGL-BASE_UOM = LS_ALV-MEINS. "单位 |
| APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL. |
| CLEAR LS_ACCOUNTGL. |
| WHEN OTHERS. |
| ENDCASE. |
| LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ITEMNO_ACC. |
| LS_CURRENCYAMOUNT-CURRENCY = LS_ALV-WAERS. " 货币 |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = LS_ALV-WRBTR. |
| IF LS_ALV-SHKZG = 'H'. |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - LS_CURRENCYAMOUNT-AMT_DOCCUR. |
| ENDIF. |
| IF GS_ALV-KURSF IS NOT INITIAL. |
| LS_CURRENCYAMOUNT-EXCH_RATE = LS_ALV-KURSF." 汇率 |
| ENDIF. |
| APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT. |
| CLEAR LS_CURRENCYAMOUNT. |
| IF LS_ALV-WAERS NE LV_WAERS2 AND LS_ALV-DMBTR IS NOT INITIAL. |
| "本位币 |
| LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ITEMNO_ACC. |
| LS_CURRENCYAMOUNT-CURR_TYPE = '10'. |
| LS_CURRENCYAMOUNT-CURRENCY = LV_WAERS2. |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = LS_ALV-DMBTR. |
| IF LS_ALV-SHKZG = 'H'. |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - LS_CURRENCYAMOUNT-AMT_DOCCUR. |
| ENDIF. |
| APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT. |
| CLEAR LS_CURRENCYAMOUNT. |
| ENDIF. |
| "税额计算 |
| IF LS_ALV-MWSKZ IS NOT INITIAL. |
| LV_ITEMNO_ACC = LV_ITEMNO_ACC + 1. |
| LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ITEMNO_ACC. |
| LS_CURRENCYAMOUNT-CURRENCY = LS_ALV-WAERS. " 货币码 |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = LS_ALV-DMBTR. " 税额 |
| LS_CURRENCYAMOUNT-AMT_BASE = LS_ALV-WRBTR. " 凭证货币金额 |
| IF LS_ALV-SHKZG = 'H'. |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - LS_CURRENCYAMOUNT-AMT_DOCCUR. |
| LS_CURRENCYAMOUNT-AMT_BASE = 0 - LS_CURRENCYAMOUNT-AMT_BASE. |
| ENDIF. |
| IF LS_ALV-KURSF IS NOT INITIAL. |
| LS_CURRENCYAMOUNT-EXCH_RATE = LS_ALV-KURSF. " 汇率 |
| ENDIF. |
| APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT. |
| CLEAR LS_CURRENCYAMOUNT. |
| IF LS_ALV-WAERS NE LV_WAERS2 AND LS_ALV-WRBTR IS NOT INITIAL. |
| "税额本位币. |
| LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ITEMNO_ACC. |
| LS_CURRENCYAMOUNT-CURR_TYPE = '10'. " 货币类型 |
| LS_CURRENCYAMOUNT-CURRENCY = LS_ALV-WAERS. " 货币码 |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = LS_ALV-WRBTR. " 税额(本位币) |
| LS_CURRENCYAMOUNT-AMT_BASE = LS_ALV-DMBTR. |
| IF LS_ALV-SHKZG = 'H'. |
| LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - LS_CURRENCYAMOUNT-AMT_DOCCUR. |
| LS_CURRENCYAMOUNT-AMT_BASE = 0 - LS_CURRENCYAMOUNT-AMT_BASE. |
| ENDIF. |
| APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT. |
| CLEAR LS_CURRENCYAMOUNT. |
| ENDIF. |
| CLEAR: T_TAX_INFO,I_WRBTR. |
| I_WRBTR = LS_ALV-WRBTR . |
| CALL FUNCTION 'CALCULATE_TAX_FROM_NET_AMOUNT' |
| EXPORTING |
| I_BUKRS = LS_DOCUMENTHEADER-COMP_CODE "公司代码 |
| I_MWSKZ = LS_ALV-MWSKZ "税码 |
| I_WAERS = LS_ALV-WAERS "币种 |
| I_WRBTR = I_WRBTR "金额 |
| TABLES |
| T_MWDAT = T_TAX_INFO |
| EXCEPTIONS |
| OTHERS = 4. |
| IF SY-SUBRC <> 0. |
| ENDIF. |
| READ TABLE T_TAX_INFO INTO WA_TAX_INFO INDEX 1. |
| CLEAR LS_ACCOUNTTAX. |
| CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' |
| EXPORTING |
| INPUT = WA_TAX_INFO-HKONT |
| IMPORTING |
| OUTPUT = LS_ACCOUNTTAX-GL_ACCOUNT. " 总账科目 |
| LS_ACCOUNTTAX-ITEMNO_ACC = LV_ITEMNO_ACC. |
| LS_ACCOUNTTAX-COND_KEY = WA_TAX_INFO-KSCHL." 条件类型 MWVS |
| LS_ACCOUNTTAX-ACCT_KEY = WA_TAX_INFO-KTOSL." 事务关键字 VST |
| LS_ACCOUNTTAX-TAX_CODE = LS_ALV-MWSKZ. " 税码 J1 |
| LS_ACCOUNTTAX-TAX_RATE = WA_TAX_INFO-MSATZ." 税率 170.000 |
| APPEND LS_ACCOUNTTAX TO LT_ACCOUNTTAX. |
| CLEAR:LS_ACCOUNTTAX. |
| ENDIF. |
| IF LS_ALV-BSCHL IS NOT INITIAL OR LS_ALV-XNEGP IS NOT INITIAL |
| OR LS_ALV-RSTGR IS NOT INITIAL OR LS_ALV-NUMPG IS NOT INITIAL. |
| LS_EXTENSION2-STRUCTURE = 'ZFI_BADI_001'. |
| LS_ZFI_BADI_001-POSNR = LV_ITEMNO_ACC. |
| LS_ZFI_BADI_001-BSCHL = LS_ALV-BSCHL. "记账码 |
| LS_ZFI_BADI_001-XNEGP = LS_ALV-XNEGP. "反记账 |
| LS_ZFI_BADI_001-RSTGR = LS_ALV-RSTGR. "原因代码 |
| LS_ZFI_BADI_001-NUMPG = LS_ALV-NUMPG. "页数 |
| LS_EXTENSION2-VALUEPART1 = LS_ZFI_BADI_001. |
| APPEND LS_EXTENSION2 TO LT_EXTENSION2. |
| CLEAR LS_EXTENSION2. |
| ENDIF. |
| ENDLOOP. |
| CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK' |
| EXPORTING |
| DOCUMENTHEADER = LS_DOCUMENTHEADER |
| * CUSTOMERCPD = |
| * CONTRACTHEADER = |
| TABLES |
| ACCOUNTGL = LT_ACCOUNTGL |
| ACCOUNTRECEIVABLE = LT_ACCOUNTRECEIVABLE |
| ACCOUNTPAYABLE = LT_ACCOUNTPAYABLE |
| * ACCOUNTTAX = |
| CURRENCYAMOUNT = LT_CURRENCYAMOUNT |
| * CRITERIA = |
| * VALUEFIELD = |
| * EXTENSION1 = |
| RETURN = LT_RETURN |
| * PAYMENTCARD = |
| * CONTRACTITEM = |
| EXTENSION2 = LT_EXTENSION2 |
| * REALESTATE = |
| * ACCOUNTWT = |
| . |
| LOOP AT GT_ALV ASSIGNING <L_ALV> WHERE ZCODE = GS_ALV-ZCODE. |
| READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'E'. |
| IF SY-SUBRC = 0. |
| IF <L_ALV>-KUNNR IS NOT INITIAL. |
| READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'E' PARAMETER = 'ACCOUNTRECEIVABLE'. |
| IF SY-SUBRC = 0. |
| <L_ALV>-ICON = C_ICON_E. |
| <L_ALV>-MSG = LS_RETURN-MESSAGE. |
| ENDIF. |
| ELSEIF <L_ALV>-LIFNR IS NOT INITIAL . |
| READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'E' PARAMETER = 'ACCOUNTPAYABLE'. |
| IF SY-SUBRC = 0. |
| <L_ALV>-ICON = C_ICON_E. |
| <L_ALV>-MSG = LS_RETURN-MESSAGE. |
| ENDIF. |
| ELSE. |
| READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'E' PARAMETER = 'ACCOUNTGL'. |
| IF SY-SUBRC = 0. |
| <L_ALV>-ICON = C_ICON_E. |
| <L_ALV>-MSG = LS_RETURN-MESSAGE. |
| ENDIF. |
| ENDIF. |
| IF <L_ALV>-ICON IS INITIAL. |
| LOOP AT LT_RETURN INTO LS_RETURN. |
| CALL FUNCTION 'MESSAGE_TEXT_BUILD' |
| EXPORTING |
| MSGID = LS_RETURN-ID |
| MSGNR = LS_RETURN-NUMBER |
| MSGV1 = LS_RETURN-MESSAGE_V1 |
| MSGV2 = LS_RETURN-MESSAGE_V2 |
| MSGV3 = LS_RETURN-MESSAGE_V3 |
| MSGV4 = LS_RETURN-MESSAGE_V4 |
| IMPORTING |
| MESSAGE_TEXT_OUTPUT = LV_MSG. |
| CONCATENATE LV_MESSAGE LV_MSG INTO LV_MESSAGE. |
| ENDLOOP. |
| <L_ALV>-ICON = C_ICON_E. |
| <L_ALV>-MSG = LV_MESSAGE. |
| CLEAR :LV_MSG,LS_RETURN,LV_MESSAGE. |
| ENDIF. |
| CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. |
| ELSE. |
| READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'S'. |
| * number = '614'. |
| IF SY-SUBRC = 0. |
| <L_ALV>-ICON = C_ICON_S. |
| ENDIF. |
| ENDIF. |
| CLEAR :LS_RETURN. |
| ENDLOOP. |
| ENDLOOP. |
| ENDFORM. |
总账科目往来批量导入程序
凭证批量创建
最新推荐文章于 2023-03-14 14:30:13 发布
959

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



