Code: Alles auswählen.
DATA: tab1(30) TYPE c.
DATA: tab2(30) TYPE c.
FIELD-SYMBOLS:
<fstable> TYPE ANY TABLE,
<fstable1> TYPE ANY TABLE,
<fswa> TYPE data,
<fswa1> TYPE data,
<fsfield> TYPE data.
DATA:
b_ret TYPE c,
n_action TYPE i,
n_filelen TYPE i,
rc TYPE i,
tbl_files TYPE filetable,
s_filename TYPE string,
s_path TYPE string,
s_fullpath TYPE string,
x_header TYPE xstring,
obj_feservices TYPE REF TO cl_gui_frontend_services.
CREATE DATA inttab TYPE TABLE OF (tab1).
ASSIGN inttab->* TO <fstable>.
DATA: w_filename TYPE string.
CLEAR w_filename.
MOVE pa_downl TO w_filename.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = w_filename
filetype = 'ASC'
has_field_separator = 'X'
CHANGING
data_tab = <fstable>
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
tab2 = tab1(14).
CREATE DATA inttab TYPE TABLE OF (tab2).
ASSIGN inttab->* TO <fstable1>.
LOOP AT <fstable> ASSIGNING <fswa>.
*-Problem <fswa> hat ein Feld nicht darum muss irgend wie die WA in
*-die andere Transferiert werden...
*- move-corresponding <fswa> to <fswa1>
INSERT INTO (tab2) VALUES <fswa1>
ENDLOOP.
Code: Alles auswählen.
TYPES:
BEGIN OF ts_tab1,
feld1 TYPE >typ<,
...
END OF ts_tab1,
BEGIN OF ts_tab2,
mandt TYPE mandt.
* benamte Struktur erzeugen
INCLUDE TYPE ts_tab1 AS data.
TYPES:
END OF ts_tab2.
...
DATA:
fswa1 TYPE ts_tab2.
...
LOOP AT <fstable> ASSIGNING <fswa>.
* Feldleiste de DB-Tabelle mit Mandanten versorgen (wobei das implizit ohnehin gemacht wird, wenn Zusatz CLIENT SPECIFIED im INSERT fehlt)
fswa1-mandt = sy-mandt.
* Der Trick: da ob tab2 mit einem benamten INCLUDE (hier data) versehen wurede, kann man im Programm darauf zugreifen... ;-)
fswa1-data = <fswa>.
INSERT INTO (tab2) VALUES fswa1.
ENDLOOP.
Super so geht es danke viel malereglam hat geschrieben:Hallo Kleenmex,
ich muss eingestehen, dass ich etwas voreilig war, als ich meine Anwort schrieb.
Wenn ich es (jetzt ) richtig verstehe, hast Du eine Datei, die im Blockformat vorliegt und in <fstable> geladen wird.
Anschließend soll der Inhalt diese Tabelle zeilenweise in die Tabelle <fstable1> übertragen werden, wobei dort das erste Feld das Feld Mandant ist. Ist das so richtig?
Dazu würde ich folgendes machen:Alternativ könnte man zwar noch die Feldliste sich holen und mit ASSIGN COMPONENT jedes Feld einzeln zuweisen, aber um die Definition der Feldlisten (siehe oben) kommt man dann trotzdem nicht herum...Code: Alles auswählen.
TYPES: BEGIN OF ts_tab1, feld1 TYPE >typ<, ... END OF ts_tab1, BEGIN OF ts_tab2, mandt TYPE mandt. * benamte Struktur erzeugen INCLUDE TYPE ts_tab1 AS data. TYPES: END OF ts_tab2. ... DATA: fswa1 TYPE ts_tab2. ... LOOP AT <fstable> ASSIGNING <fswa>. * Feldleiste de DB-Tabelle mit Mandanten versorgen (wobei das implizit ohnehin gemacht wird, wenn Zusatz CLIENT SPECIFIED im INSERT fehlt) fswa1-mandt = sy-mandt. * Der Trick: da ob tab2 mit einem benamten INCLUDE (hier data) versehen wurede, kann man im Programm darauf zugreifen... ;-) fswa1-data = <fswa>. INSERT INTO (tab2) VALUES fswa1. ENDLOOP.