批量导出(会计凭证)EXCEL到D盘

ZIT0011

*&---------------------------------------------------------------------*
*& Report ZIT0011
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZIT0011.
INCLUDE zit0011_head.
INCLUDE zit0011_screen.
INCLUDE zit0011_form.

START-OF-SELECTION.
  PERFORM frm_excel_down.
View Code

包含文件ZIT0011_HEAD

*&---------------------------------------------------------------------*
*& 包含               ZIT0011_HEAD
*&---------------------------------------------------------------------*
 TABLES: ACDOCA.
 TYPES : BEGIN OF ty_struct,
           col_name(30),
*     INCLUDE STRUCTURE acdoca.
         END OF ty_struct,
         ty_columns TYPE STANDARD TABLE OF ty_struct WITH EMPTY KEY.

 DATA : lt_columns TYPE TABLE OF ty_struct,
        lt_temp    TYPE dfies_tab.
 DATA: lv_budat_low TYPE acdoca-budat,
       lv_budat_high TYPE acdoca-budat.
View Code

包含文件ZIT0011_SCREEN

*&---------------------------------------------------------------------*
*& 包含               ZIT0011_SCREEN
*&---------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_gjahr  TYPE acdoca-gjahr DEFAULT sy-datum+0(4) OBLIGATORY,
            p_rbukrs TYPE acdoca-rbukrs DEFAULT '1000' OBLIGATORY,
            p_poper  TYPE acdoca-poper OBLIGATORY,
            p_limit  TYPE sy-tabix OBLIGATORY DEFAULT '200000'.

SELECT-OPTIONS: s_racct FOR acdoca-racct,
                s_BLART FOR acdoca-BLART.


SELECTION-SCREEN: END OF BLOCK b01.
View Code

包含文件ZIT0011_FORM

*&---------------------------------------------------------------------*
*& 包含               ZIT0011_FORM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_EXCEL_DOWN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_excel_down .
*  BREAK-POINT.
  DATA: p_download TYPE rlgrap-filename.
  DATA: gt_data_table LIKE TABLE OF acdoca.
  TRY.
      CALL FUNCTION 'DDIF_FIELDINFO_GET'
        EXPORTING
          tabname        = 'ACDOCA'
          langu          = sy-langu
        TABLES
          dfies_tab      = lt_temp
        EXCEPTIONS
          not_found      = 1
          internal_error = 2
          OTHERS         = 3.
      IF sy-subrc = 0.
        lt_columns = CORRESPONDING #( lt_temp MAPPING col_name = fieldtext )."rollname
      ENDIF.
    CATCH cx_root.
      "Please write your own exception handling code here
  ENDTRY.
  DATA: lv_count TYPE dmbtr.
  SELECT COUNT(*)
    INTO lv_count "gt_data_table
    FROM acdoca
   WHERE rbukrs EQ p_rbukrs
     AND gjahr EQ p_gjahr
     AND poper EQ p_poper
     AND racct IN s_racct
     AND blart IN s_blart.

  DATA: lv_monat  TYPE bsid-monat,
        lv_times  TYPE dmbtr,
        lv_tabix  TYPE sy-tabix,
        lv_start  TYPE sy-tabix,
        lv_limit  TYPE sy-tabix,
        lv_tabix2 TYPE sy-tabix.
  CLEAR: lv_times,lv_tabix,lv_start,lv_limit,lv_tabix2.
  lv_monat = p_poper.
  lv_budat_low = |{ p_gjahr }{ lv_monat }01|.
  CALL FUNCTION 'DATE_GET_MONTH_LASTDAY'
    EXPORTING
      i_date = lv_budat_low
    IMPORTING
      e_date = lv_budat_high.

  lv_times = ceil( lv_count / p_limit ).
  DO lv_times TIMES.
    ADD 1 TO lv_tabix.
    ADD p_limit TO lv_tabix2.
    IF lv_tabix EQ 1.
      lv_start = 0.
    ELSE.
      ADD p_limit TO lv_start.
    ENDIF.

    IF lv_tabix2 LE lv_count.
      lv_limit = p_limit.
    ELSE.
      lv_limit = lv_count - lv_start.
    ENDIF.

    CLEAR: gt_data_table[].
    SELECT FROM acdoca
      FIELDS *
   WHERE rbukrs EQ @p_rbukrs
     AND gjahr EQ @p_gjahr
     AND poper EQ @p_poper
     AND racct IN @s_racct
     AND blart IN @s_blart
     ORDER BY rbukrs,gjahr,belnr,buzei
     INTO TABLE @gt_data_table
     OFFSET @lv_start UP TO @lv_limit ROWS.


*  SELECT FROM tspat
*    FIELDS *
*     WHERE spras EQ @sy-langu
*       AND spart IN @r_spart
*    ORDER BY spart
*    INTO CORRESPONDING FIELDS OF TABLE @et_out
*    OFFSET @start UP TO @limit ROWS.

    p_download = |D:\\{ lv_budat_low }to{ lv_budat_high }{ lv_tabix }.XLS|.
    IF gt_data_table IS NOT INITIAL.

      DATA: lv_filename TYPE string.
      lv_filename = p_download.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
*         BIN_FILESIZE                    =
          filename   = lv_filename
          filetype   = 'DAT' "'DAT' "'ASC'
*         APPEND     = ' '
*         WRITE_FIELD_SEPARATOR           = ' '
*         HEADER     = '00'
*         TRUNC_TRAILING_BLANKS           = ' '
*         WRITE_LF   = 'X'
*         COL_SELECT = ' '
*         COL_SELECT_MASK                 = ' '
*         DAT_MODE   = ' '
*         CONFIRM_OVERWRITE               = ' '
*         NO_AUTH_CHECK                   = ' '
*         codepage   = '8400'
*         IGNORE_CERR                     = ABAP_TRUE
*         REPLACEMENT                     = '#'
*         WRITE_BOM  = ' '
*         TRUNC_TRAILING_BLANKS_EOL       = 'X'
*         WK1_N_FORMAT                    = ' '
*         WK1_N_SIZE = ' '
*         WK1_T_FORMAT                    = ' '
*         WK1_T_SIZE = ' '
*         WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE
*         SHOW_TRANSFER_STATUS            = ABAP_TRUE
*         VIRUS_SCAN_PROFILE              = '/SCET/GUI_DOWNLOAD'
*     IMPORTING
*         FILELENGTH =
        TABLES
          data_tab   = gt_data_table
          fieldnames = lt_columns
        EXCEPTIONS
          OTHERS     = 22.
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.

    ENDIF.
  ENDDO.
ENDFORM.
View Code

 

posted @ 2022-06-06 10:14  蛀牙首领  阅读(91)  评论(0编辑  收藏  举报