Новичок. Выгрзука таблицы в DBF файл

Автор KishMish, Березень 31, 2011, 03:42:31 ПП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

KishMish

Я новичок (самоучка).
Подскажите, пожалуйста, последовательность действий для выгрузки таблицы в ДБФ файл
Использую рабочий пример с использованием
CALL FUNCTION 'GET_FIELDTAB'
CALL FUNCTION 'WS_DOWNLOAD'


файл выгружается но данных там нет. он пустой.
таблица не пустая (выгружается в ALV)

не могу понять в чем дело.

проконсультируйте по логике алгоритма действий
что, зачем, и для чего тут используются, соответсно что тут не так


CONCATENATE 'C:\TEMP\acr_Tempo.DBF' '' INTO filename.

DATA: ZX030L LIKE X030L.
DATA: BEGIN OF FLDITAB OCCURS 0,
      FLDNAME(11) TYPE C,
      END OF FLDITAB.
DATA BEGIN OF ZDFIES OCCURS 0.
     INCLUDE STRUCTURE DFIES.
DATA END OF ZDFIES.

CALL FUNCTION 'GET_FIELDTAB'
      EXPORTING
          LANGU              = SY-LANGU
          ONLY               = SPACE
          TABNAME            = 'acr_Tempo'
          WITHTEXT           = 'X'
      IMPORTING
          HEADER             = ZX030L
      TABLES
          FIELDTAB           = ZDFIES
      EXCEPTIONS
          INTERNAL_ERROR      = 01
          NO_TEXTS_FOUND      = 02
          TABLE_HAS_NO_FIELDS = 03
          TABLE_NOT_ACTIV     = 04.

     CASE SY-SUBRC.
        WHEN 0.
          LOOP AT ZDFIES.
               FLDITAB-FLDNAME = ZDFIES-FIELDNAME.
               APPEND FLDITAB.
          ENDLOOP.
        WHEN OTHERS.
*             MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              with  SY-SUBR
       ENDCASE.
    .                                                        " 1.1
  CALL FUNCTION 'WS_DOWNLOAD'
    EXPORTING
     filename                        = 'C:\TEMP\acr_Tempo.DBF'
     filetype                        = 'DBF'
    TABLES
      data_tab                      = tb_out
      FIELDNAMES                    = FLDITAB

   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
            .



Uukrul

Цитата: KishMish від Березень 31, 2011, 03:42:31 ПП

 CALL FUNCTION 'WS_DOWNLOAD'
   EXPORTING
    filename                        = 'C:\TEMP\acr_Tempo.DBF'
    filetype                        = 'DBF'
   TABLES
     data_tab                      = tb_out
     FIELDNAMES                    = FLDITAB
  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
           .

Ну данные должны быть в таблице tb_out а я не вижу в вашем коде где вы ее заполняете данными из таблицы.

KishMish

Таблица заполняется 100% . Она выводится на экран с помощь ALV.
В АЛВ ее видно.
моя задача сделать кнопку чтобы после показа АЛВ можно было выгрузить в ДБФ.



DATA:BEGIN OF tb_out OCCURS 0,
bukrs(4),
saknr like skat-saknr,
txt50(60)," TYPE skat-txt50,
GVTYP LIKE bseg-GVTYP,
"belnr LIKE bseg-belnr,
belnr(10),
budat LIKE bkpf-budat,
bldat LIKE bkpf-bldat,
sgtxt(60),
usnam LIKE bkpf-usnam,
"dmbtr LIKE bseg-wrbtr,
dmbtr(20)," TYPE p DECIMALS 2,
shkzg LIKE bseg-shkzg,
lifn_kun like bseg-lifnr,
name1 like LFA1-name1,
augbl like bseg-augbl,
augdt like bseg-augdt,
bschl like bseg-bschl,
koart like bseg-koart,
fipos like bseg-fipos,
dmbe2 like bseg-dmbe2,
kurs2 like bkpf-kurs2,
hwae2 like bkpf-hwae2,
CPUDT like bkpf-CPUDT,
id_storno(2),

acr_2(15) Type c,
acr_3(15) Type c,
END OF tb_out.


Интерисует конкретно вот что
что происходит? (ивзвините если банальщина)
как я понял
CALL FUNCTION 'WS_DOWNLOAD'
    EXPORTING
     filename                        = 'C:\TEMP\acr_Tempo.DBF'
     filetype                        = 'DBF'
    TABLES
      data_tab                      = tb_out
      FIELDNAMES                    = FLDITAB

