abap金税上传EXCEL版

SAP ERP ECC6.0标准功能提供给了金税接口,对于一般的公司来说,这个接口基本也够了。

事务代码:GT_DLN 下载SAP发票信息;

事务代码:GT_ULN 上传金税信息到SAP中;

前提条件:SAP ERP ECC6.0 功能增强包EHp3及以上。

激活业务功能事务代码 SFW5选择业务功能FIN_LOC_CI_1,点击激活按钮。

激活业务功能包后,系统将执行一个后台任务,执行可能需要长达一小时。

参见SAP Note:Note 1290073 – China Golden Tax Switch ActivateNote 1380072 – China Golden Tax Interface Legal Change for GTS 6.1x补充说明SAP 还提供了在创建系统发票时,根据发票限额自动进行分拆的程序原理是在复制控制中利用例程(roution)实现。参见SAP NoteNote 192558 – Template for invoice split with a maximum
amount per

invoice

下面是自开发的EXCEL版不的金税上传程序。

*&---------------------------------------------------------------------

*

*&   VAT 发票号码写入会计凭证批输入程序

*

*&   功能 : 将 VAT 发票号码, 开票日期, 发票类型输入到Header Text

*

*&           (bkpf-bktxt). 并把VAT发票号码输入到

*

*&           第一个行项目的定位号字段(bseg-zuonr)中

*

*&   查找会计凭证的条件:1. 参考过程为 VBRK 并且对象代码为系统发票号码

*

*&

*

*&   SAP-CN 2000.01.18

*

*&---------------------------------------------------------------------

*

* use the development class ZINV. transaction code ZIMP.

* use the function group ZINV.

REPORT  ZSD_JSEXCEL2 NO STANDARD PAGE HEADING MESSAGE-ID ZLC.

DATA:II TYPE I, "定义循环次数变量

INVONO(8).

INCLUDE ZIMPDEF_TT1.

*INCLUDE ZIMPDEF.

SELECTION-SCREEN COMMENT 10(60) TEXT-020.

SELECTION-SCREEN SKIP.

* the definitiion is follow the ‘jingshui‘. which stand for receipt

*type

*      ‘Welcome importing the VAT number to R/3 system‘(020).

PARAMETERS: BILLTYPE(10) TYPE C.

PARAMETERS: VAT_FILE LIKE RLGRAP-FILENAME .

*            ERR_FILE LIKE RLGRAP-FILENAME.

INITIALIZATION.

MOVE ‘C:\SAP上传\金税导入.XLS‘ TO VAT_FILE.

*  MOVE ‘C:\VAT\IMP_ERR.TXT‘ TO ERR_FILE.

* user exit to set the initial value.

*  CALL CUSTOMER-FUNCTION ‘002‘

*            CHANGING

*              VAT_FILE  =  VAT_FILE

**              ERR_FILE  =  ERR_FILE

*              BILLTYPE  =  BILLTYPE.

AT SELECTION-SCREEN.

PERFORM AUTHORITY_CHECK USING ‘04‘ RC ‘*‘ ‘*‘.

*  check rc = 0.

* user exit 001 for authority check.

CALL CUSTOMER-FUNCTION ‘001‘

CHANGING

RC      = RC

EXCEPTIONS

OTHERS  = 1.

CHECK RC = 0.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR VAT_FILE.

PERFORM GET_PC_FILENAME.

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR ERR_FILE.

*  PERFORM GET_ERR_FILENAME.

AT SELECTION-SCREEN ON VAT_FILE.

IF VAT_FILE IS INITIAL.

MESSAGE E212.

ENDIF.

START-OF-SELECTION.

PERFORM UPLOAD_FILE.      "upload the VAT file

*  PERFORM GET_DOCUMENT.     "Get the FI document

PERFORM GET_UPFILE.       "整理出税控发票和系统发票号的对应.

SET PF-STATUS ‘IMP‘.

WRITE: ‘总发票数量:‘,TOTAL,

/ ‘   明细如下,如需要更新系统,请保存‘.

FORMAT COLOR COL_HEADING.

WRITE:/(106) SY-ULINE.

WRITE:/ SY-VLINE,(4) ‘顺序号‘,

SY-VLINE,(8) ‘公司代码‘,

SY-VLINE,(10) ‘ 会计凭证 ‘,

SY-VLINE,(4) ‘年度‘,

SY-VLINE,(18) ‘税控发票号‘,

SY-VLINE,(10) ‘R/3发票号‘,

SY-VLINE,(30) ‘文本‘,

SY-VLINE.

WRITE:/(106) SY-ULINE.

FORMAT COLOR COL_NORMAL .

LOOP AT ITAB_BKPF INTO WA_BKPF.

WRITE:/ SY-VLINE,(4) SY-TABIX,

SY-VLINE,(8) WA_BKPF-BUKRS ,

SY-VLINE,(10) WA_BKPF-BELNR ,

SY-VLINE,(4) WA_BKPF-GJAHR,

SY-VLINE,(18) WA_BKPF-VATNUM,

SY-VLINE,(10) WA_BKPF-AWKEY,

SY-VLINE,(30) WA_BKPF-BKTXT ,

SY-VLINE.

WRITE:/(106) SY-ULINE.

ENDLOOP.

AT USER-COMMAND.

CASE SY-UCOMM.

WHEN ‘UPDATE‘.

PERFORM UPDATE_TABLE.

ENDCASE.

**Fill the BDCtable and call transaction

*  LOOP AT ITAB_BKPF INTO WA_BKPF.

*    REFRESH BDCDATA.

