Neu Tabellen (.csv) vor Ameise-Import automatisch ändern

ostseemodellbau

Aktives Mitglied
20. Januar 2018
48
4
Moin allerseits,
wir haben da seit längerem ein Problem bei der Dateneinspielung von .csv Tabellen und würden gern wissen, ob uns hier jemand helfen kann, das Problem zu lösen.

Erst einmal eine Beschreibung des Problems:
Wir bieten in unserem Shop über 110.000 Artikel von diversen Herstellern bzw. Lieferanten an.
Um das alles im Griff zu haben, arbeiten wir neben unserem eigenen Lagerbestand auch mit dem Lagerbestand unserer Lieferanten. Das bedeutet, dass wir uns stündlich die aktuellen Lagerbestände unserer Lieferanten holen und diese über die Ameise einspielen.
Der Download der Dateien und das Einspielen wird bei uns durch diverse Batch Dateien ausgelöst und funktioniert soweit auch alles ganz gut.
Voraussetzung für die einwandfreie Funktion ist allerdings, dass uns der Lieferant eine .csv Datei zur Verfügung stellt, welche auch den tatsächlichen Lagerbatand des Lieferanten darstellt. Das machen leider nicht alle Lieferanten, wobei wir die Grunde dafür auch nachvollziehen können.

Bei den Lieferanten, wo der Lagerbestand z. B. 0 (steht für nicht verfügbar) und 1 (steht für verfügbar) können wir die Tabellen nicht unbearbeitet einpielen, da wir ja sonst von jedem verfügbaren Artikel nur 1 Stück verkaufen können.
Also müssen wir die .csv Dateien vor dem Einspielen zuerst ändern. Beispielsweise ändern wir mit Hilfe der Suchen/Ersetzen Fuktion von Open-Office den Lagerbastand in der entsprechenden Spalte von 1 auf 10.
Dann speichen wir die Tabelle wieder ab und starten die Batch manuell, welche dann die Aktualiesierung der Daten in der Wawi in die Wege leitet und letztendlich auch durchführt.

Klingt alles kompliziert, wäre es auch nicht, wenn es nur ein Lieferant wäre. Das würde dann mal eben 5 Minuten Zeit kosten und die Daten wären dann Tagaktuell. Wir arbeiten derzeit aber mit ca. 20 Lieferanten, welche uns mit Artikeln von ca 150 Marken beliefern und einwandfrei funktioniert die Dateneinspielung ohne Tabellennachbearbeitung bei uns nur ca. bei der Hälfte der Lieferanten. Also 10 x 5 Minuten täglicher Aufwand für etwas, was im heutigen Zeitalter der Technik doch auch automatisch funktionieren sollte.

Und davon mal abgesehen sollten die Bestände ja auch nicht nur 1x täglich sondern mindestends 1x stündlich aktualisiert werden, denn an einem Tag kann sich schon einiges an Lagerbeständen ändern.

Sicher habt ihr jetzt auch schon erkannt, was unser Problem ist, aber hier noch mal unsere Frage bzw. unsere Vorstellung:

