Stampa unione di un subform tramite pulsante

Discussioni sulle caratteristiche di database
Rispondi
reietto222
Messaggi: 12
Iscritto il: domenica 22 luglio 2018, 21:26

Stampa unione di un subform tramite pulsante

Messaggio da reietto222 »

Ciao.
Anzitutto mi scuso per aver aperto un paio di discussioni (che ho chiuso ora) ma non avevo le idee molto chiare e soprattutto volevo provare a risolvere da solo i problemi del mio PRIMO database ...ho provveduto ora a chiuderle per non lasciarle aperte.

Vorrei un paio di consigli visto che ormai è da una settimana che provo e riprovo ma non trovo la soluzione alle mie domande.

Problema:
Sto sviluppando un piccolo database di prova per poter permettere la registrazione delle ordinanze all'interno del mio ufficio.

L'idea è semplice, utilizzando un form "form_inserimento" permetto all'utente di inserire tutti i dati utili dell' ordinanza (per registrarle nel database).
All'interno di questo form utilizzo anche una list box collegata ad una tabella "stradario" per scegliere in maniera univoca la strada ed evitare errori di compilazione da parte di chi lo utilizzerà e per facilitare le future ricerche.
Tramite un secondo formulario "form_ricerca" permetto all'utente di ricercare l'ordinanza inserita in precedenza (tramite un valore,oppure più valori tramite clausola sql AND) [qui noterete che l'inserimento della data di inizio e fine consente di ricercare non solo il valore esatto ma una serie di valori (maggiori o uguali di data iniziale e minori o uguale di data finale), la ricerca della via (visto che l'utente può inserire fino a 4 vie nella registrazione) viene effettuata a prescindere della colonna di inserimento (per facilitare la ricerca,evitando di doversi ricordare esattamente in quale campo via (1,2,3 o 4) la via è stata inserita] ------FIN QUI TUTTO BENE e sono anche contento di quel che sono riuscito a fare!!! PS. per il momento tutto senza macro,solo tramite SQL e impostazioni manuali dei vari campi.

