Case Studies

Importazione listini fornitori: il caso di un ingrosso alimentare

Come un ingrosso alimentare tra Brescia e Verona ha chiuso con la trascrizione a mano dei listini: importazione CSV ed Excel con mappatura colonne, fasce di quantità, prezzi che entrano da soli in ordine e assistente AI via MCP. Il caso completo con Zelo ERP Acquisti.

Aggiornato: 27 ottobre 2026 | 12 min di lettura

Un uomo con gli occhiali in un magazzino di un ingrosso alimentare controlla un listino prezzi cartaceo con una matita in mano, davanti a un laptop e a fascicoli di carte sul banco
Il prezzo giusto nasce dal file del fornitore e arriva all'ordine senza passare dal quaderno: ogni condizione di fornitura registrata una volta sola, con fasce di quantità, validità e codici.

Giuseppe ha sessantadue anni e dirige l’ufficio acquisti di un ingrosso che rifornisce bar, mense e negozi di vicinato tra Brescia e Verona. Il catalogo conta un migliaio di voci: generi alimentari, detersivi, carta, monouso. I prezzi li carica lui, dal 1998 a questa parte: prima sui quaderni, poi su Excel, poi nel gestionale che ha sostituito l’Excel. I fornitori che contano sono quattordici, e ciascuno di loro, ogni due mesi più o meno, manda il listino nuovo.

Questo lunedì ne arrivano cinque. Rodolfi, magazzino di Verona: un Excel con le prime due righe di intestazioni confuse, le descrizioni loro e i codici pure (ROD-4471 per la pasta integrale che a magazzino ha l’etichetta LGF-001). Bertoldi, cash & carry di Brescia: un CSV separato da punti e virgola, con la virgola anche nei decimali, le descrizioni tutte maiuscole e i prezzi per fasce: sei pezzi a un prezzo, centoventi a un altro. Il terzo listino arriva in PDF, col testo che si copia a pezzetti. Il quarto arriva come sempre dentro una mail: “prezzi aggiornati dal 3, moka 1,82, tonno 1,04”. Il quinto non arriva, e il prezzo che vale è quello di marzo.

Nessuno sbaglia. Ogni fornitore compila il listino nel modo che usa da vent’anni. Il conto lo paga Giuseppe: otto ore per caricare cinque listini, e un prezzo sbagliato ogni tanto che salta fuori quando la fattura non torna con l’ordine.

Dove si rompe il flusso di lavoro

Lo stesso pezzo ha tre identità. La pasta integrale è LGF-001 per il magazzino, ROD-4471 per Rodolfi, e per Bertoldi magari non ha codice. Ogni prezzo caricato richiede un riconoscimento a occhio, e un riconoscimento a occhio è un’ipotesi.

Ogni fornitore ha il suo formato. CSV con punti e virgola e virgola decimale, Excel con la doppia intestazione, il PDF da cui il copia-e-incolla impazzisce, la mail scritta a mano. Un solo tasto “importa” che funzioni per tutti non esiste nel mondo reale; esistono i file così come arrivano.

Le fasce di quantità stanno in una cella sola. Sei pezzi a 1,88, centoventi a un prezzo più basso: nel foglio del fornitore sono due colonne; sul foglio di lavoro di Giuseppe diventano un prezzo solo, quasi sempre quello della fascia più conveniente. Poi il riordino da dodici pezzi parte con il prezzo dei centoventi.

La trascrizione è dove si annidano gli errori. Le pannospugne di Rodolfi costavano 1,53 fino a giugno. Il listino nuovo le porta a 1,62, ma è nel PDF, e Giuseppe non lo sa: l’ordine di novembre parte a 1,53, la fattura arriva a 1,62, e l’amministrazione riapre la pratica a dicembre.

Il prezzo nell’ordine dipende da chi lo digita. Chi prepara le richieste di acquisto ha liste sue, salvate sul desktop. Lo stesso pacco di carta può entrare in due ordini a prezzi diversi, scritti da due persone diverse, e nessuna delle due ha torto: entrambe copiano dal listino che hanno sotto mano.

