Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Bestandsabgleich - Artikel Anzahl aus CSV in Modified übernehmen

    r3LaXeD

    • Fördermitglied
    • Beiträge: 86
    Mein Shopsystem ist:
    - modified eCommerce Shopssoftware v2.0.5.0

    Ich möchte meine Bestände aller Artikel abgleichen.
    Die "Ist - Menge" des Lagerbestandes habe ich in einer XLS / csv Datei.

    Meine Artikel sind mit SKU & EAN sowohl im Shop als auch in der CSV Datei angelegt.

    Könnte mir jemand einen Tip / Hinweis geben wie ich das umgesetzt bekommen ???

    Vielen Dank vorab

    Linkback: https://www.modified-shop.org/forum/index.php?topic=41433.0
    Templateshop - Eine große Auswahl an neuen und modernen Templates für die modified eCommerce Shopsoftware

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Was ist für dich "abgleichen"? Den Bestand aus der CSV in den Shop importieren? Dann probiere doch die Import-Funktion. Oder reicht die nicht aus? Was nimmst du als ArtNr.? Zur Not würde da wohl auch eine "Zwischentabelle" in Excel ("Abgleich" ArtNr. mit EAN), helfen.

    r3LaXeD

    • Fördermitglied
    • Beiträge: 86
    zunächst sorry für die lange Antwortzeit, ich war leider ausser Gefecht...

    Genau das möchte ich machen.
    Bestand aus einer CSV Datei importieren.

    Artikel sind mit identischer SKU/ Artikelnummer angelegt.

    Leider sind meine Excel Kenntnisse nicht ausreichend um die "Source Tabelle" so anzupassen dass es funktioniert.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Mache doch einmal  einen Export, dann siehst du die Spalten-Struktur und -Reihenfolge.
    So muß dann deine Import-CSV dann auch aussehen.
    Wenn du lediglich Bestände abgleichen möchtest reicht es in deiner CSV die Artikelnummer (p_model) und den Bestand (p_stock) zu haben.

    Gruß,
    noRiddle

    r3LaXeD

    • Fördermitglied
    • Beiträge: 86
    Danke dir zunächst vielmals.

    Ich habe nun mal eine CSV - Testdatei erstellt.
    Kommt beim "hochladen" der Fehler:   Fehler: Dateityp ist nicht erlaubt.

    habe es mit Excel als CSV (Trennzeichen getrennt) gespeichert.

    mein Shop läuft mit:  Shopssoftware v2.0.5.0 rev 12487

    Danke vorab

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Mach' mal ein Update auf 2.0.5.1 oder lade dir die beiden Changesets (_12490, _12492) aus dem Ticket 1725 herunter und auf deinen Shop.
    Damit kannst du nichts verkehrt machen weil die Dateien in den Changesets im Prinzip in der 2.0.5.1 genau so sind und somit die Update-Sicherheit gewährleistet bleibt. Danach sollte der Fehler behoben sein.

    Gruß,
    noRiddle

    r3LaXeD

    • Fördermitglied
    • Beiträge: 86
    Danke dir,

    habe mir gerade die beiden Changesets geladen und eingefügt.

    leider weiterhin:   Dateityp ist nicht erlaubt.

    schönes Wochenende, Sven

    r3LaXeD

    • Fördermitglied
    • Beiträge: 86
    Habe gerade nochmal eine neue export Datei erstellt und diese editiert und als CSV gespeichert.
    Diese lies sich nun auch einlesen und wurde verarbeitet.
    Vielen Dank dafür.

    Nun bleibt nur die Frage, wie ich aus einer anderen CSV die daten "automatisiert" aktualisieren/ anpassen kann...

    Danke vorab

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Automatisiert wird das nicht gehen.
    Was man machen könnte wäre eine Implementation programmieren die es ermöglicht einmalig manuell die Felder aus der fremden CSV den Feldern der Struktur der shop-eigenen CSV zuordnen zu können. Dieses Muster könnte man speichern und bei der nächsten Fremd-CSV wird es auf Auswahl verwendet und der Import somit automatisiert.

    Es gibt ja bereits EasyPopulate von web28 (R.I.P.), bei welchem allerdings meinen Informationen nach die Zuordnungen manuell in einer Datei gemacht werden müssen, es also kein Web-Interface dafür gibt.
    Ich kann mich jedoch irren. Frage dazu doch mal das modified-Team, die, soweit ich weiß, die Verwalter des Modules sind und es auch vertreiben.

    Gruß,
    noRiddle

    uptrender

    • Frisch an Board
    • Beiträge: 77
    Meine Artikel sind mit SKU & EAN sowohl im Shop als auch in der CSV Datei angelegt.
    Könnte mir jemand einen Tip / Hinweis geben wie ich das umgesetzt bekommen ???

    Das Script kannst du nach deinen Vorlieben anpassen und dazu verwenden.
    Damit kann eine CSV-Datei vom eigenen oder fremden (z. B. Vorlieferant) Webserver mit via fopen geladen,
    in einer while-Schleife in ein Array zerlegt und in die Datenbank gespielt werden.
    Zum Automatisieren das Script von außen per Cronjob antriggern. Tipp: es gibt auch gratis Dienste für Cronjobs, wenn es nicht auf die Minute genau sein soll.

    Angepasst werden muß natürlich der Dateipfad zur CSV, sowie die Struktur der CSV-Datei, welche ausgelesen werden soll.
    Achtung: da bei Arrays die 0 die 1. Stelle ist muß hier anders gezählt werden. Soll also der 7. Wert einer Zeile der CSV-Datei gelesen werden ist der Wert product[6]zu verwenden.

    Der CSV-Trenner kann von Semicolon auch in einen anderen Trenner geändert werden.

    So wie das Script jetzt dargestellt wird, nimmt es den 1. Wert jeder Zeile einer Semicolon-getrennten CSV-Datei als Artikelnummer und den 2. Wert als Menge. Weitere Werte einer Zeile (also 3., 4., 5. Wert usw.) werden ignoriert.

    Zum Testen bitte immer ein Backup (!) der kompletten Datenbank ziehen und dann eine CSV-Datei mit nur einem Datensatz verwenden. Erst dann eine längere Datei einspielen.

    Ich verwende diese Art von Script für verschiedene, automatisierte Datenabgleiche - u. a. auch als weitere Schnittstelle für die Warenwirtschaft, Buchhaltungsprogramm, Marktplätze usw.
    Ebenso habe ich es bei einigen unzuverlässigen LIeferanten noch um Funktionen erweitert um die Konsistenz der CSV-Datei zu prüfen, bevor diese verwertet wird. Also wenn der Datenexport beim Lieferanten nicht vollständig ist. Dazu zähle ich die Zeilen in der Datei und prüfe ob die Anzahl stimmig ist. Wen daran Interesse besteht, bitte einfach nachfragen.

    Edit:
    da ich gerade lese: Zitat "habe es mit Excel als CSV (Trennzeichen getrennt) gespeichert."
    Zum Verständnis: eine CSV (comma separated values) ist ganz simpel eine Text-Datei, bei der die Daten mit einem Trennzeichen (kann ein Komme, aber auch ein Semicolon oder irgendein Zeichen sein) getrennt ist und jeder Datensatz per Zeilenvorschub getrennt ist, also in einer eigenen Zeile steht.

    Nimm zum Testen und auch zum Verständnis eine reine Textdatei und schreibe dort die Werte von Hand hinein. Wenn deine Artikelnummer Artikel-1 lautet und die Menge 100 sein soll folgende Daten. Ganz wichtig am Schluß ein Zeilenvorschub, als ob etwas in die Folgezeile geschrieben würde:
    Artikel-1;100

    Das ganze jetzt in eine reine (!) Text-Datei, also kein Rich-Text oder Word, und die Endung mit .csv vergeben. Das ist jetzt nur zum Testen und nur zum Verständnis was eine CSV-Datei eigentlich ist. Ganz simpel. Später zum eigenlichen Daten füttern kann man auch Excel nehmen mit 2 Spalten, diese jeweils füllen und das ganze Speichern als, sowie bei dem Trennzeichen zwingend das Semicolon (= Strichpunkt) wählen. Fertig ist die Laube....

    Gruß
    Mike

    Code: PHP  [Auswählen]
    <?php
    ignore_user_abort(true);
    set_time_limit(0);

    require('includes/application_top.php');

    $updates=0;
    $such="HTTP/1.0 404 Not Found";

    echo "<h1>CSV Datei einlesen</h1>";
    echo "Start:".date("Y-m-d H:i:s");

    if(ini_get('allow_url_fopen')==1 && ini_get ( 'safe_mode' )==0){

    $file="https://DOMAIN/PFAD-ZUR-CSV-DATEI.csv";
    $file_headers = @get_headers($file);

    if(strpos($file_headers[0],$such) !== false) {
    $print="Datei nicht gefunden - Abbruch... ;-(";
            require('includes/application_bottom.php');
            die($print);   
    } else {
        $importfile=fopen($file,"r");
    }

    while($line=fgets($importfile))
    {
                                    // CSV zerlegen: Artikelnummer;Menge
                            $product=explode(";",$line);
                        $product[0]=str_replace('"','',($product[0]));
                            $product[1]=(int)$product[1];
                           
                                    // Ausgelesene Werte in die Datenbank spielen
                                    $sql="Update products set products_quantity='".$product[1]."' where products_model='".$product[0]."'";
                                    xtc_db_query($sql);
                                    $updates++;
    }
    }
    else{
            $print="Problem mit der Server-Konfig: allow_url_fopen / safe_mode. Kann so nicht funktionieren!";
            require('includes/application_bottom.php');
            die($print);
    }

    echo "<br>Ende:".date("Y-m-d H:i:s");
    echo "<br>Updates: ".$updates;
    require('includes/application_bottom.php');
    ?>
     

    r3LaXeD

    • Fördermitglied
    • Beiträge: 86
    Re: Bestandsabgleich - Artikel Anzahl aus CSV in Modified übernehmen
    Antwort #10 am: 29. November 2020, 13:09:14
    Vielen lieben Dank Mike,

    leider sind da noch einige Fragen meinerseits offen.

    Cronjobs, etc ist alles verfügbar.

    Könnte ich dich privat kontaktieren um das möglicherweise umzusetzen?
    Kannst du mir das möglicherweise für ein Entgelt anpassen??

    Lieben Gruss, Sven

    info@3D-Versand.com

    r3LaXeD

    • Fördermitglied
    • Beiträge: 86
    Re: Bestandsabgleich - Artikel Anzahl aus CSV in Modified übernehmen
    Antwort #11 am: 01. Dezember 2020, 09:28:31
    Meine Artikel sind mit SKU & EAN sowohl im Shop als auch in der CSV Datei angelegt.
    Könnte mir jemand einen Tip / Hinweis geben wie ich das umgesetzt bekommen ???

    Das Script kannst du nach deinen Vorlieben anpassen und dazu verwenden.
    Damit kann eine CSV-Datei vom eigenen oder fremden (z. B. Vorlieferant) Webserver mit via fopen geladen,
    in einer while-Schleife in ein Array zerlegt und in die Datenbank gespielt werden.
    Zum Automatisieren das Script von außen per Cronjob antriggern. Tipp: es gibt auch gratis Dienste für Cronjobs, wenn es nicht auf die Minute genau sein soll.

    Angepasst werden muß natürlich der Dateipfad zur CSV, sowie die Struktur der CSV-Datei, welche ausgelesen werden soll.
    Achtung: da bei Arrays die 0 die 1. Stelle ist muß hier anders gezählt werden. Soll also der 7. Wert einer Zeile der CSV-Datei gelesen werden ist der Wert product[6]zu verwenden.

    Der CSV-Trenner kann von Semicolon auch in einen anderen Trenner geändert werden.

    So wie das Script jetzt dargestellt wird, nimmt es den 1. Wert jeder Zeile einer Semicolon-getrennten CSV-Datei als Artikelnummer und den 2. Wert als Menge. Weitere Werte einer Zeile (also 3., 4., 5. Wert usw.) werden ignoriert.

    Zum Testen bitte immer ein Backup (!) der kompletten Datenbank ziehen und dann eine CSV-Datei mit nur einem Datensatz verwenden. Erst dann eine längere Datei einspielen.

    Ich verwende diese Art von Script für verschiedene, automatisierte Datenabgleiche - u. a. auch als weitere Schnittstelle für die Warenwirtschaft, Buchhaltungsprogramm, Marktplätze usw.
    Ebenso habe ich es bei einigen unzuverlässigen LIeferanten noch um Funktionen erweitert um die Konsistenz der CSV-Datei zu prüfen, bevor diese verwertet wird. Also wenn der Datenexport beim Lieferanten nicht vollständig ist. Dazu zähle ich die Zeilen in der Datei und prüfe ob die Anzahl stimmig ist. Wen daran Interesse besteht, bitte einfach nachfragen.

    Edit:
    da ich gerade lese: Zitat "habe es mit Excel als CSV (Trennzeichen getrennt) gespeichert."
    Zum Verständnis: eine CSV (comma separated values) ist ganz simpel eine Text-Datei, bei der die Daten mit einem Trennzeichen (kann ein Komme, aber auch ein Semicolon oder irgendein Zeichen sein) getrennt ist und jeder Datensatz per Zeilenvorschub getrennt ist, also in einer eigenen Zeile steht.

    Nimm zum Testen und auch zum Verständnis eine reine Textdatei und schreibe dort die Werte von Hand hinein. Wenn deine Artikelnummer Artikel-1 lautet und die Menge 100 sein soll folgende Daten. Ganz wichtig am Schluß ein Zeilenvorschub, als ob etwas in die Folgezeile geschrieben würde:
    Artikel-1;100

    Das ganze jetzt in eine reine (!) Text-Datei, also kein Rich-Text oder Word, und die Endung mit .csv vergeben. Das ist jetzt nur zum Testen und nur zum Verständnis was eine CSV-Datei eigentlich ist. Ganz simpel. Später zum eigenlichen Daten füttern kann man auch Excel nehmen mit 2 Spalten, diese jeweils füllen und das ganze Speichern als, sowie bei dem Trennzeichen zwingend das Semicolon (= Strichpunkt) wählen. Fertig ist die Laube....

    Gruß
    Mike

    Code: PHP  [Auswählen]
    <?php
    ignore_user_abort(true);
    set_time_limit(0);

    require('includes/application_top.php');

    $updates=0;
    $such="HTTP/1.0 404 Not Found";

    echo "<h1>CSV Datei einlesen</h1>";
    echo "Start:".date("Y-m-d H:i:s");

    if(ini_get('allow_url_fopen')==1 && ini_get ( 'safe_mode' )==0){

    $file="https://DOMAIN/PFAD-ZUR-CSV-DATEI.csv";
    $file_headers = @get_headers($file);

    if(strpos($file_headers[0],$such) !== false) {
    $print="Datei nicht gefunden - Abbruch... ;-(";
            require('includes/application_bottom.php');
            die($print);   
    } else {
        $importfile=fopen($file,"r");
    }

    while($line=fgets($importfile))
    {
                                    // CSV zerlegen: Artikelnummer;Menge
                            $product=explode(";",$line);
                        $product[0]=str_replace('"','',($product[0]));
                            $product[1]=(int)$product[1];
                           
                                    // Ausgelesene Werte in die Datenbank spielen
                                    $sql="Update products set products_quantity='".$product[1]."' where products_model='".$product[0]."'";
                                    xtc_db_query($sql);
                                    $updates++;
    }
    }
    else{
            $print="Problem mit der Server-Konfig: allow_url_fopen / safe_mode. Kann so nicht funktionieren!";
            require('includes/application_bottom.php');
            die($print);
    }

    echo "<br>Ende:".date("Y-m-d H:i:s");
    echo "<br>Updates: ".$updates;
    require('includes/application_bottom.php');
    ?>
     

    Vielen Lieben dank Mike.

    Nach ein paar Anpassungen die Mike für mich übernommen hat, ist der Bestandsabgleich nun möglich.

    Lg Sven
    6 Antworten
    2752 Aufrufe
    18. September 2014, 10:23:21 von Toby
    3 Antworten
    2811 Aufrufe
    03. September 2015, 10:43:10 von cschiller
    0 Antworten
    1985 Aufrufe
    23. Juli 2016, 13:52:58 von vstucke
               
    anything