SAP 金税接口代码 供参考

程序可以通过抓取 客户 开票信息等 下载文本 导出

需要事先创建好几个structure

zc0000sdt0016,
zc0000sdt0017
REPORT  zc0000sdr0016 NO STANDARD PAGE HEADING
                     LINE-COUNT 58
                     LINE-SIZE 170.
TABLES:vbrk,vbrp,t001.
*----------------------------------------------------------------------*
* type define
*----------------------------------------------------------------------*
TYPES: BEGIN OF ty_vbrk,
         vbeln  TYPE vbrk-vbeln,"invoice number
         fkart  TYPE vbrk-fkart, "ERPInvoiceType
         waerk  TYPE vbrk-waerk, "Currency
         vkorg  TYPE vbrk-vkorg, "Sales Organization
         vtweg  TYPE vbrk-vtweg, "Distribution Channel
         knumv  TYPE vbrk-knumv,
         fkdat  TYPE vbrk-fkdat, "Invoice data
         gjahr  TYPE vbrk-gjahr, "Year
         bukrs  TYPE vbrk-bukrs,
         taxk1  TYPE vbrk-taxk1, "Invoice type(eg:0 - Expore Invoice, 1 - VAT Inovice , 2 - Credit Inovice)BillingType
         kunag  TYPE vbrk-kunag, "Customer code
         sfakn  TYPE vbrk-sfakn, "Credit Notes
         fksto  TYPE vbrk-fksto, "Cancel flag
          del   TYPE c,
       END OF ty_vbrk,
       BEGIN OF ty_vbrp,
         vbeln  TYPE vbrp-vbeln, "Invoice number
         posnr  TYPE vbrp-posnr, "Item number
         fkimg  TYPE vbrp-fkimg, "Quantity
         vrkme  TYPE vbrp-vrkme, "Unit
         netwr  TYPE vbrp-netwr, "Sum
         vbelv  TYPE vbrp-vbelv, "First Document
         aubel  TYPE vbrp-aubel, "Sales Document
         matnr  TYPE vbrp-matnr, "Material Number
         arktx  TYPE vbrp-arktx, "Product chinese name
         ernam  TYPE vbrp-ernam, "Person code
         mwsbp  TYPE vbrp-mwsbp, "Tax
       END OF ty_vbrp,
       BEGIN OF ty_out,
          txt TYPE string,
       END OF ty_out,
        BEGIN OF ty_errlog,  "Linda 20141120 add
         str(100) TYPE c,    "Linda 20141120 add
        END OF ty_errlog.   "Linda 20141120 add
*----------------------------------------------------------------------*
*  Internal Tables define
*----------------------------------------------------------------------*
DATA: it_blitems       TYPE STANDARD TABLE OF zc0000sdt0016,"is struction
      it_tbillno       TYPE STANDARD TABLE OF zc0000sdt0017,"is table,
      it_kunnr         TYPE jito_kunnr_range_tt,
      it_vbeln         TYPE jit_vbeln_vl_range_tt,
      it_out           TYPE STANDARD TABLE OF ty_out,"use for output
      it_errlog        TYPE STANDARD TABLE OF ty_errlog,  "Linda 20141120 add
*----------------------------------------------------------------------*
*  Workarea define
*----------------------------------------------------------------------*
      iw_vbrk          TYPE ty_vbrk,
      iw_tbillno       TYPE zc0000sdt0017,"is table
      iw_blitems       TYPE zc0000sdt0016,"is struction
      iw_kunnr         TYPE jito_kunnr_range,
      iw_vbeln         TYPE jit_vbeln_vl_range,
      iw_out           TYPE ty_out,
      iw_errlog        TYPE ty_errlog,  "Linda 20141120 add
*----------------------------------------------------------------------*
*  Variables define
*----------------------------------------------------------------------*
      w_time           TYPE char6,           "run time
      w_path           TYPE rlgrap-filename, "path
      w_filename       TYPE rlgrap-filename, "file name
      w_data1          TYPE i,
      w_data2          TYPE i,
      w_filter         TYPE string." VALUE ‘Text Files(*.txt)|*.txt‘.Linda 20141024
*----------------------------------------------------------------------*
* Constants define
*----------------------------------------------------------------------*
CONSTANTS: cos_vl        TYPE char1  VALUE ‘\‘,
           cos_open      TYPE char4  VALUE ‘OPEN‘,
           cos_close     TYPE char5  VALUE ‘CLOSE‘,
           cos_transfer  TYPE char8  VALUE ‘TRANSFER‘,
           cos_comma     TYPE char1  VALUE ‘,‘.          "Linda 20141120 add

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-003.
PARAMETERS:"p_batch   TYPE  char20,                      "batch   1
           p_bukrs   TYPE  vbrk-bukrs OBLIGATORY.        "company
SELECT-OPTIONS:s_fkdat    FOR  vbrk-fkdat NO-EXTENSION.  "Billing date for billing index and printout  2
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1(31) text-009 .                "enter data range
PARAMETER p_data1  TYPE char3.
SELECTION-SCREEN COMMENT 40(4) text-010.
PARAMETER p_data2  TYPE char3.
SELECTION-SCREEN COMMENT 70(79) text-008.
SELECTION-SCREEN END OF LINE.
SELECT-OPTIONS:
           s_vbeln     FOR  vbrk-vbeln,               "Billing Document 3
           s_kunag     FOR  vbrk-kunag,               "Payer  4
           s_matnr     FOR  vbrp-matnr NO-EXTENSION,  "Material Number 5
           s_aubel     FOR  vbrp-aubel NO-EXTENSION,  "Sales Document 6
           s_vkorg     FOR  vbrk-vkorg NO-EXTENSION OBLIGATORY.
PARAMETERS:p_gjahr     TYPE  vbrk-gjahr.              "Fiscal Year

PARAMETERS:p_nonrep    TYPE c AS CHECKBOX. "compare or not
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETER p_check3 RADIOBUTTON GROUP rad DEFAULT ‘X‘ USER-COMMAND rad.
SELECTION-SCREEN COMMENT 4(20) text-c03 FOR FIELD p_check3."TXT format
PARAMETER p_check4 RADIOBUTTON GROUP rad.
SELECTION-SCREEN COMMENT 28(30) text-c04 FOR FIELD p_check4."CSV format
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-002.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETER p_check2 TYPE c RADIOBUTTON GROUP rads DEFAULT ‘X‘ USER-COMMAND rad2.
SELECTION-SCREEN COMMENT 4(20) text-c02 FOR FIELD p_check2."output to server
SELECTION-SCREEN END OF LINE.
PARAMETERS: p_path2(1024) TYPE c LOWER CASE
                      VISIBLE LENGTH 200.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETER p_check1 RADIOBUTTON GROUP rads.
SELECTION-SCREEN COMMENT 4(20) text-c01 FOR FIELD p_check1."
SELECTION-SCREEN END OF LINE.
PARAMETERS: p_path(1024) TYPE c LOWER CASE
                      VISIBLE LENGTH 200.
SELECTION-SCREEN END OF BLOCK b3.

*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
* init

*----------------------------------------------------------------------*
* AT SELECTION-SCREEN ON VALUE-REQUEST
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
  PERFORM frm_save_file CHANGING p_path.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
  IF p_data1 <> space AND p_data2 <> space. "Linda 20141120 add
    REFRESH:s_fkdat.  "Linda 20141024 add
  ENDIF.                  "Linda 20141120 add
  IF p_data1 <> space AND p_data2 <> space.
    PERFORM frm_chang_data USING p_data1
                           CHANGING s_fkdat-low.

    PERFORM frm_chang_data USING p_data2
                          CHANGING s_fkdat-high.
    APPEND s_fkdat.

  ENDIF.

*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
*  WHEN ‘ONLI‘.
    PERFORM frm_init.
    IF p_path = space AND p_check1 = ‘X‘.
      SET CURSOR FIELD ‘P_PATH‘.
      MESSAGE e001(00) WITH ‘Local path can not be space‘(018).
    ENDIF.
    IF p_path2 = space AND p_check2 = ‘X‘.
      SET CURSOR FIELD ‘P_PATH2‘.
      MESSAGE e001(00) WITH ‘Server path can not be space‘(017).
    ENDIF.
  CASE sy-ucomm.
  WHEN ‘RAD‘ OR ‘RAD2‘.
*   lw_filter = ‘Text Files(*.txt)|*.txt|Csv Files(*.csv)|*.csv|Excel Files(*.xls)|*.xls|All Files(*.*)|*.*|‘."Text Files(*.txt)|*.txt|‘. "All Files(*.*)|*.*|
    IF p_check3 = ‘X‘.
      w_filter = ‘Text Files(*.txt)|*.txt‘(020).
    ELSEIF p_check4 = ‘X‘.
      w_filter = ‘Csv Files(*.csv)|*.csv‘(021).
    ENDIF.
    CLEAR: p_path,
           p_path2.
 WHEN OTHERS.
   ENDCASE.
  TRY.
      w_data1 = p_data1.
      w_data2 = p_data2.
    CATCH cx_root.
      SET CURSOR FIELD ‘P_DATA1‘.
      MESSAGE e001(00) WITH ‘Data range must be number‘(014).
  ENDTRY.
  IF w_data1 > w_data2.
    SET CURSOR FIELD ‘P_DATA1‘.
    MESSAGE e001(00) WITH ‘Data range must from small to big‘(015).
  ENDIF.
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
  w_time = sy-uzeit.
  IF s_fkdat[] IS INITIAL AND p_data1 <> space AND p_data2 <> space.
    PERFORM frm_chang_data USING p_data1
                           CHANGING s_fkdat-low.

    PERFORM frm_chang_data USING p_data2
                          CHANGING s_fkdat-high.
    s_fkdat-sign = ‘I‘.
    s_fkdat-option = ‘BT‘.
    APPEND s_fkdat.
  ELSEIF s_fkdat[] IS INITIAL AND p_data1 = space AND p_data2 = space.
      MESSAGE s001(00) WITH text-022 text-025 DISPLAY LIKE ‘E‘.
      RETURN.
      LEAVE TO LIST-PROCESSING.
  ENDIF.
  LOOP AT s_kunag.
    iw_kunnr-sign = s_kunag-sign.
    iw_kunnr-option = s_kunag-option.
    iw_kunnr-low = s_kunag-low.
    iw_kunnr-high = s_kunag-high.

    APPEND iw_kunnr TO it_kunnr.
  ENDLOOP.
  LOOP AT s_vbeln.
    iw_vbeln-sign = s_vbeln-sign.
    iw_vbeln-option = s_vbeln-option.
    iw_vbeln-low = s_vbeln-low.
    iw_vbeln-high = s_vbeln-high.

    APPEND iw_vbeln TO it_vbeln.
  ENDLOOP.

  CHECK it_errlog IS INITIAL.
  CALL FUNCTION ‘ZBPI_FW_INVOICE_MAHLE_NEW‘
    EXPORTING
     fkdat_fr                = s_fkdat-low
     vbeln_fr                = s_vbeln-low
     kunnr_fr                = s_kunag-low
     matnr_fr                = s_matnr-low
     fkdat_to                = s_fkdat-high
     vbeln_to                = s_vbeln-high
     kunnr_to                = s_kunag-high
     matnr_to                = s_matnr-high
     aubel_fr                = s_aubel-low
     aubel_to                = s_aubel-high
     vkorg_fr                = s_vkorg-low
     vkorg_to                = s_vkorg-high