*    PERFORM FILL_BDCTABLE.

*    PERFORM CALL_TRANSACTION.

*  ENDLOOP.

*

**Download the error file.

*  PERFORM DOWNLOAD_ERROR.

*

*END-OF-SELECTION.

*  ULINE.

*  WRITE: / ‘The imported file is as below.‘(023).

*  LOOP AT ITAB_INVOICE INTO LIN_INVOICE .

*    WRITE: / LIN_INVOICE.

*  ENDLOOP.

*********************Subroutine****************************************

*

FORM AUTHORITY_CHECK  USING US_ACTVT US_SUBRC

US_VKORG US_FKART  .

US_SUBRC = 0.

AUTHORITY-CHECK OBJECT ‘V_VBRK_VKO‘

ID ‘VKORG‘ FIELD US_VKORG

ID ‘ACTVT‘ FIELD US_ACTVT.

IF SY-SUBRC NE 0.

US_SUBRC = SY-SUBRC.

CASE US_ACTVT.

WHEN ‘04‘.

MESSAGE E518(VF) WITH US_VKORG.

WHEN ‘03‘.

MESSAGE E514(VF) WITH US_VKORG.

WHEN ‘02‘.

MESSAGE E515(VF) WITH US_VKORG.

WHEN OTHERS.

MESSAGE E011 WITH US_VKORG.

*      when ‘01‘.

*        xkomfk-fxmsg = ‘515‘.

*        perform vbfs_hinzufuegen using ‘000000‘ ‘515‘ us_vkorg

*                                                      space space.

ENDCASE.

ENDIF.

AUTHORITY-CHECK OBJECT ‘V_VBRK_FKA‘

ID ‘FKART‘ FIELD US_FKART

ID ‘ACTVT‘ FIELD US_ACTVT.

IF SY-SUBRC NE 0.

US_SUBRC = SY-SUBRC.

CASE US_ACTVT.

WHEN ‘04‘.

MESSAGE E519(VF) WITH US_FKART.

WHEN ‘03‘.

MESSAGE E516(VF) WITH US_FKART.

WHEN ‘02‘.

MESSAGE E517(VF) WITH US_FKART.

WHEN OTHERS.

MESSAGE E012 WITH US_FKART.

*      when ‘01‘.

*        xkomfk-fxmsg = ‘517‘.

*        perform vbfs_hinzufuegen using ‘000000‘ ‘517‘ us_fkart

*                                                      space space.

ENDCASE.

ENDIF.

ENDFORM.                               " AUTHORITY_CHECK

*&---------------------------------------------------------------------

*

*&      Form  get_document

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------

*

FORM GET_DOCUMENT.

*data: lin_invoice type linvoice.

DATA: IDX LIKE SY-TABIX VALUE ‘1‘.

DATA: LEN LIKE SY-FDPOS,

OFF LIKE SY-FDPOS.

* the definition is follow the ‘jingshui‘.

DATA: P_INVOICE(8) TYPE C,

P_DATE LIKE SY-DATUM,

P_ITEMNUM(3) TYPE N,

P_BILLING LIKE VBRK-VBELN.

DATA: P_BILLBAK(10) TYPE N.   "used for c-->n-->c. reference vbrk-vbeln

DATA: P_BKTXT LIKE BKPF-BKTXT.

DATA: DELETE_FLAG(1) TYPE C.

REFRESH: ITAB_BKPF.

DO.

CLEAR : OFF, LEN, P_DATE, P_INVOICE, P_BKTXT, P_ITEMNUM.

CLEAR: DELETE_FLAG, WA_BSEG, WA_BKPF.

READ TABLE ITAB_INVOICE INDEX IDX INTO LIN_INVOICE.

IF SY-SUBRC <> 0. EXIT. ENDIF.

SEARCH LIN_INVOICE FOR ‘,‘ .

IF SY-SUBRC <> 0. MESSAGE E058 WITH VAT_FILE . ENDIF. "

MOVE LIN_INVOICE(SY-FDPOS) TO P_INVOICE.

MOVE P_INVOICE TO WA_BKPF-VATNUM.

OFF = SY-FDPOS + 2.

LEN = OFF - 1.

SEARCH LIN_INVOICE FOR ‘,‘ STARTING AT OFF.

IF SY-SUBRC <> 0. MESSAGE E058 WITH VAT_FILE . ENDIF. "

MOVE LIN_INVOICE+LEN(SY-FDPOS) TO P_ITEMNUM.

OFF = OFF + SY-FDPOS + 1.

LEN = OFF - 1.

SEARCH LIN_INVOICE FOR ‘,‘ STARTING AT OFF.

IF SY-SUBRC <> 0. MESSAGE E058 WITH VAT_FILE. ENDIF. "

MOVE LIN_INVOICE+LEN(SY-FDPOS) TO P_DATE.

OFF = OFF + SY-FDPOS + 1.

LEN = OFF - 1.

SEARCH LIN_INVOICE FOR ‘,‘ STARTING AT OFF.

IF SY-SUBRC <> 0.MESSAGE E058 WITH VAT_FILE . ENDIF. "

MOVE LIN_INVOICE+LEN(SY-FDPOS) TO P_BILLING.

MOVE P_BILLING TO P_BILLBAK.

MOVE P_BILLBAK TO P_BILLING.

SELECT SINGLE BUKRS BELNR GJAHR AWKEY

INTO CORRESPONDING FIELDS OF WA_BKPF  FROM BKPF

WHERE AWTYP = ‘VBRK‘   "FI document header

AND  AWKEY  = P_BILLING.

