[Risolto] GEST magazzino + export csv

Discussioni sulle caratteristiche di database
Rispondi
roby67
Messaggi: 23
Iscritto il: lunedì 8 ottobre 2018, 11:41

[Risolto] GEST magazzino + export csv

Messaggio da roby67 »

Buonasera a tutti,
mi sono appena registrato dopo ANNI di presenza silenziosa... mi scuso in anticipo se l'argomento fosse già trattato in qualche altro post ma da una rapida ricerca non ho trovato risposte.
Uso Oo versione 1.4 su W10

Ho creato grazie a spunti presi sul forum una piccola gestione aziendale magazzino , carrispettivi, acquisti ecc ecc, nulla di chè intanto c'è il commercialista! Però mi serve per aggiornare il mio shoponline.

Arrivo al punto, il formulario cetrale è denominato Gestione, le vendite le registro su Gestione vendite, quando vendo un'articolo, lo inserisco nella vendita, sulla riga dell'articolo la query mi rileva la giacenza, modifico la giacenza a MANO e spunto la casellina per ricordare di averlo fatto.

Poi per modificare le quantità online mi annoto le nuove quantità su file csv ... e poi sempre a mano lo importo su prestashop.

Chiedevo se era possibile scrivere una macro che prenda le nuove quantità + ID web dell'articolo e vada a scrivere questi dati sul file csv.

Non so se questo è fattibile con base... ho provato ad importare la tabella articoli in Calc e filtrare per poi copiare e incollare su file csv... ma non accorcio di molto anzi.

Ringrazio in anticipo sperando di essere stato chiaro, allego file... anzi non me lo fa allegare come faccio??
Saluti Roberto
Ultima modifica di roby67 il martedì 5 febbraio 2019, 11:58, modificato 1 volta in totale.
Openoffice 4.5.1 Windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8803
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: GEST magazzino + export csv

Messaggio da charlie »

Ciao e benvenuto sul forum.
Se intanto ti vuoi presentare puoi farlo qui: viewforum.php?f=16
Per una panoramica delle regole del forum consulta il Manuale di sopravvivenza: http://forum.openoffice.org/it/forum/vi ... hp?f=1&t=2
Buon proseguimento.

Per inserire allegati: viewtopic.php?f=8&t=6261
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
roby67
Messaggi: 23
Iscritto il: lunedì 8 ottobre 2018, 11:41

Re: GEST magazzino + export csv

Messaggio da roby67 »

Rieccomi, non mi fa spedire l'allegato perchè supera il limite... per ora, prima di allegerirlo di cose che magari servono, lo potete vedere qui =
https://www.texart-shop.com/gest.odb
Per capire basta aprire i formulari Gestione e Gestione vendite, per il resto vale il primo post

Saluti e grazie a tutti
Roberto
Openoffice 4.5.1 Windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8803
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: GEST magazzino + export csv

Messaggio da charlie »

Riporto qui il tuo file allegato in maniera che sia disponibile sul forum anche in futuro.
Allegati
gest.odb
(486.26 KiB) Scaricato 296 volte
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
roby67
Messaggi: 23
Iscritto il: lunedì 8 ottobre 2018, 11:41

Re: GEST magazzino + export csv

Messaggio da roby67 »

Buongiorno a tutti,
peccato che nessumo mi può aiutare, in rete ho trovato delle macro per scrivere su file csv ma da exel ... non da base,
https://www.sputifazio.it/2018/04/vba-e ... -file-csv/
io dovrei scrivere alcune colonne (o anche tutte) solo per determinati record di DB ... se non è chiara la dinamica fate domande...qualcuno mi può dire se la cosa è fattibile? Grazie ancora per l'interessamento
saluti Roby
Openoffice 4.5.1 Windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8803
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: GEST magazzino + export csv

Messaggio da charlie »

charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: GEST magazzino + export csv

Messaggio da Gaetanopr »

Salve, per avere più probabilità di ottenere aiuto ti consiglio di:
1) allegare il file cvs e dire quali dati aggiornare o scrivere.
2) Spiegare da quale tabella/formulario prelevarli e quali operazioni fare, magari allegando delle immagini.

Gaetano
Saluti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
roby67
Messaggi: 23
Iscritto il: lunedì 8 ottobre 2018, 11:41