*     disc_cond_type    = p_disc
*     unit_cond_type    = p_unit
*     tax_cond_type     = p_tax
     bukrs                   = p_bukrs
     nonrepeat               = p_nonrep
     gjahr                   = p_gjahr
    TABLES
     zfw_billing_items       = it_blitems
     zfw_billingno           = it_tbillno
     zfw_kunnr               = it_kunnr
     zfw_vbeln               = it_vbeln
   EXCEPTIONS
     no_data                 = 1
     lock_errord             = 2
     insert_error            = 3.
  CASE sy-subrc.
   WHEN 1.
     iw_errlog-str = ‘No matching data is found.‘(012).
       APPEND iw_errlog TO it_errlog.
   WHEN 2.
     iw_errlog-str = ‘Lock table error.‘(023).
       APPEND iw_errlog TO it_errlog.
   WHEN 3.
     iw_errlog-str = ‘Insert table error.‘(026).
       APPEND iw_errlog TO it_errlog.
  ENDCASE.

  CHECK it_errlog IS INITIAL.
**{ Insert started by Linda on 06-Jan-2015 - CRXX
    PERFORM frm_modify_blitems.
*
**} Insert ended   by Linda on 06-Jan-2015 - CRXX
* background process
  IF p_check2 = ‘X‘.
    PERFORM frm_transfer_sever.
  ELSE.
*   front process
    PERFORM frm_transfer_loc.
  ENDIF.
*----------------------------------------------------------------------*
* END-OF-SELECTION
*----------------------------------------------------------------------*
END-OF-SELECTION.
* error log print
  LOOP AT it_errlog INTO iw_errlog."
    WRITE: /1  iw_errlog-str.
  ENDLOOP.

  FREE:it_tbillno,
       it_out,
       iw_vbrk,
       iw_tbillno,
       iw_blitems,
       it_vbeln,
       it_kunnr,
       it_blitems,
       w_time,
       w_path,
       w_filename,
       iw_out.
*&---------------------------------------------------------------------*
*&      Form  frm_transfer_sever
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_transfer_sever .
* 拼接文件名
  IF p_check3 = ‘X‘.
    CONCATENATE p_bukrs s_vkorg-low sy-datum "LINDA 20140916
                w_time ‘.txt‘
                INTO w_filename.
  ELSEIF p_check4 = ‘X‘.
    CONCATENATE p_bukrs s_vkorg-low sy-datum "LINDA 20140916
                w_time ‘.csv‘
                INTO w_filename.
  ENDIF.
* 拼接服务器路径
  CONCATENATE p_path2 w_filename
         INTO w_path SEPARATED BY cos_vl.

* 打开服务器文件  编码是非unicode
*  OPEN DATASET w_path FOR OUTPUT IN TEXT MODE ENCODING NON-UNICODE.
* 打开服务器文件  编码是unicode
  OPEN DATASET w_path FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
* 打开成功
  IF sy-subrc = 0.
* 读取
    PERFORM frm_write_txt.
* 关闭 DATASET
    TRY.
        CLOSE DATASET w_path.
        IF sy-subrc <> 0.
* 文件名 &1 &2 &3 操作出错
          MESSAGE s001(00) WITH ‘File name‘ w_filename cos_close ‘operate Error‘  INTO iw_errlog-str. "Linda 20141119
        ELSE.
* 导出成功
          MESSAGE s001(00) WITH ‘Output successful‘ INTO iw_errlog-str.
        ENDIF.
      CATCH cx_root.                                     "#EC CATCH_ALL
        MESSAGE s001(00) WITH ‘File name‘ w_filename cos_close ‘operate Error‘  INTO iw_errlog-str. "Linda 20141119
      CLEANUP.
    ENDTRY.
  ELSE.
*   文件名 &1 &2 &3 操作出错
    MESSAGE s001(00) WITH ‘File name‘ w_filename cos_open ‘operate Error‘ INTO iw_errlog-str. "Linda 20141119
  ENDIF.
  APPEND iw_errlog TO it_errlog.
  CLEAR:w_filename,
        w_path.
ENDFORM.                    " frm_transfer_sever
*&---------------------------------------------------------------------*
*&      Form  frm_transfer_loc
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->p1      text
*      <--p2      text
*----------------------------------------------------------------------*
FORM frm_transfer_loc.
  DATA:lw_file TYPE string.
* 拼接download数据
  LOOP AT it_blitems INTO iw_blitems.
    PERFORM frm_con_string   USING     iw_blitems
                             CHANGING  iw_out-txt.
    APPEND iw_out TO it_out.
    CLEAR: iw_blitems,iw_out.
  ENDLOOP.
  lw_file = p_path.

  CALL FUNCTION ‘GUI_DOWNLOAD‘
    EXPORTING
      filename                = lw_file "string
      filetype                = ‘ASC‘
      codepage                = ‘8400‘  "4110 是utf-8
      write_bom               = ‘X‘
    TABLES
      data_tab                = it_out
    EXCEPTIONS
      file_write_error        = 1
      no_batch                = 2
      gui_refuse_filetransfer = 3
      invalid_type            = 4
      no_authority            = 5
      unknown_error           = 6
      header_not_allowed      = 7
      separator_not_allowed   = 8
      filesize_not_allowed    = 9
      header_too_long         = 10
      dp_error_create         = 11
      dp_error_send           = 12
      dp_error_write          = 13
      unknown_dp_error        = 14
      access_denied           = 15
      dp_out_of_memory        = 16
      disk_full               = 17
      dp_timeout              = 18
      file_not_found          = 19
      dataprovider_exception  = 20
      control_flush_error     = 21
      OTHERS                  = 22.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE ‘S‘ NUMBER sy-msgno
            DISPLAY LIKE ‘E‘
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    iw_errlog-str = ‘Output success.‘(024).
    APPEND iw_errlog TO it_errlog.
  ENDIF.
ENDFORM.                    " frm_transfer_loc
*&---------------------------------------------------------------------*
*&      Form  frm_save_file
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--f_path      text
*----------------------------------------------------------------------*
FORM frm_save_file  CHANGING f_path TYPE file_table-filename.
  DATA: lw_fname   TYPE string,
         lw_path   TYPE string,
         lw_fpath  TYPE string.

  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      file_filter          = w_filter
    CHANGING
      filename             = lw_fname
      path                 = lw_path
      fullpath             = lw_fpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE ‘E‘ NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  f_path = lw_fpath.

ENDFORM.                    " frm_save_file
*&---------------------------------------------------------------------*
*&      Form  frm_con_string
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->piw_blitem  text
*      <--pw_txt      text
*----------------------------------------------------------------------*
FORM frm_con_string  USING  piw_blitem  TYPE zc0000sdt0016
                    CHANGING pw_txt TYPE string.
  DATA: lw_temp TYPE char1024.
  FIELD-SYMBOLS: <fs_temp> TYPE ANY.
  DO.
    ASSIGN COMPONENT sy-index OF STRUCTURE piw_blitem TO <fs_temp>.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
    CLEAR lw_temp.
    lw_temp = <fs_temp>.
*     去空格
    SHIFT lw_temp LEFT DELETING LEADING space.

    IF sy-index = 1.
      pw_txt = lw_temp.
    ELSE.
      IF p_check3 = ‘X‘.  "Linda 20141120 add
      CONCATENATE pw_txt cl_abap_char_utilities=>horizontal_tab lw_temp
             INTO pw_txt.

       ELSEIF p_check4 = ‘X‘.
      CONCATENATE pw_txt cos_comma lw_temp    "Linda 20141120 add
             INTO pw_txt.
*      ELSE.
*        CONCATENATE pw_txt cos_comma lw_temp
*               INTO pw_txt.
      ENDIF.
    ENDIF.
  ENDDO.
  UNASSIGN <fs_temp>.
ENDFORM.                    " frm_con_string
*&---------------------------------------------------------------------*
*&      Form  frm_write_txt
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_write_txt .
  DATA:lw_out      TYPE string.
**  上传数据头
** 捕获异常
*  TRY.
** 上传服务器
*      lw_out  = LINES( it_blitems ).
*      CONCATENATE w_filename ‘#Record‘ lw_out
*             INTO lw_out.
*      CONDENSE lw_out.
*      TRANSFER lw_out TO w_path.
** 判断传输是否成功
*      IF sy-subrc <> 0.
** 文件名 &1 &2 &3 操作出错
*        MESSAGE s001(00) WITH ‘File name‘ w_path cos_transfer ‘operate error‘.
*      ENDIF.
*    CATCH cx_root.
*      MESSAGE s001(00) WITH ‘File name‘ w_path cos_transfer ‘operate error‘.
*    CLEANUP.
*  ENDTRY.
*  上传数据
  LOOP AT it_blitems INTO iw_blitems.

    PERFORM frm_con_string   USING     iw_blitems
                             CHANGING  lw_out.
    TRY.
        TRANSFER lw_out TO w_path.
* 判断传输是否成功
        IF sy-subrc <> 0.
* 文件名 &1 &2 &3 操作出错
          MESSAGE s001(00) WITH ‘File name‘ w_path cos_transfer ‘operate error‘.
        ENDIF.
      CATCH cx_root.
        MESSAGE s001(00) WITH ‘File name‘ w_path cos_transfer ‘operate error‘.
      CLEANUP.
    ENDTRY.
    CLEAR: iw_blitems,lw_out.
  ENDLOOP.
ENDFORM.                    " frm_write_txt
*&---------------------------------------------------------------------*
*&      Form  frm_chang_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->fw_data  text
*      <--fw_budat text
*----------------------------------------------------------------------*
FORM frm_chang_data  USING    fw_data
                     CHANGING fw_budat.
  DATA:l_today TYPE p0001-begda,
       lw_data TYPE t5a4a-dlydy,
       lw_calc TYPE p0001-begda.