IF SY-SUBRC <> 0.

MESSAGE E215 WITH P_BILLING VAT_FILE.

ENDIF.

MOVE P_INVOICE TO WA_BKPF-BKTXT(8).

MOVE BILLTYPE TO WA_BKPF-BKTXT+9(4).

MOVE P_DATE TO WA_BKPF-BKTXT+14(10).

CONDENSE WA_BKPF-BKTXT.

* user exit for changing the wa_bkpf value.

* You can use it to choose the suitable data for R/3.

CALL CUSTOMER-FUNCTION ‘003‘

CHANGING

BUKRS  = WA_BKPF-BUKRS

BELNR  = WA_BKPF-BELNR

GJAHR  = WA_BKPF-GJAHR

BKTXT  = WA_BKPF-BKTXT

AWKEY  = WA_BKPF-AWKEY

XCPDS  = WA_BKPF-XCPDS

VATNUM = WA_BKPF-VATNUM

BUZEI  = WA_BKPF-BUZEI.

*  append wa_bkpf to itab_bkpf .

* Process all VAT number and include the one time customer

SELECT SINGLE BUKRS BELNR GJAHR BUZEI KUNNR INTO WA_BSEG

FROM BSEG       "FI document line item

WHERE BUKRS = WA_BKPF-BUKRS

AND   BELNR = WA_BKPF-BELNR

AND   GJAHR = WA_BKPF-GJAHR

AND   KUNNR NE SPACE.  "Only have one customer follow buss rule

*        and   buzei = ‘001‘.      "only deal with first line item

IF SY-SUBRC EQ 0. " and wa_bseg-kunnr ne space.

MOVE WA_BSEG-BUZEI TO WA_BKPF-BUZEI.

SELECT SINGLE KUNNR KTOKD

INTO WA_KNA1

FROM  KNA1                " customer data

WHERE  KUNNR  = WA_BSEG-KUNNR.

*                ktokd

IF SY-SUBRC EQ 0 AND WA_KNA1-KTOKD NE SPACE.

SELECT SINGLE KTOKD XCPDS FROM  T077D   " customer account

INTO WA_T077D

WHERE  KTOKD  = WA_KNA1-KTOKD.

IF SY-SUBRC EQ 0.

WA_BKPF-XCPDS = WA_T077D-XCPDS.       " one time account flag

ELSE.

DELETE_FLAG = ‘X‘.

* 客户帐户组错

PERFORM PROCESS_ERROR USING WA_BKPF-BELNR

WA_BKPF-BKTXT

WA_BKPF-AWKEY

TEXT-006.

ENDIF.

ELSE.

DELETE_FLAG = ‘X‘.

* 客户号码错

PERFORM PROCESS_ERROR USING WA_BKPF-BELNR

WA_BKPF-BKTXT

WA_BKPF-AWKEY

TEXT-005.

ENDIF.

ELSE.

DELETE_FLAG = ‘X‘.

* 没有行项目

PERFORM PROCESS_ERROR USING WA_BKPF-BELNR

WA_BKPF-BKTXT

WA_BKPF-AWKEY

TEXT-004.

ENDIF.

* user exit to deal with the exceptions.

CALL CUSTOMER-FUNCTION ‘004‘

IMPORTING

BUKRS  = WA_BKPF-BUKRS

BELNR  = WA_BKPF-BELNR

GJAHR  = WA_BKPF-GJAHR

BKTXT  = WA_BKPF-BKTXT

AWKEY  = WA_BKPF-AWKEY

XCPDS  = WA_BKPF-XCPDS

VATNUM = WA_BKPF-VATNUM

BUZEI  = WA_BKPF-BUZEI

CHANGING

DELETE_FLAG = DELETE_FLAG.

IF DELETE_FLAG = ‘‘.

APPEND WA_BKPF TO ITAB_BKPF.

ENDIF.

* add the idx for the read imported file

IDX = IDX + P_ITEMNUM + 1.

ENDDO.

ENDFORM.                    " GET_DOCUMENT

*&---------------------------------------------------------------------

*

*&      Form  GET_PC_FILENAME

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------

*

FORM GET_PC_FILENAME.

CALL FUNCTION ‘WS_FILENAME_GET‘

EXPORTING

*     def_filename     = vat_file

*     DEF_PATH         = ‘ ‘

MASK             = ‘,*.* ,*.*.‘

MODE             = ‘0‘

TITLE            = ‘Get the Invoice import file name‘

IMPORTING

FILENAME         = VAT_FILE

*     RC               =

EXCEPTIONS

INV_WINSYS       = 1

NO_BATCH         = 2

SELECTION_CANCEL = 3

SELECTION_ERROR  = 4

OTHERS           = 5.

IF SY-SUBRC <> 0.

MESSAGE E216.

ENDIF.

ENDFORM.                    " GET_PC_FILENAME

*&---------------------------------------------------------------------

*

*&      Form  GET_ERR_FILENAME

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------

*

FORM GET_ERR_FILENAME.

CALL FUNCTION ‘WS_FILENAME_GET‘

EXPORTING

*     DEF_FILENAME     = ‘ ‘

*     DEF_PATH         = ‘ ‘

MASK             = ‘,*.* ,*.*.‘

MODE             = ‘0‘

TITLE            = ‘Get the Error message export file name‘

IMPORTING

FILENAME         = VAT_FILE

*     RC               =

EXCEPTIONS

INV_WINSYS       = 1

NO_BATCH         = 2

SELECTION_CANCEL = 3

SELECTION_ERROR  = 4

OTHERS           = 5.