Re: GEST magazzino + export csv

Messaggio da roby67 »

Eccomi... ringrazio Charlie, avevo già ricercato in rete ma purtroppo il mio inglese ha dei grossi limiti... ho creato da solo uno shop online ma con prestashop italiano :) se mandi link esatto su cui lavorare magari riesco meglio ... esempio questo :
http://sheepdogguides.com/fdb/fdb6exportcsv.htm ... io ho open 4.0 però

Rispondendo all'altro amico...

1) riallego il file con inserito 1 articolo Walt Disney con tutti i campi compilati
https://www.texart-shop.com/offerte-provaws/gest.odb

2) allego file csv che passo a prestashop con tutti i campi della tabella articoli che interessano a prestashop (in realtà sono di più in open)
https://www.texart-shop.com/offerte-pro ... _nuovi.csv


Per capire meglio aprire il mio DB al formulario Gestione magazzino WEB ... con le 3 caselle in alto ricerco gli articoli ... nella finestra visualizzo i dati filtrati ... esempio DESCRIZIONE = WD clicca su RICERCA appare sotto l'articolo in questione che ho aggiunto.

Ripeto la ricerca e modifico le quantità a mano per ogni art. venduto

Nella parte sottostante del formulario appaiono tutti i dati web che interessano a prestashop (nella finesta ho dato precedenza ai listini dei negozi)

La mia esigenza è di creare un bottone in questo formulario collegato alla tabella articoli che mi scriva sul file CSV.

Il campo più importante di ogni record per prestashop è = ID (se non ricordo male è 600 per il tappeto aggiunto)
poi io di solito aggiorno solo le quantità + prezzo oppure altri campi modificati, ma se vengono scritti tutti nel file csv non è un problema, l'importante è che verifichi se è già presente nel file un ID 600 e nel caso sovrascriverlo.

Io poi 2/3 volte la settimana aggiorno prestashop importando il CSV, e se serve, posso dirgli quali colonne leggere e quali no, ma sempre con forzatura dell'ID articolo.

Buona giornata a tutti
Allegati
agg_articoli_nuovi.csv
(3.5 KiB) Scaricato 221 volte
Openoffice 4.5.1 Windows 10
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: GEST magazzino + export csv

Messaggio da Gaetanopr »

Ti riallego tuo file, ho inserito un pulsate dentro il formulario G-Mag Gestione WEB che aziona una macro che inserisce i dati nel file cvs.
Per funzionare bisogna registrare il database andando su Strumenti - Opzioni - Openoffice base - Database e nella finestra a destra seezioni il database gest.
Nella macro ho indicato il percorso del file cvs che fà riferimento al percorso sul mio pc, naturalmente questo lo devi cambiare con il tuo percorso.
https://www.dropbox.com/s/ly8xap65dzsjrwk/gest.odb?dl=0

Saluti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8803
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: GEST magazzino + export csv

Messaggio da charlie »

Riporto qui il file allegato da @Gaetanopr in maniera che sia disponibile sul forum anche in futuro.
Allegati
gest.odb
(489.88 KiB) Scaricato 236 volte
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
roby67
Messaggi: 23
Iscritto il: lunedì 8 ottobre 2018, 11:41

Re: GEST magazzino + export csv

Messaggio da roby67 »

Ho fatto solo due test... ma volevo subito ringraziarti veramente di cuore... con il file db gest registrato e con la modifica del percorso... il file csv viene compilato. Grazie Grazie !!!

Devo lasciare delle colonne libere nel file csv perchè altrimenti volendo inserire nuovo articolo... la seconda righa non la incolonna bene, comunque messe le colonne vuote come in allegato funziona perfettamente, ho creato un'articolo e ricorretto quello della prima righa ed è tutto ok.
Poi in prestashop creo un template di importazione csv e abbino le colonne ai rispettivi campi del suo DB saltando quelle vuote.

Ora devo spostare il pulsante nel DB che uso oltre che cambiare nome all'interno della macro... sotto righe corrette...
Qual'è la procedura che si usa per spostare la macro da un DB all'altro, per il pulsante ovvio copio e incollo.

Grazie ancora e buona giornata

Codice: Seleziona tutto

..............................
Sub Main(oev)