Указываются ИМЯ ТИП ТАблицаДляВыгрузки и ТаблицаСИменамиПолей
FLDITAB  - определеяется в
CALL FUNCTION 'GET_FIELDTAB'
      EXPORTING
          LANGU              = SY-LANGU
          ONLY               = SPACE
          TABNAME            = 'acr_Tempo'
          WITHTEXT           = 'X'
      IMPORTING
          HEADER             = ZX030L
      TABLES
          FIELDTAB           = ZDFIES

где я не совсем понимаю назначения представленных параметров.
объясните пжста или ссылку (русс) дайте.
что должно быть в GET_FIELDTAB
и какой результат доже быть после ее выполнения?


спасибо за ответ.

Uukrul

#3
Ну вообще-то я глянул в 6.0 реализацию данной функции, ну что сказать, не умеет она выгружать данные в формате  DBF, внутри идет проверка на тип передаваемого файла для выгрузки:

CASE FILETYPE.
   WHEN 'ASC'.
   WHEN 'DAT'.
     ....
   WHEN 'BIN'.
     ....
   WHEN 'VSS'.
     ....
   WHEN OTHERS.
     RAISE INVALID_TYPE.
 ENDCASE.

Так что на DBF получите код ошибки: RAISE INVALID_TYPE. Это так сказать из плохого.. а из хорошего, есть новая функция: GUI_DOWNLOAD, которая позволяет как раз выгружать файл в формате DBF. Пример выгрузки таблицы MKPF для системы IDES, там у меня записей 400 где-то документов было, находится ниже. Попробуйте у себя в системе для своей таблицы.

*&---------------------------------------------------------------------*
*& Report  YTSH_TEMP
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT  ytsh_temp.

DATA: lt_dfies LIKE dfies OCCURS 1 WITH HEADER LINE,
     lt_mkpf LIKE mkpf OCCURS 1 WITH HEADER LINE.
DATA: BEGIN OF flditab OCCURS 0,
     fldname LIKE dfies-fieldname,
END OF flditab.


* Данные для выгрузкки
SELECT * INTO TABLE lt_mkpf
FROM mkpf WHERE mjahr = '2008'.


CALL FUNCTION 'GET_FIELDTAB'
 EXPORTING
   tabname             = 'MKPF'
 TABLES
   fieldtab            = lt_dfies
 EXCEPTIONS
   internal_error      = 01
   no_texts_found      = 02
   table_has_no_fields = 03
   table_not_activ     = 04.

IF sy-subrc = 0.
 LOOP AT lt_dfies.
   APPEND lt_dfies-fieldname TO flditab.
 ENDLOOP.
ENDIF.

CALL FUNCTION 'GUI_DOWNLOAD'
 EXPORTING
*   BIN_FILESIZE                    =
   filename                        = 'C:\TEMP\TEST.DBF'
   filetype                        = 'DBF'
 TABLES
   data_tab                        = lt_mkpf
   fieldnames                      = flditab
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.


PS: Пример полученного файла ниже, кодировка UTF-8, так как система юникодная, открывал его для просмотра, через Calc LibreOffice 3, так как других читалок формата DBF давно уже не держу. Вроде нормально открывалось. Кстати, если не передать список полей, то поля в DBF-файле будут называться типа F1, F2, F3 и т.д.

KomAndr

Всем привет.
Сделал аналогичную выгрузку, всё ок, за исключение русского текста(что-то с кодировкой).
А именно ФИО.

Как это можно победить?

KomAndr

Вопрос решился:
CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
*     BIN_FILESIZE     =
      codepage         = '1503'
      filename         = lv_fullfilename
      filetype         = 'DBF'
    TABLES
      data_tab         = gt_sber_outtab
      fieldnames       = flditab
    EXCEPTIONS
      file_write_error = 1
      OTHERS           = 99.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

Uukrul

Цитата: KomAndr від Листопад 22, 2012, 09:43:26 ДП
Сделал аналогичную выгрузку, всё ок, за исключение русского текста(что-то с кодировкой).
А именно ФИО.
Выгружаете локально? Тогда это настройка GUI клиента поставьте кодировку выгрузки win1251

Uukrul

Цитата: KomAndr від Листопад 22, 2012, 10:43:50 ДП
codepage         = '1503'
Ну я имел в виду вот это при настройке подключения, тогда все выгрузки идут вроде как с нужной кодировкой.