Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE38 - ABAP Редактор => Тема начата: KishMish от Март 31, 2011, 03:42:31 pm
-
Я новичок (самоучка).
Подскажите, пожалуйста, последовательность действий для выгрузки таблицы в ДБФ файл
Использую рабочий пример с использованием
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
.
-
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 а я не вижу в вашем коде где вы ее заполняете данными из таблицы.
-
Таблица заполняется 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
и какой результат доже быть после ее выполнения?
спасибо за ответ.
-
Ну вообще-то я глянул в 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 и т.д.
-
Всем привет.
Сделал аналогичную выгрузку, всё ок, за исключение русского текста(что-то с кодировкой).
А именно ФИО.
Как это можно победить?
-
Вопрос решился:
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.
-
Сделал аналогичную выгрузку, всё ок, за исключение русского текста(что-то с кодировкой).
А именно ФИО.
Выгружаете локально? Тогда это настройка GUI клиента поставьте кодировку выгрузки win1251
-
codepage = '1503'
Ну я имел в виду вот это при настройке подключения, тогда все выгрузки идут вроде как с нужной кодировкой.