Dim iNumero As Integer
Dim sRiga As String
Dim aFile As String
Dim sMsg as String
ID = oev.Source.Model.Parent.GetByIndex(5).Currentvalue
aFile = "G:\gestione\Gestione_ditta_2019\agg_articoli_nuovi.csv" 
iNumero = Freefile
Open aFile For Input As #iNumero

sBaseDatos = "Gestione_1base"
oDBC = createUnoService("com.sun.star.sdb.DatabaseContext")	
oBD = oDBC.getByName( sBaseDatos )
oConexion = oBD.getConnection("","")
oDeclaracion = oConexion.createStatement()

    sql = "SELECT * FROM Articoli WHERE IDprodotto ='" & ID & "'" 
        Result =  oDeclaracion.executeQuery(sql) 
        Result.next() 
        IdProdotto = Result.getString(27) 
        Immagini = Result.getString(28)
        NomeProdotto = Result.getString(29)
        CodiceProdotto = Result.getString(30)
        IDCategoria = Result.getString(31)
        prezzobase = Result.getString(32)
        idiva = Result.getString(33)
        quantita = Result.getString(34)
        attivo = Result.getString(35)
        brevedescrizione = Result.getString(36)
        descrizione = Result.getString(37)
        metadescizione = Result.getString(38)
        metakeywords = Result.getString(39)
        metatitolo = Result.getString(40)
        peso = Result.getString(41)
        produttore=  Result.getString(42)
        caratteristiche = Result.getString(43)
Dim Arr()
While not eof(iNumero)
Line Input #iNumero, sRiga
if sRiga <> "" Then 
Stringa = ""
Codice = Split(sRiga, ";")
     If Codice(0) <> ID then
        Stringa = sRiga
     Elseif Codice(0) = ID Then 
        trovato = true
        Stringa = IdProdotto & ";" & Immagini & ";" & NomeProdotto & ";" & CodiceProdotto & ";"
        Stringa = Stringa & ";" & IDCategoria & ";" & prezzobase & ";" & idiva & ";"
        Stringa = Stringa & ";" & quantita & ";" & attivo & ";" & brevedescrizione & ";"
        Stringa = Stringa & ";" & descrizione & ";" & metadescizione & ";" & metakeywords & ";"
        Stringa = Stringa & ";" & metatitolo & ";" & peso & ";" & produttore & ";" & caratteristiche
     End If
     Redim Preserve Arr(0 To x)
     Arr(x) = Stringa 
     x = x + 1
end if 
wend
Stringa = ""
   if trovato = false then 
        Stringa = IdProdotto & ";" & Immagini & ";" & NomeProdotto & ";" & CodiceProdotto & ";"
        Stringa = Stringa & ";" & IDCategoria & ";" & prezzobase & ";" & idiva & ";"
        Stringa = Stringa & ";" & quantita & ";" & attivo & ";" & brevedescrizione & ";"
        Stringa = Stringa & ";" & descrizione & ";" & metadescizione & ";" & metakeywords & ";"
        Stringa = Stringa & ";" & metatitolo & ";" & peso & ";" & produttore & ";" & caratteristiche
       Redim Preserve Arr(0 To x)
       Arr(x) = Stringa 
   end if
 
 Close #iNumero


REM APRO IL FILE IN SCRITTURA
        iNumero = Freefile
        Open aFile For Output As #iNumero
        For i = 0 To Ubound(Arr)
           sOutDataLine = Arr(i)
            Print #iNumero, sOutDataLine
        Next i
       Close #iNumero


End Sub




End Sub
Allegati
agg_articoli_nuovi.csv
(2.24 KiB) Scaricato 180 volte
Ultima modifica di charlie il martedì 22 gennaio 2019, 12:42, modificato 1 volta in totale.
Motivazione: Formattato codice
Openoffice 4.5.1 Windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8803
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: GEST magazzino + export csv

Messaggio da charlie »

@roby67, nei post il codice va formattato come tale :-x.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: GEST magazzino + export csv

Messaggio da Gaetanopr »

Nessuna procedura in particolare, naturalmente il nuovo db deve essere registrato e devi fare attenzione all'indirizzo del file csv, inoltre la tabella Articoli deve essere uguale a quella del db postato.

Saluti :super:
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
roby67
Messaggi: 23
Iscritto il: lunedì 8 ottobre 2018, 11:41

Re: GEST magazzino + export csv