IF SY-SUBRC <> 0.

MESSAGE E216.

ENDIF.

ENDFORM.                    " GET_ERR_FILENAME

*&---------------------------------------------------------------------

*

*&      Form  UPLOAD_FILE

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------

*

FORM UPLOAD_FILE.

DATA: LINE_CNT TYPE I.

REFRESH: ITAB_INVOICE.

*注释txt部分

*  CALL FUNCTION ‘WS_UPLOAD‘

*       EXPORTING

**           CODEPAGE            = ‘ ‘

*            FILENAME            = VAT_FILE

*            FILETYPE            = ‘ASC‘

**           HEADLEN             = ‘ ‘

**           LINE_EXIT           = ‘ ‘

**           TRUNCLEN            = ‘ ‘

**           USER_FORM           = ‘ ‘

**           USER_PROG           = ‘ ‘

**      IMPORTING

**           FILELENGTH          =

*       TABLES

*            DATA_TAB            =  ITAB_INVOICE

*       EXCEPTIONS

*            CONVERSION_ERROR    = 1

*            FILE_OPEN_ERROR     = 2

*            FILE_READ_ERROR     = 3

*            INVALID_TABLE_WIDTH = 4

*            INVALID_TYPE        = 5

*            NO_BATCH            = 6

*            UNKNOWN_ERROR       = 7

*            OTHERS              = 8.

**********上传excel dingyang

CALL FUNCTION ‘ALSM_EXCEL_TO_INTERNAL_TABLE‘

*导入EXCEL数据到内表

EXPORTING

FILENAME    = VAT_FILE

I_BEGIN_COL = ‘1‘

I_BEGIN_ROW = ‘1‘

I_END_COL   = ‘4‘            "只取4列

I_END_ROW   = ‘2000‘         "只取500行

TABLES

INTERN      = ITAB_INVOICE.

**********上传excel dingyang

IF SY-SUBRC >< 0.

MESSAGE E217 WITH VAT_FILE.

ENDIF.

DESCRIBE TABLE ITAB_INVOICE LINES LINE_CNT.

IF LINE_CNT LT 1.

MESSAGE E218 WITH VAT_FILE.

ENDIF.

**************处理ITAB_INVOICE数据,将其变为横项4列

DATA IDXY(3).

CLEAR IDXY.

LOOP AT ITAB_INVOICE.

IDXY = IDXY + 1.

IF ITAB_INVOICE-COL = ‘0001‘.

ITAB_INVOICE1-VBELN = ITAB_INVOICE-VALUE.

ENDIF.

IF ITAB_INVOICE-COL = ‘0003‘.

ITAB_INVOICE1-LX = ITAB_INVOICE-VALUE.

ENDIF.

IF ITAB_INVOICE-COL = ‘0004‘.

ITAB_INVOICE1-FPH = ITAB_INVOICE-VALUE.

ENDIF.

IF IDXY MOD 4 = 0.

APPEND ITAB_INVOICE1.

CLEAR ITAB_INVOICE1.

ENDIF.

ENDLOOP.

***

***  READ TABLE ITAB_INVOICE1 INDEX 1.

***  IF ITAB_INVOICE1-VBELN = ‘销售单据编号‘.

***    DELETE ITAB_INVOICE1.

***  ENDIF.

DELETE ITAB_INVOICE1 INDEX 1.

LOOP AT ITAB_INVOICE1.

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘

EXPORTING

INPUT  = ITAB_INVOICE1-FPH

IMPORTING

OUTPUT = ITAB_INVOICE1-FPH

EXCEPTIONS

OTHERS = 1.

MODIFY ITAB_INVOICE1.

ENDLOOP.

ENDFORM.                    " UPLOAD_FILE

*&---------------------------------------------------------------------

*

*&      Form  PROCESS_ERROR

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*      -->P_WA_BKPF-BELNR  text

*

*      -->P_WA_BKPF-BKTXT  text

*

*      -->P_WA_BKPF-AWKEY  text

*

*      -->P_TEXT-006  text

*

*----------------------------------------------------------------------

*

FORM PROCESS_ERROR USING   P_VBELN P_BKTXT P_AWKEY P_TEXT.

CLEAR WA_ERROR.

WA_ERROR-BELNR = P_VBELN.

WA_ERROR-BKTXT = P_BKTXT.

WA_ERROR-AWKEY = P_AWKEY.

WA_ERROR-TEXT  = P_TEXT.

APPEND WA_ERROR TO ITAB_ERROR.

ENDFORM.                    " PROCESS_ERROR

*&---------------------------------------------------------------------

*

*&      Form  FILL_BDCTABLE

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------

*

FORM FILL_BDCTABLE.

* fill FB02 first screen data

PERFORM FIRST_SCREEN.

PERFORM CHOOSE_ONEITEM.

* process one time customer screen

IF WA_BKPF-XCPDS = ‘X‘.

PERFORM ONE_TIME_CUSTOMER.

ENDIF.

* fill VAT number in customer line item ‘allocation‘ field

PERFORM CUSTOMER_ITEM.

* fill VAT number in document header text filed

PERFORM DOC_HEADER.

IF WA_BKPF-XCPDS = ‘X‘.

PERFORM ONE_TIME_CUSTOMER.

ENDIF.

* save FI document

PERFORM DOC_SAVE.

ENDFORM.                               " FILL_BDCTABLE

*&---------------------------------------------------------------------

*

*&      Form  CALL_TRANSACTION

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------

*

FORM CALL_TRANSACTION.

CLEAR MESSTAB.

REFRESH MESSTAB.