PROBLEMA.
1)il più banale e stupido...noterete che i miei formulari (di inserimento e ricerca,sopratutto ricerca), concedono all'utente la possibilità di scrivere all'esterno dei campi del formulario (cliccando in alto a sx dello schermo,l'utente può inserire dei dati o copiarli dal subform del form_ricerca). Come posso bloccare la copia dei dati dal subform ed impedire all'utente di scrivere/copiare/cancellare all'esterno dei campi che gli fornisco??
2)IL PROBLEMA DEL TITOLO: Vorrei concedere all'utente la possibilità di aprire un documento di testo e copiare i dati di UN SOLO RECORD SELEZIONATO su un foglio di writer collegato al DB e poi aprire il documento writer (non lo allego, perchè è facilmente realizzabile per effettuare prove e perchè contiene riferimenti all'azienda (pubblica) per cui lavoro.
Vorrei realizzare questa interfaccia sia per i dati ricercati tramite "form_ricerca" (contenuti nel sub form dopo la aver eseguito la query SQL), sia dopo aver salvato i dati tramite il modulo "form_inserimento" direttamente dal form stesso (non ho ancora aggiunto il bottone...ma l'idea è che l'utente inserisca i dati,schiacci il bottone "salva" e poi clicchi su un bottone "stampa dati" che apre il documento writer che vorrei utilizzare.
PS. non sarebbe male se oltre che aprire il file writer lo salvasse col nome del "numero ordinanza" e col nome delle "vie" (almeno la n°1) che formano il record.

Sò che sono tante cose, mi scuso se ho sbagliato sezione e se il mio quesito principale ne porta anche un altro (vedi problema 1) ma non sò proprio come risolvere il problema.

Grazie a chiunque proverà ad aiutarmi.
Allegati
Nuovo database_GIUSTO16.odb
(40.07 KiB) Scaricato 102 volte
Ultima modifica di reietto222 il lunedì 6 agosto 2018, 19:47, modificato 3 volte in totale.
openOffice 3.1 su Windows 7
hubert lambert
Volontario
Volontario
Messaggi: 164
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: stampa unione tramite pulsante di un subform

Messaggio da hubert lambert »

Ciao,

Ecco una proposta. La macro è quella:

Codice: Seleziona tutto

sub report_current_row(event)
    source = event.Source
    form = source.Model.Parent

    database = thisdatabasedocument
    reportname = "ordinanza1.ott"
    ID = form.getInt(form.findColumn("ID"))
    modelurl_ = split(database.URL, "/")
    modelurl_(ubound(modelurl_)) = reportname
    modelurl = convertToURL(join(modelurl_, "/"))

    reporturl = replace(modelurl, ".ott", "0.odt")
    if fileexists(reporturl) then kill(reporturl)
    
    mailer = createUnoService("com.sun.star.text.MailMerge")
    With mailer
        .DataSourceName = replace(database.Title, ".odb", "")
        .CommandType = com.sun.star.sdb.CommandType.TABLE
        .Command = "ordinanza"
        .Filter = "ID = " & ID
        .DocumentURL = modelurl
        .OutputType = com.sun.star.text.MailMergeType.FILE
        .SaveAsSingleFile = True
    End With
    mailer.execute(array())
    
    numero_ord = form.getString(form.findColumn("numero_ord"))
    via = form.getString(form.findColumn("via_1"))
    suffix = replace(numero_ord & "_" & via, "/", "-")
    newname = replace(reporturl, "ordinanza10", suffix)
    newname = convertToURL(newname)
    if fileexists(newname) then kill(newname)
    name reporturl as newname

    if msgbox("File creato: " & convertFromURL(newname) & chr(10) & "Aprirlo?", 4, "Report") = 6 then
        stardesktop.loadComponentFromURL(newname, "_default", 0, array())
    end if
end sub
Un truchetto: per non dover scrivere "UPPER" dapertutto nello SQL, puoi utilizzare il tipo di camp "VARCHAR_IGNORCASE" (vedi il file allegato).

Invece non ho capito bene il primo punto (devo essere un po' stanco ;) ):
reietto222 ha scritto:1)il più banale e stupido...noterete che i miei formulari (di inserimento e ricerca,sopratutto ricerca), concedono all'utente la possibilità di scrivere all'esterno dei campi del formulario (cliccando in alto a sx dello schermo,l'utente può inserire dei dati o copiarli dal subform del form_ricerca). Come posso bloccare la copia dei dati dal subform ed impedire all'utente di scrivere/copiare/cancellare all'esterno dei campi che gli fornisco??"]1)il più banale e stupido...noterete che i miei formulari (di inserimento e ricerca,sopratutto ricerca), concedono all'utente la possibilità di scrivere all'esterno dei campi del formulario (cliccando in alto a sx dello schermo,l'utente può inserire dei dati o copiarli dal subform del form_ricerca). Come posso bloccare la copia dei dati dal subform ed impedire all'utente di scrivere/copiare/cancellare all'esterno dei campi che gli fornisco??
A me non è possibile scrivere nel subform...

Saluti.
Allegati
Nuovo database_GIUSTO16.odb
(41.71 KiB) Scaricato 96 volte
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
reietto222
Messaggi: 12
Iscritto il: domenica 22 luglio 2018, 21:26

Re: stampa unione tramite pulsante di un subform

Messaggio da reietto222 »

Ciao, grazie della risposta.
Ti ringrazio per l'eleganza del tuo sistema, creare una tabella di ricerca invece di inserire direttamente il comando sql nella sub-form è molto più elegante e pulito.
Il problema del form "scrivibile" (problema 1) si è,a quanto pare, risolto da solo: il form di inserimento e di ricerca mi apparivano scrivibili dall'utente (puntando il mouse in alto a sx del from permetteva agli utenti di inserire del testo,sullo sfondo del form), ho scaricato il tuo file e riprovato ed ora la scrittura non è più possibile.( non so proprio il perché,ma l'importante è che il problema si sia risolto).