Il margine si legge sui prezzi vecchi. Il prezzo di vendita ai negozi è stato fatto sul costo di marzo. Quando il costo sale del quattro per cento, il listino di vendita non se ne accorge: il margine si assottiglia silenziosamente e nessuna tabella lo dice finché qualcuno non va a cercarlo.

Prima il processo, poi il software

Nessun importatore salva un’anagrafica imprecisa o priva di intestazioni. Sta all’azienda:

  1. Darsi un codice proprio. Il codice interno è la spina dorsale: senza, ogni listino resta in lingua straniera.
  2. Decidere come si riconoscono i prodotti nei file: col codice interno quando il fornitore lo riporta, col codice del fornitore quando non c’è. Il che vuol dire che i codici dei fornitori devono finire da qualche parte, prima o poi.
  3. Decidere cosa conserva l’archivio dei prezzi: il numero da solo non basta, servono la quantità a cui si applica, la validità, i tempi di consegna.
  4. Decidere chi lo mantiene e lo aggiorna. Se possono scriverci in tre, non ci scrive nessuno (vedi il famoso detto: il cane di più padroni, muore di fame).

Prese queste quattro decisioni, al software resta una cosa sola da fare: portare i prezzi dove stanno i prodotti, dal file così com’è all’ordine così come parte, senza riscritture o ritocchi a mano.

Come funziona in Zelo ERP

L’app Acquisti di Zelo ERP (scheda dello strumento) ha un archivio che si chiama Listino Prezzi Fornitore: non un contenitore di cifre, un elenco di condizioni di fornitura. Si apre da Acquisti → Acquisti → Listino Prezzi Fornitore (la voce compare quando nelle impostazioni dell’app è attiva la casella Importa listini fornitori). Ogni riga è una condizione: fornitore, prodotto, codice e descrizione che dà il fornitore, quantità minima, prezzo, validità da-a, tempi di consegna.

Listino Prezzi Fornitore: le righe di Rodolfi con prodotto, codice del fornitore, quantità minima e prezzo
Listino Prezzi Fornitore: le righe di Rodolfi con prodotto, codice del fornitore, quantità minima e prezzo

Il file arriva così com’è

Sulle liste di Zelo c’è il pulsante Importa. Si sceglie il file (CSV, XLS, XLSX o ODS) e si carica; nelle opzioni si dice al sistema com’è fatto: il separatore di colonna, il delimitatore di testo, il separatore decimale e quello delle migliaia. Per il CSV di Bertoldi significa proprio questo: dire che il punto e virgola separa le colonne e che la virgola separa i decimali. Sotto, la schermata chiede di mappare le colonne: la colonna “Codice Articolo” del fornitore si aggancia al campo Codice Prodotto del Fornitore, la colonna “Prezzo unitario” al campo Prezzo, e così via. Il nome che il fornitore ha dato alle colonne non si tocca; si stabilisce una volta dove finisce cosa, e la volta successiva lo stesso file si riconosce da solo.

Schermata di importazione: il CSV di Bertoldi caricato e le quattro colonne del fornitore da mappare sui campi del listino
Schermata di importazione: il CSV di Bertoldi caricato e le quattro colonne del fornitore da mappare sui campi del listino

Il PDF no: quello può solo essere letto a occho, ma è possibile chiedere al fornitore una versione con un formato diverso. È una richiesta legittima: quasi tutti gli uffici commerciali hanno il listino in Excel oltre alla stampa. Oltretutto è un vantaggio stesso per il fornitore che il cliente possa accedere rapidamente a un listino aggiornato.

Fasce di quantità e scadenze

Per lo stesso prodotto e fornitore si possono inserire più righe, ognuna con la sua quantità minima: la pasta integrale a 12 pezzi costa 0,79, a 240 pezzi costa 0,71. Quando una richiesta di acquisto supera una soglia, il sistema prende la fascia con la quantità minima più alta tra quelle coperte dalla quantità ordinata. La riga scaduta (le pannospugne di Rodolfi, valide fino a giugno) resta nell’archivio e si trova col filtro Archiviato, ma non compila più nulla: se il fornitore non manda un listino aggiornato, il prezzo nell’ordine resta a zero e la pratica resta aperta, invece di chiudersi con un numero vecchio.