CALL TRANSACTION ‘FB02‘

USING BDCDATA

*      mode   ‘A‘                      " display screen

*      mode   ‘E‘            " Display screen only if an error occurs

MODE   ‘N‘                      " No display

UPDATE ‘S‘                      " Synchronous update

MESSAGES INTO MESSTAB.

* process error

IF SY-SUBRC NE 0.

LOOP AT MESSTAB.

CLEAR WA_T100.

SELECT SINGLE * FROM T100 INTO WA_T100

WHERE SPRSL = MESSTAB-MSGSPRA

AND ARBGB = MESSTAB-MSGID

AND MSGNR = MESSTAB-MSGNR.

REPLACE ‘&1‘ WITH MESSTAB-MSGV1(10) INTO WA_T100-TEXT.

REPLACE ‘&2‘ WITH MESSTAB-MSGV2(10) INTO WA_T100-TEXT.

REPLACE ‘&3‘ WITH MESSTAB-MSGV3(10) INTO WA_T100-TEXT.

REPLACE ‘&4‘ WITH MESSTAB-MSGV4(10) INTO WA_T100-TEXT.

REPLACE ‘&‘  WITH MESSTAB-MSGV1(10) INTO WA_T100-TEXT.

REPLACE ‘&‘  WITH MESSTAB-MSGV2(10) INTO WA_T100-TEXT.

REPLACE ‘&‘  WITH MESSTAB-MSGV3(10) INTO WA_T100-TEXT.

REPLACE ‘&‘  WITH MESSTAB-MSGV4(10) INTO WA_T100-TEXT.

WRITE: / TEXT-011,

WA_BKPF-BELNR,

WA_BKPF-BKTXT,

WA_BKPF-AWKEY,

/  TEXT-012,

MESSTAB-MSGTYP(1),

MESSTAB-MSGID(2),

MESSTAB-MSGNR(3),

WA_T100-TEXT(60).

WA_ERROR-BELNR = WA_BKPF-BELNR.

WA_ERROR-AWKEY = WA_BKPF-AWKEY.

WA_ERROR-BKTXT = WA_BKPF-BKTXT.

WA_ERROR-TEXT  = WA_T100-TEXT.

APPEND WA_ERROR TO ITAB_ERROR.

ENDLOOP.

ENDIF.

ENDFORM.                               " CALL_TRANSACTION

*&---------------------------------------------------------------------

*

*&      Form  DOWNLOAD_ERROR

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------

*

FORM DOWNLOAD_ERROR.

READ TABLE ITAB_ERROR INTO WA_ERROR INDEX 1.

IF SY-SUBRC NE 0.

WRITE: / ‘VAT number upload successfully!‘(001).

ELSE.

WRITE: / ‘Pls check the error log !‘(002).

*    CALL FUNCTION ‘WS_DOWNLOAD‘

*         EXPORTING

**         BIN_FILESIZE            = ‘ ‘

**         CODEPAGE                = ‘ ‘

*          FILENAME                = ERR_FILE

*          FILETYPE                = ‘DAT‘

**         MODE                    = ‘ ‘

**         WK1_N_FORMAT            = ‘ ‘

**         WK1_N_SIZE              = ‘ ‘

**         WK1_T_FORMAT            = ‘ ‘

**         WK1_T_SIZE              = ‘ ‘

**         COL_SELECT              = ‘ ‘

**         COL_SELECTMASK          = ‘ ‘

**         NO_AUTH_CHECK           = ‘ ‘

**    IMPORTING

**         FILELENGTH              =

*         TABLES

*              DATA_TAB                = ITAB_ERROR

**             FIELDNAMES              =

*         EXCEPTIONS

*              FILE_OPEN_ERROR         = 1

*              FILE_WRITE_ERROR        = 2

*              INVALID_FILESIZE        = 3

*              INVALID_TABLE_WIDTH     = 4

*              INVALID_TYPE            = 5

*              NO_BATCH                = 6

*              UNKNOWN_ERROR           = 7

*              GUI_REFUSE_FILETRANSFER = 8

*              OTHERS                  = 9.

*

*    IF SY-SUBRC NE 0.

*      MESSAGE E059 WITH ERR_FILE .

*    ENDIF.

ENDIF.

ENDFORM.                               " DOWNLOAD_ERROR

*&---------------------------------------------------------------------

*

*&      Form  FIRST_SCREEN

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------

*

FORM FIRST_SCREEN.

PERFORM BDC_DYNPRO      USING ‘SAPMF05L‘ ‘0100‘.  "transactionFB02

PERFORM BDC_FIELD       USING ‘BDC_OKCODE‘

‘/00‘.

PERFORM BDC_FIELD       USING ‘BDC_CURSOR‘

‘RF05L-AWTYP‘.

PERFORM BDC_FIELD       USING ‘RF05L-BELNR‘

WA_BKPF-BELNR.     "   ‘2200000042‘.

PERFORM BDC_FIELD       USING ‘RF05L-BUKRS‘

WA_BKPF-BUKRS.              "   ‘0001‘.

PERFORM BDC_FIELD       USING ‘RF05L-GJAHR‘

WA_BKPF-GJAHR.     "    ‘1999‘.

ENDFORM.                               " FIRST_SCREEN

*&---------------------------------------------------------------------

*

*&      Form  CHOOSE_ONEITEM

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------

*

FORM CHOOSE_ONEITEM.

DATA: SEL_ITEM LIKE BDCDATA-FVAL.

