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-05-16 14:26:27 发布