3.7k Aufrufe
Gefragt in Datenbanken von
Hi,

ich kämpfe damit Budgetzahlen für Upload in SAP aufzubereiten.

Format der vorliegenden Textimportdatei:
Filiale, Kontonummerschlüssel, Einheit, Jahr, Monat, Betrag

Dabei muss ich pro Land (8 Länder) die richtigen Kontonummern einfügen und Zeilen mit gleichem Konto + Monat + Filiale in einer Zeile kummulieren. Ich hab das nun in Access (2007) letztlich geschafft. Habe aber jetzt das nächste Problem, nämlich bemerkt, dass während des Imports von txt in Access die nachgestellten Minuszeichen verworfen werden.

Ich hab die möglichen Auswahlen single, double und Währung durchprobiert. Einzig bei Währung erkennt er das Minuszeichen. Aber mit € fange ich nichts an. SAP erwartet das Format "12345,67-" und wenn ich Währung importiere bekomme ich nur eine Währung im Export raus. Abgesehen davon, dass z.B. Rumänien keine Euro hat.

Hat wer eine Lösung?

Lg,
Gerald

5 Antworten

0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Gerald,

wie sieht die TXT-Datei aus?

bei csv-Datei:
Feldtrenner?
Feldbegrenzer?
Datensatztrenner (normalerweise neue Zeile)?

bei Fixed Block-Datei
Positionen von - bis für jedes Feld bekannt?

oder sind es Sonderformate mit Zeilenkenner?

Hat die TXT eine Headerzeile?
Welchen Zeichensatz hat die TXT-Datei (ASCII / UTF8 u.a.)?

Kannst du vielleicht zwei anonymisierte Zeilen der TXT-Datei posten?
Erst nach diesen Infos kann ich sinnvoll weiterhelfen.

Gruß
Ralf
0 Punkte
Beantwortet von marie Experte (2k Punkte)
das Format "12345,67-"
ist wohl SAP-spezifisch, sowohl in der Mathematik, als auch bei Access, als auch überall wo ich es je gesehen habe, gehört ein Minuszeichen vor die Zahl und nicht dahinter. Wie Du das Access nun beibringen willst, dass das bei SAP keine Gültigkeit hat, das kann ich Dir leider nicht sagen. Ich denke mal, das das nicht geht.

Gruß Marie
0 Punkte
Beantwortet von
Hallo Ralf,

die Daten werden via Makro aus Excel in eine .txt Datei geschrieben. Ich gehe davon aus, dass es sich um ASCI handelt. Es gibt keine Header, die Felder sind durch Semikolon getrennt und haben zusätzlich eine fixe Länge. Datensätze sind durch Zeilenschaltung getrennt. Hier Musterzeilen inklusive dem Beispiel mit dem Minus:

801;401612;B;2011;12;00000000385,74
801;401611;B;2011;01;00000000000,00
803;I00040;M;2011;06;00000000000,06-

Wenn man sich besser auskennen würde, könnte man vielleicht die Zahl als Text einlesen, dann nach Minus durchsuchen und die Daten dann manipulieren (letzte Stelle wegnehmen auf Zahl umwandeln und negativ "machen") und in eine neue Tabelle schreiben. Aber das schaffe ich nicht, daher hoffe ich darauf, dass es eine einfache Lösung gibt.

Lg,
Gerald
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Gerald,

dein Anzahl ist richtig. Du importierst das 6. Feld als Text, den Rest, wie du es brauchst. Danach definierst du eine Abfrage, wobei das Feld6 in ein Double-Feld umgewandelt wird. Dafür musst du folgendes tun:

CDbl(IIf(Right([Feld6],1)="-","-" & Left([feld6],Len([feld6])-1),[feld6])) AS Feld6asZahl
im SQL-Statement bzw. im Entwurfsmodus der Abfrage in einer neuen Spalte

Feld6asZahl: ZDouble(Wenn(Rechts([Feld6];1)="-";"-" & Links([feld6];Länge([feld6])-1);[feld6]))
eingeben. Was passiert da. Ich prüfe in der "iif"-Bedingung, ob das letzte Zeichen ein "-" ist. Im positiven Fall setze iche ein "-" mit dem Rest des Zahlenstrings zusammen, im anderen Fall nehme ich das Feld wie es ist. Um diese If-Bedingung kommt dann noch die Konvertierungsfunktion "CDbl", fertig.
Du kannst aus der Abfrage auch eine Tabellenerstellungsabfrage machen und die so die Tabelle bekommen, die du eigentlich willst. Den gesamten Vorgang des Ladens, und der Konvertierung in eine Tabelle kannst du auch automatisieren, das ist dann sinnvoll, wenn du diese Arbeit mehrfach machen musst, das ist letztendlich ein Dreizeiler.

Gruß
Ralf
0 Punkte
Beantwortet von
Hallo Ralf,

vorab einmal vielen Dank für deine Erklärung. Hatte nach dem WE leider erst mal etwas dazwischen bekommen und bin erst jetzt wieder zu meinem Problem gekommen.

Ich verstehe die Anweisung aber habe keine Ahnung, wo ich die hinschreiben sollte. Derzeitige Situation; habe eine Tabelle in welche dieser Wert als Text importiert wird. Diese Tabelle hat nun auch ein leeres Feld Zahl/Double.

Es gibt eine neue Abfrage, die alle Felder inkludiert. Dort kann ich die von dir gepostete Anweisung aber weder in das neue Feld unter Kriterien kopieren -> "der eingegebene Wert is syntaktisch falsch" noch kann ich es in der SQL Ansicht der Abfrage einfach am Schluss dazukopieren (was ja möglicherweise ohnehin ein lachhafter Versuch ist) -> "Zeichen nach Ende von SQL Anweisung gefunden"

Kann ich dich vielleicht irgendwie direkt kontaktieren? Wäre z.B. in Facebook unter Gerald Zemann (Dort gibt es drei. Ich bin der mit der Sonnenbrille).

Lg,
Gerald
...