Kann man das Ändern der .csv Datenen nicht irgendwie in die Batch mit einbinden und wenn ja, wie? Ideal wäre also fogender Ablauf:
- die Datei wird vom Lieferanten geholt (das funktioniert ja schon über die Batch :thumbsup:)
- ein Programm (oder irgendwie anders) öffnet die Tabelle, ändert die entsprechenden Spalten und seichert diese wieder im .csv Format ab (das ist das, was wir gern hätten :()
- die Batch holt sich die bearbeitete .csv Datei und spielt diese in unsere Wawi ein (auch da funktioniert ja schon:thumbsup:)

Wir hoffen, das uns hier jemand helfen kann und freuen uns auf zahlreiche Unterstützung.
Vielen Dank vorab schon mal.

Gruß
Ostsee-Modellbau
 

frankell

Sehr aktives Mitglied
9. September 2019
539
222
Flensburg
Moin allerseits,
wir haben da seit längerem ein Problem bei der Dateneinspielung von .csv Tabellen und würden gern wissen, ob uns hier jemand helfen kann, das Problem zu lösen.

Erst einmal eine Beschreibung des Problems:
Wir bieten in unserem Shop über 110.000 Artikel von diversen Herstellern bzw. Lieferanten an.
Um das alles im Griff zu haben, arbeiten wir neben unserem eigenen Lagerbestand auch mit dem Lagerbestand unserer Lieferanten. Das bedeutet, dass wir uns stündlich die aktuellen Lagerbestände unserer Lieferanten holen und diese über die Ameise einspielen.
Der Download der Dateien und das Einspielen wird bei uns durch diverse Batch Dateien ausgelöst und funktioniert soweit auch alles ganz gut.
Voraussetzung für die einwandfreie Funktion ist allerdings, dass uns der Lieferant eine .csv Datei zur Verfügung stellt, welche auch den tatsächlichen Lagerbatand des Lieferanten darstellt. Das machen leider nicht alle Lieferanten, wobei wir die Grunde dafür auch nachvollziehen können.

Bei den Lieferanten, wo der Lagerbestand z. B. 0 (steht für nicht verfügbar) und 1 (steht für verfügbar) können wir die Tabellen nicht unbearbeitet einpielen, da wir ja sonst von jedem verfügbaren Artikel nur 1 Stück verkaufen können.
Also müssen wir die .csv Dateien vor dem Einspielen zuerst ändern. Beispielsweise ändern wir mit Hilfe der Suchen/Ersetzen Fuktion von Open-Office den Lagerbastand in der entsprechenden Spalte von 1 auf 10.
Dann speichen wir die Tabelle wieder ab und starten die Batch manuell, welche dann die Aktualiesierung der Daten in der Wawi in die Wege leitet und letztendlich auch durchführt.

Klingt alles kompliziert, wäre es auch nicht, wenn es nur ein Lieferant wäre. Das würde dann mal eben 5 Minuten Zeit kosten und die Daten wären dann Tagaktuell. Wir arbeiten derzeit aber mit ca. 20 Lieferanten, welche uns mit Artikeln von ca 150 Marken beliefern und einwandfrei funktioniert die Dateneinspielung ohne Tabellennachbearbeitung bei uns nur ca. bei der Hälfte der Lieferanten. Also 10 x 5 Minuten täglicher Aufwand für etwas, was im heutigen Zeitalter der Technik doch auch automatisch funktionieren sollte.

Und davon mal abgesehen sollten die Bestände ja auch nicht nur 1x täglich sondern mindestends 1x stündlich aktualisiert werden, denn an einem Tag kann sich schon einiges an Lagerbeständen ändern.

Sicher habt ihr jetzt auch schon erkannt, was unser Problem ist, aber hier noch mal unsere Frage bzw. unsere Vorstellung:

Kann man das Ändern der .csv Datenen nicht irgendwie in die Batch mit einbinden und wenn ja, wie? Ideal wäre also fogender Ablauf:
- die Datei wird vom Lieferanten geholt (das funktioniert ja schon über die Batch :thumbsup:)
- ein Programm (oder irgendwie anders) öffnet die Tabelle, ändert die entsprechenden Spalten und seichert diese wieder im .csv Format ab (das ist das, was wir gern hätten :()
- die Batch holt sich die bearbeitete .csv Datei und spielt diese in unsere Wawi ein (auch da funktioniert ja schon:thumbsup:)

Wir hoffen, das uns hier jemand helfen kann und freuen uns auf zahlreiche Unterstützung.
Vielen Dank vorab schon mal.

Gruß
Ostsee-Modellbau

Hallo @ostseemodellbau,

ich habe so etwas mal mit PowerQuery umgesetzt, allerdings vor allem deswegen, weil die zur Verfügung gestellte Datei knapp 50 Transformationsschritte benötigte. Das hätte man wahrscheinlich mit Python oder gleich vom SQL Server machen lassen können, aber so ist es vom Kunden auf recht einfache Weise selbst anzupassen und auch nachzuvollziehen. Da Du aber von Open-Office sprichst, gehe ich mal davon aus, dass Excel nicht vorhanden ist. Aber wenn es wirklich nur um die Änderung der 1 in eine 10 in einer bestimmten Spalte der CSV geht, dann ist ein Powershell-Skript, das einen Ordner belauscht und neue Dateien direkt umwandelt oder das Ergebnis in einen anderen Ordner speichert, in dem die sonstigen zu importierenden CSV-Dateien liegen, wohl die beste Variante, weil einfach einfach und schnell. Aber: Es ist halt ein Skript, das da läuft, was nicht auf allen System erlaubt ist bzw. sein soll. Wobei man sich damit behelfen kann, sich selbst durch die PowerShell ein Software-Zertifikat erstellen zu lassen, dieses in den Zertfikatsspeicher zu legt und schließlich nur die Ausführung von zertifizierten Skripten zu erlaubt.
 

John

Sehr aktives Mitglied
3. März 2012
3.086
677
Berlin
Ich habe so etwas bereits für Kunden im Rahmen der Programmierung eines eigenen Tools in dotNet umgesetzt.
Das Tool erledigt dabei verschieden Aufgaben, die meistens bestehen aus

1. Download CSV oder XML
2. Beliebige Umwandlung der Daten, auch in Abhängigkeit zu aktuelle Wawi Daten
3. Speichern als neue CSV und Aufruf der Ameise mit IMP Vorlage
4. Bei Bedarf eMail mit Report

Das ganze ist dann eine fertige Software an der Ihr als als Nutzer aber nichts verändern könnt.

Bei Interesse PM für Details.
 

merres

Mitglied
28. März 2024
13
2
Ich habe die csv Dateien zwar bisher nicht gesehen, vermute aber, dass sich das, sofern man jeden Lieferanten einmalig erfasst und sogenannte "Mappings" (Vorlage pro Lieferant) erstellt, mit einem Python + Pandas Skript umsetzen lässt. Das würde mMn unheimlich schnell und effizient laufen und wäre innerhalb von 2-3 Tagen einsatzbereit. Schick mir gerne mal eine Beispieldatei durch.
 

ple

Sehr aktives Mitglied
20. August 2019
570
127
Mal so ne Frage an die Profis, um so csv Dateien zu bearbeiten, welche Programmierung ist da eigentlich so am schnellsten? Python? Powershell? Net?

Gruß
 

mvh

Sehr aktives Mitglied
26. Oktober 2011
763
275
PowerShell. Keine Installation, wenig Code, BASH mäßig
C-like:
if($PSScriptRoot) {$myscript=$PSScriptRoot} else {$myscript=(Resolve-Path .\).Path}
$LieferantArtListe = Import-Csv -Delimiter ';' -Path ($myscript + "\import.txt")
$OutputCSV=@()
ForEach ($item in $LieferantArtListe){
$Artnr = $($item.Artnr)
##etwas tun
$OutputCSV+=[pscustomobject]@{
  Artnr=$Artnr
  ##weitere Felder
  }
}
$OutputCSV | Export-CSV -Delimiter ';' -Path ($myscript + "\export.txt") -Force -NoTypeInformation
Könnte Ich auch in 2-3 Zeilen schreiben ist aber unübersichtlich
 

merres

Mitglied
28. März 2024
13
2
Mal so ne Frage an die Profis, um so csv Dateien zu bearbeiten, welche Programmierung ist da eigentlich so am schnellsten? Python? Powershell? Net?

Gruß
Für große Datenmengen eigentlich Rust, C oder C++. Allerdings sind optimierte Bibliotheken wie Pandas für Python gerade im Bereich Data Science unheimlich effizient. Kommt immer auf den spezifischen Fall an. Mit Powershell kommt man auch ans Ziel, ist aber in Sachen csv Verarbeitung überhaupt kein Vergleich zu Pandas.
 

mvh

Sehr aktives Mitglied
26. Oktober 2011
763
275
Für große Datenmengen eigentlich Rust, C oder C++. Allerdings sind optimierte Bibliotheken wie Pandas für Python gerade im Bereich Data Science unheimlich effizient. Kommt immer auf den spezifischen Fall an. Mit Powershell kommt man auch ans Ziel, ist aber in Sachen csv Verarbeitung überhaupt kein Vergleich zu Pandas.
Für wirklich große CSV-Dateien (500K-Zeilen und mehr) würde ich PowerShell-Skript so schreiben (nutzt .NET)

C#:
try
{
$reader = [System.IO.File]::OpenText('import.txt')
$writer = [System.IO.StreamWriter]::new('export.txt')

for(;;) {
    $line = $reader.ReadLine()
    if ($null -eq $line) {
        break
    }
    $data = $line.Split(";")
    ##$data verändern
    $writer.WriteLine('{0};{1};{2}', $data[0], $data[2], $data[1])
}
}
finally
{
$reader.Close()
$writer.Close()
}
 

ostseemodellbau

Aktives Mitglied
20. Januar 2018
48
4
Hallo @ostseemodellbau,

ich habe so etwas mal mit PowerQuery umgesetzt, allerdings vor allem deswegen, weil die zur Verfügung gestellte Datei knapp 50 Transformationsschritte benötigte. Das hätte man wahrscheinlich mit Python oder gleich vom SQL Server machen lassen können, aber so ist es vom Kunden auf recht einfache Weise selbst anzupassen und auch nachzuvollziehen. Da Du aber von Open-Office sprichst, gehe ich mal davon aus, dass Excel nicht vorhanden ist. Aber wenn es wirklich nur um die Änderung der 1 in eine 10 in einer bestimmten Spalte der CSV geht, dann ist ein Powershell-Skript, das einen Ordner belauscht und neue Dateien direkt umwandelt oder das Ergebnis in einen anderen Ordner speichert, in dem die sonstigen zu importierenden CSV-Dateien liegen, wohl die beste Variante, weil einfach einfach und schnell. Aber: Es ist halt ein Skript, das da läuft, was nicht auf allen System erlaubt ist bzw. sein soll. Wobei man sich damit behelfen kann, sich selbst durch die PowerShell ein Software-Zertifikat erstellen zu lassen, dieses in den Zertfikatsspeicher zu legt und schließlich nur die Ausführung von zertifizierten Skripten zu erlaubt.
Hallo frankell,
erst einmal Danke für die Antwort.
Excel ist schon vorhanden, aber aus irgendwelchen Gründen funktioniert die Spaltenänderung zwar auch bei Excel, aber nach dem Abspeichern der in Excel geöffneten Datei im .csv Format können wir die Datei nicht in der Ameise benutzen, weil die (glaube ich) Formatierung oder Spaltenzuordnung dann nicht mehr passt.

Unsere Vorgehensweise ist folgende:
Wir öffnen die heruntergeladene Datei (.csv oder auch xls) über die Funktion "öffnen mit" Open Office.
Dann markieren wie die meistens nur eine Spalte und ändern die beistpielsweise vorhandene 1 in eine 10.
Dann speichern wir die Datei wieder im OpenOffice .csv Format und starten dann die Batch Datei, um die geänderten Artikel in die Wawi einzuspielen.

Das klappt bisher einwandfrei, aber es ist eben mühsam, das jeden Tag zu machen. Von mehrfach am Tag mal ganz zu schweigen :confused:
 

ostseemodellbau

Aktives Mitglied
20. Januar 2018
48
4
Für wirklich große CSV-Dateien (500K-Zeilen und mehr) würde ich PowerShell-Skript so schreiben (nutzt .NET)

C#:
try
{
$reader = [System.IO.File]::OpenText('import.txt')
$writer = [System.IO.StreamWriter]::new('export.txt')

for(;;) {
    $line = $reader.ReadLine()
    if ($null -eq $line) {
        break
    }
    $data = $line.Split(";")
    ##$data verändern
    $writer.WriteLine('{0};{1};{2}', $data[0], $data[2], $data[1])
}
}
finally
{
$reader.Close()
$writer.Close()
}

Hallo mvh,

danke für deine Antwort zu unserem Problem.
Man muss allerdings wissen, dass wir keinen IT Mitarbeiter oder IT Partner haben, der solche Sachen in die Tat umsetzt.
Für mich sind solche Sachen wie PowerShell Script und ähnliches absolut böhmische Dörfer oder anders: Davon hab ich keine Ahnung.

ich bin schon überglücklich, dass ich es sehr mühsam hinbekommen habe, eine Batch Datei zu schreiben und dass diese funktioniert.
Also bitte nicht böse sein, aber da bräuchte ich wohl erst einmal Hilfe, was es mit Power Shell & Co so auf sich hat.
Oder sehe ich das falsch und könnte diese Zeilen z. B. in meine vorhandenen Batch Dateien einfügen?

Falls es hilft habe ich hier mal eine Kopie einer meiner Batch Dateien, bei denen der Import ohne Änderungen der Import-Datei ohne Probleme funktioniert:
(Alle Händler oder Ameine spezifischen Daten wurden hier durch ein X oder durch Muster erstetzt). Ich hoffe, es hilft vielleicht auch einem Laien weiter ;)
@echo off
cd\
cd C:\Import\Muster
Löschen der alten CSV Datei
C:\Import\Muster\bestand.csv /s /q
"C:\Program Files (x86)\GnuWin32\bin\wget.exe" -O bestand.csv –-no-check-certificate http://muster.muster.de/download/bestand.csv?show=n
"C:\Program Files (x86)\JTL-Software\ JTL-wawi- ameise.exe" --server=xxxxx.xxxxxx.xxxxxxxx.de\JTLWAWI,50000 --database=eazybusiness --dbuser=XXXXX --dbpass=XXXXXXXXXXX- --templateid=IMP53 --inputfile=bestand.csv -- log="Muster-Bericht.txt"
exit

Ja, und jetzt bin ich mal wieder gespannt, ob wir hier weiterkommen.
Vielen Dank vorab
Gruß
Ostsee-Modellbau
 

mvh

Sehr aktives Mitglied
26. Oktober 2011
763
275
Hallo mvh,

danke für deine Antwort zu unserem Problem.
Man muss allerdings wissen, dass wir keinen IT Mitarbeiter oder IT Partner haben, der solche Sachen in die Tat umsetzt.
Für mich sind solche Sachen wie PowerShell Script und ähnliches absolut böhmische Dörfer oder anders: Davon hab ich keine Ahnung.

ich bin schon überglücklich, dass ich es sehr mühsam hinbekommen habe, eine Batch Datei zu schreiben und dass diese funktioniert.
Also bitte nicht böse sein, aber da bräuchte ich wohl erst einmal Hilfe, was es mit Power Shell & Co so auf sich hat.
Oder sehe ich das falsch und könnte diese Zeilen z. B. in meine vorhandenen Batch Dateien einfügen?

Falls es hilft habe ich hier mal eine Kopie einer meiner Batch Dateien, bei denen der Import ohne Änderungen der Import-Datei ohne Probleme funktioniert:
(Alle Händler oder Ameine spezifischen Daten wurden hier durch ein X oder durch Muster erstetzt). Ich hoffe, es hilft vielleicht auch einem Laien weiter ;)
@echo off
cd\
cd C:\Import\Muster
Löschen der alten CSV Datei
C:\Import\Muster\bestand.csv /s /q
"C:\Program Files (x86)\GnuWin32\bin\wget.exe" -O bestand.csv –-no-check-certificate http://muster.muster.de/download/bestand.csv?show=n
"C:\Program Files (x86)\JTL-Software\ JTL-wawi- ameise.exe" --server=xxxxx.xxxxxx.xxxxxxxx.de\JTLWAWI,50000 --database=eazybusiness --dbuser=XXXXX --dbpass=XXXXXXXXXXX- --templateid=IMP53 --inputfile=bestand.csv -- log="Muster-Bericht.txt"
exit

