BAPI_ACC_DOCUMENT_POST 导入外币金额全
2014-01-09 09:37
399 查看
FORM FRM_GET_DATA .
DATA L_FILE_NAME TYPE RLGRAP-FILENAME.
DATA L_TAB_RAW_DATA TYPE TRUXS_T_TEXT_DATA.
L_FILE_NAME = P_PATH.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
I_TAB_RAW_DATA = L_TAB_RAW_DATA
I_FILENAME = L_FILE_NAME
TABLES
I_TAB_CONVERTED_DATA = IT_POST
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE S001(00) WITH TEXT-E01 DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
DELETE IT_POST INDEX 1."删除导入模板标题
PERFORM FRM_GET_TBSL TABLES IT_TBSL.
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form F_GET_FILEPATH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM F_GET_FILEPATH .
DATA: LIT_FILE TYPE FILETABLE,
LWA_FILE LIKE LINE OF LIT_FILE.
DATA L_FILE_COUNT TYPE I.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = '选择导入文件'
DEFAULT_EXTENSION = 'XLS'
CHANGING
FILE_TABLE = LIT_FILE
RC = L_FILE_COUNT.
IF L_FILE_COUNT <> -1.
READ TABLE LIT_FILE INDEX 1 INTO LWA_FILE.
P_PATH = LWA_FILE-FILENAME.
ENDIF.
ENDFORM. " F_GET_FILEPATH
*&---------------------------------------------------------------------*
*& Form FRM_RUN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_RUN .
DATA:
W_BELNR TYPE BAPIACHE09-OBJ_KEY,
WA_ZEXTEN TYPE ZEXTEN,
L_HEADER TYPE BAPIACHE09, "抬头信息
L_ACCOUNTGL TYPE BAPIACGL09, "总帐工作区
L_RECEIVABLE TYPE BAPIACAR09, "客户工作区
L_PAYBLE TYPE BAPIACAP09, "供应商工作区
L_RETURN TYPE BAPIRET2, "返回信息工作区
L_CURRENCYAMOUNT TYPE BAPIACCR09, "金额工作区
L_EXTENSION TYPE BAPIACEXTC,
L_EXTENSION2 TYPE BAPIPAREX,
LI_ACCOUNTGL TYPE TABLE OF BAPIACGL09, "总帐内表
LI_RECEIVABLE TYPE TABLE OF BAPIACAR09, "客户内表
LI_PAYBLE TYPE TABLE OF BAPIACAP09, "供应商内表
LI_RETURN TYPE TABLE OF BAPIRET2, "返回信息内表
LI_CURRENCYAMOUNT TYPE TABLE OF BAPIACCR09, "金额内表
LI_EXTENSION2 TYPE TABLE OF BAPIPAREX WITH HEADER LINE.
DATA:L_DMBTR TYPE BAPIWRBTR,
L_WRBTR TYPE BAPIWRBTR.
DATA L_ITEM TYPE POSNR_ACC VALUE 1.
DATA L_BUZEI TYPE TA_POST-BUZEI.
DATA LI_POST TYPE TABLE OF TA_POST.
DATA L_POST TYPE TA_POST.
DATA L_MWAER TYPE T000-MWAER.
SORT IT_POST BY BUZEI.
LI_POST[] = IT_POST[].
DELETE ADJACENT DUPLICATES FROM LI_POST COMPARING BUZEI.
SELECT SINGLE MWAER INTO L_MWAER FROM T000 WHERE MANDT = SY-MANDT. "获取本集团货币、
IF SY-SUBRC <> 0.
MESSAGE E001 .
ENDIF.
SORT IT_POST .
LOOP AT LI_POST INTO L_POST.
L_ITEM = 1.
L_HEADER-FISC_YEAR = L_POST-BLDAT+0(4). "会计年度
L_HEADER-FIS_PERIOD = L_POST-BLDAT+4(2). "会计期间
L_HEADER-USERNAME = SY-UNAME. "用户名
L_HEADER-DOC_DATE = L_POST-BLDAT. "凭证日期
L_HEADER-DOC_TYPE = L_POST-BLART. "凭证类型
L_HEADER-COMP_CODE = L_POST-BUKRS. "公司代码
L_HEADER-PSTNG_DATE = L_POST-BUDAT. "过帐日期
L_HEADER-HEADER_TXT = L_POST-BKTXT. "凭证抬头文本
* L_HEADER-REF_DOC_NO = '0'. "参考
LOOP AT IT_POST INTO WA_POST WHERE BUZEI = L_POST-BUZEI.
CLEAR WA_TBSL.
PERFORM FRM_GET_SHKZG USING
WA_POST
CHANGING
WA_TBSL.
IF WA_POST-KOSTL IS NOT INITIAL.
IF WA_POST-KOSTL CO ' 0123456789'.
UNPACK WA_POST-KOSTL TO WA_POST-KOSTL.
ENDIF.
ENDIF.
IF WA_POST-UMSKZ IS NOT INITIAL.
TRANSLATE WA_POST-UMSKZ TO UPPER CASE.
ENDIF.
*----------扩展标记------------------------------
CLEAR WA_ZEXTEN.
CLEAR LI_EXTENSION2.
WA_ZEXTEN-POSNR = L_ITEM. "行项目编号
WA_ZEXTEN-BSCHL = WA_POST-BSCHL. "记账码
WA_ZEXTEN-NUMPG = WA_POST-NUMPG. "凭证页数
WA_ZEXTEN-RSTGR = WA_POST-RSTGR. "原因代码
LI_EXTENSION2-STRUCTURE = 'ZEXTEN'.
LI_EXTENSION2-VALUEPART1 = WA_ZEXTEN.
APPEND LI_EXTENSION2.
*---------货币-----------------------------------
CLEAR L_CURRENCYAMOUNT.
CLEAR L_DMBTR.
CASE WA_TBSL-SHKZG.
WHEN 'H'. "贷方为负
L_DMBTR = 0 - WA_POST-DMBTR. "金额
L_WRBTR = 0 - WA_POST-WRBTR.
WHEN 'S'.
L_DMBTR = WA_POST-DMBTR. "金额
L_WRBTR = WA_POST-WRBTR.
ENDCASE.
L_CURRENCYAMOUNT-ITEMNO_ACC = L_ITEM. "行项目编号
TRANSLATE WA_POST-WAERS TO UPPER CASE.
IF WA_POST-WAERS <> L_MWAER AND WA_POST-DMBTR IS NOT INITIAL.
L_CURRENCYAMOUNT-AMT_DOCCUR = L_DMBTR. "本位币金额
L_CURRENCYAMOUNT-CURR_TYPE = '10'.
L_CURRENCYAMOUNT-CURRENCY = L_MWAER.
APPEND L_CURRENCYAMOUNT TO LI_CURRENCYAMOUNT.
L_CURRENCYAMOUNT-AMT_DOCCUR = L_WRBTR. "外币金额
L_CURRENCYAMOUNT-CURR_TYPE = '00'.
L_CURRENCYAMOUNT-CURRENCY = WA_POST-WAERS.
APPEND L_CURRENCYAMOUNT TO LI_CURRENCYAMOUNT.
ELSE.
L_CURRENCYAMOUNT-CURR_TYPE = '00'.
L_CURRENCYAMOUNT-AMT_DOCCUR = L_WRBTR. "人民币原币金额
L_CURRENCYAMOUNT-CURRENCY = WA_POST-WAERS.
APPEND L_CURRENCYAMOUNT TO LI_CURRENCYAMOUNT.
ENDIF.
CASE WA_TBSL-KOART.
WHEN 'D'. "D 客户
L_RECEIVABLE-ITEMNO_ACC = L_ITEM.
L_RECEIVABLE-COMP_CODE = WA_POST-BUKRS. "公司代码
IF WA_POST-HKONT CO '0123456789 '.
UNPACK WA_POST-HKONT TO L_RECEIVABLE-CUSTOMER.
ELSE.
L_RECEIVABLE-CUSTOMER = WA_POST-HKONT. "客户编号
ENDIF.
L_RECEIVABLE-ITEM_TEXT = WA_POST-SGTXT. "文本
L_RECEIVABLE-SP_GL_IND = WA_POST-UMSKZ. "特殊总账标识
L_RECEIVABLE-BLINE_DATE = WA_POST-ZFBDT. "付款基准日期
L_RECEIVABLE-REF_KEY_1 = WA_POST-XREF1. "参考代码1
L_RECEIVABLE-REF_KEY_2 = WA_POST-XREF2. "参考代码2
IF WA_POST-XREF3 IS NOT INITIAL.
IF WA_POST-XREF3 CO '0123456789 '.
UNPACK WA_POST-XREF3 TO L_RECEIVABLE-REF_KEY_3.
ELSE.
L_RECEIVABLE-REF_KEY_3 = WA_POST-XREF3. "参考代码3
ENDIF.
ENDIF.
L_RECEIVABLE-ALLOC_NMBR = WA_POS
cd1a
T-ZUONR.
APPEND L_RECEIVABLE TO LI_RECEIVABLE.
CLEAR L_RECEIVABLE.
WHEN 'K'. "K 供应商
L_PAYBLE-ITEMNO_ACC = L_ITEM.
IF WA_POST-HKONT CO '0123456789 '.
UNPACK WA_POST-HKONT TO L_PAYBLE-VENDOR_NO.
ELSE.
L_PAYBLE-VENDOR_NO = WA_POST-HKONT. "供应商号
ENDIF.
L_PAYBLE-ITEM_TEXT = WA_POST-SGTXT. "文本
L_PAYBLE-BLINE_DATE = WA_POST-ZFBDT. "付款基准日期
L_PAYBLE-REF_KEY_1 = WA_POST-XREF1. "参考代码1
L_PAYBLE-REF_KEY_2 = WA_POST-XREF2. "参考代码2
IF WA_POST-XREF3 IS NOT INITIAL.
IF WA_POST-XREF3 CO '0123456789 '.
UNPACK WA_POST-XREF3 TO L_PAYBLE-REF_KEY_3.
ELSE.
L_PAYBLE-REF_KEY_3 = WA_POST-XREF3.
ENDIF.
ENDIF.
L_PAYBLE-ALLOC_NMBR = WA_POST-ZUONR.
L_PAYBLE-SP_GL_IND = WA_POST-UMSKZ. "特殊总账标识
APPEND L_PAYBLE TO LI_PAYBLE.
CLEAR L_PAYBLE.
WHEN 'S'. "S 总分类帐科目
L_ACCOUNTGL-ITEMNO_ACC = L_ITEM. "行项目编号
IF WA_POST-HKONT CO '0123456789 '.
UNPACK WA_POST-HKONT TO L_ACCOUNTGL-GL_ACCOUNT.
ELSE.
L_ACCOUNTGL-GL_ACCOUNT = WA_POST-HKONT. "总分类帐帐目
ENDIF.
IF WA_POST-AUFNR IS NOT INITIAL.
IF WA_POST-AUFNR CO'0123456789 '.
UNPACK WA_POST-AUFNR TO L_ACCOUNTGL-ORDERID.
ELSE.
L_ACCOUNTGL-ORDERID = WA_POST-AUFNR.
ENDIF.
ENDIF.
IF WA_POST-KOSTL IS NOT INITIAL.
L_ACCOUNTGL-COSTCENTER = WA_POST-KOSTL.
ELSE.
CLEAR L_ACCOUNTGL-COSTCENTER.
ENDIF.
L_ACCOUNTGL-COMP_CODE = WA_POST-BUKRS. "公司代码
L_ACCOUNTGL-ALLOC_NMBR = WA_POST-ZUONR. "分配号
L_ACCOUNTGL-ITEM_TEXT = WA_POST-SGTXT. "文本
L_ACCOUNTGL-PSTNG_DATE = WA_POST-BUDAT. "凭证中的过账日期
IF WA_POST-PRCTR IS NOT INITIAL.
IF WA_POST-PRCTR CO '0123456789 '.
UNPACK WA_POST-PRCTR TO L_ACCOUNTGL-PROFIT_CTR.
ELSE.
L_ACCOUNTGL-PROFIT_CTR = WA_POST-PRCTR. "利润中心
ENDIF.
* ELSE.
* IF WA_POST-KOSTL IS NOT INITIAL.
* SELECT SINGLE PRCTR INTO L_ACCOUNTGL-PROFIT_CTR
* FROM CSKS WHERE KOSTL = WA_POST-KOSTL
* AND DATBI = '99991231'.
* ENDIF.
ENDIF.
L_ACCOUNTGL-VALUE_DATE = WA_POST-BLDAT. "凭证日期
APPEND L_ACCOUNTGL TO LI_ACCOUNTGL.
CLEAR L_ACCOUNTGL.
ENDCASE.
L_ITEM = L_ITEM + 1.
ENDLOOP.
CALL FUNCTION WA_FUNNAME
EXPORTING
DOCUMENTHEADER = L_HEADER
IMPORTING
OBJ_KEY = W_BELNR
TABLES
ACCOUNTGL = LI_ACCOUNTGL "总帐
ACCOUNTRECEIVABLE = LI_RECEIVABLE "客户
ACCOUNTPAYABLE = LI_PAYBLE "供应商
CURRENCYAMOUNT = LI_CURRENCYAMOUNT
EXTENSION2 = LI_EXTENSION2
RETURN = LI_RETURN.
*------------------------------
IF P_CHECK <> 'X'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
L_POST-BELNR = W_BELNR+0(10).
IF STRLEN( L_POST-BELNR ) > 5.
L_POST-PASS = '成功'.
ELSE.
L_POST-PASS = '失败'.
ENDIF.
ELSE.
READ TABLE LI_RETURN INTO L_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC = 0.
L_POST-PASS = '失败'.
ELSE.
L_POST-PASS = '成功'.
ENDIF.
ENDIF.
LOOP AT LI_RETURN INTO L_RETURN.
CONCATENATE L_POST-ERRTXT L_RETURN-TYPE L_RETURN-MESSAGE ';' INTO L_POST-ERRTXT.
CLEAR L_RETURN.
ENDLOOP.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "添加前导零
EXPORTING
INPUT = L_POST-BUZEI
IMPORTING
OUTPUT = L_POST-BUZEI.
MODIFY LI_POST FROM L_POST.
CLEAR L_HEADER.
CLEAR W_BELNR.
CLEAR LI_ACCOUNTGL.
CLEAR LI_RECEIVABLE .
CLEAR LI_PAYBLE .
CLEAR LI_CURRENCYAMOUNT.
CLEAR LI_EXTENSION2.
CLEAR LI_RETURN.
CLEAR L_POST.
CLEAR L_ITEM.
ENDLOOP.
IT_POST[] = LI_POST[].
ENDFORM. " FRM_RUN
*&---------------------------------------------------------------------*
*& Form FRM_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ALV .
IT_OUT[] = IT_POST[].
SORT IT_OUT BY PASS BUZEI.
PERFORM FRM_ADD_FIELDCAT USING '1' 'BUZEI' '行项目ID' '10'.
PERFORM FRM_ADD_FIELDCAT USING '2' 'PASS' '导入状态' '10'.
PERFORM FRM_ADD_FIELDCAT USING '3' 'BELNR' '凭证号' '10'.
PERFORM FRM_ADD_FIELDCAT USING '4' 'ERRTXT' '信息文本' '200'.
PERFORM FRM_ALV_DISPLAY TABLES IT_OUT.
ENDFORM. " FRM_ALV
*&---------------------------------------------------------------------*
*& Form FRM_GET_TBSL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_TBSL text
*----------------------------------------------------------------------*
FORM FRM_GET_TBSL TABLES P_IT_TBSL STRUCTURE TBSL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE P_IT_TBSL
FROM TBSL.
IF SY-SUBRC <> 0 .
MESSAGE E000 .
ENDIF.
ENDFORM. " FRM_GET_TBSL
*&---------------------------------------------------------------------*
*& Form FRM_SET_FUNNAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_CHECK text
*----------------------------------------------------------------------*
FORM FRM_SET_FUNNAME USING P_P_CHECK.
IF P_P_CHECK = 'X'.
WA_FUNNAME = 'BAPI_ACC_DOCUMENT_CHECK'.
ELSE.
WA_FUNNAME = 'BAPI_ACC_DOCUMENT_POST'.
ENDIF.
ENDFORM. " FRM_SET_FUNNAME
*&---------------------------------------------------------------------*
*& Form FRM_GET_SHKZG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_POST text
* <--P_WA_TBSL text
*----------------------------------------------------------------------*
FORM FRM_GET_SHKZG USING P_WA_POST TYPE TA_POST
CHANGING P_WA_TBSL STRUCTURE TBSL.
READ TABLE IT_TBSL INTO P_WA_TBSL WITH KEY BSCHL = P_WA_POST-BSCHL.
ENDFORM. " FRM_GET_SHKZG
*&---------------------------------------------------------------------*
*& Form FRM_GET_TEMPLATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_TEMPLATE .
DATA: LV_FILENAME TYPE STRING,
LV_FULLPATH TYPE STRING,
LV_PATH TYPE STRING,
LV_DESTINATION LIKE RLGRAP-FILENAME,
LV_KEY TYPE WWWDATATAB,
LV_RC TYPE SY-SUBRC.
CONSTANTS: LC_OBJID TYPE WWWDATA-OBJID VALUE 'ZPZDR.XLS'.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
DEFAULT_EXTENSION = 'XLS'
DEFAULT_FILE_NAME = '凭证导入原始模板(带例子).XLS'
FILE_FILTER = 'XLS'
INITIAL_DIRECTORY = 'C:\'
CHANGING
FILENAME = LV_FILENAME
PATH = LV_PATH
FULLPATH = LV_FULLPATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF LV_FULLPATH IS NOT INITIAL.
LV_DESTINATION = LV_FULLPATH.
SELECT SINGLE RELID OBJID FROM WWWDATA
INTO CORRESPONDING FIELDS OF LV_KEY
WHERE RELID = 'MI'
AND OBJID = LC_OBJID
AND SRTF2 = 0.
IF SY-SUBRC = 0.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = LV_KEY
DESTINATION = LV_DESTINATION
IMPORTING
RC = LV_RC.
IF LV_RC <> 0.
MESSAGE '模版,下载失败' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
ELSE.
MESSAGE '无数据下载' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
ENDIF.
ENDFORM. " FRM_GET_TEMPLATE
FORM FRM_GET_DATA .
DATA L_FILE_NAME TYPE RLGRAP-FILENAME.
DATA L_TAB_RAW_DATA TYPE TRUXS_T_TEXT_DATA.
L_FILE_NAME = P_PATH.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
I_TAB_RAW_DATA = L_TAB_RAW_DATA
I_FILENAME = L_FILE_NAME
TABLES
I_TAB_CONVERTED_DATA = IT_POST
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE S001(00) WITH TEXT-E01 DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
DELETE IT_POST INDEX 1."删除导入模板标题
PERFORM FRM_GET_TBSL TABLES IT_TBSL.
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form F_GET_FILEPATH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM F_GET_FILEPATH .
DATA: LIT_FILE TYPE FILETABLE,
LWA_FILE LIKE LINE OF LIT_FILE.
DATA L_FILE_COUNT TYPE I.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = '选择导入文件'
DEFAULT_EXTENSION = 'XLS'
CHANGING
FILE_TABLE = LIT_FILE
RC = L_FILE_COUNT.
IF L_FILE_COUNT <> -1.
READ TABLE LIT_FILE INDEX 1 INTO LWA_FILE.
P_PATH = LWA_FILE-FILENAME.
ENDIF.
ENDFORM. " F_GET_FILEPATH
*&---------------------------------------------------------------------*
*& Form FRM_RUN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_RUN .
DATA:
W_BELNR TYPE BAPIACHE09-OBJ_KEY,
WA_ZEXTEN TYPE ZEXTEN,
L_HEADER TYPE BAPIACHE09, "抬头信息
L_ACCOUNTGL TYPE BAPIACGL09, "总帐工作区
L_RECEIVABLE TYPE BAPIACAR09, "客户工作区
L_PAYBLE TYPE BAPIACAP09, "供应商工作区
L_RETURN TYPE BAPIRET2, "返回信息工作区
L_CURRENCYAMOUNT TYPE BAPIACCR09, "金额工作区
L_EXTENSION TYPE BAPIACEXTC,
L_EXTENSION2 TYPE BAPIPAREX,
LI_ACCOUNTGL TYPE TABLE OF BAPIACGL09, "总帐内表
LI_RECEIVABLE TYPE TABLE OF BAPIACAR09, "客户内表
LI_PAYBLE TYPE TABLE OF BAPIACAP09, "供应商内表
LI_RETURN TYPE TABLE OF BAPIRET2, "返回信息内表
LI_CURRENCYAMOUNT TYPE TABLE OF BAPIACCR09, "金额内表
LI_EXTENSION2 TYPE TABLE OF BAPIPAREX WITH HEADER LINE.
DATA:L_DMBTR TYPE BAPIWRBTR,
L_WRBTR TYPE BAPIWRBTR.
DATA L_ITEM TYPE POSNR_ACC VALUE 1.
DATA L_BUZEI TYPE TA_POST-BUZEI.
DATA LI_POST TYPE TABLE OF TA_POST.
DATA L_POST TYPE TA_POST.
DATA L_MWAER TYPE T000-MWAER.
SORT IT_POST BY BUZEI.
LI_POST[] = IT_POST[].
DELETE ADJACENT DUPLICATES FROM LI_POST COMPARING BUZEI.
SELECT SINGLE MWAER INTO L_MWAER FROM T000 WHERE MANDT = SY-MANDT. "获取本集团货币、
IF SY-SUBRC <> 0.
MESSAGE E001 .
ENDIF.
SORT IT_POST .
LOOP AT LI_POST INTO L_POST.
L_ITEM = 1.
L_HEADER-FISC_YEAR = L_POST-BLDAT+0(4). "会计年度
L_HEADER-FIS_PERIOD = L_POST-BLDAT+4(2). "会计期间
L_HEADER-USERNAME = SY-UNAME. "用户名
L_HEADER-DOC_DATE = L_POST-BLDAT. "凭证日期
L_HEADER-DOC_TYPE = L_POST-BLART. "凭证类型
L_HEADER-COMP_CODE = L_POST-BUKRS. "公司代码
L_HEADER-PSTNG_DATE = L_POST-BUDAT. "过帐日期
L_HEADER-HEADER_TXT = L_POST-BKTXT. "凭证抬头文本
* L_HEADER-REF_DOC_NO = '0'. "参考
LOOP AT IT_POST INTO WA_POST WHERE BUZEI = L_POST-BUZEI.
CLEAR WA_TBSL.
PERFORM FRM_GET_SHKZG USING
WA_POST
CHANGING
WA_TBSL.
IF WA_POST-KOSTL IS NOT INITIAL.
IF WA_POST-KOSTL CO ' 0123456789'.
UNPACK WA_POST-KOSTL TO WA_POST-KOSTL.
ENDIF.
ENDIF.
IF WA_POST-UMSKZ IS NOT INITIAL.
TRANSLATE WA_POST-UMSKZ TO UPPER CASE.
ENDIF.
*----------扩展标记------------------------------
CLEAR WA_ZEXTEN.
CLEAR LI_EXTENSION2.
WA_ZEXTEN-POSNR = L_ITEM. "行项目编号
WA_ZEXTEN-BSCHL = WA_POST-BSCHL. "记账码
WA_ZEXTEN-NUMPG = WA_POST-NUMPG. "凭证页数
WA_ZEXTEN-RSTGR = WA_POST-RSTGR. "原因代码
LI_EXTENSION2-STRUCTURE = 'ZEXTEN'.
LI_EXTENSION2-VALUEPART1 = WA_ZEXTEN.
APPEND LI_EXTENSION2.
*---------货币-----------------------------------
CLEAR L_CURRENCYAMOUNT.
CLEAR L_DMBTR.
CASE WA_TBSL-SHKZG.
WHEN 'H'. "贷方为负
L_DMBTR = 0 - WA_POST-DMBTR. "金额
L_WRBTR = 0 - WA_POST-WRBTR.
WHEN 'S'.
L_DMBTR = WA_POST-DMBTR. "金额
L_WRBTR = WA_POST-WRBTR.
ENDCASE.
L_CURRENCYAMOUNT-ITEMNO_ACC = L_ITEM. "行项目编号
TRANSLATE WA_POST-WAERS TO UPPER CASE.
IF WA_POST-WAERS <> L_MWAER AND WA_POST-DMBTR IS NOT INITIAL.
L_CURRENCYAMOUNT-AMT_DOCCUR = L_DMBTR. "本位币金额
L_CURRENCYAMOUNT-CURR_TYPE = '10'.
L_CURRENCYAMOUNT-CURRENCY = L_MWAER.
APPEND L_CURRENCYAMOUNT TO LI_CURRENCYAMOUNT.
L_CURRENCYAMOUNT-AMT_DOCCUR = L_WRBTR. "外币金额
L_CURRENCYAMOUNT-CURR_TYPE = '00'.
L_CURRENCYAMOUNT-CURRENCY = WA_POST-WAERS.
APPEND L_CURRENCYAMOUNT TO LI_CURRENCYAMOUNT.
ELSE.
L_CURRENCYAMOUNT-CURR_TYPE = '00'.
L_CURRENCYAMOUNT-AMT_DOCCUR = L_WRBTR. "人民币原币金额
L_CURRENCYAMOUNT-CURRENCY = WA_POST-WAERS.
APPEND L_CURRENCYAMOUNT TO LI_CURRENCYAMOUNT.
ENDIF.
CASE WA_TBSL-KOART.
WHEN 'D'. "D 客户
L_RECEIVABLE-ITEMNO_ACC = L_ITEM.
L_RECEIVABLE-COMP_CODE = WA_POST-BUKRS. "公司代码
IF WA_POST-HKONT CO '0123456789 '.
UNPACK WA_POST-HKONT TO L_RECEIVABLE-CUSTOMER.
ELSE.
L_RECEIVABLE-CUSTOMER = WA_POST-HKONT. "客户编号
ENDIF.
L_RECEIVABLE-ITEM_TEXT = WA_POST-SGTXT. "文本
L_RECEIVABLE-SP_GL_IND = WA_POST-UMSKZ. "特殊总账标识
L_RECEIVABLE-BLINE_DATE = WA_POST-ZFBDT. "付款基准日期
L_RECEIVABLE-REF_KEY_1 = WA_POST-XREF1. "参考代码1
L_RECEIVABLE-REF_KEY_2 = WA_POST-XREF2. "参考代码2
IF WA_POST-XREF3 IS NOT INITIAL.
IF WA_POST-XREF3 CO '0123456789 '.
UNPACK WA_POST-XREF3 TO L_RECEIVABLE-REF_KEY_3.
ELSE.
L_RECEIVABLE-REF_KEY_3 = WA_POST-XREF3. "参考代码3
ENDIF.
ENDIF.
L_RECEIVABLE-ALLOC_NMBR = WA_POS
cd1a
T-ZUONR.
APPEND L_RECEIVABLE TO LI_RECEIVABLE.
CLEAR L_RECEIVABLE.
WHEN 'K'. "K 供应商
L_PAYBLE-ITEMNO_ACC = L_ITEM.
IF WA_POST-HKONT CO '0123456789 '.
UNPACK WA_POST-HKONT TO L_PAYBLE-VENDOR_NO.
ELSE.
L_PAYBLE-VENDOR_NO = WA_POST-HKONT. "供应商号
ENDIF.
L_PAYBLE-ITEM_TEXT = WA_POST-SGTXT. "文本
L_PAYBLE-BLINE_DATE = WA_POST-ZFBDT. "付款基准日期
L_PAYBLE-REF_KEY_1 = WA_POST-XREF1. "参考代码1
L_PAYBLE-REF_KEY_2 = WA_POST-XREF2. "参考代码2
IF WA_POST-XREF3 IS NOT INITIAL.
IF WA_POST-XREF3 CO '0123456789 '.
UNPACK WA_POST-XREF3 TO L_PAYBLE-REF_KEY_3.
ELSE.
L_PAYBLE-REF_KEY_3 = WA_POST-XREF3.
ENDIF.
ENDIF.
L_PAYBLE-ALLOC_NMBR = WA_POST-ZUONR.
L_PAYBLE-SP_GL_IND = WA_POST-UMSKZ. "特殊总账标识
APPEND L_PAYBLE TO LI_PAYBLE.
CLEAR L_PAYBLE.
WHEN 'S'. "S 总分类帐科目
L_ACCOUNTGL-ITEMNO_ACC = L_ITEM. "行项目编号
IF WA_POST-HKONT CO '0123456789 '.
UNPACK WA_POST-HKONT TO L_ACCOUNTGL-GL_ACCOUNT.
ELSE.
L_ACCOUNTGL-GL_ACCOUNT = WA_POST-HKONT. "总分类帐帐目
ENDIF.
IF WA_POST-AUFNR IS NOT INITIAL.
IF WA_POST-AUFNR CO'0123456789 '.
UNPACK WA_POST-AUFNR TO L_ACCOUNTGL-ORDERID.
ELSE.
L_ACCOUNTGL-ORDERID = WA_POST-AUFNR.
ENDIF.
ENDIF.
IF WA_POST-KOSTL IS NOT INITIAL.
L_ACCOUNTGL-COSTCENTER = WA_POST-KOSTL.
ELSE.
CLEAR L_ACCOUNTGL-COSTCENTER.
ENDIF.
L_ACCOUNTGL-COMP_CODE = WA_POST-BUKRS. "公司代码
L_ACCOUNTGL-ALLOC_NMBR = WA_POST-ZUONR. "分配号
L_ACCOUNTGL-ITEM_TEXT = WA_POST-SGTXT. "文本
L_ACCOUNTGL-PSTNG_DATE = WA_POST-BUDAT. "凭证中的过账日期
IF WA_POST-PRCTR IS NOT INITIAL.
IF WA_POST-PRCTR CO '0123456789 '.
UNPACK WA_POST-PRCTR TO L_ACCOUNTGL-PROFIT_CTR.
ELSE.
L_ACCOUNTGL-PROFIT_CTR = WA_POST-PRCTR. "利润中心
ENDIF.
* ELSE.
* IF WA_POST-KOSTL IS NOT INITIAL.
* SELECT SINGLE PRCTR INTO L_ACCOUNTGL-PROFIT_CTR
* FROM CSKS WHERE KOSTL = WA_POST-KOSTL
* AND DATBI = '99991231'.
* ENDIF.
ENDIF.
L_ACCOUNTGL-VALUE_DATE = WA_POST-BLDAT. "凭证日期
APPEND L_ACCOUNTGL TO LI_ACCOUNTGL.
CLEAR L_ACCOUNTGL.
ENDCASE.
L_ITEM = L_ITEM + 1.
ENDLOOP.
CALL FUNCTION WA_FUNNAME
EXPORTING
DOCUMENTHEADER = L_HEADER
IMPORTING
OBJ_KEY = W_BELNR
TABLES
ACCOUNTGL = LI_ACCOUNTGL "总帐
ACCOUNTRECEIVABLE = LI_RECEIVABLE "客户
ACCOUNTPAYABLE = LI_PAYBLE "供应商
CURRENCYAMOUNT = LI_CURRENCYAMOUNT
EXTENSION2 = LI_EXTENSION2
RETURN = LI_RETURN.
*------------------------------
IF P_CHECK <> 'X'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
L_POST-BELNR = W_BELNR+0(10).
IF STRLEN( L_POST-BELNR ) > 5.
L_POST-PASS = '成功'.
ELSE.
L_POST-PASS = '失败'.
ENDIF.
ELSE.
READ TABLE LI_RETURN INTO L_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC = 0.
L_POST-PASS = '失败'.
ELSE.
L_POST-PASS = '成功'.
ENDIF.
ENDIF.
LOOP AT LI_RETURN INTO L_RETURN.
CONCATENATE L_POST-ERRTXT L_RETURN-TYPE L_RETURN-MESSAGE ';' INTO L_POST-ERRTXT.
CLEAR L_RETURN.
ENDLOOP.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "添加前导零
EXPORTING
INPUT = L_POST-BUZEI
IMPORTING
OUTPUT = L_POST-BUZEI.
MODIFY LI_POST FROM L_POST.
CLEAR L_HEADER.
CLEAR W_BELNR.
CLEAR LI_ACCOUNTGL.
CLEAR LI_RECEIVABLE .
CLEAR LI_PAYBLE .
CLEAR LI_CURRENCYAMOUNT.
CLEAR LI_EXTENSION2.
CLEAR LI_RETURN.
CLEAR L_POST.
CLEAR L_ITEM.
ENDLOOP.
IT_POST[] = LI_POST[].
ENDFORM. " FRM_RUN
*&---------------------------------------------------------------------*
*& Form FRM_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ALV .
IT_OUT[] = IT_POST[].
SORT IT_OUT BY PASS BUZEI.
PERFORM FRM_ADD_FIELDCAT USING '1' 'BUZEI' '行项目ID' '10'.
PERFORM FRM_ADD_FIELDCAT USING '2' 'PASS' '导入状态' '10'.
PERFORM FRM_ADD_FIELDCAT USING '3' 'BELNR' '凭证号' '10'.
PERFORM FRM_ADD_FIELDCAT USING '4' 'ERRTXT' '信息文本' '200'.
PERFORM FRM_ALV_DISPLAY TABLES IT_OUT.
ENDFORM. " FRM_ALV
*&---------------------------------------------------------------------*
*& Form FRM_GET_TBSL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_TBSL text
*----------------------------------------------------------------------*
FORM FRM_GET_TBSL TABLES P_IT_TBSL STRUCTURE TBSL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE P_IT_TBSL
FROM TBSL.
IF SY-SUBRC <> 0 .
MESSAGE E000 .
ENDIF.
ENDFORM. " FRM_GET_TBSL
*&---------------------------------------------------------------------*
*& Form FRM_SET_FUNNAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_CHECK text
*----------------------------------------------------------------------*
FORM FRM_SET_FUNNAME USING P_P_CHECK.
IF P_P_CHECK = 'X'.
WA_FUNNAME = 'BAPI_ACC_DOCUMENT_CHECK'.
ELSE.
WA_FUNNAME = 'BAPI_ACC_DOCUMENT_POST'.
ENDIF.
ENDFORM. " FRM_SET_FUNNAME
*&---------------------------------------------------------------------*
*& Form FRM_GET_SHKZG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_POST text
* <--P_WA_TBSL text
*----------------------------------------------------------------------*
FORM FRM_GET_SHKZG USING P_WA_POST TYPE TA_POST
CHANGING P_WA_TBSL STRUCTURE TBSL.
READ TABLE IT_TBSL INTO P_WA_TBSL WITH KEY BSCHL = P_WA_POST-BSCHL.
ENDFORM. " FRM_GET_SHKZG
*&---------------------------------------------------------------------*
*& Form FRM_GET_TEMPLATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_TEMPLATE .
DATA: LV_FILENAME TYPE STRING,
LV_FULLPATH TYPE STRING,
LV_PATH TYPE STRING,
LV_DESTINATION LIKE RLGRAP-FILENAME,
LV_KEY TYPE WWWDATATAB,
LV_RC TYPE SY-SUBRC.
CONSTANTS: LC_OBJID TYPE WWWDATA-OBJID VALUE 'ZPZDR.XLS'.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
DEFAULT_EXTENSION = 'XLS'
DEFAULT_FILE_NAME = '凭证导入原始模板(带例子).XLS'
FILE_FILTER = 'XLS'
INITIAL_DIRECTORY = 'C:\'
CHANGING
FILENAME = LV_FILENAME
PATH = LV_PATH
FULLPATH = LV_FULLPATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF LV_FULLPATH IS NOT INITIAL.
LV_DESTINATION = LV_FULLPATH.
SELECT SINGLE RELID OBJID FROM WWWDATA
INTO CORRESPONDING FIELDS OF LV_KEY
WHERE RELID = 'MI'
AND OBJID = LC_OBJID
AND SRTF2 = 0.
IF SY-SUBRC = 0.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = LV_KEY
DESTINATION = LV_DESTINATION
IMPORTING
RC = LV_RC.
IF LV_RC <> 0.
MESSAGE '模版,下载失败' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
ELSE.
MESSAGE '无数据下载' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
ENDIF.
ENDFORM. " FRM_GET_TEMPLATE
相关文章推荐
- BAPI_ACC_DOCUMENT_POST 导入外币金额。
- BAPI_ACC_DOCUMENT_POST 导入外币金额
- 求BAPI_ACC_DOCUMENT_POST 的用法
- 财务凭证过账增强 BAPI_ACC_DOCUMENT_POST
- [BAPI]创建会计凭证 BAPI_ACC_DOCUMENT_POST
- 使用BAPI_ACC_DOCUMENT_POST,创建会计凭证,用BADI扩展字段
- ABAP 资产类BAPI过账 BAPI_ACC_DOCUMENT_POST
- 会计凭证BAPI_ACC_DOCUMENT_POST
- BAPI_ACC_DOCUMENT_POST相关增强的实现
- 使用BAPI_ACC_DOCUMENT_POST,创建会计凭证 增强
- standard BAPI(BAPI_ACC_DOCUMENT_POST) to park document
- [BAPI]创建会计凭证 BAPI_ACC_DOCUMENT_POST
- 使用BAPI_ACC_DOCUMENT_POST,创建会计凭证,用BADI扩展字段
- [BAPI]创建会计凭证 BAPI_ACC_DOCUMENT_POST
- BAPI_ACC_DOCUMENT_POST生成预制凭证增强
- BAPI_ACC_DOCUMENT_POST - 记帐码 - FB01
- 资产取得传票传入数量 BAPI_ACC_DOCUMENT_POST
- 使用BAPI_ACC_DOCUMENT_POST…
- Fw:BAPI_ACC_DOCUMENT_POST相关增强的实现
- BAPI:BAPI_ACC_DOCUMENT_POST创建预制凭证