BDC TXT录入数据

BDC T-CODE: shdb

在BDC录屏中不会录textbox动作, 则需要手动添加对textbox的录入。

调用函数 'SAVE_TEXT' 保存文本。

文本会自动保存到数据库表 STXH :STXD SAPscript 文本文件抬头 ;STXL:STXD SAPscript 文本文件行。

需要先找到对应模块的文本对象 text object, T-CODE: SE75

如物料主数据为 MATERIAL。

*&---------------------------------------------------------------------*
*& title: EMS 批量导入物料主数据
*&---------------------------------------------------------------------*

REPORT zews01 NO STANDARD PAGE HEADING LINE-SIZE 180.

INCLUDE ole2incl.
TYPE-POOLS abap.

*定义读取本地文本文件的变量
DATA:filelength TYPE i,
filetype TYPE char10,
codepage TYPE abap_encoding.

DATA:BEGIN OF data OCCURS 0,
data(1024),
END OF data.

*定义闹钟变量
DATA:progress(10) TYPE p DECIMALS 2,
num TYPE i,
numc(20) TYPE c.

*定义数据的变量
DATA:BEGIN OF item OCCURS 0,
num TYPE string,
matnr01(18) TYPE c,
mbrsh02(1) TYPE c,
mtart03(4) TYPE c,
kzsel01(1) TYPE c,
kzsel03(1) TYPE c,
kzsel05(1) TYPE c,
werks07(4) TYPE c,
maktx08(40) TYPE c,
meins09(3) TYPE c,
matkl10(9) TYPE c,
mtpos11(4) TYPE c,
maktx12(40) TYPE c,
meins13(3) TYPE c,
ekgrp14(3) TYPE c,
matkl15(9) TYPE c,
maktx16(40) TYPE c,
spras17(2) TYPE c,
maktx18(40) TYPE c,
END OF item.

DATA:mess(200) TYPE c,
i TYPE i,
type(1) TYPE c,
file TYPE string.

*定义BDC导入用到的变量
DATA bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.

* 定义选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK 01 WITH FRAME TITLE text-001.
PARAMETERS txt(255) TYPE c. "文件路径
SELECTION-SCREEN END OF BLOCK 01.


* 用户用于选择批量导入的文件
AT SELECTION-SCREEN ON VALUE-REQUEST FOR txt.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = ''
def_path = ''
mask = ',*.'
mode = 'O'
title = '请指定路径'
IMPORTING
filename = txt
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.

* START-OF-SELECTION 事件
START-OF-SELECTION.
file = txt.
num = STRLEN( file ).
num = num - 3.
numc = file+num(3).
IF numc <> 'TXT'.
MESSAGE e398(00) WITH '请用文本文件导入数据!'.
ENDIF.

*开始读取本地文件
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = file
codepage = codepage
IMPORTING
filelength = filelength
TABLES
data_tab = data
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 sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

LOOP AT data.
IF sy-tabix <> 1.
SPLIT data AT cl_abap_char_utilities=>horizontal_tab
INTO item-matnr01 item-maktx08 item-meins09 item-matkl10 item-ekgrp14 item-maktx18.
item-num = sy-tabix - 1.
item-mbrsh02 = 'G'.
item-mtart03 = 'Z010'.
item-kzsel01 = 'X'.
item-kzsel03 = 'X'.
item-kzsel05 = 'X'.
item-werks07 = '2101'.
item-mtpos11 = 'NLAG'.
item-maktx12 = item-maktx08.
item-meins13 = item-meins09.
item-matkl15 = item-matkl10.
item-maktx16 = item-maktx08.
item-spras17 = 'ZH'.
APPEND item.
CLEAR item.
ENDIF.
ENDLOOP.

DESCRIBE TABLE item LINES num.

CLEAR: i,numc.
type = 'N'.
sy-lsind = 1.
LOOP AT item.
i = i + 1.
progress = sy-tabix / num * 100.
numc = progress.
CONCATENATE numc '%' INTO numc.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = progress
text = numc.
* wait UP TO 1 seconds.