MOVE ‘RF05L-ANZDT(‘ TO SEL_ITEM.

MOVE WA_BKPF-BUZEI+1(2) TO SEL_ITEM+12.

MOVE ‘)‘ TO SEL_ITEM+14.

PERFORM BDC_DYNPRO  USING ‘SAPMF05L‘ ‘0700‘. "transaction

PERFORM BDC_FIELD       USING ‘BDC_OKCODE‘

‘PK‘.

PERFORM BDC_FIELD       USING ‘BDC_CURSOR‘

SEL_ITEM.

ENDFORM.                    " CHOOSE_ONEITEM

*&---------------------------------------------------------------------

*

*&      Form  DOC_HEADER

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------

*

FORM DOC_HEADER.

PERFORM BDC_DYNPRO      USING ‘SAPMF05L‘ ‘1710‘.

PERFORM BDC_FIELD       USING ‘BDC_OKCODE‘

‘=ENTR‘.

PERFORM BDC_FIELD       USING ‘BDC_CURSOR‘

‘BKPF-BKTXT‘.

PERFORM BDC_FIELD       USING ‘BKPF-BKTXT‘

WA_BKPF-BKTXT.    "     ‘0090000064‘.

ENDFORM.                               " DOC_HEADER

*&---------------------------------------------------------------------

*

*&      Form  CUSTOMER_ITEM

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------

*

FORM CUSTOMER_ITEM.

PERFORM BDC_DYNPRO      USING ‘SAPMF05L‘ ‘0301‘.

PERFORM BDC_FIELD       USING ‘BDC_OKCODE‘

‘=VK‘.

PERFORM BDC_FIELD       USING ‘BDC_CURSOR‘

‘BSEG-ZUONR‘.

PERFORM BDC_FIELD       USING ‘BSEG-ZUONR‘

WA_BKPF-VATNUM.      "  ‘0090000064‘.

ENDFORM.                               " CUSTOMER_ITEM

*&---------------------------------------------------------------------

*

*&      Form  ONE_TIME_CUSTOMER

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------

*

FORM ONE_TIME_CUSTOMER.

PERFORM BDC_DYNPRO      USING ‘SAPLFCPD‘ ‘0100‘.

PERFORM BDC_FIELD       USING ‘BDC_OKCODE‘

‘/00‘.         "‘/ECNC‘.

PERFORM BDC_FIELD       USING ‘BDC_CURSOR‘

‘BSEC-NAME1‘.

ENDFORM.                               " ONE_TIME_CUSTOMER

*&---------------------------------------------------------------------

*

*&      Form  BDC_DYNPRO

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*      -->P_0572   text

*

*      -->P_0573   text

*

*----------------------------------------------------------------------

*

FORM BDC_DYNPRO USING PROGRAM DYNPRO.

CLEAR BDCDATA.

BDCDATA-PROGRAM  = PROGRAM.

BDCDATA-DYNPRO   = DYNPRO.

BDCDATA-DYNBEGIN = ‘X‘.

APPEND BDCDATA.

ENDFORM.                               " BDC_DYNPRO

*---------------------------------------------------------------------*

*       FORM BDC_FIELD                                                *

*---------------------------------------------------------------------*

*       ........                                                      *

*---------------------------------------------------------------------*

*  -->  FNAM                                                          *

*  -->  FVAL                                                          *

*---------------------------------------------------------------------*

FORM BDC_FIELD USING FNAM FVAL.

CLEAR BDCDATA.

BDCDATA-FNAM = FNAM.

BDCDATA-FVAL = FVAL.

APPEND BDCDATA.

ENDFORM.                    "BDC_FIELD

*&---------------------------------------------------------------------

*

*&      Form  DOC_SAVE

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------

*

FORM DOC_SAVE.

PERFORM BDC_DYNPRO      USING ‘SAPMF05L‘ ‘0301‘.

PERFORM BDC_FIELD       USING ‘BDC_OKCODE‘

‘=AE‘.

PERFORM BDC_FIELD       USING ‘BDC_CURSOR‘

‘BSEG-ZUONR‘.

ENDFORM.                               " DOC_SAVE

*&---------------------------------------------------------------------

*

*&      Form  get_upfile

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------

*

FORM GET_UPFILE.

*data: lin_invoice type linvoice.

DATA: IDX LIKE SY-TABIX VALUE ‘1‘.

DATA: LEN LIKE SY-FDPOS,

OFF LIKE SY-FDPOS.

* the definition is follow the ‘jingshui‘.

DATA: P_INVOICE(8) TYPE C,

P_DATE LIKE SY-DATUM,

P_ITEMNUM(3) TYPE N,

P_BILLING LIKE VBRK-VBELN.

DATA: P_BILLBAK(10) TYPE N.   "used for c-->n-->c. reference vbrk-vbeln

DATA: P_BKTXT LIKE BKPF-BKTXT.

DATA: DELETE_FLAG(1) TYPE C.

REFRESH: ITAB_BKPF.

*获取第一行判断文件是否税控下载的.

*  READ TABLE ITAB_INVOICE INTO LIN_INVOICE INDEX 1.

*  IF LIN_INVOICE(8) <> ‘SJJK0201‘.

*    MESSAGE E219.

*  ENDIF.

*获取第二行第一个字段,得到发票数量.

*  READ TABLE ITAB_INVOICE INTO LIN_INVOICE INDEX 2.

*  SEARCH LIN_INVOICE FOR ‘~~‘ .

DESCRIBE TABLE ITAB_INVOICE1 LINES TABLE_LINES.

TOTAL = TABLE_LINES.

CLEAR IDX.

*  REFRESH IT_INVOICE.

