[52228] in SAPr3-news
Re: Funktionsbaustein zum Excel-Upload
daemon@ATHENA.MIT.EDU (mecons)
Fri Nov 12 05:04:13 2004
To: sapr3-news@mit.edu
Date: Fri, 12 Nov 2004 11:01:01 +0100
From: "mecons" <nospam@www.mecons.com>
Message-ID: <41948a97$0$17099$fa624c98@news.rtlnet.de>
Reply-To: "mecons" <nospam@www.mecons.com>
"Matthias Lambrecht" <forum@zahnarzt-lambrecht.de> wrote in message
news:cmtqst$j2k$04$1@news.t-online.com...
> Hallo NGler,
>
> wir wollen in einem Z-ABAP den Funktionsbaustein
> ALSM_EXCEL_TO_INTERNAL_TABLE zum Upload einer Exceldatei (2 Spalten,
> ca. 22000 Zeilen) verwenden. Das Problem hierbei ist, dass dies
nichtmöglich
> ist. Im Funktionsbaustein selbst ist im Reiter "Tabellen" das
> Feld "ROW" der Struktur "ALSMEX_TABLINE" für die Zeilennummer nur mit der
> Länge 4 Typ NUMC deklariert. Hat dies also zur Konsequenz, dass
> meine Exceldatei nur bis zur Zeile 9999 eingelesen werden kann ?
>
> Handelt es sich hierbei um einen Fehler im Funktionsbaustein ?
>
> Gibt es Alternativen ?
>
> Grüße
> Matthias
>
>
Hallo Matthias,
in der Anlage ist eine produktiver Abap als Muster der eine ehemalige
Tabelle ( in csv konvertiert ) einliest.
Die Daten werden gegen SAP geprüft und in eine Z-Tabelle gestellt.
Funktioniert einwandfrei......
report zp_sd_ueb_wangstatistik line-size 80.
tables:
rlgrap,
zpsd_wangstatist,
mara,
kna1.
*
parameters: p_filek like rlgrap-filename
default 'C:\temp\KUNDEN.txt'
obligatory.
parameters: p_fileu like rlgrap-filename
default 'C:\temp\KUMASC03.txt'
obligatory.
*
field-symbols: <f1>.
*
data: begin of nametab occurs 60.
include structure dntab.
data: end of nametab.
data: wa_wang like zpsd_wangstatist.
*
data: begin of ix occurs 0,
zeile(100),
end of ix.
*
data: begin of iu occurs 0,
wangnr(08),
matnr(06),
datum(6),
umsatz(14),
menge(14),
solldb(12),
istdb(12),
end of iu.
types: begin of wangkd,
wangnr(08) type c,
sapnr(10) type c,
end of wangkd.
types: begin of kfehl,
wangnr(08) type c,
umsatz type p,
end of kfehl.
data: ik type standard table of wangkd with
key wangnr,
wa_ik type wangkd.
data: i_kfehl type standard table of kfehl with
key wangnr, sapnr,
wa_kfehl type kfehl.
*
data: begin of zw,
line type p,
read type p,
write type p,
proz type p,
loop type p,
akt type p,
kzm type p,
kzt type p,
kzk type p,
fehl type p,
umsatz type p,
sapnr(10) type n,
end of zw.
*
perform datei_lesen.
perform datei_ausgabe.
write:/1 'Quelltabelle:', p_fileu.
write:/1 'Datensätze:', zw-read, '= gelesen', zw-write, '= geschrieben'.
write:/1 'davon:'.
write:/1 zw-kzm, 'Materialnummer nicht vorhanden'.
write:/1 zw-kzt, 'Wang-Kundennummer kann nicht zugeordnet werden'.
write:/1 zw-kzk, 'Zugeordneter Kunde nicht gefunden'.
write:/1 'Wang-Nr Umsatz'.
zw-umsatz = 0.
loop at i_kfehl into wa_kfehl.
write:/1 wa_kfehl-wangnr.
write:20 wa_kfehl-umsatz.
zw-umsatz = zw-umsatz + wa_kfehl-umsatz.
endloop.
write:/ 'Summe fehlende Umsatzzuordung Kunden:', zw-umsatz.
*
*---------------------------------------------------------------------*
* Form datei_upload
*---------------------------------------------------------------------*
form datei_lesen.
* Daten aus EXCEL-Datei einlesen
* Lesen Kundenzuordnungen aus ASCII-Tabelle
clear ix.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = p_filek
TABLES
data_tab = ix
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_table_width = 4
invalid_type = 5
no_batch = 6
unknown_error = 7
gui_refuse_filetransfer = 8
OTHERS = 9.
IF NOT sy-subrc IS INITIAL.
WRITE: / 'Fehler beim Upload', sy-subrc.
CASE sy-subrc.
WHEN 1.
WRITE: 'CONVERSION_ERROR '.
WHEN 2.
WRITE: 'FILE_OPEN_ERROR '.
WHEN 3.
WRITE: 'FILE_READ_ERROR '.
WHEN 4.
WRITE: 'INVALID_TABLE_WIDTH '.
WHEN 5.
WRITE: 'INVALID_TYPE '.
WHEN 6.
WRITE: 'NO_BATCH '.
WHEN 7.
WRITE: 'UNKNOWN_ERROR '.
WHEN 8.
WRITE: 'GUI_REFUSE_FILETRANSFER '.
WHEN 9.
WRITE: 'OTHERS '.
ENDCASE.
ENDIF.
describe table ix lines zw-line.
check zw-line ne 0.
*
MESSAGE I005(ZZ) WITH zw-line 'Datensätze aus' p_filek 'gelesen'.
* Aufbereitung
loop at ix.
split ix at ';' into
wa_ik-wangnr
wa_ik-sapnr.
* shift wa_ik-sapnr right deleting trailing ' '.
* translate wa_ik-sapnr using ' 0'.
*
append wa_ik to ik.
endloop.
clear ix.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = p_fileu
TABLES
data_tab = ix
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_table_width = 4
invalid_type = 5
no_batch = 6
unknown_error = 7
gui_refuse_filetransfer = 8
OTHERS = 9.
IF NOT sy-subrc IS INITIAL.
WRITE: / 'Fehler beim Upload', sy-subrc.
CASE sy-subrc.
WHEN 1.
WRITE: 'CONVERSION_ERROR '.
WHEN 2.
WRITE: 'FILE_OPEN_ERROR '.
WHEN 3.
WRITE: 'FILE_READ_ERROR '.
WHEN 4.
WRITE: 'INVALID_TABLE_WIDTH '.
WHEN 5.
WRITE: 'INVALID_TYPE '.
WHEN 6.
WRITE: 'NO_BATCH '.
WHEN 7.
WRITE: 'UNKNOWN_ERROR '.
WHEN 8.
WRITE: 'GUI_REFUSE_FILETRANSFER '.
WHEN 9.
WRITE: 'OTHERS '.
ENDCASE.
ENDIF.
describe table ix lines zw-line.
check zw-line ne 0.
*
MESSAGE I005(ZZ) WITH zw-line 'Datensätze aus' p_fileu 'gelesen'.
* Aufbereitung
loop at ix.
split ix at ';' into
iu-wangnr
iu-matnr
iu-datum
iu-umsatz
iu-menge
iu-solldb
iu-istdb.
*
append iu.
*
endloop.
endform. " datei_upload
*---------------------------------------------------------------------*
* Form datei_ausgabe
*---------------------------------------------------------------------*
form datei_ausgabe.
zw-read = 0.
zw-write = 0.
zw-akt = 0.
zw-loop = 0.
zw-kzm = 0.
zw-kzk = 0.
data: a like sy-ucomm.
zw-proz = zw-line / 100.
zw-loop = 1.
loop at iu.
*
if zw-akt > zw-proz.
zw-fehl = zw-kzm + zw-kzk + zw-kzt.
A(3) = zw-loop.A+3 = '%'.
A+10 = 'Datensätze mit Fehlern:'.
A+35 = zw-fehl.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = zw-loop
TEXT = A.
zw-akt = 0.
zw-loop = zw-loop + 1.
endif.
zw-akt = zw-akt + 1.
perform lesen.
perform pruefen.
zw-read = zw-read + 1.
move-corresponding wa_wang to zpsd_wangstatist.
insert zpsd_wangstatist.
if sy-subrc ne 0.
select single * from zpsd_wangstatist
where monat = wa_wang-monat and
matnr = wa_wang-matnr and
wangnr = wa_wang-wangnr.
zpsd_wangstatist-netwr = zpsd_wangstatist-netwr + wa_wang-netwr.
zpsd_wangstatist-kwmeng = zpsd_wangstatist-kwmeng + wa_wang-kwmeng.
zpsd_wangstatist-zzksodb = zpsd_wangstatist-zzksodb + wa_wang-zzkisdb.
zpsd_wangstatist-zzkisdb = zpsd_wangstatist-zzkisdb + wa_wang-zzkisdb.
update zpsd_wangstatist.
if sy-subrc = 0.
zw-write = zw-write + 1.
endif.
endif.
endloop.
endform. " datei_ausgabe
*---------------------------------------------------------------------*
* Form Daten lesen
*---------------------------------------------------------------------*
form lesen.
clear wa_wang.
clear zpsd_wangstatist.
wa_wang-monat+4(02) = iu-datum+0(02).
wa_wang-monat+0(04) = iu-datum+2(04).
wa_wang-wangnr = iu-wangnr.
wa_wang-matnr+0(12) = '000000000000'.
wa_wang-matnr+12(6) = iu-matnr.
wa_wang-netwr = iu-umsatz / 100.
wa_wang-kwmeng = iu-menge.
wa_wang-zzksodb = iu-solldb / 1000.
wa_wang-zzkisdb = iu-istdb / 1000.
endform. " datensatz
*---------------------------------------------------------------------*
* Form Daten prüfen
*---------------------------------------------------------------------*
form pruefen.
clear mara.
clear kna1.
clear wa_kfehl.
select single * from mara where
matnr = wa_wang-matnr.
if sy-subrc ne 0.
zw-kzm = zw-kzm + 1.
wa_wang-matnr = 'ZZZZZZZZZZZZZZZZZZ'.
zpsd_wangstatist-datfehl = 'M'.
endif.
clear wa_ik.
read table ik with table key wangnr = iu-wangnr into wa_ik.
if sy-subrc ne 0.
wa_kfehl-wangnr = iu-wangnr.
wa_kfehl-umsatz = iu-umsatz / 100.
collect wa_kfehl into i_kfehl.
if zpsd_wangstatist-datfehl = 'M'.
zpsd_wangstatist-datfehl = 'X'.
else.
zpsd_wangstatist-datfehl = 'K'.
endif.
zw-kzt = zw-kzt + 1.
wa_wang-kunnr = 'XXXXXXXXXX'.
else.
clear zw-sapnr.
zw-sapnr = wa_ik-sapnr.
select single * from kna1 where
kunnr = zw-sapnr.
if sy-subrc eq 0.
wa_wang-kunnr = zw-sapnr.
else.
zw-kzk = zw-kzk + 1.
endif.
endif.
endform. " datensatz