*       lw_data2 LIKE sy-datum.

  l_today = sy-datum.
  lw_data = fw_data.
  IF fw_data = 0.
    fw_budat = sy-datum.
  ELSEIF fw_data > 0.
    CALL FUNCTION ‘RP_CALC_DATE_IN_INTERVAL‘
      EXPORTING
        date      = l_today
        days      = lw_data
        months    = 0
        signum    = ‘+‘
        years     = 0
      IMPORTING
        calc_date = lw_calc.
    fw_budat = lw_calc .
  ELSE.
    CALL FUNCTION ‘RP_CALC_DATE_IN_INTERVAL‘
      EXPORTING
        date      = l_today
        days      = lw_data
        months    = 0
        signum    = ‘-‘
        years     = 0
      IMPORTING
        calc_date = lw_calc.

    fw_budat = lw_calc .
  ENDIF.
ENDFORM.                    " frm_chang_data
*&---------------------------------------------------------------------*
*&      Form  frm_init
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_init .
*  SELECT * FROM t001 INTO t001. "Linda 20141204 del
* authority-check
    AUTHORITY-CHECK OBJECT ‘F_BKPF_BUK‘
                   ID ‘BUKRS‘ FIELD p_bukrs
                   ID ‘ACTVT‘ FIELD ‘03‘.
    IF sy-subrc <> 0.
*      You have no authorization for Company code
    MESSAGE e004(zp001) WITH p_bukrs.
    ENDIF.
*  ENDSELECT.                 "Linda 20141204 del