*  LOOP AT ITAB_INVOICE INTO LIN_INVOICE.

*    IDX = IDX + 1.

CLEAR : OFF, LEN, P_DATE, P_INVOICE, P_BKTXT, P_ITEMNUM.

CLEAR: DELETE_FLAG, WA_BSEG, WA_BKPF.

*  READ TABLE ITAB_INVOICE INDEX IDX INTO LIN_INVOICE.

*  IF SY-SUBRC <> 0. MESSAGE E058 WITH VAT_FILE . ENDIF. "

*添加发票抬头行到内表it_invoice中.

*    IF ( LIN_INVOICE(1) = ‘0‘ OR LIN_INVOICE(1) = ‘1‘ )

*       AND ( LIN_INVOICE+3(1) = ‘0‘ OR LIN_INVOICE+3(1) = ‘1‘ )

*       AND ( LIN_INVOICE+6(1) = ‘0‘ OR LIN_INVOICE+6(1) = ‘1‘ )  .

*      APPEND LIN_INVOICE TO IT_INVOICE.

*    ENDIF.

*  ENDLOOP.

*  DESCRIBE TABLE IT_INVOICE LINES TABLE_LINES.

*  IF TABLE_LINES <> TOTAL OR TABLE_LINES = 0.

*    MESSAGE E072(ZI).

*  ENDIF.

*****************处理数据dingyang20131211

LOOP AT ITAB_INVOICE1.

*Vat发票号码

WA_BKPF-VATNUM = ITAB_INVOICE1-FPH.

*系统发票号码9开头

* CONVERSION_EXIT_ALPHA_INPUT  增加数字前的0

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘

EXPORTING

INPUT  = ITAB_INVOICE1-VBELN

IMPORTING

OUTPUT = ITAB_INVOICE1-VBELN

EXCEPTIONS

OTHERS = 1.

WA_BKPF-AWKEY = ITAB_INVOICE1-VBELN.

**合并发票类型和号码

CONCATENATE ITAB_INVOICE1-LX ITAB_INVOICE1-FPH INTO WA_BKPF-VATNUM.

SELECT SINGLE BUKRS BELNR GJAHR AWKEY

INTO CORRESPONDING FIELDS OF WA_BKPF  FROM BKPF

WHERE AWTYP = ‘VBRK‘   "FI document header

AND  AWKEY  = WA_BKPF-AWKEY.

IF SY-SUBRC <> 0.

MESSAGE E057 WITH VAT_FILE.

ENDIF.

MOVE WA_BKPF-VATNUM TO WA_BKPF-BKTXT(10).

*  MOVE P_DATE TO WA_BKPF-BKTXT+11(8).

CONDENSE WA_BKPF-BKTXT.

APPEND WA_BKPF TO ITAB_BKPF.

ENDLOOP.

*****************处理数据dingyang20131211

*  LOOP AT IT_INVOICE INTO LIN_INVOICE.

*    CLEAR: OFF ,LEN,SEARCHED.

*    WA_BKPF-BAD = LIN_INVOICE(1).

*    OFF = 1.

*

*    DO 10 TIMES .

*      SEARCH LIN_INVOICE FOR ‘~~‘ STARTING AT OFF.

*      IF SY-SUBRC = 0.

*        LEN = SY-FDPOS.

*        OFF = OFF - 1.

*        IF SEARCHED = 3.

*          BILLTYPE = LIN_INVOICE+OFF(LEN).  "vat发票类型

*        ELSEIF SEARCHED = 4.

*          INVONO = LIN_INVOICE+OFF(LEN).

*          II = 8 - STRLEN( LIN_INVOICE+OFF(LEN) ).

*          DO II TIMES.

*            CONCATENATE ‘0‘ INVONO INTO INVONO.

*          ENDDO.

*          CONCATENATE BILLTYPE  INVONO INTO WA_BKPF-VATNUM.

**Vat发票号码

*        ELSEIF SEARCHED = 6.

*          P_DATE = LIN_INVOICE+OFF(LEN).     "vat发票日期

*        ELSEIF SEARCHED = 8.

*          WA_BKPF-AWKEY = LIN_INVOICE+OFF(LEN). "系统发票号码

*        ENDIF.

*        SEARCHED = SEARCHED + 1.

*        OFF = OFF + 1.

*        OFF = OFF + 2.

*        OFF = OFF + LEN .

*      ENDIF.

*    ENDDO.

*    SELECT SINGLE BUKRS BELNR GJAHR AWKEY

*          INTO CORRESPONDING FIELDS OF WA_BKPF  FROM BKPF

*          WHERE AWTYP = ‘VBRK‘   "FI document header

*          AND  AWKEY  = WA_BKPF-AWKEY.

*    IF SY-SUBRC <> 0.

*      MESSAGE E057 WITH P_BILLING VAT_FILE.

*    ENDIF.

*    MOVE WA_BKPF-VATNUM TO WA_BKPF-BKTXT(10).

*    MOVE P_DATE TO WA_BKPF-BKTXT+11(8).

*    CONDENSE WA_BKPF-BKTXT.

*    APPEND WA_BKPF TO ITAB_BKPF.

*    IF WA_BKPF-BAD = ‘1‘.

*      SELECT SINGLE VBELN FROM VBRK INTO ITAB_BKPF-AWKEY

*          WHERE SFAKN = WA_BKPF-AWKEY.

*      SELECT SINGLE BUKRS BELNR GJAHR AWKEY

*            INTO CORRESPONDING FIELDS OF ITAB_BKPF  FROM BKPF

*            WHERE AWTYP = ‘VBRK‘   "FI document header