Due righe della stessa condizione di fornitura: la pasta integrale a 12 pezzi e a 240 pezzi con prezzi diversi
Due righe della stessa condizione di fornitura: la pasta integrale a 12 pezzi e a 240 pezzi con prezzi diversi

Il prezzo entra da solo nell’ordine

Quando sulla richiesta di acquisto si sceglie il tonno di Bertoldi e si mettono 24 pezzi, il prezzo unitario si compila da solo a 1,08: è la fascia che copre quella quantità, presa dall’archivio e non dalla lista sul desktop di chi digita. E l’archivio si alimenta da sé: alla conferma di un ordine, se il fornitore non aveva una condizione specifica, questa entra nel listino del prodotto con il prezzo dell’ordine. Per i prodotti dove il costo deve seguire gli acquisti c’è anche il metodo di costo “ultimo prezzo d’acquisto”: ogni movimento in entrata allinea il costo del prodotto all’ultimo prezzo pagato.

Riga della richiesta di acquisto: tonno di Bertoldi, 24 pezzi, prezzo unitario 1,08 preso dal listino
Riga della richiesta di acquisto: tonno di Bertoldi, 24 pezzi, prezzo unitario 1,08 preso dal listino

I fornitori sulla scheda del prodotto

Nella scheda del prodotto, la scheda Acquisti ha il gruppo Fornitori: per il caffè moka ci sono Rodolfi a 1,88 (codice ROD-1180) e Bertoldi a 2,04 (codice BCW-2210), ciascuno con la propria quantità minima e i propri tempi di consegna. Il campo Scegli i fornitori seguendo questo ordine decide quale dei due viene proposto per primo: per sequenza o a partire dal prezzo più conveniente.

Scheda Acquisti del prodotto: due fornitori per il caffè moka con codici, quantità minime e prezzi
Scheda Acquisti del prodotto: due fornitori per il caffè moka con codici, quantità minime e prezzi

Un assistente che lavora dentro i tuoi dati

C’è una terza strada, che non somiglia né al file né al modulo di importazione: far lavorare l’intelligenza artificiale direttamente sui dati dell’ERP. Zelo ERP espone un server MCP, il protocollo con cui i client AI si collegano ai sistemi (il modulo si chiama RESTFUL MCP SERVER e nella configurazione standard di Zelo è già installato). Si attiva creando un Token di accesso API e si collega un assistente come Claude con un’unica riga di configurazione: l’indirizzo del server (/api/mcp) e il token nell’intestazione. Ogni chiamata gira con i permessi dell’utente collegato al token: l’assistente vede quello che vede chi gli ha prestato le credenziali, niente di più.

Token di accesso API: due token di lunga durata con ambito “Accesso completo (diritti utente)”
Token di accesso API: due token di lunga durata con ambito “Accesso completo (diritti utente)”

Dal suo lato, l’assistente ha a disposizione dodici operazioni: elencare i modelli, leggere i campi, cercare, creare, aggiornare, cancellare record, e chiamare i metodi di workflow come la conferma di un ordine. Per chi carica i listini, questo si traduce in due usi concreti. Il primo è la preparazione: invece di rifare la mappatura a mano, si chiede all’assistente di leggere il file del fornitore, cercare nel catalogo i prodotti corrispondenti (per codice interno o per codice del fornitore) e scrivere le righe di Listino Prezzi Fornitore già pronte, per fascia di quantità, con il codice del fornitore al posto giusto. Il secondo è il controllo: chiedere la lista dei prodotti senza prezzi aggiornati negli ultimi sei mesi, o confrontare il costo attuale con quello dell’ultimo ordine, prima che lo faccia la fattura.

Il server ha le sue regole, e sono parte del vantaggio. I campi con password, segreti e chiavi non si leggono nemmeno con un token “completo”. I token hanno un ambito (sola lettura, lettura e scrittura, accesso completo) e una scadenza, e ogni chiamata finisce nel Log Accesso API: quello che l’assistente ha letto e scritto resta tracciato riga per riga. Sette procedure d’azienda (dall’ordine di vendita alla consegna di magazzino) sono già documentate come guide che il client AI legge prima di muoversi. Restano fuori le cose sensate da tenere fuori: nessun token crea altri token, e le guide stesse non si modificano via API. L’amministratore potrà poi creare una serie di guide personalizzate per istruire il server MCP ad eseguire specifiche azioni e operazioni.