ENDFORM.                    " frm_init
**{ Insert started by Linda on 06-Jan-2015 - CR0001
*&---------------------------------------------------------------------*
*&      Form  FRM_MODIFY_BLITEMS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_modify_blitems .
  DATA:lw_blitems TYPE zc0000sdt0016.
  LOOP AT it_blitems INTO lw_blitems.
CALL FUNCTION ‘CONVERSION_EXIT_CUNIT_OUTPUT‘
  EXPORTING
    input                = lw_blitems-vrkme
    language             = sy-langu
IMPORTING
*   LONG_TEXT            =
   output               = lw_blitems-vrkme
*   SHORT_TEXT           =
* EXCEPTIONS
*   UNIT_NOT_FOUND       = 1
*   OTHERS               = 2
          .
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

MODIFY it_blitems FROM lw_blitems TRANSPORTING vrkme.
    ENDLOOP.

ENDFORM.                    " FRM_MODIFY_BLITEMS

发票号码回传程序

   1 REPORT  zc0000sdr0017 NO STANDARD PAGE HEADING
   2                      LINE-COUNT 58
   3                      LINE-SIZE 170.
   4 TYPE-POOLS: icon,slis,kcdu,tpit.
   5 TABLES: sscrfields,
   6         zc0000sdt0020.
   7 *----------------------------------------------------------------------*
   8 * type define
   9 *----------------------------------------------------------------------*
  10 TYPES: ty_dir_list TYPE STANDARD TABLE OF salfldir,
  11        BEGIN OF ty_dir,
  12          name    TYPE pfeflname,
  13          size TYPE pfeflsize,
  14          name2 TYPE pfeflname,
  15          END OF ty_dir,
  16        BEGIN OF ty_tabl,
  17          line(200),
  18        END OF ty_tabl,
  19        BEGIN OF ty_vbeln,
  20          vbeln TYPE vbrk-vbeln,
  21          fkart TYPE vbrk-fkart,
  22          kunrg TYPE vbrk-kunrg,
  23          bukrs TYPE vbrk-bukrs,
  24          fkdat TYPE vbrk-fkdat,
  25          xblnr TYPE xblnr,
  26          gjahr TYPE gjahr,
  27          bktxt TYPE bktxt, "linda 20140918
  28          zline TYPE i,  "bseg table lines  "Linda 20141023
  29         END OF ty_vbeln,
  30         BEGIN OF ty_vbrk,
  31          vbeln TYPE vbrk-vbeln,
  32          bukrs TYPE vbrk-bukrs,
  33          gjahr TYPE vbrk-gjahr,
  34          xblnr TYPE vbrk-xblnr,
  35          fkdat TYPE vbrk-fkdat,
  36         END OF ty_vbrk,
  37 * add local file read  begin
  38         BEGIN OF ty_row,
  39           field TYPE char40,
  40         END OF ty_row,
  41 * add local file read  end
  42         BEGIN OF ty_errlog,  "Linda 20141120 add
  43          str(100) TYPE c,    "Linda 20141120 add
  44         END OF ty_errlog.   "Linda 20141120 add
  45 *----------------------------------------------------------------------*
  46 *  Internal Tables define
  47 *----------------------------------------------------------------------*
  48 DATA: it_file        TYPE ty_dir_list,
  49       it_file2       TYPE STANDARD TABLE OF ty_dir,
  50       it_errtab      TYPE tpit_t_errdoc,
  51       it_buztab      TYPE TABLE OF tpit_buztab,
  52       it_fldtab         TYPE tpit_t_fname,
  53       it_tabl        TYPE STANDARD TABLE OF ty_tabl WITH HEADER LINE,
  54       it_errlog      TYPE STANDARD TABLE OF zc0000sdt0020,
  55       it_errlog2     TYPE STANDARD TABLE OF ty_errlog,  "Linda 20141120 add
  56       it_fieldcat    TYPE slis_t_fieldcat_alv,
  57       it_bseg        TYPE STANDARD TABLE OF bseg." Linda 20141024 add
  58 *&---------------------------------------------------------------------*
  59 *  Workarea define
  60 *&---------------------------------------------------------------------*
  61 DATA: iw_file      TYPE salfldir,
  62       iw_file2     TYPE ty_dir,
  63       iw_ins       TYPE ty_vbeln,
  64       iw_vbrk      TYPE ty_vbrk,
  65       iw_err       TYPE zc0000sdt0020,
  66       iw_errlog    TYPE ty_errlog,  "Linda 20141120 add
  67       iw_bseg      TYPE bseg.
  68 *----------------------------------------------------------------------*
  69 *   Global Variables
  70 *----------------------------------------------------------------------*
  71 DATA :w_ret           TYPE char1,
  72       w_cmd(100)      TYPE c,
  73       w_date          TYPE sy-datum,
  74       w_time          TYPE char6,
  75       w_read_file     TYPE salfile-longname,
  76       functxt         TYPE smp_dyntxt,
  77       ok_code         TYPE sy-ucomm,
  78       w_repid         TYPE sy-repid,
  79       w_str(1000)     TYPE c,
  80       putdahigh       TYPE zc0000sdt0020-putda,
  81       puttihigh       TYPE zc0000sdt0020-putti,
  82       vbelnhigh       TYPE zc0000sdt0020-vbeln,
  83       xblnrhigh       TYPE zc0000sdt0020-xblnr,
  84       w_file_path     TYPE string,
  85       w_lfile         TYPE string, "file name
  86       w_row_num       TYPE char4,
  87       w_msg_txt       TYPE string.
  88 *----------------------------------------------------------------------*
  89 *  Constants define
  90 *----------------------------------------------------------------------*
  91 CONSTANTS: cos_star2(3)       TYPE c VALUE ‘*.*‘,
  92            cos_2(2)           TYPE c VALUE ‘2‘,
  93            cos_1(1)           TYPE c VALUE ‘1‘,
  94            cos_numc(4)        TYPE c VALUE ‘NUMC‘.
  95
  96 SELECTION-SCREEN: FUNCTION KEY 1 .
  97 SELECTION-SCREEN BEGIN OF LINE.
  98 PARAMETER p_check2 TYPE c RADIOBUTTON GROUP rads DEFAULT ‘X‘.
  99 SELECTION-SCREEN COMMENT 4(20) text-c02 FOR FIELD p_check2."导出到服务器
 100 SELECTION-SCREEN END OF LINE.
 101 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
 102 PARAMETERS: p_fpath(1024) TYPE c DEFAULT ‘g:\r3ftp\formware\writeback\nonprocess\‘,"need edit  D:\usr\sap\put\Inbound\Nonprocess 103             p_bpath(1024) TYPE c DEFAULT ‘g:\r3ftp\formware\writeback\bak\‘." D:\usr\sap\put\Inbound\Backup 104 SELECTION-SCREEN END OF BLOCK b1.
 105 SELECTION-SCREEN BEGIN OF LINE.
 106 PARAMETER p_check1 RADIOBUTTON GROUP rads.
 107 SELECTION-SCREEN COMMENT 4(20) text-c01 FOR FIELD p_check1."导出到本地
 108 SELECTION-SCREEN END OF LINE.
 109 SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t01.
 110 PARAMETERS: p_flpath(1024) TYPE c DEFAULT ‘‘."need edit  D:\usr\sap\put\Inbound\Nonprocess 111 *            p_blpath(1024) TYPE c DEFAULT ‘D:\Backup\‘." D:\usr\sap\put\Inbound\Backup 112 SELECTION-SCREEN END OF BLOCK b2.
 113 *----------------------------------------------------------------------*
 114 * INITIALIZATION.
 115 *----------------------------------------------------------------------*
 116 INITIALIZATION.
 117   functxt-icon_id   = icon_biw_info_catalog.
 118   functxt-icon_text = ‘ERROR LOG‘.
 119   sscrfields-functxt_01 = functxt.
 120 *----------------------------------------------------------------------*
 121 * AT SELECTION-SCREEN ON VALUE-REQUEST
 122 *----------------------------------------------------------------------*
 123 AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_flpath.
 124   PERFORM form_get_file_path_upload.
 125 *----------------------------------------------------------------------*
 126 * START-OF-SELECTION
 127 *----------------------------------------------------------------------*
 128 START-OF-SELECTION.
 129   w_date = sy-datum.
 130   w_time = sy-uzeit.
 131 *   file process
 132   IF p_check2 IS NOT INITIAL.
 133     PERFORM frm_file_process.
 134   ELSE.
 135 * local
 136     PERFORM frm_file_process_local.
 137   ENDIF.
 138 *----------------------------------------------------------------------*
 139 * AT SELECTION-SCREEN
 140 *----------------------------------------------------------------------*
 141 AT SELECTION-SCREEN.
 142   IF sy-ucomm = ‘ONLI‘.
 143     IF p_flpath IS INITIAL AND p_check1 = ‘X‘.
 144       MESSAGE e001(00) WITH ‘local path can not be init‘(001).
 145       SET CURSOR FIELD ‘P_FLPATH‘.
 146     ENDIF.
 147   ENDIF.
 148   CASE sscrfields-ucomm.
 149     WHEN ‘FC01‘.
 150       CALL SCREEN 9000.
 151     WHEN OTHERS.
 152       ...
 153   ENDCASE.
 154 *----------------------------------------------------------------------*
 155 * END-OF-SELECTION
 156 *----------------------------------------------------------------------*
 157 END-OF-SELECTION.
 158   IF w_ret = ‘X‘.
 159     IF it_errlog IS INITIAL.
 160       WRITE: /1  ‘Write back fail,please see error log.‘(014).
 161     ELSE.
 162       LOOP AT it_errlog INTO iw_errlog."
 163         WRITE: /1  iw_errlog-str.
 164       ENDLOOP.
 165     ENDIF.
 166   ELSE.
 167     WRITE: /1  ‘Write back success‘(012).
 168   ENDIF.
 169   CLEAR:it_errlog,iw_errlog.
 170 *----------------------------------------------------------------------*
 171 *  子程序名称 :文件处理
 172 *  子程序名   :frm_file_process
 173 *  概要       :文件处理
 174 * 参数       :无
 175 *  返回值     :无
 176 *----------------------------------------------------------------------*
 177 FORM frm_file_process.
 178   DATA: lw_path TYPE salfile-longname,
 179         w_cmd1   TYPE string.
 180 *   Nonprocess路径名组成
 181   CLEAR lw_path.
 182   lw_path = p_fpath.
 183 *   取得目录中的内容
 184   PERFORM frm_read_directory TABLES it_file
 185                              USING  lw_path
 186                              CHANGING w_ret.
 187   IF w_ret = space.
 188 *   把文件夹Nonprocess下的文件复制到文件夹Backup下
 189
 190 **{ Insert started by ZhouTing on 25-Jan-2015 - CR0010
 191
 192 ** begin of comment by zhou ting
 193 ** to use open dataset instead
 194 *
 195 **    这是在Linux系统下用的
 196 **    CONCATENATE p_fpath cos_nonprocess cos_star2            "#EC NOTEXT
 197 **                INTO w_cmd1.
 198 **    这是在windows系统下用的
 199 *    CONCATENATE p_fpath cos_star2                           "#EC NOTEXT
 200 *              INTO w_cmd1.
 201 *
 202 **    这是在Linux系统下用的  "need be edited
 203 **    CONCATENATE ‘cp‘ w_cmd1 p_bpath INTO w_cmd SEPARATED BY space.
 204 **    这是在windows系统下用的
 205 *    CONCATENATE ‘copy‘ w_cmd1 p_bpath INTO w_cmd SEPARATED BY space.
 206 ***{ Insert started by Linda on 06-Jan-2015 - CR0010
 207 *    TRY.
 208 ***{ Insert ended by Linda on 06-Jan-2015 - CR0010
 209 *    CALL ‘SYSTEM‘ ID ‘COMMAND‘ FIELD w_cmd
 210 *                  ID ‘TAB‘ FIELD it_tabl-*sys*.
 211 *
 212 *    IF sy-subrc <> 0.
 213 *      CONCATENATE ‘Move file fail‘(013) p_bpath INTO iw_errlog-str.
 214 *      APPEND iw_errlog TO it_errlog2.
 215 *      w_ret = ‘X‘.
 216 *    ENDIF.
 217 ***{ Insert started by Linda on 06-Jan-2015 - CR0010
 218 *         CATCH cx_root.
 219 *             CONCATENATE ‘Move file fail‘(013) p_bpath INTO iw_errlog-str.
 220 *      APPEND iw_errlog TO it_errlog2.
 221 *      w_ret = ‘X‘.
 222 *     ENDTRY.
 223 ***{ Insert ended by Linda on 06-Jan-2015 - CR0010
 224 ** end of comment.
 225
 226     PERFORM frm_copy_file USING p_fpath p_bpath it_file
 227                           CHANGING w_ret.
 228     IF w_ret <> 0.
 229       CONCATENATE ‘Move file fail‘(013) p_bpath INTO iw_errlog-str.
 230       APPEND iw_errlog TO it_errlog2.
 231       w_ret = ‘X‘.
 232     ENDIF.
 233
 234 **{ Insert ended by ZhouTing on 25-Jan-2015 - CR0010
 235
 236 *   文件数据传送接口表
 237
 238     PERFORM frm_transfer_data USING lw_path
 239                               CHANGING w_ret.
 240   ENDIF.
 241
 242 ENDFORM.                    " FRM_file_process
 243 *----------------------------------------------------------------------*
 244 *  子程序名称 :取得目录中的内容
 245 *  子程序名   :frm_read_directory
 246 *  概要       :取得目录中的内容
 247 * 参数       :fit_dir_bukrs type ty_dir_list        取得的目录列表
 248 *             :f_dir_path type salfile-longname      目录路径
 249 *  返回值     :f_ret type c  正常取得:space  未取得:‘1‘ 异常:‘2‘
 250 *----------------------------------------------------------------------*
 251 FORM frm_read_directory TABLES fit_dir TYPE ty_dir_list
 252                          USING f_dir_path TYPE salfile-longname
 253                          CHANGING f_ret TYPE c.
 254   DATA: lw_lines TYPE i.
 255
 256   CLEAR f_ret.
 257   REFRESH fit_dir.
 258   CALL FUNCTION ‘RZL_READ_DIR_LOCAL‘
 259     EXPORTING
 260       name           = f_dir_path
 261     TABLES
 262       file_tbl       = fit_dir
 263     EXCEPTIONS
 264       argument_error = 1
 265       not_found      = 2
 266       OTHERS         = 3.
 267
 268   IF sy-subrc <> 0.
 269     f_ret = cos_2.
 270     RETURN.
 271   ENDIF.
 272
 273   lw_lines = LINES( fit_dir ).
 274   IF lw_lines < 3.
 275     f_ret = cos_1.
 276   ENDIF.
 277 ENDFORM.                    " frm_read_directory
 278 *----------------------------------------------------------------------*
 279 *  子程序名称 :数据传输处理
 280 *  子程序名   :frm_copy_file
 281 *  概要       :把需处理的文件拷贝到bak目录下
 282 * 参数       :i_frompath    目录路径
 283 *               i_topath      目录路径
 284 *  返回值     :o_ret 正常:space  异常:‘4‘
 285 *----------------------------------------------------------------------*
 286 FORM frm_copy_file USING i_frompath
 287                          i_topath
 288                          i_filelist TYPE ty_dir_list
 289                    CHANGING o_ret.
 290
 291   DATA: from_file TYPE string,
 292         to_file   TYPE string,
 293         lt_file_content TYPE TABLE OF string,
 294         lv_text     TYPE string,
 295         ls_filelist TYPE salfldir.
 296
 297   LOOP AT i_filelist FROM 3 INTO ls_filelist.
 298
 299     REFRESH lt_file_content.
 300
 301     "源文件路径+文件名
 302     CONCATENATE i_frompath ls_filelist-name INTO from_file.
 303     "目标文件路径+文件名
 304     CONCATENATE i_topath   ls_filelist-name INTO to_file.
 305
 306     "把源文件内容保存进内表
 307     OPEN DATASET from_file FOR INPUT IN TEXT MODE
 308                          ENCODING NON-UNICODE
 309                          IGNORING CONVERSION ERRORS.
 310     IF sy-subrc NE 0.
 311       o_ret = 4.
 312       EXIT.
 313     ENDIF.
 314     DO.
 315       READ DATASET from_file INTO lv_text.
 316       IF sy-subrc NE 0.
 317         EXIT.
 318       ENDIF.
 319       APPEND lv_text TO lt_file_content.
 320     ENDDO.
 321
 322     CLOSE DATASET from_file.
 323
 324
 325     "把源文件内容从系统内表中写入目标文件中
 326     OPEN DATASET to_file FOR OUTPUT IN TEXT MODE
 327                          ENCODING NON-UNICODE
 328                          IGNORING CONVERSION ERRORS.
 329
 330     IF sy-subrc NE 0.
 331       o_ret = 4.
 332       EXIT.
 333     ENDIF.
 334     LOOP AT lt_file_content INTO lv_text.
 335       TRANSFER lv_text TO to_file.
 336     ENDLOOP.
 337     CLOSE DATASET to_file.
 338
 339   ENDLOOP.
 340
 341 ENDFORM.                    "frm_copy_file
 342 *----------------------------------------------------------------------*
 343 *  子程序名称 :数据传输处理
 344 *  子程序名   :frm_transfer_data
 345 *  概要       :文件数据传送接口表
 346 * 参数       :f_path type salfile-longname    目录路径
 347 *  返回值     :无
 348 *----------------------------------------------------------------------*
 349 FORM frm_transfer_data USING f_path TYPE salfile-longname
 350                        CHANGING lw_ret.
 351   DATA: lw_loopc       TYPE sy-index,
 352         lw_text(2048)  TYPE c,
 353 *        lw_ret(1)      TYPE c,
 354         lw_zwrit       TYPE i,
 355         lw_lines       TYPE i,
 356         lw_len         TYPE i.
 357
 358 *  处理文件名排序的问题
 359   SORT it_file BY name DESCENDING.
 360   lw_lines = LINES( it_file ).
 361   lw_lines = lw_lines - 1.
 362 *  删除无用的2行
 363   DELETE it_file FROM lw_lines.
 364 *  从it_file 取数添加到it_file2
 365
 366   LOOP AT it_file INTO iw_file.
 367     MOVE-CORRESPONDING iw_file TO iw_file2.
 368
 369     lw_len = STRLEN( iw_file-name ) - 18.
 370
 371     SHIFT iw_file-name BY lw_len PLACES LEFT.
 372     iw_file2-name2 = iw_file-name+0(14).
 373     APPEND iw_file2 TO it_file2.
 374     CLEAR:lw_len,iw_file2.
 375   ENDLOOP.
 376
 377   CLEAR iw_file.
 378 *  按文件生成时间排序
 379   SORT it_file2 BY name2.
 380   LOOP AT it_file2 INTO iw_file2.
 381 *   文件路径组
 382     CLEAR w_read_file.
 383     CONCATENATE f_path iw_file2-name INTO w_read_file.
 384 *   打开文件
 385     OPEN DATASET w_read_file FOR INPUT
 386                              IN TEXT MODE ENCODING NON-UNICODE.
 387     IF sy-subrc <> 0.
 388       EXIT.
 389     ENDIF.
 390     DO.
 391       lw_loopc = sy-index.
 392       TRY.
 393           CLEAR lw_text.
 394           READ DATASET w_read_file INTO lw_text.
 395         CATCH cx_sy_conversion_codepage.
 396           CLOSE DATASET: w_read_file.
 397           EXIT.
 398       ENDTRY.
 399 *      空文件的情况下
 400       IF sy-subrc <> 0 AND lw_loopc = 1."lw_loopc = 2 带标题的文件
 401         PERFORM frm_get_errno CHANGING lw_zwrit.
 402         iw_err-zwrit = lw_zwrit.
 403         IF p_check1 = ‘X‘.
 404           iw_err-filen = w_lfile.
 405         ELSE.
 406           iw_err-filen = iw_file2-name.
 407         ENDIF.
 408         iw_err-errin = ‘FILE NO DATA‘(002).
 409         iw_err-putda = w_date.
 410         iw_err-putti = w_time.
 411         INSERT zc0000sdt0020 FROM iw_err.
 412         CLEAR:iw_err.
 413         lw_ret = ‘X‘.
 414         " EXIT.
 415       ELSEIF sy-subrc <> 0.
 416 **{ Insert started by ZhouTing on 30-Jan-2015 - CR0010
 417         "lw_ret = ‘X‘.
 418 **{ Insert ended by ZhouTing on 30-Jan-2015 - CR0010
 419         EXIT.
 420       ENDIF.
 421 *     第一行不是标题
 422 *      IF lw_loopc = 1.
 423 *        CONTINUE.
 424 *      ENDIF.
 425 *     拆分数据并加入接口表
 426 *      0090036259 LR  0000300713  20140525  123456  3000
 427 *  vbeln fkart 客户代码   金税号
 428       CHECK lw_ret IS INITIAL.
 429       PERFORM frm_separate_text USING lw_text
 430                                 CHANGING lw_ret.
 431       CHECK lw_ret IS INITIAL.
 432       PERFORM frm_writeback CHANGING lw_ret.
 433     ENDDO.
 434
 435 **{ Insert started by ZhouTing on 27-Jan-2015 - CR0010
 436     CLOSE DATASET w_read_file.
 437 **{ Insert ended by ZhouTing on 27-Jan-2015 - CR0010
 438
 439     DELETE DATASET w_read_file.
 440
 441   ENDLOOP.
 442 ENDFORM.                    " frm_transfer_data
 443 *----------------------------------------------------------------------*
 444 *  子程序名称 :拆分数据并加入接口表
 445 *  子程序名   :frm_separate_text
 446 *  概要       :拆分数据并加入接口表
 447 * 参数       :f_text type c           要拆分的数据
 448 *  返回值     :无
 449 *----------------------------------------------------------------------*
 450 FORM frm_separate_text USING f_text TYPE c
 451                        CHANGING f_ret TYPE c.
 452   DATA: lw_value(100) TYPE c,
 453         lw_val(1024)  TYPE c,
 454         lw_ret        TYPE char1,
 455         lw_zwrit      TYPE i.
 456   CLEAR f_ret.
 457   lw_val = f_text.
 458
 459 *  Sys_Inv_No
 460   SPLIT lw_val AT cl_abap_char_utilities=>horizontal_tab
 461   INTO lw_value lw_val.
 462   IF lw_value = space.
 463 *    检查 发票号是否为空
 464     PERFORM frm_get_errno CHANGING lw_zwrit.
 465     iw_err-zwrit = lw_zwrit.
 466     IF p_check1 = ‘X‘.
 467       iw_err-filen = w_lfile.
 468     ELSE.
 469       iw_err-filen = iw_file2-name.
 470     ENDIF.
 471     iw_err-errin = ‘INVOICENO IS EMPTY‘(003).
 472     iw_err-vbeln = lw_value.
 473     iw_err-putda = w_date.
 474     iw_err-putti = w_time.
 475     INSERT zc0000sdt0020 FROM iw_err.
 476     CLEAR:iw_err.
 477     f_ret = ‘X‘.
 478   ELSE.
 479 * Sys_Inv_No检查
 480     PERFORM frm_numeric_check USING lw_value
 481                               CHANGING lw_ret.
 482     IF lw_ret = ‘X‘.
 483 *    检查 发票是否为数字
 484       PERFORM frm_get_errno CHANGING lw_zwrit.
 485       iw_err-zwrit = lw_zwrit.
 486       IF p_check1 = ‘X‘.
 487         iw_err-filen = w_lfile.
 488       ELSE.
 489         iw_err-filen = iw_file2-name.
 490       ENDIF.
 491       iw_err-errin = ‘INVOICENO IS NOT NUMBER‘(004).
 492       iw_err-vbeln = lw_value.
 493       iw_err-putda = w_date.
 494       iw_err-putti = w_time.
 495       INSERT zc0000sdt0020 FROM iw_err.
 496       CLEAR:iw_err.
 497       f_ret = ‘X‘.
 498     ELSE.
 499 *    检查 发票存在性
 500       PERFORM frm_check_inv USING lw_value
 501                             CHANGING lw_ret.
 502       IF lw_ret  = ‘X‘.
 503         PERFORM frm_get_errno CHANGING lw_zwrit.
 504         iw_err-zwrit = lw_zwrit.
 505         IF p_check1 = ‘X‘.
 506           iw_err-filen = w_lfile.
 507         ELSE.
 508           iw_err-filen = iw_file2-name.
 509         ENDIF.
 510         iw_err-errin = ‘INVOICENO IS NOT EXIST‘(005).
 511         iw_err-vbeln = lw_value.
 512         iw_err-putda = w_date.
 513         iw_err-putti = w_time.
 514         INSERT zc0000sdt0020 FROM iw_err.
 515         CLEAR:iw_err.
 516         f_ret = ‘X‘.
 517       ELSEIF lw_val = space."  金税号 为空检查
 518         PERFORM frm_get_errno CHANGING lw_zwrit.
 519         iw_err-zwrit = lw_zwrit.
 520         IF p_check1 = ‘X‘.
 521           iw_err-filen = w_lfile.
 522         ELSE.
 523           iw_err-filen = iw_file2-name.
 524         ENDIF.
 525         iw_err-errin = ‘JINSHUHAO IS EMPTY‘(006).
 526         iw_err-vbeln = lw_value.
 527         iw_err-putda = w_date.
 528         iw_err-putti = w_time.
 529         INSERT zc0000sdt0020 FROM iw_err.
 530         CLEAR:iw_err.
 531         f_ret = ‘X‘.
 532       ELSE.
 533         iw_ins-vbeln = lw_value. "保存 数据
 534 * fkart
 535         CLEAR lw_value.
 536         SPLIT lw_val AT  cl_abap_char_utilities=>horizontal_tab
 537         INTO lw_value lw_val.
 538         iw_ins-fkart = lw_value. "保存 数据
 539
 540 *kunrg
 541         CLEAR lw_value.
 542         SPLIT lw_val AT  cl_abap_char_utilities=>horizontal_tab
 543         INTO lw_value lw_val.
 544         iw_ins-kunrg = lw_value. "保存 数据
 545 * Year
 546         IF lw_val = space."  年度 为空检查
 547           PERFORM frm_get_errno CHANGING lw_zwrit.
 548           iw_err-zwrit = lw_zwrit.
 549           IF p_check1 = ‘X‘.
 550             iw_err-filen = w_lfile.
 551           ELSE.
 552             iw_err-filen = iw_file2-name.
 553           ENDIF.
 554           iw_err-errin = ‘YEAR IS EMPTY‘(007).
 555           iw_err-vbeln = lw_value.
 556           iw_err-putda = w_date.
 557           iw_err-putti = w_time.
 558           INSERT zc0000sdt0020 FROM iw_err.
 559           CLEAR:iw_err.
 560           f_ret = ‘X‘.
 561         ELSE.
 562           CLEAR lw_value.
 563           SPLIT lw_val AT  cl_abap_char_utilities=>horizontal_tab
 564           INTO lw_value lw_val.
 565           iw_ins-gjahr = lw_value+0(4). "保存 数据
 566 *linda   20140806
 567           iw_ins-fkdat = lw_value. "保存 数据
 568         ENDIF.
 569 * VAT_Inv_No
 570         CLEAR lw_value.
 571         SPLIT lw_val AT  cl_abap_char_utilities=>horizontal_tab
 572         INTO lw_value lw_val.
 573         iw_ins-xblnr = lw_value. "保存 数据
 574         iw_ins-bktxt = lw_value."Linda 20140918
 575 * bukrs
 576         CLEAR lw_value.
 577         SPLIT lw_val AT  cl_abap_char_utilities=>horizontal_tab
 578         INTO lw_value lw_val.
 579         iw_ins-bukrs = lw_value. "保存 数据
 580       ENDIF.
 581     ENDIF.
 582   ENDIF.
 583 ENDFORM.                    " frm_separate_text
 584 *Sys_Inv_No VAT_Inv_No  VAT Issue_date  Total_Amount
 585 *0090035243 12345654321 2005-08-10  8
 586 *----------------------------------------------------------------------*
 587 *  子程序名称 :数据类型检查
 588 *  子程序名   :frm_numeric_check
 589 *  概要       :数据类型检查
 590 * 参数       :f_val TYPE c            要检查的数据
 591 *  返回值     :f_ret TYPE c            正常:space    出错:‘X‘
 592 *----------------------------------------------------------------------*
 593 FORM frm_numeric_check USING f_val TYPE c
 594                        CHANGING f_ret TYPE c.
 595   DATA: lw_type TYPE dd01v-datatype.
 596
 597   CHECK f_val <> space.
 598   CLEAR f_ret.
 599   CALL FUNCTION ‘NUMERIC_CHECK‘
 600     EXPORTING
 601       string_in = f_val
 602     IMPORTING
 603       htype     = lw_type.
 604   IF lw_type <> cos_numc.
 605     f_ret = ‘X‘.
 606   ENDIF.
 607 ENDFORM.                    " frm_numeric_check
 608
 609 *&---------------------------------------------------------------------*
 610 *&      Form  frm_get_errno
 611 *&---------------------------------------------------------------------*
 612 *       text
 613 *----------------------------------------------------------------------*
 614 *      <--P_LW_ZWRIT  text
 615 *----------------------------------------------------------------------*
 616 FORM frm_get_errno  CHANGING f_zwrit TYPE i.
 617   CALL FUNCTION ‘NUMBER_GET_NEXT‘
 618     EXPORTING
 619       nr_range_nr             = ‘01‘      "snro
 620       object                  = ‘ZWRITEBACK‘   "snro object "be edit
 621     IMPORTING
 622       number                  = f_zwrit   "所得到的号码
 623     EXCEPTIONS
 624       interval_not_found      = 1
 625       number_range_not_intern = 2
 626       object_not_found        = 3
 627       quantity_is_0           = 4
 628       quantity_is_not_1       = 5
 629       interval_overflow       = 6
 630       buffer_overflow         = 7
 631       OTHERS                  = 8.
 632   IF sy-subrc <> 0.
 633     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
 634     WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO iw_errlog-str.
 635     APPEND iw_errlog TO it_errlog2.
 636   ENDIF.
 637
 638 ENDFORM.                    " frm_get_errno
 639 *&---------------------------------------------------------------------*
 640 *&      Form  FRM_CHECK_INV
 641 *&---------------------------------------------------------------------*
 642 *       text
 643 *----------------------------------------------------------------------*
 644 *      -->f_vbeln  text
 645 *      <--f_ret  text
 646 *----------------------------------------------------------------------*
 647 FORM frm_check_inv  USING   f_vbeln
 648                     CHANGING f_ret.
 649   DATA:lw_count TYPE i.
 650   SELECT COUNT(*)
 651        INTO lw_count
 652        FROM vbrk                      "(Reference Document Number)
 653        WHERE vbeln = f_vbeln .   "Billing Document
 654   IF sy-subrc = 4.
 655     f_ret = ‘X‘.
 656   ENDIF.
 657 ENDFORM.                    " FRM_CHECK_INV
 658 *&---------------------------------------------------------------------*
 659 *&      Form  frm_writeback
 660 *&---------------------------------------------------------------------*
 661 *       text
 662 *----------------------------------------------------------------------*
 663 *      -->fw_ret  text
 664 *----------------------------------------------------------------------*
 665 FORM frm_writeback CHANGING fw_ret.
 666   DATA:lw_zwrit TYPE i,
 667        lw_count TYPE i,
 668        lw_bktxt TYPE bktxt, "linda 20140916
 669        lw_belnr TYPE bkpf-belnr,
 670        lw_gjahr TYPE char4.
 671 *Select IsExist Invoice
 672   SELECT SINGLE vbeln
 673          bukrs
 674          gjahr
 675          xblnr
 676          fkdat
 677     INTO iw_vbrk
 678     FROM vbrk                      "(Reference Document Number)
 679     WHERE vbeln = iw_ins-vbeln.    "Billing Document
 680   IF iw_vbrk-xblnr <> iw_ins-xblnr.
 681 * 将发票号更新到发票 BKPF-XBLNR(Reference Document Number)
 682     PERFORM frm_vbrk_xblnr USING iw_ins-xblnr
 683                                  iw_ins-vbeln.
 684     IF w_msg_txt IS NOT INITIAL.
 685       PERFORM frm_get_errno CHANGING lw_zwrit.
 686       iw_err-zwrit = lw_zwrit.
 687       IF p_check1 = ‘X‘.
 688         iw_err-filen = w_lfile.
 689       ELSE.
 690         iw_err-filen = iw_file2-name.
 691       ENDIF.
 692       iw_err-errin = ‘UPDATA VBRK FAIL‘(008).
 693       iw_err-vbeln = iw_ins-vbeln.
 694       iw_err-xblnr = iw_ins-xblnr.
 695       iw_err-putda = w_date.
 696       iw_err-putti = w_time.
 697       INSERT zc0000sdt0020 FROM iw_err.
 698       CLEAR:iw_err,w_msg_txt.
 699       fw_ret = ‘X‘.
 700     ENDIF.
 701   ENDIF.
 702   CHECK fw_ret IS INITIAL.
 703   SELECT SINGLE belnr bktxt "Linda 20140916 xblnr
 704     INTO (lw_belnr,lw_bktxt) "Linda 20140916lw_xblnr
 705     FROM bkpf
 706     WHERE bukrs = iw_vbrk-bukrs
 707           AND awkey = iw_ins-vbeln    "BKPF-AWKEY(Reference Key)
 708           AND gjahr = iw_vbrk-fkdat+0(4).
 709
 710   IF lw_bktxt <> iw_ins-bktxt.
 711     lw_gjahr = iw_vbrk-fkdat+0(4).
 712     IF lw_belnr IS INITIAL.
 713       PERFORM frm_get_errno CHANGING lw_zwrit.
 714       iw_err-zwrit = lw_zwrit.
 715       IF p_check1 = ‘X‘.
 716         iw_err-filen = w_lfile.
 717       ELSE.
 718         iw_err-filen = iw_file2-name.
 719       ENDIF.
 720       iw_err-errin = ‘Invoice Is Empty‘(009).
 721       iw_err-vbeln = iw_ins-vbeln.
 722       iw_err-xblnr = iw_ins-xblnr.
 723       iw_err-putda = w_date.
 724       iw_err-putti = w_time.
 725       INSERT zc0000sdt0020 FROM iw_err.
 726       CLEAR:iw_err,w_msg_txt.
 727       fw_ret = ‘X‘.
 728     ELSE.
 729 *    将发票号更新到凭证BKPF中的BKPF-XBLNR(Reference Document Number)
 730 *    update the GTS No.# to BKPF-XBLNR(Reference Document Number)
 731 *    2 reason:1>.要调用的function 用到了bseg这个结构;
 732 *                 Call function "‘Z_FI_ITEMS_MASS_CHANGE‘" using BSEG as import structure
 733 *           2>使用的频率不高,1周1次,每次XX 条,所以即使写成 select * 也对性能影响不大
 734 *                The call frequence will be weekly, and the volume is limited, thus should the performance impact is restricted.
 735       SELECT *
 736       INTO TABLE it_bseg
 737       FROM bseg
 738       WHERE bukrs = iw_vbrk-bukrs
 739        AND belnr = lw_belnr
 740        AND gjahr = lw_gjahr.
 741
 742       PERFORM frm_bseg_sgtxt USING  iw_ins.
 743       IF w_msg_txt IS NOT INITIAL.
 744         PERFORM frm_get_errno CHANGING lw_zwrit.
 745         iw_err-zwrit = lw_zwrit.
 746         IF p_check1 = ‘X‘.
 747           iw_err-filen = w_lfile.
 748         ELSE.
 749           iw_err-filen = iw_file2-name.
 750         ENDIF.
 751         iw_err-errin = ‘BDC update fail‘(010).
 752         iw_err-vbeln = iw_ins-vbeln.
 753         iw_err-xblnr = iw_ins-xblnr.
 754         iw_err-putda = w_date.
 755         iw_err-putti = w_time.
 756         INSERT zc0000sdt0020 FROM iw_err.
 757         CLEAR:iw_err,w_msg_txt.
 758         fw_ret = ‘X‘.
 759       ENDIF.
 760
 761     ENDIF.
 762   ENDIF.
 763   CHECK fw_ret IS INITIAL.
 764   SELECT COUNT(*)
 765     FROM zc0000sdt0020
 766     INTO lw_count
 767     WHERE vbeln = iw_ins-vbeln.
 768   IF lw_count > 1.
 769     DELETE FROM zc0000sdt0020 WHERE vbeln = iw_ins-vbeln.
 770     IF sy-subrc = 0.
 771       COMMIT WORK AND WAIT.
 772     ELSE.
 773       ROLLBACK WORK.
 774     ENDIF.
 775   ENDIF.
 776   CLEAR:it_bseg.
 777 ENDFORM.                    " frm_writeback
 778 *&---------------------------------------------------------------------*
 779 *&      Module  STATUS_9000  OUTPUT
 780 *&---------------------------------------------------------------------*
 781 *       text
 782 *----------------------------------------------------------------------*
 783 MODULE status_9000 OUTPUT.
 784   SET PF-STATUS ‘800‘.
 785   SET TITLEBAR ‘ERROR LOG SEARCH‘.
 786
 787 ENDMODULE.                 " STATUS_9000  OUTPUT
 788 *&---------------------------------------------------------------------*
 789 *&      Module  USER_COMMAND_9000  INPUT
 790 *&---------------------------------------------------------------------*
 791 *       text
 792 *----------------------------------------------------------------------*
 793 MODULE user_command_9000 INPUT.
 794   CASE ok_code.
 795     WHEN ‘EXECUTE‘.
 796       PERFORM frm_data_select.
 797
 798       IF it_errlog IS INITIAL.
 799         MESSAGE e001(00) WITH ‘NO error log data‘(011).
 800         LEAVE TO SCREEN 9000.
 801       ENDIF.
 802 *  ALV最后结果输出
 803       PERFORM frm_display_data.
 804     WHEN ‘CANCEL‘.
 805       LEAVE TO SCREEN 0.
 806     WHEN ‘EXIT‘.
 807       LEAVE PROGRAM.
 808     WHEN ‘BACK‘.
 809       LEAVE TO SCREEN 0.
 810   ENDCASE.
 811 ENDMODULE.                 " USER_COMMAND_9000  INPUT
 812 *----------------------------------------------------------------------*
 813 *  子程序名称 :ALV最后结果输出
 814 *  子程序名   :frm_display_data
 815 *  概要       :ALV最后结果输出
 816 * 参数       :无
 817 *  返回值     :无
 818 *----------------------------------------------------------------------*
 819 FORM frm_display_data .
 820   w_repid = sy-repid.
 821   CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY‘
 822     EXPORTING
 823       i_callback_program = w_repid
 824       i_structure_name   = ‘ZC0000SDT0020‘
 825       it_fieldcat        = it_fieldcat
 826     TABLES
 827       t_outtab           = it_errlog.
 828   IF sy-subrc <> 0.
 829 * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
 830 *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
 831   ENDIF.
 832
 833 ENDFORM.                    " frm_display_data
 834 *&---------------------------------------------------------------------*
 835 *&      Form  frm_data_select
 836 *&---------------------------------------------------------------------*
 837 *       text
 838 *----------------------------------------------------------------------*
 839 *  -->  p1        text
 840 *  <--  p2        text
 841 *----------------------------------------------------------------------*
 842 FORM frm_data_select .
 843   IF zc0000sdt0020-filen IS NOT INITIAL.
 844     CONCATENATE ‘FILEN LIKE ‘‘‘ zc0000sdt0020-filen ‘%‘‘‘ INTO w_str.
 845   ENDIF.
 846 **************** putda**************************************
 847   IF zc0000sdt0020-putda IS NOT INITIAL AND putdahigh IS INITIAL.
 848     IF w_str IS NOT INITIAL.
 849       CONCATENATE w_str ‘ and putda = ZC0000SDT0020-putda‘ INTO w_str.
 850     ELSE.
 851       w_str = ‘putda = ZC0000SDT0020-putda‘.
 852     ENDIF.
 853   ENDIF.
 854   IF zc0000sdt0020-putda IS INITIAL AND putdahigh IS NOT INITIAL.
 855     IF w_str IS NOT INITIAL.
 856       CONCATENATE w_str ‘ and putda = putdahigh‘ INTO w_str.
 857     ELSE.
 858       w_str = ‘putda = putdahigh‘.
 859     ENDIF.
 860   ENDIF.
 861   IF zc0000sdt0020-putda IS NOT INITIAL AND putdahigh IS NOT INITIAL.
 862     IF w_str IS NOT INITIAL.
 863       CONCATENATE w_str ‘ and putda <= putdahigh and putda >= ZC0000SDT0020-putda‘ INTO w_str.
 864     ELSE.
 865       w_str = ‘putda <= putdahigh and putda >= ZC0000SDT0020-putda‘.
 866     ENDIF.
 867
 868   ENDIF.
 869 *  **************** putti**************************************
 870   IF zc0000sdt0020-putti IS NOT INITIAL AND puttihigh IS INITIAL.
 871     IF w_str IS NOT INITIAL.
 872       CONCATENATE w_str ‘ and putti = ZC0000SDT0020-putti‘ INTO w_str.
 873     ELSE.
 874       w_str = ‘putti = ZC0000SDT0020-putti‘.
 875     ENDIF.
 876   ENDIF.
 877   IF zc0000sdt0020-putti IS INITIAL AND puttihigh IS NOT INITIAL.
 878     IF w_str IS NOT INITIAL.
 879       CONCATENATE w_str ‘ and putti = puttihigh‘ INTO w_str.
 880     ELSE.
 881       w_str = ‘putti = puttihigh‘.
 882     ENDIF.
 883   ENDIF.
 884   IF zc0000sdt0020-putti IS NOT INITIAL AND puttihigh IS NOT INITIAL.
 885     IF w_str IS NOT INITIAL.
 886       CONCATENATE w_str ‘ and putti <= puttihigh and putti >= ZC0000SDT0020-putti‘ INTO w_str.
 887     ELSE.
 888       w_str = ‘putti <= puttihigh and putti >= ZC0000SDT0020-putti‘.
 889     ENDIF.
 890
 891   ENDIF.
 892 *  **************** VBELN**************************************
 893   IF zc0000sdt0020-vbeln IS NOT INITIAL AND vbelnhigh IS INITIAL.
 894     IF w_str IS NOT INITIAL.
 895       CONCATENATE w_str ‘ and VBELN = ZC0000SDT0020-VBELN‘ INTO w_str.
 896     ELSE.
 897       w_str = ‘VBELN = ZC0000SDT0020-VBELN‘.
 898     ENDIF.
 899   ENDIF.
 900   IF zc0000sdt0020-vbeln IS INITIAL AND vbelnhigh IS NOT INITIAL.
 901     IF w_str IS NOT INITIAL.
 902       CONCATENATE w_str ‘ and VBELN = VBELNHIGH‘ INTO w_str.
 903     ELSE.
 904       w_str = ‘VBELN = VBELNHIGH‘.
 905     ENDIF.
 906   ENDIF.
 907   IF zc0000sdt0020-vbeln IS NOT INITIAL AND vbelnhigh IS NOT INITIAL.
 908     IF w_str IS NOT INITIAL.
 909       CONCATENATE w_str ‘ and VBELN <= VBELNHIGH and VBELN >= ZC0000SDT0020-VBELN‘ INTO w_str.
 910     ELSE.
 911       w_str = ‘VBELN <= VBELNHIGH and VBELN >= ZC0000SDT0020-VBELN‘.
 912     ENDIF.
 913
 914   ENDIF.
 915 *  **************** XBLNR**************************************
 916   IF zc0000sdt0020-xblnr IS NOT INITIAL AND xblnrhigh IS INITIAL.
 917     IF w_str IS NOT INITIAL.
 918       CONCATENATE w_str ‘ and XBLNR = ZC0000SDT0020-XBLNR‘ INTO w_str.
 919     ELSE.
 920       w_str = ‘XBLNR = ZC0000SDT0020-XBLNR‘.
 921     ENDIF.
 922   ENDIF.
 923   IF zc0000sdt0020-xblnr IS INITIAL AND xblnrhigh IS NOT INITIAL.
 924     IF w_str IS NOT INITIAL.
 925       CONCATENATE w_str ‘ and XBLNR = XBLNRHIGH‘ INTO w_str.
 926     ELSE.
 927       w_str = ‘XBLNR = XBLNRHIGH‘.
 928     ENDIF.
 929   ENDIF.
 930   IF zc0000sdt0020-xblnr IS NOT INITIAL AND xblnrhigh IS NOT INITIAL.
 931     IF w_str IS NOT INITIAL.
 932       CONCATENATE w_str ‘ and XBLNR <= XBLNRHIGH and XBLNR >= ZC0000SDT0020-XBLNR‘ INTO w_str.
 933     ELSE.
 934       w_str = ‘XBLNR <= XBLNRHIGH and XBLNR >= ZC0000SDT0020-XBLNR‘.
 935     ENDIF.
 936
 937   ENDIF.
 938 *  **************** ERRIN**************************************
 939   IF zc0000sdt0020-errin IS NOT INITIAL.
 940     IF w_str IS NOT INITIAL.
 941       CONCATENATE w_str ‘ and ERRIN LIKE ‘‘‘ zc0000sdt0020-errin ‘%‘‘‘ INTO w_str.
 942     ELSE.
 943       CONCATENATE ‘ERRIN LIKE ‘‘‘ zc0000sdt0020-errin ‘%‘‘‘ INTO w_str.
 944     ENDIF.
 945   ENDIF.
 946   SELECT zwrit
 947          filen
 948          putda
 949          putti
 950          vbeln
 951          xblnr
 952          errin
 953   INTO CORRESPONDING FIELDS OF TABLE it_errlog
 954   FROM zc0000sdt0020
 955   WHERE (w_str).
 956   CLEAR:w_str.
 957 ENDFORM.                    " frm_data_select
 958 *&---------------------------------------------------------------------*
 959 *&      Form  frm_vbrk_xblnr
 960 *&---------------------------------------------------------------------*
 961 *       text
 962 *----------------------------------------------------------------------*
 963 *      -->pf_xblnr  text
 964 *      -->pf_vbeln  text
 965 *----------------------------------------------------------------------*
 966 FORM frm_vbrk_xblnr  USING  pf_xblnr
 967                             pf_vbeln.
 968
 969   CALL FUNCTION ‘UPDATE_XBLNR_IN_VBRK‘
 970     EXPORTING
 971       i_vbeln                 = pf_vbeln
 972       i_xblnr                 = pf_xblnr
 973 *   I_XBLNR_CHECK           =
 974 * IMPORTING
 975 *   E_XBLNR                 =
 976    EXCEPTIONS
 977      document_blocked        = 1
 978      update_no_success       = 2
 979      OTHERS                  = 3
 980             .
 981   IF sy-subrc <> 0.
 982     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
 983      INTO w_msg_txt
 984             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
 985   ENDIF.
 986
 987 ENDFORM.                    " FRM_VBRK_BDC
 988 *&---------------------------------------------------------------------*
 989 *&      Form  FRM_FILE_PROCESS_LOCAL
 990 *&---------------------------------------------------------------------*
 991 *       text
 992 *----------------------------------------------------------------------*
 993 *  -->  p1        text
 994 *  <--  p2        text
 995 *----------------------------------------------------------------------*
 996 FORM frm_file_process_local.
 997   DATA: ls_row         TYPE kcdu_srec,
 998         lw_zwrit       TYPE i.
 999
1000   PERFORM file_format_check.
1001   PERFORM upload_csv.
1002
1003 *   文件数据传送接口表
1004   DO.
1005     w_row_num = sy-index.
1006     CLEAR ls_row.
1007     "    w_step_ok = ‘X‘.
1008     CALL FUNCTION ‘FILE_NEXT_RECORD‘
1009       IMPORTING
1010         next_record = ls_row
1011       EXCEPTIONS
1012         no_record   = 1.
1013     IF sy-subrc <> 0 OR ls_row IS INITIAL.
1014       IF w_row_num = 1.
1015         PERFORM frm_get_errno CHANGING lw_zwrit.
1016         iw_err-zwrit = lw_zwrit.
1017         iw_err-filen = w_lfile.
1018         iw_err-errin = ‘FILE NO DATA‘(002).
1019         iw_err-putda = w_date.
1020         iw_err-putti = w_time.
1021         INSERT zc0000sdt0020 FROM iw_err.
1022         CLEAR:iw_err.
1023         w_ret = ‘X‘.
1024       ENDIF.
1025       EXIT.
1026     ENDIF.
1027
1028 *     第一行不是标题
1029 *      IF lw_loopc = 1.
1030 *        CONTINUE.
1031 *      ENDIF.
1032 *     拆分数据并加入接口表
1033 *      0090036259 LR  0000300713  20140525  123456  3000
1034 *  vbeln fkart 客户代码   金税号
1035     CHECK  w_ret IS INITIAL.
1036     PERFORM frm_separate_text USING ls_row
1037                               CHANGING w_ret.
1038     CHECK  w_ret IS INITIAL.
1039     PERFORM frm_writeback CHANGING w_ret.
1040
1041   ENDDO.
1042
1043 ENDFORM.                    " frm_file_process_local
1044 *&---------------------------------------------------------------------*
1045 *&      Form  form_get_file_path_upload
1046 *&---------------------------------------------------------------------*
1047 *       text
1048 *----------------------------------------------------------------------*
1049 *  -->  p1        text
1050 *  <--  p2        text
1051 *----------------------------------------------------------------------*
1052 FORM form_get_file_path_upload .
1053   DATA:
1054       ld_rc    TYPE i,
1055       lw_file  TYPE string,
1056       lt_file  TYPE filetable.
1057
1058   CALL FUNCTION ‘GET_DYNP_VALUE‘
1059     EXPORTING
1060       i_field = ‘P_FLPATH‘
1061       i_repid = sy-repid
1062       i_dynnr = ‘1000‘
1063     CHANGING
1064       o_value = p_flpath.
1065
1066   lw_file = p_flpath.
1067
1068   CALL FUNCTION ‘CH_SPLIT_FILENAME‘
1069     EXPORTING
1070       complete_filename = lw_file
1071     IMPORTING
1072       path              = w_file_path
1073     EXCEPTIONS
1074       invalid_drive     = 1
1075       invalid_path      = 2
1076       OTHERS            = 3.
1077
1078   CALL METHOD cl_gui_frontend_services=>file_open_dialog
1079     EXPORTING
1080 *      window_title            =
1081       default_extension       = ‘*.TXT‘
1082       default_filename        = lw_file
1083       file_filter             = ‘*.TXT‘
1084 *      with_encoding           =
1085       initial_directory       = w_file_path
1086 *      multiselection          =
1087     CHANGING
1088       file_table              = lt_file
1089       rc                      = ld_rc
1090 *      user_action             =
1091 *      file_encoding           =
1092     EXCEPTIONS
1093       file_open_dialog_failed = 1
1094       cntl_error              = 2
1095       error_no_gui            = 3
1096       not_supported_by_gui    = 4
1097       OTHERS                  = 5.
1098   IF sy-subrc <> 0.
1099     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
1100                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
1101   ELSE.
1102     READ TABLE lt_file INTO lw_file INDEX 1.
1103     p_flpath = lw_file.
1104   ENDIF.
1105
1106 ENDFORM.                    " form_get_file_path_upload
1107
1108 *&---------------------------------------------------------------------*
1109 *&      Form  file_format_check
1110 *&---------------------------------------------------------------------*
1111 *       text
1112 *----------------------------------------------------------------------*
1113 *  -->  p1        text
1114 *  <--  p2        text
1115 *----------------------------------------------------------------------*
1116 FORM file_format_check .
1117   DATA:ld_ext   TYPE char10,
1118        lw_file  TYPE string,
1119        lw_name  TYPE string.
1120   lw_file = p_flpath.
1121   CALL FUNCTION ‘CH_SPLIT_FILENAME‘
1122     EXPORTING
1123       complete_filename = lw_file
1124     IMPORTING
1125       extension         = ld_ext
1126       name              = lw_name
1127       name_with_ext     = w_lfile
1128     EXCEPTIONS
1129       invalid_drive     = 1
1130       invalid_path      = 2
1131       OTHERS            = 3.
1132   IF sy-subrc <> 0.
1133     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
1134             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO iw_errlog-str.
1135     APPEND iw_errlog TO it_errlog2.
1136     w_ret = ‘X‘.
1137   ENDIF.
1138
1139   IF sy-subrc <> 0.
1140     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
1141             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
1142   ELSE.
1143     CALL FUNCTION ‘AIPC_CONVERT_TO_UPPERCASE‘
1144       EXPORTING
1145         i_input  = ld_ext
1146         i_langu  = sy-langu
1147       IMPORTING
1148         e_output = ld_ext.
1149   ENDIF.
1150 ENDFORM.                    " file_format_check
1151 *&---------------------------------------------------------------------*
1152 *&      Form  upload_csv
1153 *&---------------------------------------------------------------------*
1154 *       text
1155 *----------------------------------------------------------------------*
1156 *  -->  p1        text
1157 *  <--  p2        text
1158 *----------------------------------------------------------------------*
1159 FORM upload_csv .
1160   DATA:ld_file TYPE localfile.
1161
1162   ld_file = p_flpath.
1163
1164   CALL FUNCTION ‘FILE_OPEN‘
1165     EXPORTING
1166       filnm             = ld_file
1167       upl               = ‘X‘
1168       filfmt            = ‘T‘
1169     EXCEPTIONS
1170       logname_not_found = 1
1171       file_not_opened   = 2
1172       OTHERS            = 3.
1173   IF sy-subrc <> 0.
1174     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
1175             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO iw_errlog-str.
1176     APPEND iw_errlog TO it_errlog2.
1177     w_ret = ‘X‘.
1178   ENDIF.
1179 ENDFORM.                    " upload_csv
1180 *&---------------------------------------------------------------------*
1181 *&      Form  FRM_BSEG_UPDATE
1182 *&---------------------------------------------------------------------*
1183 *       text
1184 *----------------------------------------------------------------------*
1185 *      -->pf_bukrs  text
1186 *      -->pf_belnr  text
1187 *      -->pf_gjahr  text
1188 *      -->pf_buzei  text
1189 *      -->pf_bschl  text
1190 *      -->pf_bktxt  text
1191 *----------------------------------------------------------------------*
1192 FORM frm_bseg_update USING pf_bukrs
1193                            pf_belnr
1194                            pf_gjahr
1195                            pf_buzei
1196                            pf_bschl
1197                            pf_bktxt. "Linda 20141117
1198   DATA:iw_buztab TYPE tpit_buztab,
1199        iw_fldtab TYPE tpit_fname.
1200
1201 *   所改字段之值
1202 *  iw_bseg-sgtxt   = pf_sgtxt. "Linda 20141117 edi
1203   iw_bseg-sgtxt    = pf_bktxt.
1204
1205   iw_buztab-bukrs  = pf_bukrs.
1206   iw_buztab-belnr  = pf_belnr.
1207   iw_buztab-gjahr  = pf_gjahr.
1208   iw_buztab-buzei  = pf_buzei.
1209   iw_buztab-bschl  = pf_bschl. "posting key
1210 *    it_buztab-koart  = ‘S‘.    "leixing
1211   APPEND iw_buztab TO it_buztab.
1212
1213   iw_fldtab-fname = ‘SGTXT‘.
1214   iw_fldtab-aenkz  = ‘X‘.
1215   APPEND iw_fldtab TO it_fldtab.
1216
1217 * copy from FI_ITEMS_MASS_CHANGE , change defult module from asynchronous to synchronous
1218   CALL FUNCTION ‘Z_FI_ITEMS_MASS_CHANGE‘
1219     EXPORTING
1220       s_bseg     = iw_bseg
1221       i_bktxt    = pf_bktxt
1222     IMPORTING
1223       errtab     = it_errtab
1224     TABLES
1225       it_buztab  = it_buztab
1226       it_fldtab  = it_fldtab
1227     EXCEPTIONS
1228       bdc_errors = 1
1229       OTHERS     = 2.
1230   IF sy-subrc = 0.
1231     COMMIT WORK AND WAIT.
1232   ELSE.
1233     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
1234         WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO w_msg_txt.
1235   ENDIF.
1236   CLEAR:it_errtab,it_errtab[],it_buztab,it_buztab[],it_fldtab,it_fldtab[],iw_bseg.
1237
1238 ENDFORM.                    " FRM_BSEG_UPDATE
1239 *&---------------------------------------------------------------------*
1240 *&      Form  FRM_BSEG_SGTXT
1241 *&---------------------------------------------------------------------*
1242 *       text
1243 *----------------------------------------------------------------------*
1244 *  -->  pf_ins        text
1245 *----------------------------------------------------------------------*
1246 FORM frm_bseg_sgtxt USING pf_ins LIKE iw_ins.
1247   DATA:lw_bseg  TYPE bseg.
1248   LOOP AT it_bseg INTO lw_bseg.
1249
1250     PERFORM frm_bseg_update USING lw_bseg-bukrs
1251                                   lw_bseg-belnr
1252                                   lw_bseg-gjahr
1253                                   lw_bseg-buzei
1254                                   lw_bseg-bschl
1255                                   pf_ins-bktxt.
1256     IF w_msg_txt IS NOT INITIAL.
1257       EXIT.
1258     ENDIF.
1259   ENDLOOP.
1260 ENDFORM.                    " FRM_BSEG_SGTXT
时间: 2024-10-22 01:01:44

SAP 金税接口代码 供参考的相关文章

JS 轮播图(无缝连接的轮播图实现,含代码供参考)

需求:实现轮播图,图片无缝切换,自动播放. 实现效果: 思考一下:在图片列表后面多加一张图片,这张图片是第一张图片(为了确保无缝衔接).图片就是平铺放在一个pic里面的,每次移动就是改变的pic的left值. 来撸代码~~.所有的代码放在最后面,这里只讲一些重要的方法: 为防止懵逼:先贴出封装函数move()的代码供参考 function move(ele, attr, speed, target, callback){ //获取当前的位置 //从左往右进行移动 --- current<targ

SAP 金税接口介绍

一.金税发票与SAP系统发票的税额差异分析 1.1 金税系统中的税额说明 国内企业销售产品给国内客户时,正常产品须要缴纳17%的增值税,而金税(Golden Tax)系统就是用来出具纸面的增值税发票的. 在金税系统中,金税发票的开具有二种方式. 方法1:不通过接口手工出具 不通过接口手工出具增值税发票时,税额是依据含税金额或者不含税金额乘以税率计算得出的,不可以改动. 方式2:通过接口导入 通过接口出具增值税发票时,税额是能够通过接口从SAP中的发票中直接传输到金税中,但此时系统将会检查传入的税

SAP 金税接口增强 BADI

  SAP与金税连接有两种方式:组件接口及文本接口. 文本接口为例: 1.SAP取发票数据.主要来自合同,销售订单,交货单.发票,客户供应商主数据等 2.SAP处理:合并.拆分,折扣等 3.导出TXT文本 4.金税开票机读取文本:通过參数传递数据,注意1分钱误差问题(參数传递导致) 5.回写     收票方名称  出具发票地址的增强BADI:   IDGTCN_CUST_ADDR   接口回传后将金税发票号回写相应的財务凭证的reference字段的增强BADI: IDGTCN_WRITEBAC

C#复制文件全代码--供参考

private void button1_Click(object sender, EventArgs e) { //创建文件对象 FileInfo fi = null; //实例化打开文件对话框 OpenFileDialog ofd = new OpenFileDialog(); //设置对话框的初始路径 ofd.InitialDirectory = @"C:\Users\Public\Pictures\Sample Pictures"; //设置过滤器 ofd.Filter = &

短信接口与短信平台收费标准----速码云仅供参考

就目前来说短信接口 价格参考 行业收费也基本上没有个固定的标准的价格,都是看各个公司自己的通道套餐跑的量和公司的运营成本结合预算后最终才来制定一套给客户的价格,所以说在短信行业里面短信公司获取的利润是非常小的,除了运营商的短信通道费用之外还有公司的人员成本,公司的场地,服务器和系统等等一切费用,一般几分钱的短信利润大的可能是1-2分钱,如果客户购买得多的话那么几个就会很低,那么利润就有可能是几厘钱了,所以短信公司也是薄利多销,下面就提供一些短信接口行业一般的短信价格给大家参考. 套餐1,比如购买

django中使用FastDFS分布式文件系统接口代码实现文件上传、下载、更新、删除

运维使用docker部署好之后FastDFS分布式文件系统之后,提供给我接口如下: fastdfs tracker 192.168.1.216 192.168.1.217 storage 192.168.1.216 192.168.1.217 我们只需要在配置文件中进行配置即可,然后利用客户端提供的接口通过简单的代码就可以将文件上传到分布式文件系统中 至于内部实现机制,可以参考我的另外一篇博客:分布式文件系统Fastdfs原理及部署 再次提醒在安装客户端可能会遇到各种不可控的因素,导致你上传失败

附录1:接口文档参考模板

https://www.w3cschool.cn/phalapi/5fhi1tth.html 附录1:接口文档参考模板 由 chanzonghuang 创建,最后一次修改 2016-11-20 虽然提供了在线接口参数的查看,但在和客户端对接过程中,我们作为后台开发,还是需要人工提供接口文档给客户端的,这里提供一个接口文档编写的模板,以供参考,并且以我们熟悉的?service=User.GetBaseInfo为例说明如何编写高效的文档. 温馨提示:斜体字表示是注释说明. 功能说明 对接口功能的简单

开发问题---数据库字段前出现“—”(保存留用,仅供参考)

开发时数据调用往往会用到占位符,然而刚开始使用很容易碰见sql语句在SQLServer中查询时显示"-",如下代码: #region 先判断是否有记录,再确定使用哪条命令 //查询数据库 20140713 commandText = "use zzbjcdzz select *" + "from [T_VillageBasicInfo] " + "where ltrim(rtrim([code]))='{0}' "; //注意

如何有效防止DEDE织梦系统被挂木马安全设置(仅供参考)

尊敬的客户,您好!     感谢广大客户对我司工作的信任和支持!      我司在最近的一个多月内陆续发现多起因 DedeCMS 安全漏洞造成网站被上传恶意脚本的事件,入侵者可利用恶意脚本对外发送大量数据包,严重占用CPU资源与服务器带宽,影响极为恶劣.为保证服务稳定,即日起一旦发现网站存在此类恶意脚本,我们将立即暂停该网站的服务直到问题修复.如果您正在使用 DedeCMS,请立即检查是否已经存在恶意脚本,并更新程序到最新版本或应用相关补丁.     迄今为止,我们发现的恶意脚本文件有