Messaggio da roby67 »

Buongiorno, anzitutto mi scuso per il codice sparso che ho postato ieri

xGaetano !!

aggiorno il lavoro fatto:

- tu avevi creato la macro sul DB gest.odb nel formulario G-Mag gestione WEB
- io ho trasferito il pulsante sempre nel formulario G-Mag gestione WEB ma cambiando DB... tutto ok funziona ancora grazie!!

ti chiedevo brevemente con rif al file che hai anche tu e cioè = gest.odb
- apri il formulario Gestione_Vendite
- clicca su RICERCA in alto a SX
- si raggiunge un formulario identico a quello dove hai messo il pulsante tu (G-Mag gestione WEB)
- ho provato a creare anche lì il solito pulsante ma sicuramente ho sbagliato qualcosa perchè la macro ha segnalato errore run basic e si è fermata evidenziando la riga sotto = IdProdotto = Result.getString(27), non capisco la tabella Articoli è la stessa... tu che dici? NB: Nel codice che ho messo sotto ci sono già i riferimenti all'altro DB e al percorso del file csv...

Codice: Seleziona tutto

Sub Main(oev)

Dim iNumero As Integer
Dim sRiga As String
Dim aFile As String
Dim sMsg as String
ID = oev.Source.Model.Parent.GetByIndex(5).Currentvalue
aFile = "G:\gestione\Gestione_ditta_2019\agg_articoli_nuovi.csv" 
iNumero = Freefile
Open aFile For Input As #iNumero

sBaseDatos = "Gestione_1base"
oDBC = createUnoService("com.sun.star.sdb.DatabaseContext")	
oBD = oDBC.getByName( sBaseDatos )
oConexion = oBD.getConnection("","")
oDeclaracion = oConexion.createStatement()

    sql = "SELECT * FROM Articoli WHERE IDprodotto ='" & ID & "'" 
        Result =  oDeclaracion.executeQuery(sql) 
        Result.next() 
        errore ===> IdProdotto = Result.getString(27)
Openoffice 4.5.1 Windows 10
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: GEST magazzino + export csv

Messaggio da Gaetanopr »

La tabella Articoli è la stessa ma il campo di testo da dove prelevare il valore ID è un altro, nella precedente corrispondeva all'indice 5 su questo formulario all'indice 33.
Prova a cambiare questa parte

Codice: Seleziona tutto

ID = oev.Source.Model.Parent.GetByIndex(5).Currentvalue
con

Codice: Seleziona tutto

ID = oev.Source.Model.Parent.GetByIndex(33).Currentvalue
o ancora più semplicemente tramite il nome

Codice: Seleziona tutto

ID = oev.Source.Model.Parent.GetByName("Campo di testo 1").Currentvalue
Solitamente sarebbe buona norma dare un nome significativo ai vari controlli sul formulario, specialmente quando si usano le macro, ad esempio "ID" al posto di "Campo di testo 1" o all'indice 33, in maniera che quando si legge la macro subito si capisce di cosa si tratta.

Saluti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
roby67
Messaggi: 23
Iscritto il: lunedì 8 ottobre 2018, 11:41

Re: GEST magazzino + export csv

Messaggio da roby67 »

:super: perfetto! Grazie! ... mi era scappata la riga di codice del prelievo del dato ID... funziona con (33)... prima di fare un post riepilogativo e mettere risolto volevo chiedere velocemente:

- la posizione del campo ( in questo caso 5 oppue 33 ) da cui la macro preleva il dato in questione da dove si legge= navigazione formulario o altro?

- l'intero DB che uso pur essendo sviluppato in totale "fai da te" potrebbe secondo il tuo parere comandare una stampa scontrino con stampante fiscale Custom bigII collegata via ethernet previa installazione driver... prima di aprire altro topics a riguardo chiedevo solo se la strada macro su formulario Gestione Vendite (dove appare righa con ogni vendita e totale scontrino) era percorribile.

Saluti Roberto :)
Openoffice 4.5.1 Windows 10
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: GEST magazzino + export csv

Messaggio da Gaetanopr »

