Se sei in questa pagina è probabile che tu abbia già provato ad usare il bottone "ESPORTA" di Prestashop, quello nella lista prodotti. Purtroppo avrai notato che il file CSV risultato non contiene le varianti dei prodotti (cioè le combinazioni), ed è molto scarno anche di altre informazioni (la marca, gli sconti, le descrizioni). Forse va bene per un riepilogo veloce o per i negozi che hanno prodotti molto semplici, ma non è sufficiente se abbiamo bisogno di sapere le quantità di ogni singola combinazione. Per ottenere questo dobbiamo usare la funzione Sql Manager, come illustrato nell'immagine seguente.
Bisogna aggiungere una nuova istruzione SQL con il bottone "Aggiungi Nuova Query SQL", inserire un nome a piacere nel primo campo, e incollare il codice seguente come query SQL.
SELECT p.active 'Attivo', m.name AS 'Marca', p.id_product AS 'ID', p.reference AS 'Rif.', p.ean13 AS 'EAN13', pl.name AS 'Nome', GROUP_CONCAT(DISTINCT(al.name) SEPARATOR ", ") AS 'Combinazione', s.quantity AS 'Quantità', p.price AS 'Prezzo', IF(pr.reduction_type='amount',pr.reduction,'') AS 'Sconto valuta', IF(pr.reduction_type='percentage',pr.reduction,'') AS 'Sconto percento', pr.from AS 'Sconto da (yyyy-mm-dd)', pr.to AS 'Sconto a (yyyy-mm-dd)', p.weight AS 'Peso', GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ", ") AS 'Categorie', pl.description_short AS 'Desc. breve', pl.description AS 'Desc. lunga', GROUP_CONCAT( DISTINCT( pts.name) SEPARATOR ", " ) AS 'Tags' FROM ps_product p LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product) LEFT JOIN ps_manufacturer m ON (p.id_manufacturer = m.id_manufacturer) LEFT JOIN ps_category_product cp ON (p.id_product = cp.id_product) LEFT JOIN ps_category_lang cl ON (cp.id_category = cl.id_category) LEFT JOIN ps_category c ON (cp.id_category = c.id_category) LEFT JOIN ps_product_tag pt ON (p.id_product = pt.id_product) LEFT JOIN ps_tag pts ON (pt.id_tag = pts.id_tag) LEFT JOIN ps_product_attribute pa ON (p.id_product = pa.id_product) LEFT JOIN ps_specific_price pr ON (p.id_product = pr.id_product) LEFT JOIN ps_stock_available s ON (p.id_product = s.id_product AND pa.id_product_attribute = s.id_product_attribute) LEFT JOIN ps_product_attribute_combination pac ON (pac.id_product_attribute = pa.id_product_attribute) LEFT JOIN ps_attribute_lang al ON (al.id_attribute = pac.id_attribute) WHERE pl.id_lang = 1 AND cl.id_lang = 1 AND p.id_shop_default = 1 AND c.id_shop_default = 1 GROUP BY p.id_product, pac.id_product_attribute
Fatto questo avrai una nuova funzionalità in Prestashop, puoi esportare il file CSV completo (oppure puoi vedere direttamente una tabella con i dati selezionando "vedi" invece di "esporta").
La tabella che risulta ha le seguenti colonne: stato (i prodotti attivi hanno 1), marca (il produttore), ID, codice riferimento, codice EAN, nome, combinazione, quantità, prezzo, sconto in valuta, sconto percentuale, sconto dal (yyyy-mm-dd), sconto al (yyyy-mm-dd), peso, categorie, descrizione breve, descrizione lunga, tags. Nel file CSV le descrizioni sono già ripulite dai tag html.
Con piccole modifiche alla query è possibile ottenere altri dati.
Per qualche motivo nelle versioni più recenti di Prestashop PHPSQLparser da sempre presenza di errore anche se è un falso positivo (le query funzionano in PHPMyAdmin). Ma non possono portare la libreria indietro di versione, viene usata diffusamente in Prestashop. Hanno messo il bug in milestone per Prestashop 1.7.6.0 (che sarà rilasciata 25/02/2019), mentre per PS 1.6 non so cosa faranno: https://github.com/PrestaShop/PrestaShop/issues/10908
Il workaround sarebbe non validare le query, anche se è sconsigliato. È a tuo rischio e pericolo. Credo sia da modificare la funzione validateSql in classes/RequestSql.php togliendo tutta la parte dei controlli, e lasciando sempre return true, eventualmente, se funziona, poi ripristina ogni signolo controllo fino a scoprire quale da fastidio: https://github.com/PrestaShop/PrestaShop/blob/develop/classes/RequestSql.php#L159
Non ho provato ma dovrebbe funzionare, i miei Prestashop sono di una versione meno recente e li sto lasciando fermi.
Commento di Pasquale
Sabato 24 Giugno 2017Ciao ragazzi, scusatemi, per quale motivo su alcuni siti mi esporta tutti i prodotti e su altri soltanto il primo? Grazie!
Risposta di Marco
E' difficile rispondere con poche informazioni. Potrebbe esserci un errore di interpretazione SQL (versione diversa di MySql nel server), oppure qualcosa non va nei dati esportati (descrizioni troppo lunghe, caratteri speciali, apici che rompono la stringa). Indagherei nel log errori.
Potrebbe anche essere un problema di memoria o tempo di esecuzione script, dovrebbe sempre apparire in log errori, se ciò non fosse sentirei l'hosting.
Commento di Francesca
Lunedì 27 Novembre 2017Ciao ragazzi.
ho trovato utilissimo questo articolo che mi ha facilitato molto determinate attività.
Ma se avessi bisogno di esportare tutte queste info di un'unica categoria prodotto?
In che punto e cosa va inserito nello script?
Grazie!
Risposta di Marco
Ciao Francesca, devi aggiungere una istruzione WHERE. Quindi alla fine della lista di condizioni aggiungi:
AND cp.id_category = 12
Dove "12" è un ID ipotetico che mi sono inventato, devi mettere quello della categoria che stai filtrando. Non ho testato ma dovrebbe funzionare.
Commento di mirko
Martedì 16 Gennaio 2018Ciao ragazzi, intanto faccio i complimenti per l'utilissimo articolo. Mi chiedo se c'è la possibilità di "amplificare" anche i dati di esportazione degli ordini. Il base è molto scarno, vorrei vedere per ogni ordine anche l'articolo acquistato.
Attualmente i campi sono questi:
Id Riferimento Nuovo cliente Consegna Cliente Azienda Totale Pagamento Stato Data
Grazie a tutti per le risposte
Risposta di Marco
Avevo fatto una SQL per esportare gli ordini in dettaglio, cioè con i dati dei prodotti acquistati, nel mio caso ogni prodotto crea una riga, quindi per gli ordini con vari prodotti ci saranno varie righe con ID ordine identico, sta a te poi filtrare il foglio di calcolo raggruppando per ID ordine e fare somme. I campi esportati sono:
ID ordine, Rif. ordine, Stato, Data ordine, prodotto, Cod. rif. (del prodotto), Qt., In stock, Prezzo, Pagamento, Cliente (nome e cognome), Spedizione (indirizzo), Fatturazione (indirizzo), Email, Gruppo cliente.
Non ho un articolo in blog, il codice MySql è questo.
Commento di Emilio
Mercoledì 24 Gennaio 2018E se dovessi ricavare anche il link alla pagina del prodotto, il codice ean e il link alla immagine?
Se aggiungessi queste altre tre righe sarebbe perfetto per esportare un file da editare e dare in pasto a google merchant centre.
Please help!
Risposta di Marco
Puoi aggiungere il codice EAN mettendo nel SELECT un'altra variabile con "p.ean13 AS 'EAN13'," ad esempio dopo "p.reference AS 'Rif.',".
Per quanto riguarda invece l'URL del prodotto dipende molto da come stai facendo il friendly URL nelle impostazioni SEO, se hai tutto default (cioè con ID prodotto, trattino, alias con i trattini) postresti fare aggiungendo nel SELECT un CONCAT come il seguente, devi correggere le stringhe statiche con il path del tuo negozio.
CONCAT('https://tuosito.com/', p.id_product,'-', pl.link_rewrite, '.html') AS 'Prod. URL',
Mentre l'immagine è più complessa, serve aggiungere delle LEFT JOIN per ottenere altre informazioni e poi fare un CONCAT, non ho provato (non so nemmeno se si può fare tutto solo tramite query al DB, ad esempio se imposti supporto per PNG e JPG in base all'immagine originale, è sbagliato forzare l'estensione a ".jpg"), può aiutarti vedere questo esempio ma sarà da modificare: https://www.prestashop.com/forums/topic/554913-sql-query-for-export-all-images-url/
Commento di Giuseppe Errico
Martedì 30 Gennaio 2018Ciao! Cercando in rete la soluzione al mio problema sono capitato in questa tua guida. La mia necessità è creare un csv del mio catalogo suddiviso nei seguenti campi:
categoria
reference
nome
ean
descrizione breve
fornitore
url_immagine (basta una)
prezzo
quantità
Potresti aiutarmi a scrivere la query in modo corretto per arrivare a questo risultato? Grazie
Risposta di Marco
Puoi cambiare a piacere l'ordine dei campi del SELECT.
Per l'immagine, come ho risposto in precedenza, la query si complica e non sono sicuro sia possibile ricavare un path corretto senza usare la logica contenuta nelle php che gestiscono e manipolano le immagini. Per gli altri campi, si può fare così:
Per quanto riguarda i fornitori (supplier) ho messo due campi (id e riferimento), ma se ti serve la descrzione in lingua bisogna usare un altro campo:
sl.description AS 'Fornitore',
Però, in questo caso bisogna aggiungere anche una join più in basso:
Non l'ho provata, è sempre in teoria, fai una prova.
Commento di Giuseppe Errico
Lunedì 12 Febbraio 2018Ciao , ho seguito la tua guida e creato l'istruzione SQL. Il problema è che quando avvio l'esportazione mi genera un file CSV contenente un solo prodotto (in catalogo ce ne sono 80mila).
Copio la query che ho inserito:
SELECT p.active 'Attivo', m.name AS 'Marca', p.id_product AS 'ID', p.reference AS 'Rif.', p.ean13 AS 'EAN13', pl.name AS 'Nome', GROUP_CONCAT(DISTINCT(al.name) SEPARATOR ", ") AS 'Combinazione', s.quantity AS 'Quantità', p.price AS 'Prezzo', IF(pr.reduction_type='amount',pr.reduction,'') AS 'Sconto valuta', IF(pr.reduction_type='percentage',pr.reduction,'') AS 'Sconto percento', pr.from AS 'Sconto da (yyyy-mm-dd)', pr.to AS 'Sconto a (yyyy-mm-dd)', GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") AS 'Categorie'
FROM ps_product p
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product)
LEFT JOIN ps_manufacturer m ON (p.id_manufacturer = m.id_manufacturer)
LEFT JOIN ps_category_product cp ON (p.id_product = cp.id_product)
LEFT JOIN ps_category_lang cl ON (cp.id_category = cl.id_category)
LEFT JOIN ps_category c ON (cp.id_category = c.id_category)
LEFT JOIN ps_product_tag pt ON (p.id_product = pt.id_product)
LEFT JOIN ps_product_attribute pa ON (p.id_product = pa.id_product)
LEFT JOIN ps_specific_price pr ON (p.id_product = pr.id_product)
LEFT JOIN ps_stock_available s ON (p.id_product = s.id_product AND pa.id_product_attribute = s.id_product_attribute)
LEFT JOIN ps_product_attribute_combination pac ON (pac.id_product_attribute = pa.id_product_attribute)
LEFT JOIN ps_attribute_lang al ON (al.id_attribute = pac.id_attribute)
WHERE pl.id_lang = 1
AND cl.id_lang = 1
AND p.id_shop_default = 1
AND c.id_shop_default = 1
GROUP BY pac.id_product_attribute
Risposta di Marco
Ciao Giuseppe, non sei il primo ad averlo chiesto. Mi viene un sospetto, forse nelle vostre installazioni gli ID nella condizione "WHERE" non corrispondono a 1, magari erano installazioni in inglese a cui è stato aggiunto l'italiano dopo. Oppure è l'ID shop ad essere errato.
WHERE pl.id_lang = 1
AND cl.id_lang = 1
AND p.id_shop_default = 1
AND c.id_shop_default = 1
Prova ad aprire il database con PHPMyAdmin, eseguirei la query li dentro. Se ottieni lo stesso risultato allora è confermato che non dipende da Prestashop, invece è un problema di query, dovresti verificare nelle tabelle che valori di ID hai, ed eventualmente correggerli (intendo nella query, non nel tuo DB, non toccare gli ID che trovi). Quando la query è a posto la puoi riportarla in Prestashop.
PS: ti confermo che la tua query, nel mio caso funziona, restituisce molti record.
PS2: ho notato che non hai usato il link al prodotto, e neanche i supplier, forse quando dicevi "fornitori" intendevi i produttori? In quel caso il campo è un altro: ps_manufacturer non ps_supplier.
Commento di Dario
Mercoledì 04 Aprile 2018La query riportata nell'esempio è un ottimo punto di partenza, ma non completa purtroppo.
Infatti non esporta il prezzo della combinazione, se quest'ultimo (il prezzo) viene inserito direttamente nella combinazione e non nella scheda prezzi. In questo caso come è possibile completare la query?? Grazie in anticipo!
Commento di Selene
Giovedì 16 Agosto 2018Ciao, scusami per il disturbo ma ho bisogno di un tuo piccolo aiuto. Il codice che ai presentato va l’inserito direttamente in SQL Manager e poi in Query SQL al posto di quello che è già presente? Bisogna aggiungere qualche altra stringa o basta fare copia incolla? Grazie mille per il tuo aiuto, purtroppo non sono molto esperta
Risposta di Marco
Ciao Selene, non so perché vedi del codice all'interno del campo "Query SQL", in realtà dovrebbe essere vuoto. Credo che tu stia modificando una query messa da qualcuno in precedenza. Tu puoi in ogni caso farne una nuova, di query ne aggiungi fin che vuoi: pigia il bottone a forma di [+] per aggiungere una nuova query (i due campi dovrebbero essere vuoti), e poi incolla il mio codice dentro Query SQL. Puoi anche modificarlo se ti serve un risultato differente, ma devi imparare come funziona. Ulteriori istruzioni qui: http://doc.prestashop.com/display/PS16/SQL+Manager
Commento di Alessio
Mercoledì 22 Agosto 2018Buonasera e grazie per tutte le info.
C’è possibilità di esportare anche tutti gli attibbuti e tutte le caratteristiche relativi a ogni singolo prodotto.
Grazie mille per l’aiuto
Risposta di Marco
Ciao Alessio, per gli attributi hai le combinazioni, quindi questa query è sufficiente. Mentre per le caratteristiche credo serva un'altra query. Per fare cose più complicate, con più query e con elaborazioni (tipo il path delle immagini) bisogna utilizzare del codice PHP, prova ad usare Prestools Suite che è uno script gratuito presente nel forum. È molto spartano ma potente, tra le altre cose permette di filtrare i prodotti anche con le caratteristiche (features), poi hai l'esportazione CSV.
Commento di francesco
Lunedì 10 Settembre 2018io vorrei ricostruire il file per importare i prodotti , partendo da quello che ho già sul catalogo prodotti del sito, e quindi con tutti i campi della tabella prodotti sql, (compresi attivi e non attivi, tutti , si può avere la query grazie?
Risposta di Marco
Per fare questo prova a usare un modulo, ce n'è uno free nel forum: https://www.prestashop.com/forums/topic/37900-free-module-products-export-module-v261-updated-05042018/
Commento di EMANUELE
Lunedì 08 Ottobre 2018quando inserisco la query, mi da il seguente errore:
Errore "checkedForm" indefinito
Risposta di Marco
Non mi risulta un errore del genere, un post in francese dice che si tratta della mancanza di AS nei parametri del SELECT, forse lo hai rimosso modificando la query.
Commento di Selene
Venerdì 19 Ottobre 2018Ciao Marco, innanzitutto ti ringrazio per la tua precedente risposta. Ho provato a creare una nuova query che mi servirà poi per esportare un file CSV da inserire su Facebook. Ho inserito la stringa che hai creato peró quando salvo mi da errore “La tabella "ps_product" non esiste“, mi sai per caso dire come mai? Poi il nome della Query posso inserire tranquillamente anche solo la parola “Facebook”? Grazie mille ☺️
Risposta di Marco
Ciao Selene, se ti da quell'errore significa che il tuo database ha probabilmente un diverso prefisso per le tabelle, infatti "ps_" è default, ma niente vieta che all'atto dell'installazione sia stato usato qualcos'altro (lo stesso vale per Wordpress e altri CMS). Per verificare il nome corretto devi aprire il database attraverso un tool di amministrazione, te lo fornisce l'hosting, ad esempio PHPMyAdmin.
In Prestashop puoi nominare le tue query come preferisci, anche "Facebook".
Commento di giacomo
Sabato 24 Novembre 2018ciao, ottima query ma nel mio caso la descrizione e la descrizione breve rimangono vuoti, su presta 1.6.1.0
Risposta di Marco
Non c'è motivo per cui siano vuote, forse i prodotti non hanno descrizioni. Controlla in database se la tabella ps_product_lang ha valori nei campi descritpion e description_short.
Commento di Fabio
Mercoledì 12 Dicembre 2018Anche a me da l'errore Errore "checkedForm" indefinito. su phpadmin invece esuguo la tua query è funziona.
gli "AS" ci sono tutti.
che può essere?
Risposta di Marco
Sembra sia dovuto a un problema con il diverso modo di controllare gli errori di PHPSQLparser, per qualche motivo ora da sempre presenza di errore anche se è un falso positivo. Ma non possono portarlo indietro di versione, viene usato diffusamente in Prestashop, e hanno messo il bug in milestone per Prestashop 1.7.6.0 (25/02/2019), mentre per PS 1.6 non so cosa faranno: https://github.com/PrestaShop/PrestaShop/issues/10908
Il workaround sarebbe non validare le query, anche se questo è sconsigliato, bisogna sapere cosa stai facendo, ed è a tuo rischio e pericolo. Credo sia da modificare la funzione validateSql in classes/RequestSql.php togliendo tutta la parte dei controlli, e lasciando sempre return true: https://github.com/PrestaShop/PrestaShop/blob/develop/classes/RequestSql.php#L159
Non ho provato, i miei Prestashop sono di una versione funzionante e li sto lasciando così.
Commento di Vincenzo
Martedì 15 Gennaio 2019Ciao ho un grosso problema, per me, che non riesco a risolvere..
Ho caricato articoli con diverse combinazioni, ad ogni combinazione c'è inserito un codice EAN e riferimento (che è uguale).
La mia esigenza è di aggiornare solamente le quantità di queste combinazioni usando una tabella con solo due colonne ossia riferimento/ean e quantità.
Se carico il file come prodotto non mi trova il codice della combinazione e mi crea un nuovo prodotto, se lo carico come combinazione non succede nulla.
Purtroppo non ho conoscenze di programmazione.
Per favore aiutatemi è davvero urgente. Grazie in anticipo!
Risposta di Marco
Per il tuo problema prova a seguire bene le istruzioni:
Importi seguendo queste istruzioni: https://support.prestashop.com/hc/en-us/articles/115000637291-8-5-Importing-combinations
Cioè va fatta una tabella con tutte le combinazioni così:
ID PRODOTTO / REFERENCE COMBINAZIONE / ATTRIBUTO / VALORE / QUANTITÀ / REFERENCE PRODOTTO
1020 / REFCOMBI_01 / Taglia:select:2; Colore:color:1 / XL:1; red:1 / 10 / REFPROD
1020 / REFCOMBI_02 / Taglia:select:1; Colore:color:1 / L:1; black:1 / 7 / REFPROD
Qui spiegano ancora sul fatto di usare i due punti: https://www.prestashop.com/forums/topic/195033-product-combination-csv-import/
Altrimenti usa un modulo che possa fare al caso tuo, ad esempio: https://addons.prestashop.com/it/data-import-export/3141-import-and-syncronize-products-quantities.html
Commento di Luca
Giovedì 08 Agosto 2019In Prestashop 1.7.6 il codice sopra riportato non funziona proprio: come deve essere modificato?
Risposta di Marco
Il codice è una query SQL, dovrebbe funzionare in modo indipendente dalla versione Prestashop. Se non dovesse funzionare potrebbe dipendere da cambiamenti fatti dagli sviluppatori Prestashop ai nomi di tabelle e/o campi. Bisognerebbe scoprire il tipo di errore che da Prestashop. Se non si vedono errori, bisogna provare la query direttamente con PHPMyAdmin.
Commento di Francesco
Giovedì 02 Gennaio 2020Buongiorno, vorrei creare una query per diminuire di prezzo tutte le combinazioni di un singolo prodotto come dovrei procedere?
Grazie.
Risposta di Marco
Per effettuare modifiche di massa consiglio di utilizzare moduli appositi: link addons Prestashop.
Io ho installato su PS 1.7 questo modulo di Amministrazione Veloce. Fa risparmiare molto tempo nelle modifiche ripetitive ai prodotti esistenti, o per assengare foto alle combinazioni ecc... tra le altre cose permette una modifica di massa ai prezzi.
Se usi PS 1.6, purtroppo il filtro di ricerca non funziona, e non so quanto bene funzioni il resto, in alternativa puoi usare un tool gratuito nel forum: Prestools. Molto spartano ma efficace.
Commento di Francesco
Giovedì 09 Gennaio 2020Ciao, uso prestashop 1.7.5 il "prestools" funziona su questa versione?
Inoltre potresti aiutarmi a creare una query che faccia vedere l'id del prodotto tutte le sue combinazioni con i relativi prezzi?
Grazie per l'aiuto
Risposta di Marco
Si, Prestools funziona. Non si tratta di un modulo, ma di uno script PHP che funziona in parallelo e lavora direttamente in database. Attenzione a come lo si usa, fa modifiche di massa a tuo rischio e pericolo.
La query che chiedi è proprio in questo articolo.
Commento di Giovanni
Lunedì 20 Gennaio 2020Scusate mi serve una query che mi esporta oltre a tutti i riferimenti delle combinazioni anche gli ean delle singole combinazioni
qualcuno puo' aiutarmi grazie
Risposta di Marco
Vedi commento del 24 gennaio. Nel SELECT devi aggiungere p.ean13 AS 'EAN',
Commento di Giovanni
Martedì 21 Gennaio 2020Marco grazie per la risposta, quel metodomi esporta solo gli ean dei prodotti ma non dei prodotti all'interno delle combinazioni, infatti mi escono vuoti quei campi nell'esportazione.
Risposta di Marco
Prova a cercare nel forum di Prestashop, non riesco ad aiutarti.
Commento di Alessandro
Mercoledì 12 Febbraio 2020Buongiorno e grazie a Marco per la condivisione della query. Volevo sapere se puoi indicare come aggiungere la colonna TAG alla tua query. Grazie
Risposta di Marco
Per inserire i tag del prodotto ti serve una colonna in cui li elenchi tutti, separati da virgola (con un CONCAT in modo simile alle combinazioni), e serve un altro JOIN.
Quindi, nel SELECT aggiungi dove vuoi questo pezzo:
GROUP_CONCAT( DISTINCT( pts.name) SEPARATOR ", " ) AS 'Tags',
Poi nel FROM dopo questa riga che esiste già (era inutilizzata, forse un refuso)
LEFT JOIN ps_product_tag pt ON (p.id_product = pt.id_product)
Aggiungi questa:
LEFT JOIN ps_tag pts ON (pt.id_tag = pts.id_tag )
Non ho testato ma dovrebbe funzionare.
Commento di Alessandro
Giovedì 13 Febbraio 2020Grazie mille per la diponibilità. Ho provato e quando clicco su VEDI nel Manager SQL adesso mi mostra anche la colonna tag.
Il problema è che mi mostra nel primo prodotto tutte le categorie e le sottocategorie mischiate e tutti i tag. Poi mi mostra per 3 volte lo stesso prodotto, ma in questo caso ha categorie e tag giusti, e poi basta. In sintesi: mi mostra 4 prodotti invece di 100 e nel primo mi preleva tutte le categorie/sottocategorie e tutti i tag del catalogo prodotti.
Risposta di Marco
Mi sono accorto che c'è un errore nella query, anche da prima, adesso correggo l'articolo con la query migliorata.
Il problema è il GROUP BY, nella query iniziale ho raggruppato per id combinazione e non per id prodotto. Va usato invece un doppio GROUP BY:
GROUP BY p.id_product, pac.id_product_attribute
Commento di Alberto Frescione
Mercoledì 19 Febbraio 2020Ciao Marco,
spero tu mi possa aiutare, avrei bisogno di una query grazie alle quali posso esportare tutta il catalogo e poi filtrarlo per prodotti semplici e prodotti con combinazioni. I campi da esportare di cui avrei bisogno sono i seguenti:
ID prodotto
Reference
Nome
Prodotto semplice: si o no
Prodotto con combinazioni: si o no
Ti ringrazio in ogni caso per l'aiuto
Se può interessare la versione di prestashop è 1.7.4.2
Risposta di Marco
I campi che indichi secondo me sono insufficienti, nel senso che non ti esporti "tutto il catalogo", per avere tutti i dati utili è da usare la query mia che oltre al singolo prodotto, e il suo nome, hai la colonna combinazione che mostra gli attributi separati da virgola.
Per avere la distinzione tra prodotto semplice o con combinazioni, basta aggiungere alla mia query una colonna del tipo:
IF(pac.id_product_attribute,'combinazione','semplice') AS 'Tipo',
Dove ho scritto 'combinazione' e 'semplice', puoi metterci anche 0 e 1 per avere un boolean, o metti le stringhe che vuoi.
Se invece vuoi proprio solo una lista con 1 riga per ID prodotto, e solo l'indicazione se ha o no combinazioni (ma senza esploderle), ti basta una query molto più corta, io ci lascerei cmq il primo campo per sapere se è un prodotto attivo o no, quelli non attivi possono essere bozze o non più venduti sul sito:
SELECT p.active 'Attivo', IF(pac.id_product_attribute,'combinazione','semplice') AS 'Tipo', p.id_product AS 'ID', p.reference AS 'Rif.', pl.name AS 'Nome'
FROM ps_product p
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product)
LEFT JOIN ps_product_attribute pa ON (p.id_product = pa.id_product)
LEFT JOIN ps_product_attribute_combination pac ON (pac.id_product_attribute = pa.id_product_attribute)
WHERE pl.id_lang = 1
AND p.id_shop_default = 1
GROUP BY p.id_product
Commento di Francesco
Giovedì 16 Aprile 2020Ciao,
La query potrebbe funzionare sulla 1.7.5?
Risposta di Marco
Si, non mi risultano differenze.
Commento di Francesco
Giovedì 16 Aprile 2020Ciao, un volta creata la query è possibile aggiungere un pulsante nella pagina del prodotto che esegua la query appena creata e lo esporti in csv?
Risposta di Marco
Se intendi la pagina prodotto pubblica, vista dai clienti, allora no, perché è una funzionalità dell'admin.
Se intendi la pagina prodotto in admin, potrebbe essere possibile, ma serve manipolare il codice (a quel punto te ne freghi del manager SQL, fai la query a codice), non c'è niente di "automatico" che colleghi il manager SQL con il resto delle pagine in Admin.
Commento di Jvan
Sabato 25 Aprile 2020Ciao, sono atterrato su questo blog dopo molte ricerche e credo di aver trovato chi può darmi una semplice spiegazione.
Vorrei solo aggiungere al file import dei prodotti, i campi per poter assegnare i "prezzi specifici" ad un Gruppo di clienti.
è possibile?
Risposta di Marco
Attenzione che io stavo parlando di esportazione. Tu parli di importazione invece, questa è definita in Prestashop back office, menu Parametri Avanzati, poi usi il select "Prodotti". Sulla colonna a destra ti appare la lista di campi disponibili. Puoi anche scaricare un file CSV di esempio, da usare come template.
Quindi per rispondere alla tua domanda, in Prestashop non è possibile. I campi disponibili per gli sconti, ovvero "specific price", sono solo 4:
Modulo dedicato ai prezzi specifici: https://addons.prestashop.com/it/data-import-export/17366-csv-specific-prices.html
Modulo che cambia l'assegnazione prezzi ai prodotti e anche la funzione di importazione: https://addons.prestashop.com/it/gestione-prezzi/29289-custom-product-price-for-specific-customer-groups.html
Programma Store Manager: https://www.prestashopmanager.com/useful-articles/how-to/how-to-import-specific-prices-to-prestashop/
Commento di Stefano
Domenica 03 Maggio 2020Salve, io avrei la necessità di esportare il riepilogo dei prodotti venduti all'interno di selezionati ordini (per esempio quelli ai quali ho messo il flag) che sono da preparare e da spedire. Mi consentirebbe di prendere tutti i prodotti necessari dal magazzino e poi procedere alla preparazione dei pacchi. Come posso fare? Per data non è possibile in quanto, per le vendite dello stesso giorno, potrei dover preparare solo alcune spedizioni. Grazie
Risposta di Marco
Per fare quello che chiede esiste già una funzionalità di Prestashop. Menu Ordini, voce Bolle di Consegna (o Note di Consegna in PS 1.6). Nel primo riquadro può settare un intervallo tra due date ed esportare tutti i documenti di trasporto degli ordini contrassegnati per la spedizione, in formato PDF. Quindi stamparli e portarli in magazzino.
Affinché gli ordini rientrino nell'esportazione bisogna che il loro status abbia attivato il flag "Mostra il PDF di consegna". Quindi deve configurare gli stati ordine alla maniera opportuna, ad esempio settando questo flag solo allo stato "in spedizione". Si fa in Parametri Negozio, poi Impostazioni ordine, tab Stati (invece è in Ordini - Stati in PS 1.6).
Se non vuole stampare i DDT, qualche giorno fa ho fatto una modifica via override, prevede una colonna aggiuntiva nella tabella gestione ordini, in cui sono elencati i prodotti acquistati per ogni ordine. Quindi può filtrare i prodotti per stato, o per ogni altro parametro della gestione, e poi pigiare il bottone "esporta", ottiene quindi il file CSV degli ordini intabellati, può aprirlo in Calc o Excel e stamparlo. Ovviamente questa modifica la devo fare io, mi contatti via email.
Se vuole qualcosa di differente da questo allora bisogna ricorrere a moduli aggiuntivi.
Commento di roberto
Venerdì 08 Maggio 2020Ciao Marco,
ottime informazioni sulle Select.
Non riesco a capire però se è possibile salvare il risultato in una cartella specifica:
Per esempio "/miaDirectory/provaFile.csv"
Grazie
Risposta di Marco
Il Manager Sql di Prestashop non prevede il salvataggio in una cartella.
Commento di Giorgio
Mercoledì 13 Maggio 2020Ciao Marco so di ritornare sull'argomento export link immagini ma ho provato ad inserire il codice di quell'esempio che riportavi tu di una discussione ma non riesco neanche a salvare la query. hai modo di farmi capire cosa bisogna inserire per restituire almeno il link della foto principale dei prodotti?
Risposta di Marco
Mi dispiace ma la risposta è schietta: non si possono esportare le immagini con una semplice query al database (risposta ufficiale di un dipendente Prestashop). Il link al forum è un tentativo di "mimare" con un CONCAT quello che potrebbe essere il path, ma non funziona.
Serve quindi farlo con codice PHP. C'è un tutorial che consiste in un override del controller AdminProductsController (in modo da avere i campi aggiuntivi nell'export originale dell'admin prodotti di Prestashop). Utile, ma anche in questo caso l'autore risponde negativamente alla richiesta di esportare anche le combinazioni, perché è una complicazione aggiuntiva non prevista. Il tutorial per Prestashop 1.6 è qui.
L'unica soluzione per esportare prodotti, con immagini, combinazioni ecc... è usare moduli specifici, come ad esempio questo.
Commento di Andrea Garbolino
Martedì 26 Maggio 2020Ciao, ho provato a inserire la Query SQL ma il .csv che esporto è vuoto. Se provo a visualizzarlo da PrestaShop mi dice "Questa query SQL non ha risultati."
Ho una versione di PrestaShop 1.7.6.1
Grazie,
Andrea
Risposta di Marco
Il fatto che non ti dia errori significa che almeno la sintassi è corretta. Controlla bene la parte finale delle condizioni WHERE. Perché se hai installato Prestashop in altra lingua, e poi aggiunto l'italiano, il valore ID cambia, devi aprire la tabella ps_lang e verificare l'ID lingua per l'italiano. Discorso identico per il valore ID dello Shop, se stai usando multishop potresti avere più ID, verifica in tabella ps_shop. Sbagliano questi ID la query potrebbe restituire zero risultati.
Commento di Diego Maravilla
Lunedì 01 Giugno 2020Ciao ragazzi, ho problemi con le combinazioni su Prestashop, quando una combinazione ha quantià 0 il prodotto viene Out of Stock,
Ad esempio se un prodotto ha le taglie
36 Quantità 1
37 Quantità 1
38 Quantità 0
39 Quantità 1
40 Quantità 1
Solo perche il 38 ha quantità 0 mi mette tutto il prodotti Out of Stock, e per il cliente è impossibile anche acquistare altre taglie disponibile.
Sapete cosa puo succedere?
Risposta di Marco
Senza vedere i file coinvolti è difficile da dire, però escludendo che si tratti di Prestashop, potrebbe intervenire un modulo installato, dovresti verificare prima di tutto questo, tu sai cosa hai installato. Disattivi i moduli extra e vedi se continua il problema.
Se il problema persiste, potrebbe essere il tema, magari nei template che compongono la pagina prodotto c'è un controllo sulle quantità delle combinazioni, e se inferiore o uguale a 0 ti toglie il bottone di aggiunta al carrello (ovviamente sarebbe un bug del tema).
Commento di Pippo Giornini
Domenica 30 Agosto 2020Ciao, leggo solo ora il tuo interessante articolo sull'esportare in CSV tutti i prodotti e relative combinazioni.
Esiste anche una query per importare lo stesso file CSV dopo che è stato modificato in alcune o in tante colonne dello stesso?
Per esempio magari sono stati cambiati alcuni parametri di alcuni prodotti (prezzo, descrizioni, quantità, sconti, ecc.. ecc..) e quindi si farebbe prima a lavorare sul file esportato per poi importarlo. Grazie.
Risposta di Marco
Il Manager SQL di Prestashop funziona solo per query di lettura e quindi per esportare. Per importare i prodotti puoi usare la funzionalità apposita nei parametri avanzati http://doc.prestashop.com/display/PS17/Importazione
In questo caso però devi seguire il template corretto del CSV, e in caso di combinazioni è complicato, ti consiglio di non fermarti alla documentazione ufficiale per capire pienamente come va fatto. Nella pagina di importazione hai vari file demo da scaricare.
Se l'importazione normale di Prestashop non è sufficiente esistono vari moduli.
Commento di Antonio
Mercoledì 30 Settembre 2020Ciao e complimenti per il post.
Da pochissimi giorni in Italia, facebook ha aperto lo shop a tutti. È possibile importare tutto il proprio catalogo sul nuovo shop con il file CSV ... Ho provato e mi dà errore.
Credo sarebbe utilissimo a tutti se ci fosse una query fatta apposta per facebook.
Ho scritto questo commento nella speranza che qualcuno abbia già provato e sia riuscito con successo a importare tutto il catalogo prestashop, in modo corretto, sullo shop di facebook
Risposta di Marco
Per fare questo tipo di integrazioni (anche con Ebay, Amazon, Danea Easyfatt ecc...) è necessario usare moduli specifici. Non solo perché le immagini non sono recuperabili con query (vedi commenti precedenti), ma soprattutto perché la modalità manuale è laboriosa, hai bisogno di fare inevitabili ritocchi al file CSV, e quindi hai margini di errore (perché serve seguire il template CSV esatto per la mappatura dei campi, servono i riferimenti per la sincronizzazione, il metodo corretto per i prodotti con combinazioni). Quindi per Facebook Shop, e Instagram, ho visto questo: https://addons.prestashop.com/it/prodotti-sui-facebook-social-network/4844-social-networks-shop-catalog-importer.html
Commento di Chiara
Domenica 14 Febbraio 2021Ciao!
Mi chiamo Chiara e ho letto con tantissimo interesse il suo articolo, veramente molto interessante e ben spiegato!
Ho un'esigenza che non riesco a risolvere. Tramite query, vorrei riuscire a ricavare questi dati degli ordini che ricevo:
- prodotto
- q.tà acquistate
- se è stata pagata o meno la spedizione (fissata a 5,90€, gratuita per ordini sup a 49,90€)
- prezzo d'acquisto
- prezzo di vendita (con e senza iva)
Grazie mille della tua disponibilità!
Chiara
Risposta di Marco
Ciao Chiara, per esportare gli ordini avevo risposto nei commenti (vedi 16 gennaio 2018) la query è in Pastebin. Attenzione che questa esportazione prevede una lista di prodotti, nella prima colonna c'è ID ordine, qundi vedrai ripetuto un ID ordine uguale per tutti gli ordini che hanno più prodotti acquistati.
Poi, per raggruppare i prodotti secondo ID ordine, dovrai elaborare i dati in un foglio di calcolo. Per aggiungre campi (colonne) devi fare quanto segue.
Nel tuo caso ti serve prezzo con e senza iva (intendo del prodotto singolo), e va letta la tabella order_detail, vedi che io uso d.product_price che è il prezzo non ivato del singolo prodotto. Per essere più precisi ci sono altre colonne nella stessa tabella, puoi usare d.unit_price_tax_excl per il prezzo unitario non ivato (valore come prima), invece d.unit_price_tax_incl per il prezzo unitario iva inclusa. Poi hai anche i totali (cioè prezzo x quantità acquistata) e dunque rispettivamente d.total_price_tax_excl e d.total_price_tax_incl. Altra nota: ci sono anche le colonne degli sconti, per una cosa completa guarda tutto.
Per sapere invece il totale ordine pagato, i dati sono in tabella orders, quindi hai a disposizione varie colonne: o.total_paid e o.total_paid_tax_incl che teoricamente sono lo stesso valore (se hai il negozio che vende inclusa iva), mentre o.total_paid_tax_excl è l'importo totale pagato iva esclusa. Poi hai o.total_products è il totale parziale dei soli prodotti (iva esclusa). Poi hai o.total_shipping che sono le spese di spedizione. Quindi con questo dato hai anche trovato se hanno pagato o no la spedizione. Hai anche in questo caso colonne più specifiche e rispettivamente o.total_shipping_tax_excl e o.total_shipping_tax_incl.
Buon lavoro!
Aggiungi un commento