Ja, und jetzt bin ich mal wieder gespannt, ob wir hier weiterkommen.
Vielen Dank vorab
Gruß
Ostsee-Modellbau
Moin.
Es gibt hier ganz viele Service-Partner bzw. Freiwillige, die Dir helfen können, nicht unbedingt ohne Entgelt.
Und es ist nebensächlich, ob der-/die-jenige es mit PowerShell und CSV/ImportExcel macht, oder mit Python und Pandas/XlsxWriter macht.
Ohne konkrete CSV-Dateien/Felder wird es nicht funktionieren, das haben aber schon mehrere Menschen hier geschrieben.
Deine batch-Datei wird so nicht helfen.
Viele Grüße, Ihr MVH-Team
 

no80

Aktives Mitglied
28. Juni 2023
126
16
Hallo mvh,

danke für deine Antwort zu unserem Problem.
Man muss allerdings wissen, dass wir keinen IT Mitarbeiter oder IT Partner haben, der solche Sachen in die Tat umsetzt.
Für mich sind solche Sachen wie PowerShell Script und ähnliches absolut böhmische Dörfer oder anders: Davon hab ich keine Ahnung.

ich bin schon überglücklich, dass ich es sehr mühsam hinbekommen habe, eine Batch Datei zu schreiben und dass diese funktioniert.
Also bitte nicht böse sein, aber da bräuchte ich wohl erst einmal Hilfe, was es mit Power Shell & Co so auf sich hat.
Oder sehe ich das falsch und könnte diese Zeilen z. B. in meine vorhandenen Batch Dateien einfügen?