PERFORM bdc_dynpro USING 'SAPLMGMM' '0060'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RMMG1-MTART'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RMMG1-MATNR'
item-matnr01.
PERFORM bdc_field USING 'RMMG1-MBRSH'
item-mbrsh02.
PERFORM bdc_field USING 'RMMG1-MTART'
item-mtart03.
PERFORM bdc_dynpro USING 'SAPLMGMM' '0070'.
PERFORM bdc_field USING 'BDC_CURSOR'
'MSICHTAUSW-DYTXT(05)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
PERFORM bdc_field USING 'MSICHTAUSW-KZSEL(01)'
item-kzsel01.
PERFORM bdc_field USING 'MSICHTAUSW-KZSEL(03)'
item-kzsel03.
PERFORM bdc_field USING 'MSICHTAUSW-KZSEL(05)'
item-kzsel05.
PERFORM bdc_dynpro USING 'SAPLMGMM' '0080'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RMMG1-WERKS'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTR'.
PERFORM bdc_field USING 'RMMG1-WERKS'
item-werks07.
PERFORM bdc_dynpro USING 'SAPLMGMM' '4004'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SP09'.
PERFORM bdc_field USING 'MAKT-MAKTX'
item-maktx08.
PERFORM bdc_field USING 'BDC_CURSOR'
'MARA-MATKL'.
PERFORM bdc_field USING 'MARA-MEINS'
item-meins09.
PERFORM bdc_field USING 'MARA-MATKL'
item-matkl10.
PERFORM bdc_field USING 'MARA-MTPOS_MARA'
item-mtpos11.
PERFORM bdc_dynpro USING 'SAPLMGMM' '4000'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SP11'.
PERFORM bdc_field USING 'MAKT-MAKTX'
item-maktx12.
PERFORM bdc_field USING 'BDC_CURSOR'
'MARC-EKGRP'.
PERFORM bdc_field USING 'MARA-MEINS'
item-meins13.
PERFORM bdc_field USING 'MARC-EKGRP'
item-ekgrp14.
PERFORM bdc_field USING 'MARA-MATKL'
item-matkl15.
PERFORM bdc_dynpro USING 'SAPLMGMM' '4040'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ZU01'.
PERFORM bdc_field USING 'MAKT-MAKTX'
item-maktx16.
PERFORM bdc_dynpro USING 'SAPLMGMM' '4300'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
PERFORM bdc_field USING 'BDC_CURSOR'
'SKTEXT-MAKTX(02)'.
PERFORM bdc_field USING 'SKTEXT-SPRAS(02)'
item-spras17.
PERFORM bdc_field USING 'SKTEXT-MAKTX(02)'
item-maktx18.
CALL TRANSACTION 'MM01' USING bdcdata MODE type.

IF sy-msgty <> ''.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO mess.
ENDIF.

*保存TEXT BOX 文本
IF mess <> 'Material already maintained for this transaction/event'.
PERFORM save_po_text.
ENDIF.


REFRESH bdcdata.
CLEAR bdcdata.

PERFORM log.
ENDLOOP.

*导入后显示的log
FORM log.
IF i = 1.
FORMAT COLOR 1.
ULINE.
WRITE:/1 '序号',8 '料号', 30 '英文描述', 80 '物料组',96 '采购组',106 '中文描述', 160 ''.
FORMAT COLOR OFF.
ENDIF.
IF mess <> 'Material already maintained for this transaction/event'.
FORMAT COLOR 5.
PERFORM write.
FORMAT COLOR OFF.
WRITE / mess.
ELSE.
FORMAT COLOR 6.
PERFORM write.
FORMAT COLOR OFF.
WRITE:/1 mess.
ENDIF.
ENDFORM. "log

*打印内表数据
FORM write.
WRITE:/1 item-num, 8 item-matnr01,30 item-maktx08,80 item-matkl10,96 item-ekgrp14,106 item-maktx18.
ENDFORM. "write

* Desc: bdc屏幕填充
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "bdc_dynpro
* Desc: bdc字段填充
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. "bdc_field



*&---------------------------------------------------------------------*
*& Form SAVE_PO_TEXT
*&---------------------------------------------------------------------*
* save purchase order text
*----------------------------------------------------------------------*
FORM save_po_text .
DATA : str_header LIKE thead,
lines LIKE tline OCCURS 0 WITH HEADER LINE.

str_header-tdobject = 'MATERIAL'.
str_header-tdname = item-matnr01.
str_header-tdid = 'BEST'.
str_header-tdspras = '1'.

lines-tdformat = 'TX'.
lines-tdline = item-maktx18..
APPEND lines.

CALL FUNCTION 'SAVE_TEXT'
EXPORTING
client = sy-mandt
header = str_header
* INSERT = ' '
savemode_direct = 'X'
* OWNER_SPECIFIED = ' '
* LOCAL_CAT = ' '
* IMPORTING
** FUNCTION =
** NEWHEADER =
TABLES
lines = lines[]
EXCEPTIONS
id = 1
language = 2
name = 3
object = 4
OTHERS = 5
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " SAVE_PO_TEXT



 

相关文章: