SAP Jobsuche bei DV-Treff
motra82
  • motra82
  • SAP Forum - User Thema Starter
vor 8 Jahre
Hallo zusammen,

ich hoffe Ihr habt einen Tipp für mich. Bin ein Neuling was ABAP angeht.

Die Situation.

Ich habe eine Z_TABELLE erstellt per SE11 jetzt habe ich ein CSV File welcher die Daten enthält auch schon aufbereitet nach dem Muster der Z_Tabelle die Daten sind ";" getrennt.

per Frontend Datei Upload (eigenes geschriebenes Programm) klappt auch alles wunderbar.

Jetzt wollte ich das Programm versuchen zu erweitern ich dachte einfach an sowas, wie

das man per Variante den Pfad der Datei hinterlegen kann so das ich das Ganze als Job einplanen kann.

Zurzeit sieht das Programm es aber nicht vor, denn ich definiere die Z_Tabelle und den Upload danach F8(Ausführen) jetzt muss ich die Datei auswählen.... genau hier würde ich gerne den Pfad hinterlegen wollen welcher sich direkt auf dem Server befindet.

Kann mir dabei einer behilflich sein? vielleicht habt Ihr schon sowas erstellt?

es geht um befühlen einer Z_Tabelle aus ";" getrenntem CSV- File per Job

Danke

MfG

Motra

Förderer

MrBojangles
vor 8 Jahre
Hallo Motra,

im Hintergrund funktioniert es nur, wenn Du die CSV-Datei auf dem Applikationsserver ablegst. Ein Frontend-Upload, wie er z.Zt. in Deinem Programm vorgenommen wird, geht nur im Dialog. Womöglich kannst Du die Datei vor dem Lauf per FTP auf den Applikationsserver kopieren und dann könnte das Programm die Datei per READ DATASET (Details s. F1-Hilfe) einlesen und verarbeiten. Das ginge dann auch im Hintergrund.


Weiterhin viel Freude mit SAP...

Cheers

MrB.

motra82
  • motra82
  • SAP Forum - User Thema Starter
vor 8 Jahre
Hi danke für die schnelle Antwort.

Die Datei liegt schon auf dem Applikationsserver vor.

Das Problem ist wie kriege ich diese rein.

Dachte evtl. hat SAP Transaktion dafür.

als Beispiel habe eine Tabelle Z_XXX mit 10 Feldern.

Habe eine CSV-Datei ";" getrennt mit Daten und den exakten Feldern.

Möchte ein Z_Report haben welcher sich als Job einplanen lässt und mit in der Varianten Steuerung

wo ich den Applikationsserver bzw: den Pfad und die Datei am besten als Präfix "z_*" definieren kann.

Der Report(Job Hintergrund) startet mit der vordefinierten Variante wo die Z_Tabelle und der Pfad zu Import CSV vorgegeben ist.

Zur Zeit behelfe ich mir wäre über einen Z_Report welcher aber

die cl_gui_frontend_services nutzt

Auszug:

CLASS file_op DEFINITION.

PUBLIC SECTION.

METHODS: constructor,

write_file IMPORTING tabname TYPE tabname

CHANGING fdat TYPE tt_dfile,

open_file IMPORTING tabname TYPE tabname

CHANGING fdat TYPE tt_dfile.

PRIVATE SECTION.

DATA: lr_frend_serv TYPE REF TO cl_gui_frontend_services,

lt_filedat TYPE filetable,

li_ret TYPE i,

li_flength TYPE i,

lc_string TYPE string,

lc_fname TYPE string,

lc_path TYPE string,

lc_fpath TYPE string.

ENDCLASS. "file_op DEFINITION

*----------------------------------------------------------------------*

* CLASS tabdata DEFINITION

*----------------------------------------------------------------------*

*

*----------------------------------------------------------------------*

CLASS tabdata DEFINITION.

PUBLIC SECTION.

METHODS: constructor IMPORTING tabname TYPE tabname

sep TYPE c,

get_cont IMPORTING sel_mandt TYPE tt_mandant,

write_cont IMPORTING edit TYPE char01.

PRIVATE SECTION.

DATA: lt_fields TYPE tt_fields,

lt_dfile TYPE tt_dfile,

lt_split TYPE tt_split,

lt_ffields TYPE tt_split,

ls_dfile TYPE ts_dfile,

tabstruct TYPE REF TO data,

dbtabstruct TYPE REF TO data,

lr_fileop TYPE REF TO file_op,

lc_typ(1),

lc_string(128),

lc_sep,

lc_answer(1),

lc_tabname TYPE tabname.

ENDCLASS. "tabdata

*----------------------------------------------------------------------*

* CLASS tabed DEFINITION

*----------------------------------------------------------------------*

*

*----------------------------------------------------------------------*

CLASS tabed DEFINITION.

PUBLIC SECTION.

CLASS-METHODS: edit IMPORTING tabname TYPE tabname

maxlin TYPE i

seltab TYPE tt_seltab.

PRIVATE SECTION.

CLASS-DATA: ls_outfields TYPE se16n_output,

ls_seltab TYPE ts_nseltab,

lt_seltab TYPE tt_nseltab,

lt_outfields TYPE STANDARD TABLE OF se16n_output.

ENDCLASS. "tabed DEFINITION

*----------------------------------------------------------------------*

* CLASS dat DEFINITION

*----------------------------------------------------------------------*

*

*----------------------------------------------------------------------*

TYPES: BEGIN OF ts_dsplit,

data(4),

END OF ts_dsplit,

tt_dsplit TYPE STANDARD TABLE OF ts_dsplit,

tc_datum(10),

tc_time(8).

*----------------------------------------------------------------------*

* CLASS dat DEFINITION

*----------------------------------------------------------------------*

