pierre-schmitzpierre-schmitz MemberComments: 257 Received thanks: 44 Member since: September 2015 edited December 2016

Hallo zusammen,

ich habe über ein Importprofil (Plugin Import/Export Advanced) eine simple Anbindung an unsere Warenwirtschaft realisiert. Meine Wawi erzeugt eine CSV-Datei mit Lagerbeständen und Angabe zur Lieferzeit in Tagen. Das Feld "Lieferzeit in Tagen" wird in der Wawi nur bei Bedarf gefüllt, falls der Wert vom normalen Wert abweicht. Wenn der Grund für die Abweichung wegfällt, wird diese Angabe wieder aus der Wawi entfernt und in der CSV-Datei ist kein Wert mehr enthalten (die Spalte/das Feld bei dem jeweiligen Datensatz ist leer).

Jetzt ist es so, dass beim Import in Shopware der vorher importierte Wert nicht herausgelöscht wird, wenn man eine leere Spalte übermittelt, es steht weiterhin der Wert aus dem vorherigen Import darin. Gerade beim Feld "Lieferzeit in Tagen" ist es aber so, dass der Wert auf jeden Fall herausgelöscht werden muss, damit die Standardfunktionalität wieder greift.

Was kann ich tun? Die CSV-Datei aus meiner Wawi kann leider nicht angepasst werden. Gibt es vielleicht die Möglichkeit, das Importprofil entsprechend anzupassen?

Grüße
Pierre
 

Answers

  • Simon BäumerSimon Bäumer MemberComments: 126 Received thanks: 34 Member since: August 2014

    Hey pierre-schmitz,

    ja gibt es. Dazu kannst du die "Konvertierungs"-Konfiguration an deinem Profil einstellen.
    Hier findest du ein Beispiel:
    http://community.shopware.com/Import/Export-Grundmodul_detail_1769.html#Konvertierungen

    Viele Grüße,
    Simon

  • pierre-schmitzpierre-schmitz MemberComments: 257 Received thanks: 44 edited December 2016 Member since: September 2015

    Hallo Simon,

    vielen Dank! Kannst du vielleicht noch etwas genauer erklären, was man hier machen muss? Die Anleitung hatte ich mir auch durchgelesen, bin aber nicht wirklich schlau daraus geworden. Der Konvertierungsmechanismus leuchtet mir schon ein, nur wie wandelt man nichts in nichts um und sorgt dafür, dass der Importer das Feld auch wirklich überschreibt anstatt es zu ignorieren?

    Grüße

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 8199 Received thanks: 2423 edited December 2016 Member since: September 2013

    Aktuell kann das Modul dort keine leeren Werte schreiben. Du könntest versuchen über die Import Conversion den Leerstring abzufangen und dann bspw ein Leerzeichen setzen (oder ein anderes x-beliebiges Zeichen). Dann müsstest du noch die Anzeige anpassen, dass bei deinem definierten Zeichen die Ausgabe nicht angepasst wird.

    Sowas klappt als Conversion: {if $shippingTime == ""}leer{/if}

    Hier müsstest du dann die Abrfage auf der Detailseite anpassen: https://github.com/shopware/shopware/blob/27507fe404cede0b75ad561fc081ce4fc9554569/themes/Frontend/Bare/frontend/plugins/index/delivery_informations.tpl#L57

  • Simon BäumerSimon Bäumer MemberComments: 126 Received thanks: 34 Member since: August 2014

    Hey pierre-schmitz,

    da hatte ich wohl nicht ganz korrekt gelesen. Import/Export löscht keine Daten aus deiner Datenbank. Leere Felder werden ignoriert.

    Viele Grüße,
    Simon

  • pierre-schmitzpierre-schmitz MemberComments: 257 Received thanks: 44 edited December 2016 Member since: September 2015

    Hallo,

    okay, danke für die Informationen, dann ist es also so, dass es aktuell nicht möglich ist, die beiden Datenbestände ohne Verrenkungen syncron zu halten? Wieso?

    Mit den Importprofilen steht doch eine super Möglichkeit zur Verfügung, selektiv nur einzelne Felder zu importieren und selbst im Standard-Artikelprofil ist die Funktionalität so, dass man nur die Spalten übermitteln muss, die man updaten will, alles andere wird doch sowieso ignoriert. Diese beiden Funktionen sollten doch ausreichen, um zu verhindern, dass man aus Versehen etwas aus der Datenbank herauslöscht.

    Manchmal müssen aber eben auch Daten gelöscht werden, um Datenbestände synchron zu halten. Ich kann mir gar nicht erklären, dass bisher noch niemand auf die Idee gekommen ist, das machen zu wollen.

    Wie ist eure Einschätzung? Ist damit zu rechnen, dass die Funktion demnächst implementiert wird? Ich könnte auch mit einem einfachen Schalter im CLI-Befehl ("force-update" oder sowas) leben; ich stoße den Import über einen Konsolenbefehl mit Cron an.

    Grüße

     

  • pierre-schmitzpierre-schmitz MemberComments: 257 Received thanks: 44 Member since: September 2015

    Hallo,

    ich war mal so frei, für das Problem einen Eintrag im Issuetracker anzulegen:

    https://issues.shopware.com/issues/PT-7270

    Grüße
    Pierre

  • BrombeereBrombeere MemberComments: 44 Received thanks: 2 edited April 2018 Member since: May 2015

    *PUSH*

    Wäre für uns auch wichtig!

    Voten: https://issues.shopware.com/issues/PT-7270

  • pierre-schmitzpierre-schmitz MemberComments: 257 Received thanks: 44 edited April 2018 Member since: September 2015

    Da kannste warten, bis du schwarz wirst.

    Ich habe meinem Script gesagt, dass ein # importiert werden soll, wenn das Feld in der Wawi leer ist. Diesen Wert frage ich in der Templatelogik ensprechend ab. Für meine Anforderung reicht es, komplexere Sachen werden mit diesem Workaround wahrscheinlich nicht funktionieren.

     

    Grüße
    Pierre

     

  • Compusoft GmbHCompusoft GmbH MemberComments: 306 Received thanks: 20 edited April 2018 Member since: June 2010

    Hallo zusammen,

    genau für solche Fällen wenn es eine WaWi OHNE direkte Schnittstelle zu Shopware als Grundlage gibt haben wir SHOPLUKASFLEX entwickelt vor ca. 5 Jahren.

    Die WaWi exportiert die Daten in ene XLS, CSV, txt oder ähnliche Datei und SLF nimmt sich diese und pfelgt die Daten in SHOPWARE. Wenn die Daten NICHT mehr in der Datei sind, werden die Artikel in Shiopware gesperrt/oder gelöscht. Also nicht nur ein reiner Import sondern ein Abgleich.

    JEDES sinnvolle Feld kann individuell bespielt werden. .

     

    Evtl. wäre genau das die Lösung für diejenigen die auf eine Wawi ohne Schnittstelle setzen (müssen) aber nicht auf die Pflege des Shops verzichten wollen.

     

  • BrombeereBrombeere MemberComments: 44 Received thanks: 2 Member since: May 2015

    Da kannste warten, bis du schwarz wirst.

    Ich habe meinem Script gesagt, dass ein # importiert werden soll, wenn das Feld in der Wawi leer ist. Diesen Wert frage ich in der Templatelogik ensprechend ab. Für meine Anforderung reicht es, komplexere Sachen werden mit diesem Workaround wahrscheinlich nicht funktionieren.

     

    Grüße
    Pierre

     

     

    Das Gefühl habe ich leider auch, es gibt einige Details bei denen Shopware dringend Handlungsbedarf hat.

    Kannst du mir sagen wie der #-Wert beim Importieren abgefangen wird und durch einen leeren Wert ersetzt wird?

  • pierre-schmitzpierre-schmitz MemberComments: 257 Received thanks: 44 edited May 2018 Member since: September 2015

    Hallo Brombeere,

    das kann man leider nicht allgemein beantworten, das kommt auf den Wert und seine Funktion im Template an. Bei mir ging es konkret um den Wert shippingtime. Ich habe mir dafür ein Freifeld in meiner Wawi ausgesucht und meine Wawi erzeugt - neben anderen Werten, die ich von der Wawi nach Shopware übertragen will, etwa dem Lagerbestand - regelmäßig eine von Shopware importierbare Liste im CSV-Format. Beim Erzeugen der Liste wird berückschtigt, dass das Feld nicht leer sein darf (es könnte ja aus der Wawi ein Wert gelöscht worden sein, der bereits zu Shopware übertragen wurde), daher habe ich es in der Programmierung so gemacht, dass hier bereits ein # beim Feld shippingtime in die CSV-Datei hineingeschrieben wird.

    Der Wert shippingtime wird im Frontend benutzt, um die Lieferzeitangabe darzustellen, wenn der Bestand kleiner gleich Null ist (gelbe Ampel). Die Logik der Lieferbarkeitsanzeige ist komplett im Template hinterlegt. Da ich hier die Funktionalität ohnehin erweitern wollte, habe ich das Verhalten einfach so angepasst, dass das Vorkommen eines # in der Datenbank keine unsinnigen Anzeigen erzeugt (das ist an der Stelle mit "abfangen" gemeint). Das ist aber keine allgemeingültige Aussage!

    Konkret war die If-Abfrage so anzupassen, dass der Text der Gelben Ampel nicht dann gezeigt werden soll, wenn das Feld nicht leer ist sondern wenn nicht ein # drinsteht (was in dem Fall bedeutet, dass etwas anderes drin steht, leere Felder gibt's ja nicht mehr). Extrem vereinfacht steht da sowas wie:

    {if Bestand größer Null}
    Grüne Ampel
    {elseif $sArticle.shippingtime != '#'}
    Gelbe Ampel
    {else}
    Rote Ampel
    {/if}
    

    So simpel funktioniert es bei mir auch deshalb, weil ich weniger als 100 Produkte im Shop hab und stündlich einen performancemäßig völlig unkritischen Komplettimport der zu übertragenen Wawi-Daten machen kann. Ich klopp die Raute jede Stunde in jedes Produkt rein, egal, ob sie schon drinsteht oder nicht. Bei Shops mit tausenden Artikeln muss man sich natürlich etwas anderes einfallen lassen. Bei mir würde es mehr Performance kosten, abzufragen was ich schon übertragen hab und was noch nicht, statt einfach alles zu übertragen.

  • BrombeereBrombeere MemberComments: 44 Received thanks: 2 Member since: May 2015

    @pierre-schmitz‍ Danke für die schnelle und ausführliche Rückmeldung. Leider habe ich gehofft das du hast einen Hack im Plugin verwendet hast. Bei mir geht es um Angaben die nur im Backend vorhanden sind (Freitextfelder).

     

    @Moritz Naczenski‍ Wo muss die Änderung im Plugincode vorgenommen werden damit ein leerer Wert den entsprechenden Datensatz überschreibt? Alternativ wäre auch ein Lösung mit einem Platzhalter möglich. Zum Beispiel: Der Begriff/Platzhalter NULL in der CSV-Datei sorgt für die Überschreibung/Löschung.

    Ist es diese Datei?
    /engine/Shopware/Plugins/Community/Backend/SwagImportExport/Components/SwagImportExport/Transformers/ValuesTransformer.php

  • AndyBAndyB MemberComments: 80 Received thanks: 6 Member since: March 2016

    *PUSH*

    Wäre für uns auch wichtig!

    Voten: https://issues.shopware.com/issues/PT-7270

  • Sancho_PanzaSancho_Panza MemberComments: 14 Received thanks: 0 Member since: May 2018

    Moin,

    wir haben hier ähnliche Probleme.
    Wenn man beim Import, bzw. beim Update der Daten Werte löschen will, d.h. den Inhalt einer Zelle in der csv-Datei entfernt, wird diese Änderung beim Import nicht beachtet.
    Der Vorhandene Wert in der Datenbank wird leider nicht entfernt.

    Über eine Behebung des Problems würden wir uns sehr freuen.

    Danke

Sign In or Register to comment.