Quando il file non si carica proprio

Il quinto listino, quello scritto nella mail, non ha formato. E il sesto, quello che ogni gennaio arriva con le colonne in ordine diverso e tre righe di note in fondo, con l’importazione normale si carica male. Per questi c’è l’Importatore: si apre da Impostazioni → Strumenti → Importatore, e nella Logica Importatore si scrive una volta la regola con cui il file viene letto e il prodotto riconosciuto (prima per codice interno, poi per codice del fornitore). Ogni importazione si prova col Test di importazione, che gira senza scrivere nel database e restituisce il report riga per riga, con la barra di avanzamento. Questa regola può essere scritta una volta sola e poi a gennaio ci si riposa.

Logica Importatore: la regola python che legge i file dei fornitori a colonne non standard
Logica Importatore: la regola python che legge i file dei fornitori a colonne non standard

Misurare prezzi e margini

L’Analisi degli Acquisti (la reportistica dell’app, in grafico e pivot) legge le righe d’ordine per fornitore, per prodotto, per stato e per data, con le misure del prezzo medio e del prezzo totale. È la tabella che risponde alle domande che a dicembre nessuno sa fare: quali fornitori sono saliti, su quali articoli Bertoldi costa più di Rodolfi, quanto si è davvero comprato negli ultimi due trimestri.

Analisi degli Acquisti in pivot: per ogni fornitore quantità, prezzo medio e prezzo totale
Analisi degli Acquisti in pivot: per ogni fornitore quantità, prezzo medio e prezzo totale

Domande frequenti

Caricando il file così com’è sul modello che tiene i prezzi d’acquisto, che in Zelo ERP si chiama Listino Prezzi Fornitore: l’importazione accetta CSV, XLS, XLSX e ODS, e la schermata di mappatura collega le colonne del fornitore ai campi del listino. La prima volta si spiega dove finisce cosa; poi lo stesso schema si riusa.

Il codice e la descrizione del fornitore stanno su ogni riga del listino, non sul prodotto: cambiano lì, e la descrizione del fornitore segue la condizione di fornitura. Per questo conviene che l’azienda si tenga un codice interno proprio.

Con righe diverse dello stesso prodotto e fornitore, ognuna con la propria quantità minima. In ordine, il sistema prende la fascia più alta coperta dalla quantità richiesta: 12 pezzi pagano la fascia dei 12, 240 pagano quella dei 240.

In parte sì, da solo: alla conferma di un ordine la condizione del fornitore entra nel listino con il prezzo dell’ordine. Per l’allineamento continuo del costo esiste il metodo di costo basato sull’ultimo prezzo d’acquisto, che riscrive il costo del prodotto a ogni movimento di entrata.

Nella scheda Acquisti del prodotto, gruppo Fornitori, col campo che decide l’ordine di scelta (per sequenza o per prezzo conveniente). Le stesse righe si leggono in un unico elenco dal menu Listino Prezzi Fornitore, raggruppando per prodotto o per fornitore.

Con cinque listini l’anno e mille righe per listino, la differenza passa da otto ore di trascrizione a un pomeriggio di mappatura iniziale. Dopo, il costo per listino si misura in minuti, e gli ordini partono dal prezzo dell’archivio, non da quello salvato sul desktop di chi digita.

Dove sta il vantaggio

Sul piano interno, i prezzi entrano una volta sola e gli ordini partono da lì: niente liste personali, niente ordini confermati a prezzi di marzo. Nei rapporti con i clienti, il prezzo di vendita è calcolato partendo da un costo vero e aggiornato, e il margine che si legge nelle analisi è lo stesso di quello che si ottiene dalla fattura.

Il resto è lavoro di semina: i codici interni, i codici dei fornitori da registrare la prima volta, la casella Importa listini fornitori nelle impostazioni dell’app e le fasce di quantità da scrivere per gli articoli che le hanno (la pagina di Zelo ERP dedicata agli acquisti elenca le funzioni una per una). Le regole del listino, invece, le scrive l’azienda.