Falls es hilft habe ich hier mal eine Kopie einer meiner Batch Dateien, bei denen der Import ohne Änderungen der Import-Datei ohne Probleme funktioniert:
(Alle Händler oder Ameine spezifischen Daten wurden hier durch ein X oder durch Muster erstetzt). Ich hoffe, es hilft vielleicht auch einem Laien weiter ;)
@echo off
cd\
cd C:\Import\Muster
Löschen der alten CSV Datei
C:\Import\Muster\bestand.csv /s /q
"C:\Program Files (x86)\GnuWin32\bin\wget.exe" -O bestand.csv –-no-check-certificate http://muster.muster.de/download/bestand.csv?show=n
"C:\Program Files (x86)\JTL-Software\ JTL-wawi- ameise.exe" --server=xxxxx.xxxxxx.xxxxxxxx.de\JTLWAWI,50000 --database=eazybusiness --dbuser=XXXXX --dbpass=XXXXXXXXXXX- --templateid=IMP53 --inputfile=bestand.csv -- log="Muster-Bericht.txt"
exit

Ja, und jetzt bin ich mal wieder gespannt, ob wir hier weiterkommen.
Vielen Dank vorab
Gruß
Ostsee-Modellbau
Meld dich gerne, lässt sich gut mit powershell automatisieren.
Csv Vorlage bzw. Test Datei sollte vorhanden sein.
 

