[Risolto] Comparazione prodotti in maschera di dialogo
[Risolto] Comparazione prodotti in maschera di dialogo
Mi spiego;
Premendo sul pulsante "Avvio Filtro", si apre una maschera di dialogo dove all'interno dei riquadri "Anagrafica Cliente e Descrittiva" sono riportati tutti i dati posti nella tabella di "Calc".
Adesso tramite la casella "Categoria", riesco a filtrare i dati espressi nella colonna "Descrizione", esempio, se scrivo "Armadio", mi filtra i dati per la voce "Armadio", se metto "Cucina", idem come prima ecc...
Quello che non so fare e scopo dell'aiuto, è quello che una volta filtrato il nome attraverso la casella "Categoria", tramite i tre "OptionButton" devo filtrare un'ulteriore corrispondenza del dato, per la parola "Conveniente", "Prezzo Alto" e "Verifica".
Esempio: se scrivo nella casella "Categoria" la parola "Tavolo", attualmente nel riquadro "Descrittiva" mi riporta tutti i dati filtrati per questa parola, adesso se schiaccio su uno dei tre bottoni, sempre nel riquadro "Descrittiva" e per la categoria già trovata, vorrei vedere quelli appartenenti al bottone scelto, quindi per la categoria "Tavolo" e pulsante "Conveniente", tutti i dati ad esso associati e così via.
Spero di esser stato chiaro e sarebbe possibile capire come si fa??
Un grazie in anticipo a chi mi darà una mano.
- Allegati
-
- Comparazione Prodotti.ods
- (24.77 KiB) Scaricato 173 volte
Re: Comparazione prodotti in maschera di dialogo
Nella listfill controlli oltre al resto che il campo Verificare sia quello prescelto
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Comparazione prodotti in maschera di dialogo
Se invece ho interpretato male le tue parole, potresti spiegarti meglio, grazie.
Re: Comparazione prodotti in maschera di dialogo
quello che intendo è:
1) interrogare gli optionbutton per vedere quale è stato attivato
2) nell'IF che popola la listbox inserire anche la condizione relativa alla verifica
In aggiunta potresti anche per ogni optionbutton assegnare all'evento Stato Modificato la sub listfill modificata come sopra, in questo caso la variabile Daric deve prendere non da source ma da TextField1 perché il source dell'optionbutton non contiene la lettera che serve per il filtro.
Codice: Seleziona tutto
Daric = ucase(Dlg.getControl("TextField1").Text)
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Comparazione prodotti in maschera di dialogo
Codice: Seleziona tutto
sub SceltaBottone ' controllo tramite optionbutton
Dim Conveniente as string
Dim PrezzoAlto as string
Dim Verificare as string
Conveniente = Dlg.getControl("OptionButton1").state
PrezzoAlto = Dlg.getControl("OptionButton2").state
Verificare = Dlg.getControl("OptionButton3").state
If dlg.getControl("OptionButton1").state = True Then
datamodel.addRows(dimarray(ubound(Dati)), (Dati))
datamodel2.addRows(dimarray(ubound(Dati2)), Dati2) 'controllo sulla seconda tabella
else
datamodel.removeAllRows()
datamodel2.removeAllRows() 'controllo sulla seconda tabella
Daric = ucase(Dlg.getControl("TextField1").Text)
dim rows(), rows2()
dim datan as string
x = - 1
for r = 0 to ubound(Dati)
if ucase(left(Dati2(r)(9) & " " & Dati(r)(1) & " " & Dati(r)(2), len(Daric))) = Daric then
x = ubound(rows) + 1
redim preserve rows(x)
redim preserve rows2(x) 'controllo sulla seconda tabella
rows(x) = Dati(r)
rows2(x) = Dati2(r) 'controllo sulla seconda tabella
end if
next r
' così è molto più veloce
if x >= 0 then
datamodel.addRows(dimarray(x), rows)
datamodel2.addRows(dimarray(x), rows2) 'controllo sulla seconda tabella
end if
end if
End sub
Codice: Seleziona tutto
sub listfil(optional event) ' controllo tramite ListBox
if ismissing(event) then
datamodel.addRows(dimarray(ubound(Dati)), (Dati))
datamodel2.addRows(dimarray(ubound(Dati2)), Dati2) 'controllo sulla seconda tabella
else
datamodel.removeAllRows()
datamodel2.removeAllRows() 'controllo sulla seconda tabella
Daric = Dlg.getControl("ListBox1").selectedItem
dim rows(), rows2()
dim datan as string
x = - 1
for r = 0 to ubound(Dati)
if ucase(left(Dati2(r)(9) & " " & Dati(r)(1) & " " & Dati(r)(3), len(Daric))) = Daric then
x = ubound(rows) + 1
redim preserve rows(x)
redim preserve rows2(x) 'controllo sulla seconda tabella
rows(x) = Dati(r)
rows2(x) = Dati2(r) 'controllo sulla seconda tabella
end if
next r
' così è molto più veloce
if x >= 0 then
datamodel.addRows(dimarray(x), rows)
datamodel2.addRows(dimarray(x), rows2) 'controllo sulla seconda tabella
end if
end if
End sub
Re: Comparazione prodotti in maschera di dialogo
Codice: Seleziona tutto
sub listfill(optional event)
if ismissing(event) then
datamodel.addRows(dimarray(ubound(Dati)), (Dati))
datamodel2.addRows(dimarray(ubound(Dati2)), Dati2) 'controllo sulla seconda tabella
else
verifica=""
if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente"
if Dlg.getControl("OptionButton3").state = true then verifica = "Verificare"
if Dlg.getControl("OptionButton2").state = true then verifica = "Prezzo Alto"
datamodel.removeAllRows()
datamodel2.removeAllRows() 'controllo sulla seconda tabella
' Daric = ucase(event.Source.Text)
Daric = ucase(Dlg.getControl("TextField1").Text)
dim rows(), rows2()
dim datan as string
x = - 1
for r = 0 to ubound(Dati)
if verifica = "" then ' nessun optionB attivato1
v=Dati2(r)(9)
else
v=verifica
end if
if ucase(left(Dati2(r)(1) & " " & Dati(r)(1) & " " & Dati(r)(2), len(Daric))) = Daric and Dati2(r)(9) = v then ' aggiunta verifica optionB
x = ubound(rows) + 1
redim preserve rows(x)
redim preserve rows2(x) 'controllo sulla seconda tabella
rows(x) = Dati(r)
rows2(x) = Dati2(r) 'controllo sulla seconda tabella
end if
next r
' così è molto più veloce
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Comparazione prodotti in maschera di dialogo
Codice: Seleziona tutto
if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente"
Codice: Seleziona tutto
if Dlg.getControl("ListBox1").selecteditem = "Conveniente" then verifica = "Conveniente"
Volendo adesso cancellare il contenuto posto all'interno della "ListBox" per eseguire una nuova ricerca tramite il pulsante preposto "Nuova Ricerca", ho scritto questa stringa:
Codice: Seleziona tutto
Dlg.getControl("ListBox1").selecteditem = removeselecteditem
Puoi per piacere spiegarmi come risolvere la cosa?, grazie
Re: Comparazione prodotti in maschera di dialogo
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Comparazione prodotti in maschera di dialogo
ciao patel a dire il vero l'avevo citata nel precedente post, infatti avevo riportato una sub sia per l'optionbutton che per la listBoxpatel ha scritto:cosa c'entra la listbox ? abbiamo parlato fino a poco fa di optionbutton
forse ti era sfuggita questa cosa, ma io stavo provando a fare entrambi le cose ed avendomi spiegato il funzionamento sugli optionbutton, mi sono dedicato alla "ListBox", infatti ti ho riscritto dicendoti:sanraff ha scritto:Tentando di interpretare il tuo consiglio, ho provato a scrivere due sub, uno con il controllo degli "OptionButton" e l'altro tramite "Listbox1", chiaramente non avendo alcuna base informatica non mi funziona niente, se ti va e lungi da me il pensiero di volerti in continuazione romperti le scatole, puoi gentilmente con un esempio funzionante spiegarmi dove sbaglio??, grazie
.sanraff ha scritto:Andando avanti nell'ascoltare i tuoi consigli, sono riuscito a ricavare anche la stringa di comando per gestire il filtro tramite una "listBox", cioè ho sostituitocon questaCodice: Seleziona tutto
if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente"
la quale funziona, anche se non so se è corretta scriverla così.Codice: Seleziona tutto
if Dlg.getControl("ListBox1").selecteditem = "Conveniente" then verifica = "Conveniente"
Adesso però volendo cancellare il contenuto posto all'interno della "ListBox" per eseguire una nuova ricerca tramite il pulsante preposto "Nuova Ricerca", ho scritto questa stringa:però il sistema mi restituisce il messaggio "La Proprietà è di sola lettura" e blocca tutto.Codice: Seleziona tutto
Dlg.getControl("ListBox1").selecteditem = removeselecteditem
Puoi per piacere spiegarmi come risolvere la cosa?, grazie
Re: Comparazione prodotti in maschera di dialogo
mi sembra di averlo fatto in questo post, ti ho dato un pezzo di codice da sostituire al tuo nella listfill, questo risolve il problema.patel ha scritto:Sei sulla buona strada, ma devi inserire i controlli degli optionbutton nella listfill come ti avevo già dettoCodice: Seleziona tutto
sub listfill(optional event) if ismissing(event) then datamodel.addRows(dimarray(ubound(Dati)), (Dati)) datamodel2.addRows(dimarray(ubound(Dati2)), Dati2) 'controllo sulla seconda tabella else verifica="" if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente" if Dlg.getControl("OptionButton3").state = true then verifica = "Verificare" if Dlg.getControl("OptionButton2").state = true then verifica = "Prezzo Alto" datamodel.removeAllRows() datamodel2.removeAllRows() 'controllo sulla seconda tabella ' Daric = ucase(event.Source.Text) Daric = ucase(Dlg.getControl("TextField1").Text) dim rows(), rows2() dim datan as string x = - 1 for r = 0 to ubound(Dati) if verifica = "" then ' nessun optionB attivato1 v=Dati2(r)(9) else v=verifica end if if ucase(left(Dati2(r)(1) & " " & Dati(r)(1) & " " & Dati(r)(2), len(Daric))) = Daric and Dati2(r)(9) = v then ' aggiunta verifica optionB x = ubound(rows) + 1 redim preserve rows(x) redim preserve rows2(x) 'controllo sulla seconda tabella rows(x) = Dati(r) rows2(x) = Dati2(r) 'controllo sulla seconda tabella end if next r ' così è molto più veloce
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Comparazione prodotti in maschera di dialogo
Certo che l'hai fatto e nessuno dice il contrario, infatti per gli "optionbutton" funziona.patel ha scritto:mi sembra di averlo fatto in questo post, ti ho dato un pezzo di codice da sostituire al tuo nella listfill, questo risolve il problema.
Poi però ho cercato di spiegarti che:
..... e quindi ti chiedevo un consiglio per capire se andava scritta realmente così.sanraff ha scritto:Andando avanti nell'ascoltare i tuoi consigli, sono riuscito a ricavare anche la stringa di comando per gestire il filtro tramite una "listBox", cioè ho sostituitocon questaCodice: Seleziona tutto
if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente"
la quale funziona, anche se non so se è corretta scriverla così.Codice: Seleziona tutto
if Dlg.getControl("ListBox1").selecteditem = "Conveniente" then verifica = "Conveniente"
Poi facendo test, mi sono accorto che mancava qualcosa e ti comunicavo che:
...... quindi ti chiedevo un ulteriore aiuto per capire come scrivere correttamente la stringa di comando.sanraff ha scritto:Volendo adesso cancellare il contenuto posto all'interno della "ListBox" per eseguire una nuova ricerca tramite il pulsante preposto "Nuova Ricerca", ho scritto questa stringa:però il sistema mi restituisce il messaggio "La Proprietà è di sola lettura" e blocca tutto.Codice: Seleziona tutto
Dlg.getControl("ListBox1").selecteditem = removeselecteditem
Puoi per piacere spiegarmi come risolvere la cosa?, grazie
Spero di aver fatto un pò di chiarezza, ... ancora grazie per il tuo contributo.
Re: Comparazione prodotti in maschera di dialogo
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Comparazione prodotti in maschera di dialogo
Non al posto degli OptionButton, ma come avevo spiegato nel mio terzo post, stavo cercando di imparare entrambe le soluzioni:patel ha scritto:quindi ora al posto degli optionbutton usi una listbox ? se è così allega il file aggiornato
... solo che tu mi hai proposto solo quella inerente all'OptionButton, da cui ho trovato lo spunto per realizzare la sub per far funzionare anche quella inerente alla ListBox1 e nei post successivi ti chiedevo semplicemente di verificare solo due cose prima di scrivere "Risolto", cioè:sanraff ha scritto:Tentando di interpretare il tuo consiglio, ho provato a scrivere due sub, uno con il controllo degli "OptionButton" e l'altro tramite "Listbox1", chiaramente non avendo alcuna base informatica non mi funziona niente, se ti va e lungi da me il pensiero di volerti in continuazione romperti le scatole, puoi gentilmente con un esempio funzionante spiegarmi dove sbaglio??, grazie
1)
2)sanraff ha scritto:Andando avanti nell'ascoltare i tuoi consigli, sono riuscito a ricavare anche la stringa di comando per gestire il filtro tramite una "listBox", cioè ho sostituitocon questaCodice: Seleziona tutto
if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente"
la quale funziona, anche se non so se andava effettivamente scritta così.Codice: Seleziona tutto
if Dlg.getControl("ListBox1").selecteditem = "Conveniente" then verifica = "Conveniente"
Adesso, al di là del file allegato a me occorrerebbe capire soprattutto come risolvere il punto 2, la sub dove ho il problema si chiama "NuovaRicerca"; poiché per quanto riguarda il punto 1 devi solo dirmi se la sintassi è corretta oppure no, in quanto tutto sommato la macro funziona.sanraff ha scritto:Volendo adesso cancellare il contenuto posto all'interno della "ListBox" per eseguire una nuova ricerca tramite il pulsante preposto "Nuova Ricerca", ho scritto questa stringa:però il sistema mi restituisce il messaggio "La Proprietà è di sola lettura" e blocca tutto.Codice: Seleziona tutto
Dlg.getControl("ListBox1").selecteditem = removeselecteditem
Un'ultima cosa, facendo test ho notato che quando scrivo nella casella "Categoria" il soggetto da filtrare, a volte e non sempre il programma tenta di bloccarsi, le scritte poste nella tabella iniziano a tremare velocemente e poi mi apre la pagina della macro e si posiziona a caso su una riga come volesse indicarmi che c'è un errore che poi errori non c'è ne sono, cioè entra in una sorta di non stabilità.
Spero di esser stato chiaro e grazie per il tuo contributo.
- Allegati
-
- Comparazione Prodotti con ListBox.ods
- (27.78 KiB) Scaricato 155 volte
Re: Comparazione prodotti in maschera di dialogo
non è così, la soluzione che ti ho proposto accetta ambedue i filtri, a questo punto te lo allego io il filesanraff ha scritto:patel ha scritto: ... solo che tu mi hai proposto solo quella inerente all'OptionButton, d.....
- Allegati
-
- ListboxMultiFiltrata_Option.ods
- (28.69 KiB) Scaricato 149 volte
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Comparazione prodotti in maschera di dialogo
Ripartiamo da capo tentando di fare una volta per tutte chiarezza.
In un mio progetto volevo imparare a filtrare i dati sia con l'uso dell'optionbutton che con la casella di riepilogo "ListBox1", all'inizio mi hai risposto proponendomi una parte del codice inerente all'optionbutton, che io l'ho adattato alle mie esigenze ed ha funzionato come volevo io.
Adesso volendo imparare a fare la stessa cosa con una casella di riepilogo "ListBox1", ho preso spunto da quel codice, modificando una stringa di comando cioè:
Codice: Seleziona tutto
if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente"
Codice: Seleziona tutto
if Dlg.getControl("ListBox1").selecteditem = "Conveniente" then verifica = "Conveniente"
Poi facendo test sul mio lavoro, mi sono accorto che al progetto mancava una cosa cioè:
sanraff ha scritto:Volendo adesso cancellare il contenuto posto all'interno della casella di riepilogo "ListBox1" per eseguire una nuova ricerca tramite il pulsante preposto "Nuova Ricerca", ho scritto questa stringa:però il sistema mi restituisce il messaggio "La Proprietà è di sola lettura" e blocca tutto.Codice: Seleziona tutto
Dlg.getControl("ListBox1").selecteditem = removeselecteditem
ed anche a questa mia richiesta non mi hai mai risposto, quindi in definitiva, in questi post, stavo chiedendo un aiuto per risolvere quet'ultimo inconveniente.
Spero di esser stato chiaro più del solito, riallego il mio progetto e ti chiedo gentilmente di aprirlo e fare test, dove potrai notare che al posto degli optionbutton adesso c'è una casella di riepilogo rappresentata con un'etichetta che ho chiamato "Filtra per Scelta" , che se fai girare il programma noterai che quando schiaccerai sul pulsante "Nuova Ricerca", la macro va in blocco per i motivi sopraccitati.
Per concludere poi avevo posto un'osservazione, cioè:
Giudica tu se puoi rispondermi anche all'osservazione e cmq ti ringrazio sempre per il tuo contributo.sanraff ha scritto:... facendo test ho notato che quando scrivo nella casella "Categoria" il soggetto da filtrare, a volte e non sempre il programma tenta di bloccarsi, le scritte poste nella tabella iniziano a tremare velocemente e poi mi apre la pagina della macro e si posiziona a caso su una riga come volesse indicarmi che c'è un errore che poi errori non c'è ne sono, cioè entra in una sorta di non stabilità.
Allego file per fare test.
- Allegati
-
- Comparazione Prodotti con ListBox.ods
- (27.78 KiB) Scaricato 114 volte
Re: Comparazione prodotti in maschera di dialogo
Scusami sanraff ma io te l'ho chiesto se al posto degli optionbutton usi una listbox e tu hai detto di no.sanraff ha scritto:Non al posto degli OptionButton, ma come avevo spiegato nel mio terzo post, stavo cercando di imparare entrambe le soluzioni:patel ha scritto:quindi ora al posto degli optionbutton usi una listbox ? se è così allega il file aggiornato
.
Aprendo il tuo ultimo file vedo che gli optionbutton non ci sono più.
comunque prova così
Codice: Seleziona tutto
sub NuovaRicerca
Dlg.getControl("TextField1").text = ""
Dlg.getControl("TextField1").setfocus()
Dlg.getControl("ListBox1").selectItemPos( 0, True )
listfill
End sub
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Comparazione prodotti in maschera di dialogo
Adesso prima di mettere "Risolto", volevo sapere se potevi darmi un tuo parere a due mie osservazioni alle quali non mi hai mai dato una risposta, cosa invece che mi occorrerebbe per imparare cose nuove, segue:
1)
2)sanraff ha scritto:Adesso volendo imparare a fare la stessa cosa con una casella di riepilogo "ListBox1", ho preso spunto da quel codice, modificando una stringa di comando cioè:l'ho modificata cosìCodice: Seleziona tutto
if Dlg.getControl("OptionButton1").state = true then verifica = "Conveniente"
che fuziona, però ti chiedevo ugualmente un parere tecnico per capire se la sintassi era corretta oppure andava scritta in un altro modo ...Codice: Seleziona tutto
if Dlg.getControl("ListBox1").selecteditem = "Conveniente" then verifica = "Conveniente"
Giudica tu se puoi rispondermi a queste due osservazione e cmq ti ringrazio sempre per il tuo contributo.sanraff ha scritto:Per concludere poi avevo posto un' altra osservazione, cioè:
... facendo test ho notato che quando scrivo nella casella "Categoria" il soggetto da filtrare, a volte e non sempre il programma tenta di bloccarsi, le scritte poste nella tabella della maschera di dialogo, iniziano a tremare velocemente e poi mi apre la pagina della macro e si posiziona a caso su una riga come se volesse indicarmi che c'è un errore che poi errori non c'è ne sono, cioè entra in una sorta di non stabilità.
Re: Comparazione prodotti in maschera di dialogo
verifica = Dlg.getControl("ListBox1").selecteditem
2) non ho notato niente, forse dipende dalla velocita del processore, infattti ogni volta che premi un tasto viene eseguita la sub listfill (chiamata dall'evento Testo Modificato della textbox) che riscrive le listbox
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Comparazione prodotti in maschera di dialogo
A questo punto mi tengo le mie visto che sono funzionanti, mi dispiace che non si possa fare nulla sulla stabilità del programma perchè non mi sembra del tutto opportuno che mentre è in esecuzione tutto ad un tratto per cavoli sua apre la macro dichiarando che c'è un errore quando alla verifica l'errore non c'è.
Termino qui la discussione, perché alla fine le macro funzionano e riallego i due file per metterli a disposizione della comunità.
Grazie di tutto ci vediamo alla prossima.
- Allegati
-
- Comparazione Prodotti con option button.ods
- (24.97 KiB) Scaricato 109 volte
-
- Comparazione Prodotti con ListBox.ods
- (27.78 KiB) Scaricato 121 volte
Re: [Risolto] Comparazione prodotti in maschera di dialogo
Codice: Seleziona tutto
Sub listfill(optional event) ' macro che funziona su filtro scelta List Box
if ismissing(event) then
datamodel.addRows(dimarray(ubound(Dati)), (Dati))
datamodel2.addRows(dimarray(ubound(Dati2)), Dati2) 'controllo sulla seconda tabella
else
verifica = Dlg.getControl("ListBox1").selecteditem ' <<<<<<<<<<<<<
datamodel.removeAllRows()
.......
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta