Update auf 5.4.1 dann Fehler bei Produktexport

Nach dem Update von 5.3.7 auf 5.4.1 funktioniert mein Produktexport für Idealo nicht mehr. Hier die Meldung, die mir nicht wirklich weiterhilft. In welcher Tabelle soll die Spalte areld.ordernumber fehlen? Wo ist dies definiert? Das Feld ordernumber ist ja nicht weg und befindet sich in “s_articles_details.ordernumber” so weit ich prüfen konnte. 

Ups! Ein Fehler ist aufgetreten!

    
        Die nachfolgenden Hinweise sollten Ihnen weiterhelfen.
    

    SQLSTATE[42S22]: Column not found: 1054 Unknown column 'areld.ordernumber' in 'field list' in engine/Library/Zend/Db/Statement/Pdo.php on line 224

    Stack trace:
    
        "#0 engine/Library/Zend/Db/Statement.php(297): Zend_Db_Statement_Pdo->_execute(Array)
#1 engine/Library/Zend/Db/Adapter/Abstract.php(470): Zend_Db_Statement->execute(Array)
#2 engine/Library/Zend/Db/Adapter/Pdo/Abstract.php(232): Zend_Db_Adapter_Abstract->query('\n SE...', Array)
#3 engine/Library/Enlight/Components/Db/Adapter/Pdo/Mysql.php(96): Zend_Db_Adapter_Pdo_Abstract->query('\n SE...', Array)
#4 engine/Shopware/Core/sExport.php(1052): Enlight_Components_Db_Adapter_Pdo_Mysql->query('\n SE...')
#5 engine/Shopware/Controllers/Backend/Export.php(133): sExport->executeExport(Resource id #632)
#6 engine/Shopware/Controllers/Backend/Export.php(90): Shopware_Controllers_Backend_Export->generateExport('var/...')
#7 engine/Library/Enlight/Controller/Action.php(193): Shopware_Controllers_Backend_Export->indexAction()
#8 engine/Library/Enlight/Controller/Dispatcher/Default.php(549): Enlight_Controller_Action->dispatch('indexAction')
#9 engine/Library/Enlight/Controller/Front.php(222): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp))
#10 engine/Shopware/Kernel.php(215): Enlight_Controller_Front->dispatch()
#11 vendor/symfony/http-kernel/HttpCache/HttpCache.php(486): Shopware\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#12 engine/Shopware/Components/HttpCache/AppCache.php(268): Symfony\Component\HttpKernel\HttpCache\HttpCache->forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL)
#13 vendor/symfony/http-kernel/HttpCache/HttpCache.php(253): Shopware\Components\HttpCache\AppCache->forward(Object(Symfony\Component\HttpFoundation\Request), true)
#14 engine/Shopware/Components/HttpCache/AppCache.php(105): Symfony\Component\HttpKernel\HttpCache\HttpCache->pass(Object(Symfony\Component\HttpFoundation\Request), true)
#15 shopware.php(118): Shopware\Components\HttpCache\AppCache->handle(Object(Symfony\Component\HttpFoundation\Request))
#16 {main}"

 

Hier die Feed-Konfiguration

 

{strip}
{$sArticle.articleID|category:">"|escape|replace:"|":""}{#S#}
{$sArticle.supplier|replace:"|":""}{#S#}
{$sArticle.name|strip_tags|strip|trim|html_entity_decode|escape}{#S#}
{$sArticle.price|escape:"number"}{#S#}
{#S#}
{$sArticle.ean|escape}{#S#}
{#S#}
{#S#}
{$sArticle|@shippingcost:"cash":"de":"Deutsche Post Standard"|escape:"number"}{#S#}
{$sArticle|@shippingcost:"prepayment":"de":"Deutsche Post Standard"|escape:"number"}{#S#}
{$sArticle|@shippingcost:"debit":"de":"Deutsche Post Standard"|escape:"number"}{#S#}
{$sArticle.articleID|link:$sArticle.name|replace:"|":""}{#S#}
{if $sArticle.instock}2 Tage{elseif $sArticle.shippingtime}{$sArticle.shippingtime|escape} Tage{else}10 Tage{/if}{#S#}
{$sArticle.ordernumber|replace:"|":""}{#S#}
{$sArticle.image|image:2}{#S#}
{$sArticle.description_long|strip_tags|strip|trim|truncate:300:"...":true|escape}{#S#}
{if $sArticle.instock>5}5{else}{$sArticle.instock|escape}{/if}{#S#}
{/strip}{#L#}

 

Keine Anregungen?

 

Beim Paypal-Plugin wurden ebenfalls Felder gelöscht, kann das Plugin nicht neu installieren oder deinstallieren.

Table s_order_attributes has no column with name swag_paypal_express!

Okay für’s deinstallieren könnte man dieses (oder mehr) ja noch mal anlegen.

Eventuell greift dort ein Plugin ein. Du könntest testweise mal in der Datei engine/Shopware/Core/sExport.php, Zeile 1052 die Variable $sql ausgeben lassen um zu schauen wie die Abfrage an die DB genau aussieht. Im Shopware-Code selbst gibt es dort nämlich kein „areld“, vielleicht bekommst Du so aber einen Hinweis auf den Grund.

1 „Gefällt mir“

Vielen Dank hsoebbing,

nun habe ich ein SQL-Statement zum analysieren Es taucht dort als erstes das „areld“ auf. Am besten prüfe ich die Felder mal.

SELECT GROUP_CONCAT(areld.ordernumber) as relatedArticle, 
                a.id as `articleID`,
                a.name,
                a.description,
                a.description_long,
                a.main_detail_id,
                d.shippingtime,
                d.shippingfree,
                a.topseller,
                a.keywords,
                d.active as variantActive,
                d.minpurchase,
                d.purchasesteps,
                d.maxpurchase,
                d.purchaseunit,
                d.referenceunit,
                a.taxID,
                a.filtergroupID,
                a.supplierID,
                d.unitID,
                d.purchaseprice,
                IF(a.changetime!='0000-00-00 00:00:00',a.changetime,'') as `changed`,
                IF(a.datum!='0000-00-00',a.datum,'') as `added`,
                IF(d.releasedate!='0000-00-00',d.releasedate,'') as `releasedate`,
                a.active as active,

                d.id as `articledetailsID`,
                IF(v.ordernumber IS NOT NULL,v.ordernumber,d.ordernumber) as ordernumber,

                d.suppliernumber,
                d.ean,
                d.width,
                d.height,
                d.length,
                d.kind,
                IF(v.standard=1||d.kind=1,1,0) as standard,
                d.additionaltext,
                COALESCE(sai.impressions, 0) as impressions,
                d.sales,

                IF(v.active IS NOT NULL,IF(a.active=0,0,v.active),a.active) as active,
                IF(v.instock IS NOT NULL,v.instock,d.instock) as instock,
                (
                   SELECT AVG(av.points)
                   FROM s_articles_vote as av WHERE active=1
                   AND articleID=a.id
                ) as sVoteAverage,
                (
                   SELECT COUNT(*)
                   FROM s_articles_vote as av WHERE active=1
                   AND articleID=a.id
                ) as sVoteCount,
                d.stockmin,
                d.weight,
                d.position,

                at.attr1,at.attr2,at.attr3,at.attr4,at.attr5,at.attr6,at.attr7,at.attr8,at.attr9,at.attr10,at.attr11,at.attr12,at.attr13,at.attr14,at.attr15,at.attr16,at.attr17,at.attr18,at.attr19,at.attr20,at.usk18,

                s.name as supplier,
                u.unit,
                u.description as unit_description,
                t.tax,
                CONCAT(i.img, '.', i.extension) as image,

                a.configurator_set_id as configurator,

                ROUND(CAST(IFNULL(gp.price, p.price)*(100-IF(pd.discount,pd.discount,0)-0)/100*1 AS DECIMAL(10,3)),2) as netprice,
                IFNULL(gp.price, p.price)*(100-IF(pd.discount,pd.discount,0)-0)/100*1 as netprice_numeric,
                ROUND(CAST(IFNULL(gp.price, p.price)*(100+t.tax)/100*(100-IF(pd.discount,pd.discount,0)-0)/100*1 AS DECIMAL(10,3)),2) as price,
                IFNULL(gp.price, p.price)*(100+t.tax)/100*(100-IF(pd.discount,pd.discount,0)-0)/100*1 as price_numeric,
                pd.discount,
                ROUND(CAST(p.pseudoprice*1 AS DECIMAL(10,3)),2) as netpseudoprice,
                ROUND(CAST(p.pseudoprice*(100+t.tax)*1/100 AS DECIMAL(10,3)),2) as pseudoprice,
                IF(file IS NULL,0,1) as esd

                , ta.objectdata as article_translation, td.objectdata as detail_translation, IF(COUNT(d.ordernumber) <= 1, '', GROUP_CONCAT(DISTINCT(CONCAT('"', d.id, ':', REPLACE(d.ordernumber,'"','""'),'"')) SEPARATOR ';')) as group_ordernumber, IF(COUNT(d.additionaltext) <= 1, '', GROUP_CONCAT(DISTINCT(CONCAT('"', d.id, ':', REPLACE(d.additionaltext,'"','""'),'"')) SEPARATOR ';')) as group_additionaltext, IF(COUNT(p.price)<=1,'',GROUP_CONCAT(ROUND(CAST(p.price*(100-IF(pd.discount,pd.discount,0)-0)/100*1 AS DECIMAL(10,3)),2) SEPARATOR ';')) as group_pricenet, IF(COUNT(p.price)<=1,'',GROUP_CONCAT(ROUND(CAST(p.price*(100+t.tax-IF(pd.discount,pd.discount,0)-0)/100*1 AS DECIMAL(10,3)),2) SEPARATOR ';')) as group_price, IF(COUNT(d.active)<=1,'',GROUP_CONCAT(d.active SEPARATOR ';')) as group_active, IF(COUNT(d.instock)<=1,'',GROUP_CONCAT(d.instock SEPARATOR ';')) as group_instock

            FROM s_articles a
            INNER JOIN s_articles_details d
            ON d.articleID = a.id
            AND d.kind=1
            LEFT JOIN s_articles_attributes AS `at`
            ON d.id = `at`.articledetailsID

            LEFT JOIN `s_core_units` as `u`
            ON d.unitID = u.id
            LEFT JOIN `s_core_tax` as `t`
            ON a.taxID = t.id
            LEFT JOIN `s_articles_supplier` as `s`
            ON a.supplierID = s.id

            LEFT JOIN s_core_pricegroups_discounts pd
            ON a.pricegroupActive=1
            AND a.pricegroupID=groupID
            AND customergroupID = 1
            AND discountstart=1

            LEFT JOIN s_articles_esd e ON e.articledetailsID=d.id

            LEFT JOIN (
                SELECT articleID
                FROM
                    s_export_categories as ec,
                    s_articles_categories_ro as ac
                WHERE feedID=20
                AND ec.categoryID=ac.categoryID
                GROUP BY articleID
            ) AS bc
            ON bc.articleID=a.id

            LEFT JOIN s_export_suppliers AS bs
            ON (bs.supplierID=s.id AND bs.feedID=20)

            LEFT JOIN s_export_articles AS ba
            ON (ba.articleID=a.id AND ba.feedID=20)

            LEFT JOIN s_articles_prices AS p
            ON p.articledetailsID = d.id
            AND p.`from`=1
            AND p.pricegroup='EK'

            LEFT JOIN
            (
              SELECT articleId AS id, SUM(s.impressions) AS impressions
              FROM s_statistics_article_impression s
              GROUP BY articleId
            ) sai ON sai.id = a.id

            
                LEFT JOIN s_core_translations as ta
                ON ta.objectkey=a.id AND ta.objecttype='article' AND ta.objectlanguage=6

                LEFT JOIN s_core_translations as td
                ON td.objectkey=d.id AND td.objecttype='variant' AND td.objectlanguage=6
             
                INNER JOIN s_articles_categories_ro act
                    ON act.articleID = a.id
                    AND act.categoryID = 179
                INNER JOIN s_categories c
                    ON c.id = act.categoryID
                    AND c.active = 1
             
                LEFT JOIN s_articles_img as i
                ON i.articleID = a.id AND i.main=1 AND i.article_detail_id IS NULL
             
                JOIN (SELECT NULL as `articleID` , NULL as `valueID` , NULL as `attr1` , NULL as `attr2` , NULL as `attr3` , NULL as `attr4` , NULL as `attr5` , NULL as `attr6` , NULL as `attr7` , NULL as `attr8` , NULL as `attr9` , NULL as `attr10` , NULL as `standard` , NULL as `active` , NULL as `ordernumber` , NULL as `instock`, NULL as `minpurchase`) as v
             
                JOIN (SELECT NULL as articleID, NULL as valueID, NULL as groupkey, NULL as price, NULL as optionID) as gp
            

            WHERE bc.articleID IS NULL
            AND bs.supplierID IS NULL
            AND a.mode = 0
            AND d.kind != 3
            AND ba.articleID IS NULL
             AND (a.active = 1 AND (v.active=1 OR (v.active IS NULL AND d.active=1))) AND (v.instock>=2 OR (v.instock IS NULL AND d.instock>=2)) AND ROUND(CAST(IFNULL(gp.price,p.price)*(100+t.tax-IF(pd.discount IS NULL,0,pd.discount)-0)/100*1 AS DECIMAL(10,3)),2)>=20.00

            GROUP BY (a.id)

 

Hi,

wie Hendrik schon geschrieben hat, kenne auch ich die Anweisung mit  areld nicht. Das sind für mich ebenfalls nach einem Plugin aus, dass dort eingreift.
Hast du bestimmten Erweiterungen / Plugins die beim Artikel eingreifen oder spezielle Plugins, die Schnittstellen/Exporte bereitstellen?

Das sieht ja nicht nach einem generellen Problem in Shopware aus

VG
Sebastian

Ich habe alle Plugins neu installiert, bis auf das Papal Plugin dort fehlen Felder, das nehme ich mir gleich vor.

 

 

Ich glaube ich richtig wäre in der Abfrage: 

SELECT GROUP_CONCAT(d.ordernumber) und nicht “arld.ordernumber”

Ich bin jetzt nicht so fit in SQL aber woher weiß das MYSQL, dass “d” s_articles_details" ist gibt dort wirklich ein Mapping oder so etwas?

Das Papal Plugin läuft nun wieder, hier die Reihenfolge

  1. Plugin deaktiviert

  2. Fehlende Felder mit phpMyAdmin hinzugefügt

  3. deinstalliert

  4. installiert und konfiguriert

Schade das Shopware so was raushaut!

 

Nur der Feed geht nicht.

Ich habe keine besonderen Plugins nur das “Shopware Import/Export” von Shopware selbst. Vor dem Update lief alles wunderbar. Da kann man schon verzweifeln mit diesen Updates.  Blush

Ich kann dir jetzt nicht ganz folgen. Bzgl. Paypal sind mir da deine genannten Probleme auch gar nicht bekannt.

Das scheint bei dir ja was in der Umgebung nicht zu stimmen. Auch bzgl. des SQL-Statements muss man ja schauen, woher die kommt. Die kenne ich im Standard so auch nicht.

Also skaup, mit den Export-Feeds stehts nicht alleine da. Seit dem Update funktionieren diese bei mir genauso wenig.

Dies betrifft aber bei mir neben idealo auch ALLE anderen Exportfeeds.

Mit den gleichen Fehlerhinweisen. Lösung habe ich auch noch keine gefunden…

1 „Gefällt mir“

Das SQL Statement deutet ja darauf hin dass irgenwas im Zusammenhang mit verwandten Artikeln nicht stimmt ("… AS relatedArticle"). Ich finde aber weder im Code von Shopware selbst als auch in den Einstellungen nichts was auf solch eine Funktion im Export hindeutet.

Hallo Herr Klöpper,

der Paypal-Plugin-Fehler wird nur bei Neuinstallation oder beim entfernen des Plugins sichtbar. Das wird sicherlich noch bei Ihnen auftauchen.

Das SQL-Statement kommt doch von /srv/shops/engine/Shopware/Core/. Das sieht für mich nicht nach einen Plugin aus. Dann stocher ich mal weiter im Nebel.

Plugins haben die Möglichkeit Funktionalität überall in Shopware hinzuzufügen oder zu ändern, so auch beim Export. Die Methode die das SQL erzeugt könnte zB. von einem Plugin das verwandte Artikel mit exportieren soll angepasst worden sein so dass zusätzliche Felder im SQL-Statement vorhanden sind.

Möglich wäre auch, dass du eine eigene Variable definiert hast, z.B. für Versandkosten in den Grundeinstellungen (eigene Berechnung).

Weitere Möglichkeit könnte sein, dass beim Produktexport in den weiteren Einstellungen Filter oder eigenen Bedingungen gesetzt wurden.

Da würde ich empfehlen nochmal nachzusehen

Okay, danke. Als Workaround habe ich in der sExport.php in der Zeile 1051 folgendes integriert:

$sql = str_replace('areld.ordernumber', 'd.ordernumber', $sql);

Es läuft so erst einmal.

Und gefunden. Ja da ist eine Anpassung in den Versandkostenmodul, aber warum dieses dort in der Weise herangezogen wird verstehe ich nicht.

MAX(a.topseller) as has_topseller, MAX(at.attr3) as has_comment, MAX(b.esdarticle) as has_esd, MAX(at.usk18 = '1') as alterssichtpruefung

Hier stört wahrscheinlich irgendetwas .

Das Check24 Plugin ist Schuld, Zeile 127 in der Bootstrap auskommentieren für den Übergang, habe unseren Betreuer schon informiert.

 

Gruß

 

Marco

Hier muss einfach nur das Plugin geupdatet werden.

Die aktuelle Version ist immer unter https://www.sensus-media.de/check24-connect/ verfügbar.

Die Version 5.40 von CHECK24 Connect stellt die kompatibilität zu Shopware 5.4.* her.

Das Plugin darf leider nicht in den Community Store.