ple

Sehr aktives Mitglied
20. August 2019
570
127
Ich würde es ein wenig weiter ausbauen.
Wenn du die Datei per FTP laden kannst oder sonst wie, dann geht das auch automatisch. Nur so als Gedanke mal, denke @John kann da bestimmt helfen.
Ein Powershell oder sonst ne kleines Prog, das holt die csv Datei ab vom Server, vergleicht den Hash mit der alten, wenn der gleich ist, dann beende das Prog, wenn nicht, dann finde die Datensätze die unterschiedlich, ändere das ab, was du abgeändert haben wolltest und speichere die Datei neu ab, dann wird importiert.
Das ganze läuft dann vollautomatisiert jede Stunde oder alle 5 min.
Ich würde immer einen Hashvergleich machen und nur die unterschiede rausfiltern, das spart ne Menge Zeit mit der Ameise, es müssen ja nur die abgeändert werden, die unterschiedlich sind.
Ich bin bestimmt nicht der Vollprofi, aber für mich konnte ich das schon so umsetzen.

@mvh
das muss ich mal austesten mit System.IO in meinen Script. Vielen Dank.
Wobei ich aktuell nur ca. 1300 Datensätze vergleiche und neu schreibe für den Artikelimport, aber es sollen noch einige mehr dazukommen.
Echt Schade, das die Ameise so langsam ist. Beim Quicksync mit 1300 Datensätze dauert es ca 26s wobei nur Preise und Bestand aktualisiert werden oder Artikel auf 0 gesetzt werden, wenn die nicht in der Datei sind.
 
  • Gefällt mir
Reaktionen: no80