Ho dovuto modificare il tuo codice della macro rinominando tutte le estensioni ".oTT" in ".oDT" e ho poi dovuto modificare il nome del mio database togliendo il carattere "_"
perché sennò il programma non riusciva a rinominare il file e a creare poi la stampa unione.

Ti chiedo un altra cortesia, vorrei inserire un bottone anche nel form di inserimento così chè si possano inserire i dati, cliccare su salva e poi stampare (in stampa unione) i dati appena inseriti.
Domanda 1: ho notato che se clicco sul tasto "salva" la tabella a cui fa riferimento il formulario ("ordinanza") NON viene aggiornata in automatico (devo premere io il pulsante "aggiorna" direttamente dalla tabella "ordinanza").Se faccio una stampa unione dal form dopo aver premuto salva, il record nella tabella "ordinanza" sarà aggiornato oppure no? (cioè,l'ultimo record sarà salvato e leggibile dal programma o come ultimo record rimarrà il record precedente a quello da me inserito?
Domanda 2:Posso utilizzare il tuo richiamo " form = source.Model.Parent" anche per fare quello che ho descritto sopra oppure no? Come faccio quindi ad accedere ai dati appena inseriti e salvati ?

PS: poi non rompo più,lo giuro.... avresti dei riferimenti abbastanza completi su come utilizzare basic e openoffice per fare delle macro? (non ho mai programmato in basic e mi sento un po' perso a cercare pezzettini di stringhe di codice in giro per la rete..ho scaricato il tutorial macro di openoffice (la guida ufficiale) ma alcune istruzioni da te usate non esistono nella guida e non capisco completamente il funzionamento.

Se avrai pazienza ancora per rispondermi... grazie mille.

PPS: grazie ancora per avermi fatto vedere l'eleganza e la pulizia del tuo codice,ora so che posso utilizzare le ricerche senza inserire il codice SQL direttamente negli oggetti che formano il form, altre guide che avevo trovato utilizzavano il codice direttamente negli oggetti e non pensavo si potesse fare anche in altro modo.

 Editato:  Ho utilizzato il tuo codice anche per stampare dal form di inserimento dei valori.
Soluzione come al solito poco elegante...ho inserito un campo "ID" anche li..in sola lettura,disabilitato ecc. per non farlo vedere.
Ora ho un piccolo problema,banale.Se l'utente dopo aver inserito i dati schiaccia il bottone "salva" e poi stampa la stampa unione è corretta,se clicca prima stampa unione e poi salva ovviamente va fuori sincro.
Ho pensato di disabilitare il bottone della stampa e riabilitarlo una volta premuto su salva per poi disabilitarlo.

per disabilitarlo userei questo:

Codice: Seleziona tutto

Sub subButtonDisablePulsante2(Event As Object)
   Dim oForm As Object
   Dim oModelButton As Object
   oForm=Event.Source.Model.Parent     
   oModelButton=oForm.GetByName("Pulsante 2")     
   oModelButton.Enabled=True    
    
End Sub
Non riesco però a capire come sostituire il "salva" del bottone impostato nella finestra proprietà del bottone in codice basic da mettere nella macro (a quanto pare se riempio il bottone "salva" del codice scritto sopra e imposto le sue proprietà in "salva record" non mi esegue la macro e salva soltanto.

Qualche idea su come fare?
Grazie

[EDIT2]
Ho risolto spulciando un po in rete e facendo un po' di prove.
Il mio problema era disabilitare il tasto "stampa" fintanto che il record che l'utente ha inserito non è stato registrato.
Per consentire all'utente di poter salvare senza stampare la mia necessità era creare un bottone che avesse dentro un istruzione per salvare il record attuale e che contemporaneamente rendesse abilitato il pulsante STAMPA reso disabilitato di default all'apertura del formulario.
Con mio sommo dispiacere ho scoperto che se su un pulsante si assegna un azione predefinita di openoffice (come salva formulario,aggiorna formulario,nuovo record.....)allora una macro inserita nel bottone sotto "esegui all'azione" allora non funzionerà.
Ho finalmente capito come creare un bottone che salvi l'inserimento del formulario nella tabella principale (a cui il formulario è legato) utilizzando una macro (che posso poi riempire di ogni altro bendiddio che mi consente di fare quel che voglio).
per ricapitolare (magari serve a qualcuno) ora il mio database puo:
-registrare dati
-effettuare una ricerca su quei dai
-stampare (in stampa unione) i dati dalla ricerca (un singolo record per volta)
-stampare e salvare tramite bottone i dati dal formulario di inserimento (salva e stampa tramite macro)
-disabilitare o abilitare un bottone tramite un altro bottone per rendere sequenziale e prevedibile la scelta di click dell'utente.

Grazie a tutti per l'aiuto,allego il database finito e metto risolto nel titolo. 
Allegati
ordinanzaDB1.odb
(44.66 KiB) Scaricato 101 volte
openOffice 3.1 su Windows 7
hubert lambert
Volontario
Volontario
Messaggi: 164
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: [RISOLTO]stampa unione tramite pulsante di un subform

Messaggio da hubert lambert »

Ciao,

Bravissimo per aver risolto da solo quelle difficoltà!
Per non dovere disabilitare/riabilitare il pulsante "STAMPA", potresti mantenere un pulsanta "SALVA" semplice ed aggiungere il codice basic per salvare al pulsante "STAMPA", seguito da una chiamata alla macro que stampa... Qualcosa così:

Codice: Seleziona tutto

Sub salva_e_stampa(oEvent As Object)
   oForm = oEvent.source.model.parent 'si aggancia al form
   
   If oForm.isModified Then 'inizia il salvataggio del record
      If oForm.isNew Then oForm.insertRow Else oForm.updateRow
   End If'fine salvataggio del record

   ' qui si stampa
   report_current_row(oEvent)
End Sub
Si potrebbe persino avere la macro report_current_row chiamata con un oggetto "form" da vari codici legati ai pulsanti...
Saluti.
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
reietto222
Messaggi: 12
Iscritto il: domenica 22 luglio 2018, 21:26

Re: [RISOLTO]stampa unione tramite pulsante di un subform

Messaggio da reietto222 »

Ciao, non avevo pensato a questa soluzione. Ora però ho un ultimo problema.. Come faccio ad effettuare un controllo (anche la tua soluzione ha questo piccolo bug) per verificare che i campi obbligatori non siano NULL? (il pulsante "salva" di default su open office è disabilitato quando almeno un campo non è modificato e se lo premo base mi avvisa che i campi sono vuoti... Con il salva costruito nella macro non effettua il controllo dei campi vuoti /NULL e il programma si blocca dandomi errore..
openOffice 3.1 su Windows 7
hubert lambert
Volontario
Volontario
Messaggi: 164
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: [RISOLTO]stampa unione tramite pulsante di un subform

Messaggio da hubert lambert »

reietto222 ha scritto:Come faccio ad effettuare un controllo (anche la tua soluzione ha questo piccolo bug) per verificare che i campi obbligatori non siano NULL?
Non è un bug: le azioni predefinite sono come delle "macro interne", che fanno molte cose que non si vedono.
Quando si crea una macro personalizzata, si deve pensare a tutto da se stesso: gestire gli errori e impostare lo stato del "form" (per disabilitare/riabilitare i pulsanti).
Gestire gli errori è abbastanza facile (vedi il file allegato):

Codice: Seleziona tutto

sub salva_e_stampa(event)
  on error goto gestione_errore
    form = event.Source.Model.Parent 'si aggancia al form
    if form.IsModified then 'inizia il salvataggio del record
        if form.IsNew then form.insertRow else form.updateRow
    end if   'fine salvataggio del record
    report_righe_corrente(form)

  gestione_errore:
    if err <> 0 then
        if instr(error, "com.sun.star.sdb.RowSetVetoException") > 0 then
            'pass: la gestione e fatta dal programma
        elseif instr(error, "com.sun.star.sdbc.SQLException") > 0 then
            msg1 = split(error, "column: ")
            msg2 = split(msg1(2), " table: ")
            msgbox "Nel campo '" & msg2(0) & "' è necessario immettere dei dati. Inserisci un valore."
        else
            msgbox "Errore" & err & ": " & error$ + chr(13) + "alla linea: " + erl + chr(13) + now , 16 ,"Si è verificato un errore"
        end if
        on error goto 0
    end if
end sub
Il secondo necessita l'uso di un "listener", che può dare un codice più pesante: dicci se ti pare importante o no.
Saluti.
Allegati
ordinanzaDB1.odb
(43.53 KiB) Scaricato 89 volte
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
reietto222
Messaggi: 12
Iscritto il: domenica 22 luglio 2018, 21:26

Re: [RISOLTO]stampa unione tramite pulsante di un subform

Messaggio da reietto222 »

con una piccola modifica ho implementato il tutto,grazie mille.
Mi potresti solo spiegare a cosa servono i termini err,instr,erl e now che saranno propri del lin guaggio basic visto che non li hai dichiarati come variabili?

PS. che differenza c'è fra questo metodo e utilizzando dei listener? (solo la differenza pratica,se mi interessa mi informerò io)
openOffice 3.1 su Windows 7
hubert lambert
Volontario
Volontario
Messaggi: 164
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: Stampa unione tramite pulsante di un subform

Messaggio da hubert lambert »

Quelle parole sono funzione proprie a basic. Tutto è spiegato nel aiuto interno (F1) ;) .

Un "listener" è un oggetto speciale. Deve essere registrato presso a un altro oggetto per essere informati di diversi eventi. Nel tuo caso, sarebbe necessario registrare un listener presso al formulario per sapere se la riga corrente sta modificata o no, e quindi disabilitare o riabilitare i pulsanti...
 Editato: Ecco un esempio di listener, registrato presso l'oggetto "Formulario" di "form_inserimento".
Proverò a spiegare un po' di più domani. 
Allegati
ordinanzaDB1.odb
(44.03 KiB) Scaricato 89 volte
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
reietto222
Messaggi: 12
Iscritto il: domenica 22 luglio 2018, 21:26

Re: [RISOLTO]Stampa unione di un subform tramite pulsante

Messaggio da reietto222 »

ciao,scusa ancora il disturbo ma...mi sono accorto di un piccolo particolare..
Nel mio formulario (quello di inserimento) ho una dozzina di campi e di questi 1 è un campo ID (ad auto incremento, che mi serve per collegarci la stampa unione) e altri (6 o 7) sono campi obbligatori (gli altri sono facoltativi).
Facendo girare il tuo codice per la verifica dell'errore, se non riempio tutti i campi mi da errore.
Come faccio a dirigere la verifca dell'iserimento di un valore NULL solo sui campi che sono obbligatori e non controllarlo sugli altri?

Se avrai,ancora per una volta, la pazienza di rispondere ...grazie.
(prima di dare un programma ai miei colleghi che iniziano a scalpitare, vorrei riuscire a gestire tutte le eccezzioni (quindi credo solo questa che ti ho elencato) per evitare che qualcuno di loro blocchi l'esecuzione del programma.
PS. scusa se scrivo solo ora ma solitamente butto un occhio sul forum nelle pause di lavoro,provo velocemente a modificare il programma con le tue indicazioni e poi passo tutta la sera a fare esperimenti a casa...solo che se c'è un errore me ne accorgo la sera tardi e sono costretto a scrivere la mattina.
openOffice 3.1 su Windows 7
hubert lambert
Volontario
Volontario
Messaggi: 164
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: [RISOLTO]Stampa unione di un subform tramite pulsante

Messaggio da hubert lambert »

Ciao,

Ciascuno risponde quando trova il tempo, no è mai un problema per me ;) .

Il programma si lamenterà solo quando un campo obbligatorio è lasciato NULL o contiene valore di un tipo errato. Ed il codice di gestione degli errori reagisce solo quando il programma si lamenta.
Nel formulario di inserimento, io posso per esempio lasciare vuoti tutti i campi "VIA" (primo eccetto) e "CIV" senza problema.
Magari potresti descriverci un po' di più cosa succede?
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
reietto222
Messaggi: 12
Iscritto il: domenica 22 luglio 2018, 21:26

Re: Stampa unione di un subform tramite pulsante

Messaggio da reietto222 »

ciao,
ti allego l'immagine per capire.
L'errore me lo da alla riga 16 (dove viene richiamato il metodo di stampa).
Prova anche premere "barra spaziatrice" all'interno di una cella e scrivere nelle altre,il programma si blocca.

PS. la mia intenzione sarebbe comunque quella di tenere un pulsante salva che oscura il pulsante stampa finche non è premuto, mi sono però trovato in difficoltà ieri (ora non ho il codice,ma dovrebbe essere in qualche mio messaggio piu in alto nella discussione) quando ho cercato di mettere le istruzioni per l'oscuramento (che nell' esempio di codice da me postato qualche post più su, richiamava form con "event as Object") del pulsante...può derivare dal fatto che un bottone viene considerato (non so..magari sbaglio completamente) solo un oggetto e non lo possa richiamare se richiamo il form solo come "event".

Spero di essere stato chiaro, oggi pomeriggio eventualmente ti carico il tutto.

Grazie
Allegati
Immagine.png
openOffice 3.1 su Windows 7
hubert lambert
Volontario
Volontario
Messaggi: 164
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: Stampa unione di un subform tramite pulsante

Messaggio da hubert lambert »

Sembra che c'è un problema con i nomi delle macro. Hai verificato?
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
reietto222
Messaggi: 12
Iscritto il: domenica 22 luglio 2018, 21:26

Re: Stampa unione di un subform tramite pulsante

Messaggio da reietto222 »

ciao, ho ricontrollato il codice e risolto il problema (sbadatamente avevo dichiarato a commento l'intestazione della classe per stampare).
Ora ho scaricato il tuo file e fatto un paio di prove.
L'errore che dà è il seguente (vedi foto 2): questo quando riempio i campi obbligatori...
Se mi dimentico di riempire un campo l'errore che mi dà è sempre lo stesso (vedi prima foto) ma in più mi fa uscire una dialog box (che vorrei evitare, perchè fa riferimento a linee di codice del programma che non interessano all'utente).
Ho guardato ieri l'uso dei listener e devo dire che sembrano molto utili. L'unico piccola pecca è che il bottone viene abilitato quando "durante il caricamento" e quindi, anche se il record non è salvato ( ma ho già provato e non c'e' la possibilità di caricarlo dopo che il salvataggio viene attuato E NON CI SONO ERRORI NELLA COMPILAZIONE DEL FORMULARIO) e il programma mi restituisce un errore, il bottone diventa visibile.
Poichè quel listener fa riferimento alla modifica del form (di anche solo una parte del form anche se poi restituisce un errore e il record corrente non viene salvato nella tabella) mi è venuto in mente che l'unico campo del form che NON viene modificato fino al salvataggio è il campo nascosto ID (quello su cui si basa la stampa unione). Ho provato a far riferimento al campo con un GetByName("nome campo") ma non funzione e mi da errore.

Oltre all'errore con il bottone che cercherò anch'io di verificare, c'è la possibilità di usare uno strumento potente come un listener legandolo alla modifica di un solo campo ? (in questo caso la text box "ID") e se si,come? Tramite GetByName("ID")?
Grazie
Allegati
mancato inserimento di un campo obbligatorio
mancato inserimento di un campo obbligatorio
inserimento di tutti i campi obbligatorio (il dato inserito è il numero &quot;1&quot; in tutti i campi obbligatori)
inserimento di tutti i campi obbligatorio (il dato inserito è il numero "1" in tutti i campi obbligatori)
openOffice 3.1 su Windows 7
hubert lambert
Volontario
Volontario
Messaggi: 164
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: Stampa unione di un subform tramite pulsante

Messaggio da hubert lambert »

reietto222 ha scritto:L'errore che dà è il seguente (vedi foto 2): questo quando riempio i campi obbligatori...
Il problema del errore è colpa mia. Prova a sostituire quella linea:

Codice: Seleziona tutto

        elseif instr(error, "com.sun.star.sdbc.SQLException") > 0 then
con questa:

Codice: Seleziona tutto

        elseif instr(error, "com.sun.star.sdbc.SQLException") > 0 and instr(error, "column: ") > 0 then
reietto222 ha scritto:Ho guardato ieri l'uso dei listener e devo dire che sembrano molto utili. L'unico piccola pecca è che il bottone viene abilitato quando "durante il caricamento" e quindi, anche se il record non è salvato
È lo stesso con i pulsanti predefiniti, no? E mi sembra normale che un pulsante "SALVA E TAMPA" sia abilitato prima che il record sia salvato... :) .
Il listener è registrato al carico del formulario e notificato non appena modificato qualsiasi campo (obbligatorio o no). È notificato di nuovo quando viene chiamato un nuovo record.
reietto222 ha scritto:mi è venuto in mente che l'unico campo del form che NON viene modificato fino al salvataggio è il campo nascosto ID
Questo non è vero: il campo ID è modificato automoticamente, dato che è definito come "autovalore".

Allego il file modificato.
Allegati
ordinanzaDB1.odb
(44.24 KiB) Scaricato 89 volte
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
reietto222
Messaggi: 12
Iscritto il: domenica 22 luglio 2018, 21:26

Re: Stampa unione di un subform tramite pulsante

Messaggio da reietto222 »

grazie della celere risposta (come sempre).
Ora,o appena riesco, provo a sostituire quanto mi hai scritto.
Probabilemnte mi sono spiegato male..
il listener fa riferimento alla proprietà "durante il caricamento" del form,quindi dopo aver compilato il primo campo ed essermi spostato sul secondo il listener vede la variazione del primo campo e mi attiva il bottone. =)
Sto cercando un modo (per questo ti chiedevo come poter creare un listener che riceva la variazione solo di un determinato field del form,in questo caso il campo ID che prende valore in automatico solo DOPO il salvataggio del record) per attiva il tasto grigio DOPO il salvataggio e non durante la scrittura del form (questo perchè la scrittura potrebbe essere errata e non vorrei incorrere in "eccezioni" tipo campi vuoti o nulli..).
Posso realizzare un listener che non tenga conto di tutto il form ma solo di una casella in particolare?ù
PS. grazie mille per tutta la pazienza che ci stai mettendo