*

*----------------------------------------------------------------------*

CLASS dat DEFINITION.

PUBLIC SECTION.

CLASS-METHODS: date CHANGING datum TYPE tc_datum,

time CHANGING uhrzeit TYPE tc_time.

PRIVATE SECTION.

CLASS-METHODS: split IMPORTING typ TYPE char01

CHANGING datum TYPE tc_datum.

CLASS-DATA: lt_split TYPE tt_dsplit,

ls_split TYPE ts_dsplit,

lc_datum TYPE tc_datum,

li_lin TYPE i,

lc_sep(1).

ENDCLASS. "dat

**************************************************************************

DATA: gr_tabdata TYPE REF TO tabdata.


Die Definition der Z_Tabelle und das es mit ";" getrennt sein soll kann ich in der Variante definieren aber nicht wo die CSV-Datei liegt.....

Ideen?

Ist das Verständlich oder noch zu wirr beschrieben?

MfG

Motra

motra82
  • motra82
  • SAP Forum - User Thema Starter
vor 8 Jahre
Noch Ideen oder keiner 😞
MrBojangles
vor 8 Jahre
Hallo motra82,

so ganz kapiere ich noch nicht, worauf Du hinaus willst, jedenfalls hoffe ich, wir meinen das gleiche, wenn wir von "Applikationsserver" reden... Ich meine nicht das Frontend/Windows-Filesystem, wo Du die Dateien per Upload hochlädst... (das geht - wie gesagt - nicht im Hintergrund). Ich meine das Dateisystem, welches Du mit der Transaktion AL11 durchstöbern kannst.

Anbei mal ein Coding-Snippet, wie es üblicherweise gemacht wird:

Die einzulesende CSV-Datei myfile.csv liege im Pfad \my_dir ab und habe folgenden Inhalt:

BUKRS;KONTO;SALDO

1000;4711;1000.00

1000:4712;700.88


REPORT ZSAMPLE.
DATA: buffer TYPE STRING.  "nimmt erstmal die CSV-Zeilen "roh" auf
"Tabellentyp mit den einzelnen Feldern der CSV-Datei
TYPES: begin of ty_table,
        bukrs type bukrs,
        konto type saknr,
        saldo(15) type c,
      end of ty_table,
DATA: my_table type table of ty_table,
      gs_table type ty_table.

"Wenn Du den Pfad von aussen mitgeben möchtest, dann einfach als PARAMETER:
PARAMETERS: pa_file like rlgrap-filename LOWER CASE "Unix-Dateinamen sind Case-sensitiv
            DEFAULT '\my_dir\myfile.csv'.

START-OF-SELECTION.
 OPEN DATASET pa_file FOR INPUT IN TEXT MODE ENCODING DEFAULT.
 DO.
   READ DATASET pa_file INTO buffer.
   IF SY-SUBRC <> 0.  "EOF
     EXIT.
   ENDIF.
   CHECK sy-index > 1. "ggf. Überschriftenzeile auslassen
   SPLIT buffer AT ';' INTO
         gs_table-bukrs
         gs_table-konto
         gs_table-saldo.
   APPEND gs_table to my_table.
 ENDDO.
 CLOSE DATASET pa_file.

"Hier stehen jetzt alle Einträge aus der CSV-Datei strukturiert
"in my_table drin.

 LOOP AT my_table into gs_table.
   "do anything
 ENDLOOP.

Weiterhin viel Freude mit SAP...

Cheers

MrB.

motra82
  • motra82
  • SAP Forum - User Thema Starter
vor 8 Jahre
Hi,

genau das suche ich da ich echt Neuling bin auf dem Gebiet versuche ich nochmal zu erklären also

ich habe aus einem Fremdsystem eine

Beispiel.csv

Inhalt:

ILN;L_ILN;LI_CI;EK_CI;NB_EINK

37300;21174;05;;

diese CSV soll auf die Tabelle ZTabelle_ILN welche diese Felder ILN;L_ILN;LI_CI;EK_CI;NB_EINK beinhaltet.

Die Beispiel.csv Datei habe ich auf dem Applikationsserver(Linux-SAPServer) \my_dir\Beispiel.csv

liegen.

jetzt möchte ich ein Report erstellen in welchem ich die ZTabelle und dem Pfad zu dem Beispiel.csv definiere. Das speichern als Variante(Beispiel)(Ztabelle_ILN) und das Ganze als Job einplanen einmal wöchentlich die ZTabelle_ILN leeren und komplett wieder befühlen. ich habe jede Woche einen Initialload.

Ich möchte das steuern können da ich 4 Tabellen zu befühlen habe nach dem selben Muster die Dateien liegen immer in unterschiedlichen Ordnern auf dem APPLServer.

Im Endeffekt ein Report welches stumpfes " Schau ins Verzeichnis wenn du eine CSV in dem vorgegebenen Pfad findest dann leere die vorgegebene Tabelle und importiere die Daten aus der xxxx.csv fertig"

Sowas halt :-)

Ist das jetzt verständlicher was ich gerne möchte.

Vielen Dank

LG

Motra

MrBojangles
vor 8 Jahre
Hallo Motra,

na dann geht mein Coding ja schon in die richtige Richtung. Jetzt musst Du nur noch einen DELETE und einen INSERT FROM TABLE hinten dran basteln.

Man könnte das Ganze mit Feldsymbolen und Daten-Referenzen auch generisch gestalten, so dass ein Report beliebig viele Tabellen "befühlt" (ich hoffe er fummelt nicht nur, sondern füllt auch ab...;-), aber das ist dann schon die höhere Schule... vielleicht versuchst Du Dich erstmal so dran.


Weiterhin viel Freude mit SAP...

Cheers

MrB.