[52228] in SAPr3-news

home help back first fref pref prev next nref lref last post

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



home help back first fref pref prev next nref lref last post