EDIT
Questo non è vero: il campo ID è modificato automoticamente, dato che è definito come "autovalore".
Viene però modificato solo POCO PRIMA del salvataggio,finchè il record non stà per essere salvato il valore rimane invariato..se non ci sono errori di compilazione e il record viene salvato allora anche lui prende un valore.

Ho provato il tuo codice ma ,se non inserisco un campo obbligatorio e schiaccio "salva e stampa" il programma mi fa comparire una finestra di dialogo e mi riporta ancora alla riga solita
Allegati
campo obbligatorio lasciato vuoto
campo obbligatorio lasciato vuoto
linea di errore
linea di errore
openOffice 3.1 su Windows 7
hubert lambert
Volontario
Volontario
Messaggi: 164
Iscritto il: venerdì 9 giugno 2017, 13:48

Re: Stampa unione di un subform tramite pulsante

Messaggio da hubert lambert »

È strano, non capisco più nulla, il testo del tuo errore contiene eppure la parole "table:". E a casa mia non vedo lo stesso comportamento.
Pensi che potresti provare con un version più recente di OpenOffice?
 Editato: Se, come penso, il messaggio d'errore è differente nella tua versione, forse questa version semplificata funzionerà:

Codice: Seleziona tutto

        [...]
        elseif instr(error, "column: ") > 0 then
            msg1 = split(error, "column: ")
            msg2 = [...]
 
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
Rispondi