*            AND  AWKEY  = ITAB_BKPF-AWKEY.

*      IF SY-SUBRC <> 0.

*        MESSAGE E057 WITH P_BILLING VAT_FILE.

*      ENDIF.

*      MOVE ITAB_BKPF-VATNUM TO ITAB_BKPF-BKTXT(10).

*      MOVE P_DATE TO ITAB_BKPF-BKTXT+11(8).

*      CONDENSE ITAB_BKPF-BKTXT.

*      APPEND  ITAB_BKPF.

*    ENDIF.

*  ENDLOOP.

ENDFORM.                    " get_upfile

*&---------------------------------------------------------------------

*

*&      Form  update_table

*&---------------------------------------------------------------------

*

*       text

*----------------------------------------------------------------------

*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------

*

FORM UPDATE_TABLE.

LOOP AT ITAB_BKPF INTO WA_BKPF.

*    update bkpf set bktxt = wa_bkpf-bktxt

UPDATE BKPF SET BKTXT = WA_BKPF-VATNUM

WHERE BUKRS = WA_BKPF-BUKRS

AND GJAHR = WA_BKPF-GJAHR

AND BELNR = WA_BKPF-BELNR.

IF SY-SUBRC = 0.

*      UPDATE bseg SET zuonr = wa_bkpf-vatnum

*        WHERE bukrs = wa_bkpf-bukrs

*         AND gjahr = wa_bkpf-gjahr

*         AND belnr = wa_bkpf-belnr

*         AND kunnr <> ‘ ‘.

*      UPDATE bsid SET zuonr = wa_bkpf-vatnum

*         WHERE bukrs = wa_bkpf-bukrs

*         AND gjahr = wa_bkpf-gjahr

*         AND belnr = wa_bkpf-belnr.

*      UPDATE bsad SET zuonr = wa_bkpf-vatnum

*         WHERE bukrs = wa_bkpf-bukrs

*         AND gjahr = wa_bkpf-gjahr

*         AND belnr = wa_bkpf-belnr.

ENDIF.

ENDLOOP.

MESSAGE I211.

LEAVE PROGRAM.

ENDFORM.                    " update_table

时间: 2024-10-10 10:12:46

abap金税上传EXCEL版的相关文章

eclipse中导入jdk源码、SpringMVC注解@RequestParam、SpringMVC文件上传源码解析、ajax上传excel文件

eclipse中导入jdk源码:http://blog.csdn.net/evolly/article/details/18403321, http://www.codingwhy.com/view/799.html. ------------------------------- SpringMVC注解@RequestParam:http://825635381.iteye.com/blog/2196911. --------------------------- SpringMVC文件上传源

js兼容ie获取上传excel文件名称以及大小,绝对路径

/**  *   * @param obj file对象 document.getElementById(elementId);  * @returns  */ function getExcelFileFullPath(obj){ if (obj){ // ie if (window.navigator.userAgent.indexOf("MSIE") >= 1){ obj.select(); return document.selection.createRange().t

下载不含数据EXCEL的固定表头模版(标准EXCEL只含有列头),然后上传EXCEL.显示成功和上传失败的EXCEL连接

<div id="import" runat="server" visible="false"> Step1:<asp:HyperLink ID="HyperLink1" NavigateUrl="~/CommonTemplate/设备清单模版.xlsx" runat="server">下载模版</asp:HyperLink><br />

ASP.NET 实现上传EXCEL,利用NOPI操作,转换得到DataTable

这几天正好用到上传Excel,并根据Excel中的数据做相应的处理,故整理以备用. 用到的资源: (1)NOPI 2.2.0.0 可自己官网下载,也可点击:http://pan.baidu.com/s/1jIRxivW (2)用到一些常见处理文件的公共方法类,可以添加到项目中:http://pan.baidu.com/s/1dEWGKNZ 如过上述连接因故无法使用,可在评论留下邮箱,我打包发送过去,如有更好的建议,欢迎指导. 后台的提示方法ShowMsgHelper,根据自己的改写即可. ===

上传excel数据到数据库中

上传excel表格数据到数据库 导入固定路径下的excel数据到数据库 <form id="disposeFlightDataForm" action="../upload/disposeFlightData" method="post"> <input id="disposeFlightDataButton" type="submit" value="处理航班数据"

SpringMVc上传excel或csv文件

1.JSP页面代码 <form enctype=""multipart/form-data" method="post"> <input type="file" name="file"> <input type="submit" value="上传" > </form> 2.controller中代码 @RequestMappin

使用ocupload和POI一键上传Excel并解析导入数据库

使用的工具如下:  JQuery ocupload jquery.ocupload-1.1.2.js Apache POI  poi-3.9.jar 如果是Maven项目添加依赖如下: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> J

js上传Excel文件

一.问题 需要在项目里添加一个上传excel文件的功能,因为其他同样的后台里面有上传文件的功能,第一反应就是想着直接用.了解了一下发现它是利用bootstrap的fileinput实现的,但是我怎么都不能把fileinput插件给加到java的项目里,然后就只能自己用js实现吧.好像也没什么特别的需求. 1)原本的样式不好看,需要和项目一致 2)只上传xls和xlxs的文件 二.代码 <input type="file" id="file" name=&quo

Ajax实现上传Excel

最近在做一个项目,涉及到了上传excel,由于技术不好,就采用了form表单进行提交,效果是实现,但是用户提现不够完美,几经周折,用了Ajax实现了 代码如下: HTML: JS: 原文地址:https://www.cnblogs.com/southyue/p/12005809.html