Ciao, per trovare la posizione del campo si possono usare strumenti tipo xray, oppure fare un ciclo per tutti gli elementi del formulario, ma come detto prima la migliore soluzione è usare il nome dei controlli e non il loro indice oltretutto se si aggiungono altri elementi questi potrebbero variare, quindi ti consiglio di sostituire l'indice con il nome del controllo.
Solitamente gli indici si usano quando gli elementi sono tanti e si devono aggiornare secondo uno schema quindi tramite un ciclo for i controlli vengono richiamati tutti senza dover specificare ogni singolo nome.
Per quanto riguarda invece il collegamento con il registratore di cassa non ti saprei dire.


Saluti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
roby67
Messaggi: 23
Iscritto il: lunedì 8 ottobre 2018, 11:41

Re: GEST magazzino + export csv

Messaggio da roby67 »

Grazie per il consiglio... ho anche modificato la macro creandone una che prende i valori solo di alcune colonne...( es. ID - quantità e prezzo )
Non riesco a capire però quale riga della macro imposta le delimitazioni (virgola, oppure punto virgola) per creare il file csv... oppure la macro non si preoccupa di questo? Comunque Prestashop vuole il ; per le colonne.
La macro funziona perfettamente unico problema è che il campo = DESCRIZIONE del mio formulario solito contiene codice HTML, con i commenti "alt" delle immagini e altri caratteri speciali, quando apro il file con open office (dopo aver cliccato sul pulsante) i dati del campo DESCRIZIONE vengono compilati su più colonne... solo per colpa di quel campo.

Consigli in merito?
Poi al prossimo post metterò ... risolto :)

Buona giornata
Roberto
Openoffice 4.5.1 Windows 10
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: GEST magazzino + export csv

Messaggio da Gaetanopr »

Buongiorno
roby67 ha scritto: Non riesco a capire però quale riga della macro imposta le delimitazioni (virgola, oppure punto virgola) per creare il file csv... oppure
la macro non si preoccupa di questo? Comunque Prestashop vuole il ; per le colonne.
Questa è la parte del codice...

Codice: Seleziona tutto

Stringa = IdProdotto & ";" & Immagini & ";" & NomeProdotto & ";" & CodiceProdotto & ";"
come puoi notare tra una colonna ed un'altra inserisco il punto e virgola
roby67 ha scritto: La macro funziona perfettamente unico problema è che il campo = DESCRIZIONE del mio formulario solito contiene codice HTML, con
i commenti "alt" delle immagini e altri caratteri speciali, quando apro il file con open office (dopo aver cliccato sul pulsante)
i dati del campo DESCRIZIONE vengono compilati su più colonne... solo per colpa di quel campo.
dovresti allegare un esempio con il campo in questo modo.

Saluti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
roby67
Messaggi: 23
Iscritto il: lunedì 8 ottobre 2018, 11:41

Re: GEST magazzino + export csv

Messaggio da roby67 »

Ciao!

Ho guardato bene... giustamente il file csv impostato su = ; come richiede prestashop... reagisce ad ogni punto e virgola presente nell'HTML della descrizione completa (la descrizione breve è ok).

Ho fatto una prova mettendo il codice html sottoriportato nel DB Gest nel campo Descrizione di un'articolo a caso... ho cliccato sul pulsante e come previsto il testo si è spalmato su più colonne.
Ho cliccato poi il pulsante anche per un'altro articolo.

Nel file csv allegato vedrai due righe, una giusta e una sballata.

Soluzione? Posso ripulire il codice HTML ... togliere i punti e virgola... si perdono margini e allineamenti per le foto... (risultato da verificare, magari è passabile.
Oppure far leggere alla macro tutto il campo Descrizione come stringa unica... saltando i ;
Che dici?

Esempio Descrizione

Codice: Seleziona tutto

<p><img style="margin: 3px 9px; float: left;" title="logo gabel" src="http://www.texart-shop.com/offerte/img/cms/logo_gabel_1.jpg" alt="logo gabel" /> Completo copripiumino grande collezione Chromo Gabel, sacco doubleface stampato cm 250*205 con federe e sottolenzuolo (made in Italy). Colore: sacco e federe doubleface variante beige / avorio, sottolenzuolo coordinato. Aggancio veloce con tutti i piumini Gabel. Tessuto 100% cotone. Lavabile in lavatrice a 40 gradi.</p><p>&nbsp</p> <p>Ogni confezione comprende:</p> <p>N 2 federe cm 50 * 80</p> <p>N 1 fodera a sacco cm 250 * 205</p> <p>N 1 sottolenzuolo cm 175 * 200</p> <p>&nbsp</p> <p></p> <p style="margin-left: 6px; margin-right: 6px; vertical-align: middle;" title="privo di sostanze nocive"><img style="margin-left: 5px; margin-right: 5px; vertical-align: middle;" title="sistema di aggancio piumio" src="http://www.texart-shop.com/offerte/img/cms/gabel_logo_piumio.jpg" alt="sistema di aggangio brevettato" width="50" height="45" />- Aggancio veloce con i piumini gabel</p> <p>&nbsp</p> <p style="margin-left: 6px; margin-right: 6px; vertical-align: middle;" title="privo di sostanze nocive"> <img style="vertical-align: middle;" title="puro cotone" src="http://www.texart-shop.com/offerte/img/cms/gabel_logo_lav.jpg" alt="puro cotone" width="30" height="34" /> - Puro cotone<img style="vertical-align: middle; margin-left: 7px; margin-right: 7px;" title="made in italy" src="http://www.texart-shop.com/offerte/img/cms/gabel_logo_italia.jpg" alt="made in italy" width="55" height="12" /> - Made in Italy</p><p>&nbsp</p> <p style="vertical-align: middle; margin-left: 7px; margin-right: 7px;" title="made in italy"></p> <p style="vertical-align: middle; margin-left: 0px; margin-right: 0px;" title="angoli con elastici"> <img style="margin-left: 6px; margin-right: 6px; vertical-align: middle;" title="privo di sostanze nocive" src="http://www.texart-shop.com/offerte/img/cms/gabel_oekotex.jpg" alt="privo di sostanze nocive" width="57" height="35" /> - Privo di sostanze nocive</p> <p>&nbsp</p> <p>Spedito con fattura fiscale.</p> <p>Per maggiori informazioni guarda la scheda tecnica.</p>
Allegati
agg_articoli_web.csv
(3.7 KiB) Scaricato 125 volte
Openoffice 4.5.1 Windows 10
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: GEST magazzino + export csv

Messaggio da Gaetanopr »

roby67 ha scritto: Oppure far leggere alla macro tutto il campo Descrizione come stringa unica... saltando i ;
Che dici?
L'unico modo mantenendo i punto e virgila nel campo descrizione è racchiudere la stringa tra " e raddoppiare quelle esistenti.
Prova in questo modo

Codice: Seleziona tutto

Sub Main(oev)

Dim iNumero As Integer
Dim sRiga As String
Dim aFile As String
Dim sMsg as String
ID = oev.Source.Model.Parent.GetByIndex(5).Currentvalue
aFile = "D:\Users\Gaetano\Desktop\agg_articoli_web.csv" 
iNumero = Freefile
Open aFile For Input As #iNumero

sBaseDatos = "gest"
oDBC = createUnoService("com.sun.star.sdb.DatabaseContext")	
oBD = oDBC.getByName( sBaseDatos )
oConexion = oBD.getConnection("","")
oDeclaracion = oConexion.createStatement()

    sql = "SELECT * FROM Articoli WHERE IDprodotto ='" & ID & "'" 
        Result =  oDeclaracion.executeQuery(sql) 
        Result.next() 
        IdProdotto = Result.getString(27) 
        Immagini = Result.getString(28)
        NomeProdotto = Result.getString(29)
        CodiceProdotto = Result.getString(30)
        IDCategoria = Result.getString(31)
        prezzobase = Result.getString(32)
        idiva = Result.getString(33)
        quantita = Result.getString(34)
        attivo = Result.getString(35)
        brevedescrizione = Result.getString(36)
        descrizione = Result.getString(37)
        metadescizione = Result.getString(38)
        metakeywords = Result.getString(39)
        metatitolo = Result.getString(40)
        peso = Result.getString(41)
        produttore=  Result.getString(42)
        caratteristiche = Result.getString(43)

svc1 = createUnoService("com.sun.star.sheet.FunctionAccess")
descrizione = svc1.callFunction("SUBSTITUTE", Array(descrizione, Chr(34), Chr(34)&Chr(34)) 
descrizione = Chr(34) & descrizione & Chr(34)

Dim Arr()
While not eof(iNumero)
Line Input #iNumero, sRiga
if sRiga <> "" Then 
Stringa = ""
Codice = Split(sRiga, ";")
     If Codice(0) <> ID then
        Stringa = sRiga
     Elseif Codice(0) = ID Then 
        trovato = true
        Stringa = IdProdotto & ";" & Immagini & ";" & NomeProdotto & ";" & CodiceProdotto & ";"
        Stringa = Stringa & ";" & IDCategoria & ";" & prezzobase & ";" & idiva & ";"
        Stringa = Stringa & ";" & quantita & ";" & attivo & ";" & brevedescrizione & ";"
        Stringa = Stringa & ";" & descrizione & ";" & metadescizione & ";" & metakeywords & ";"
        Stringa = Stringa & ";" & metatitolo & ";" & peso & ";" & produttore & ";" & caratteristiche
     End If
     Redim Preserve Arr(0 To x)
     Arr(x) = Stringa 
     x = x + 1
end if 
wend
Stringa = ""
   if trovato = false then 
        Stringa = IdProdotto & ";" & Immagini & ";" & NomeProdotto & ";" & CodiceProdotto & ";"
        Stringa = Stringa & ";" & IDCategoria & ";" & prezzobase & ";" & idiva & ";"
        Stringa = Stringa & ";" & quantita & ";" & attivo & ";" & brevedescrizione & ";"
        Stringa = Stringa & ";" & descrizione & ";" & metadescizione & ";" & metakeywords & ";"
        Stringa = Stringa & ";" & metatitolo & ";" & peso & ";" & produttore & ";" & caratteristiche
       Redim Preserve Arr(0 To x)
       Arr(x) = Stringa 
   end if

 Close #iNumero


REM APRO IL FILE IN SCRITTURA
        iNumero = Freefile
        Open aFile For Output As #iNumero
        For i = 0 To Ubound(Arr)
           sOutDataLine = Arr(i)
            Print #iNumero, sOutDataLine
        Next i
       Close #iNumero


End Sub

PS: Percorso da cambiare
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
roby67
Messaggi: 23
Iscritto il: lunedì 8 ottobre 2018, 11:41

Re: GEST magazzino + export csv

Messaggio da roby67 »

Buongiorno ! :D
Ti ringrazio ancora una volta di cuore la macro funziona, aggiungendo le righe =

Codice: Seleziona tutto

svc1 = createUnoService("com.sun.star.sheet.FunctionAccess")
descrizione = svc1.callFunction("SUBSTITUTE", Array(descrizione, Chr(34), Chr(34)&Chr(34))
descrizione = Chr(34) & descrizione & Chr(34)
il campo descrizione viene scritto al suo posto tutto intero.
Direi che questo punto è stato risolto.

Ricordo a chi volesse scaricare gli esempi che si tratta di un database + relativi formulari per una piccola gestione articoli con creazione automatica di file csv da importare in prestashop, si possono modificare le macro diminuendo le colonne da inserire nel csv oppure anche duplicare i pulsanti per scrivere su diversi file csv. Con i file csv si aggiornano gli articoli in vendita ... aggiornando prezzi quantità ecc ecc, non fornisce una sincronizzazione in real time ma per chi come me, che vende articoli nei negozi fisici senza passarli con il codice a barre in cassa (...e quindi diventa inutile affidarsi a servizi web di sincronizzazione), accorcia tutto l'aggiornamento manuale ... chi conosce prestashop sa di cosa sto parlando.

AGGIORNAMENTO:
per scrivere i dati nel file csv ma ordinati per ID articolo aggiungere il codice sotto in fondo alla macro, per scrivere nel file csv eliminando le colonne vuote occorre modificare la macro mettendo tutti i campi da trascrivere nel file sulla stessa riga di codice, adesso ad ogni passaggio a capo nel file si crea colonna vuota.

Codice: Seleziona tutto

REM LE PROSSIME RIGHE SERVONO A RIORDINARE I DATI PER IDPRODOTTO
REM LA PRIMA RIGA è COSTITUITA DALLE INTESTAZIONI QUINDI NON VIENE RIORDINATA
   ReDim Matrice(1 To Ubound(Arr), 1 To 2)
   For I = 1 To Ubound(Arr)
      ID = Split(Arr(i), ";")
      Matrice(I, 1) = ID(0)
      Matrice(I, 2) = Arr(i)
   Next I

   For I = 2 To Ubound(Arr)
     If Matrice(I,1) < Matrice(I - 1,1) Then
         A = 1

       Do Until Matrice(I, 1) < Matrice(A, 1)
          A = A + 1
       Loop
       Fine = A

       A1 = Matrice(I, 1)
       A2 = Matrice(I, 2)

       For A = I To Fine + 1 Step -1
         Matrice(A, 1) = Matrice(A - 1, 1)
         Matrice(A, 2) = Matrice(A - 1, 2)
       Next
         Matrice(Fine, 1) = A1
         Matrice(Fine, 2) = A2

     End If
   Next
   
   For i = 1 To Ubound(Arr)
    Arr(i) = Matrice(i, 2)
   Next i
   
REM APRO IL FILE IN SCRITTURA
        iNumero = Freefile
        Open aFile For Output As #iNumero
        For i = 0 To Ubound(Arr)
           sOutDataLine = Arr(i)
            Print #iNumero, sOutDataLine
        Next i
       Close #iNumero


End Sub
e questa è la parte da modificare per evitare colonne vuote, Stringa= di seguito tutti i campi che interessano sulla stessa riga

Codice: Seleziona tutto

Elseif Codice(0) = ID Then
        trovato = true
        Stringa = IdProdotto & ";" & Immagini & ";" & NomeProdotto & ";" & CodiceProdotto & ";"
        Stringa = Stringa & ";" & IDCategoria & ";" & prezzobase & ";" & idiva & ";"
        Stringa = Stringa & ";" & quantita & ";" & attivo & ";" & brevedescrizione & ";"
        Stringa = Stringa & ";" & descrizione & ";" & metadescizione & ";" & metakeywords & ";"
        Stringa = Stringa & ";" & metatitolo & ";" & peso & ";" & produttore & ";" & caratteristiche
     End If
     Redim Preserve Arr(0 To x)
     Arr(x) = Stringa
     x = x + 1
end if
wend
Stringa = ""
   if trovato = false then
        Stringa = IdProdotto & ";" & Immagini & ";" & NomeProdotto & ";" & CodiceProdotto & ";"
        Stringa = Stringa & ";" & IDCategoria & ";" & prezzobase & ";" & idiva & ";"
        Stringa = Stringa & ";" & quantita & ";" & attivo & ";" & brevedescrizione & ";"
        Stringa = Stringa & ";" & descrizione & ";" & metadescizione & ";" & metakeywords & ";"
        Stringa = Stringa & ";" & metatitolo & ";" & peso & ";" & produttore & ";" & caratteristiche
       Redim Preserve Arr(0 To x)
       Arr(x) = Stringa 
Grazie ancora e buona giornata
Roberto
Openoffice 4.5.1 Windows 10
salvo.p
Messaggi: 5
Iscritto il: giovedì 25 febbraio 2021, 23:27

Re: GEST magazzino + export csv

Messaggio da salvo.p »

Gaetanopr ha scritto:La tabella Articoli è la stessa ma il campo di testo da dove prelevare il valore ID è un altro, nella precedente corrispondeva all'indice 5 su questo formulario all'indice 33.
Prova a cambiare questa parte

Codice: Seleziona tutto

ID = oev.Source.Model.Parent.GetByIndex(5).Currentvalue
con

Codice: Seleziona tutto

ID = oev.Source.Model.Parent.GetByIndex(33).Currentvalue
o ancora più semplicemente tramite il nome

Codice: Seleziona tutto

ID = oev.Source.Model.Parent.GetByName("Campo di testo 1").Currentvalue
Solitamente sarebbe buona norma dare un nome significativo ai vari controlli sul formulario, specialmente quando si usano le macro, ad esempio "ID" al posto di "Campo di testo 1" o all'indice 33, in maniera che quando si legge la macro subito si capisce di cosa si tratta.

Saluti
Buongiorno,
ho letto questa discussione e mi è stata molto utile, ringrazio pertanto tutti voi.

Mi scuso se mi intrometto ma vorrei chiedervi se si può aggiungere un ciclo FOR in questa macro per aggiungere al CSV tutti i record di una tabella che soddisfano determinate condizioni
Se si, come posso impostarlo?
OpenOffice 4 - LibreOffice 7.1 su Windows 10
Rispondi