Report dinamico Raggruppamento e ordinamento variabili

di il
19 risposte

Report dinamico Raggruppamento e ordinamento variabili

Buongiorno a tutti e buona pasquetta,

visto che non posso accendere il bbq mi dedico a un problemino che mi frulla in testa da qlc giorno..

premessa: ho realizzato un gestionale per un parco automezzi e ora che sto cominciando a popolare mi sono posto il problema di "stampare" (report) degli elenchi che sono simili tra l'oro (la sezione corpo sarà sempre l'elenco degli automezzi con targa marca e modello) ma, mi piacerebbe, fossero raggruppati (gruppo di appartenenza,alimentazione,etc) e ordinati dall'utente (per data di scadenza della revisione o per kmpercorsi).

attualmente: pensavo di passare questi valori (le scelte dell'utente) tramite una maschera "prestampa" dove, con una serie di controlli non associati (combobox o listbox) faccio inserire all'utente le scelte desiderate e poi le "passo" tramite codice al report.

problema: nel modo sopra descritto, come faccio e in quale evento del report posso passare questi valori?

intuizione (non supportata dall'esperienza ne dalla conoscenza): creo la struttura del report con dei controlli non associati (diciamo almeno un paio di sezioni di raggruppamento e il body) e poi in apertura del report gli associo le scelte dell'utente con la proprietà .controlsource di ogni controllo..

ho letto qui nel forum delle parole simpatiche .grouplevel...e .orderby....presumo che sia la strada da seguire e vorrei avere dei consigli o delle conferme/smentite su quanto descritto prima.

ringrazio in anticipo e auguro una serena pasquetta a tutti
ad maiora

19 Risposte

  • Re: Report dinamico Raggruppamento e ordinamento variabili

    Non sono sicuro di aver capito, ma quando si FILTRA per stampare è indispensabile VEDERE cosa si filtra... nella maschera in cui si sta operando.
    Per questo si applicano i VARI criteri alla Form tramite la proprietà FILTER.

    Fatto ciò, si preme STAMPA/ANTEPRIMA e tramite il comando OpenReport, si passa al parametro WHERE la proprietà ME.FILTER che contiene la condizione di filtro.
  • Re: Report dinamico Raggruppamento e ordinamento variabili

    Si Alex, faccio già in questo modo...

    l'idea era di operare più sui raggruppamenti che sull'ordinamento... e volevo giungere a questo report da una maschera non associata. tipo una maschera di navigazione dove poter scegliere l'elenco da stampare... non so se ho spiegato bene la mia idea...la query con i dati rimane sempre lo stessa... tramite la maschera intermedia gli passo le condizioni e i groupby e orderby...e fin qui tutto bene... il discorso del report è che poi devo associargli il controllo in intestazione gruppo 1 tramite codice...nel post che ho letto si apre il report prima in struttura e si imposta il grouplevel.,.. e poi in visualizzazione normale o report...

    è questo passaggio che ho bisogno di capire bene e di sfruttare bene , secondo la mia intuizione...

    in altri tutorial video si parla di propertysetting ma non sono in grado di gestire quel tipo di approccio...mi auguro che possa arrivare alla medesima soluzione nel modo che ho intuito...
  • Re: Report dinamico Raggruppamento e ordinamento variabili

    Forse ho capito... fai attenzione che pur se fattibile non è proprio banale...

    Avevo fatto ancora diversi anni fa, un demo, questo:
    http://forum.masterdrive.it/access-79/vba-access-utility-per-filtrare-forms-report-runtime-17431/

    Purtroppo con le nuove versioni funziona male, nel senso che ha un sacco di FLIKERNG, quindi ingestibile.
    In ogni caso consentiva di Filtrare e riorganizzare il Report sia come GROUP che come ORDER.

    Nella sostanza credo ti converrebbe ragionare in modo strutturato, e quì ci sono varie strade.
    Puoi usare ad esempio un ARRAY di tipi... definendo una TypeStructure con i parmetetri necessari...
    
    Type rptStruct
       IndiceGruppo  As Integer
       NomeCampoGruppo As String
       OrdinamentoGruppo As String
       ecc..
    End Type
    
    Public grpReport() As rptStruct
    Quindi dalla Form riempi la struttura, e su OPEN o LOAD ora dovrei provare... ma si può fare anche a Runtime mentre è già a perto basta fare il Requery..., dimentico sempre quale dei 2 Eventi non viene generato su Requery, devi usare l'altro.

    Credo sia abbastanza ambizioso quello che hai pensato di fare.... ma è un ottima opzione.
  • Re: Report dinamico Raggruppamento e ordinamento variabili

    La necessità nasce dal fatto di mettere l'utente in grado di stampare gli elenchi che desidera in modo veloce senza passare dalla maschera di riepilogo...una sorta di shortcut... di qui mi sono imbattuto nell'idea di creare un solo report (visto che il body è sempre quello) e di impostargli i raggruppamenti a seconda delle scelte... il typestructure non l'ho mai usato e aggiungo mai visto prima però è la traduzione della mia idea.. .perchè in sostanza crea la struttura che voglio dare al report...dovrò capire meglio come usarlo...

    il fatto di usarlo runtime sembra più vicina alla mia conoscenza... aprendolo prima Hidden e passandogli i controlsource alle vare txtbox nelle varie sezioni... questo pensavo di fare, magari nell'evento load???

    la cosa simpatica è che non ho trovato in rete materiale da spulciare e adattare...tranne che per quel gruoplevel in acviewdesign che accennavo prima...
  • Re: Report dinamico Raggruppamento e ordinamento variabili

    Il codice che segue è un esempio di come cambio il raggruppamento in funzione di cosa sceglie l'utente.
    Utilizzo una variabile globale per passare il tipo di raggruppamento.
    In genere NON cambio mai il primo raggruppamento del report (GroupLevel(0) per capirci).
    NOn è assolutamente un problema avere più raggruppamenti utilizzando lo(gli) stesso(i) campo(i), anzì è una tecnica consolidata per poter stampare ad esempio, sempre un numero pari di pagine.
    
    ' Report Default Order
    '    Me.GroupLevel(0).ControlSource = "Id_Ordine"
    '    Me.GroupLevel(1).ControlSource = "Id_Tipo_Report"
    '    Me.GroupLevel(2).ControlSource = "Id_Nome_Impianto"
    '    Me.GroupLevel(3).ControlSource = "Id_Certificato" -> NON CAMBIARLO
    
    Select Case ExchangeVar_Rpt(5)
    Case 2  'Id_certificato
        Me.GroupLevel(1).ControlSource = "Id_Certificato"
        Me.GroupLevel(2).ControlSource = "Cod_Sistema"
    Case 3  ' Impianto
        Me.GroupLevel(1).ControlSource = "Imp_Sistema"
        Me.GroupLevel(2).ControlSource = "Cod_Sistema"
    Case 5  ' N° RdP (Id_RdP)
        Me.GroupLevel(1).ControlSource = "Id_RdP"
        Me.GroupLevel(2).ControlSource = "Cod_Sistema"
    Case 8  ' Id Tipo Report / N° RdP
        Me.GroupLevel(1).ControlSource = "Id_Tipo_Report"
        Me.GroupLevel(2).ControlSource = "Id_RdP"
    Case 9  ' Id Tipo Report / cod. qualità -> senza reparto in testa
        Me.GroupLevel(1).ControlSource = "Id_Tipo_Report"
        Me.GroupLevel(2).ControlSource = "Cod_Sistema"
    End Select
    
  • Re: Report dinamico Raggruppamento e ordinamento variabili

    Grazie max,

    domani faccio delle prove... purtroppo qui non ho modo di provare le soluzioni proposte e quindi mi limito alla teoria cercando di immaginarmi la pratica...

    anche nel mio caso non dovrei mai cambiare il gruplevel0...quindi ci siamo..


    altro quesito: posso ovviare la variabile globale passandogli in open o load i valori dalla maschera intermedia...è corretto?
  • Re: Report dinamico Raggruppamento e ordinamento variabili

    Questo Demo, nemmeno lo ricordavo più, fa qualche cosa che forse è quello che già state dicendo..., e forse qualche cosa in più.
    Prova a vedere se c'è qualche spunto utile.
    forum.masterdrive.it/access-79/msaccess-gestione-filtri-ordinamento-101267/

    Quando si apre la Maschera Splash iniziale, premere l'ultimo Button che riguarda proprio Report con RAggruppamento.
  • Re: Report dinamico Raggruppamento e ordinamento variabili

    Aggiornamento,

    sono riuscito a impostare le sezioni di raggruppamento secondo il codice di max ovvero sulla prima chiamata al report in struttura/nascosto passo i valori della mia maschera di composizione ai vari grouplevel.
    successivamente sull'evento format delle varie sezioni interessate associo i txt non associati (intestazione raggruppamento) ai campi che mi servono sfruttando il controlsource... postero un po di codice appena riesco

    ora il passo successivo è : nel primo passaggio (struttura) se volessi eliminare o anche non visualizzare la sezione relativa a un raggruppamento come posso muovermi?

    spiego meglio: l'utente sceglie di raggruppare solo per stato giuridico le autovetture del parco quindi mi lascia vuoto il campo relativo al 2 raggruppamento,

    nello stesso modo in cui assegno il valore del raggruppamento, avrei la possibilità di eliminarlo (clear o delete??) o quanto meno non farlo visualizzare? tipo .gruoplevel.visible = false...

    se lo elimino ovviamente alla nuova istanza dovrei ricrearlo...additem???

    purtroppo quando lavoro su access non posso collegarmi alla rete quindi sono senza help online...na faticaccia:D

    grazie come sempre, attendo fiducioso possibili soluzioni al mio caso
  • Re: Report dinamico Raggruppamento e ordinamento variabili

    La maschera di scelta... il codice relativo al click
    Private Sub cmdreport_Click()
    Dim eff, strwhere As String
    'carichiamo la where dell'apertura del report
    If Me.optEff = 2 Then
    eff = ""
    Else
    eff = "and Efficiente=" & Me.optEff
    End If
    
    If Me!lstgruppi.ItemsSelected.Count = 0 Then
    MsgBox "Devi effettuare una scelta tra i gruppi, oppure selezionarli tutti dal box in alto!", vbCritical, "ATTENZIONE"
    Exit Sub
    End If
    
    If Me!lstSG.ItemsSelected.Count = 0 Then
    MsgBox "Devi effettuare una scelta tra gli stati giuridici, oppure selezionarli tutti dal box in alto!", vbCritical, "ATTENZIONE"
    Exit Sub
    End If
    
    If Me!lstcategoria.ItemsSelected.Count = 0 Then
    MsgBox "Devi effettuare una scelta tra le categorie, oppure selezionarli tutti dal box in alto!", vbCritical, "ATTENZIONE"
    Exit Sub
    End If
    
    
    strwhere = "CATEGORIA IN(" & Filltesto(Me!lstcategoria) & ") and IDStatoGiuridico IN(" & Fillnumeri(Me!lstSG) & ") " & _
    " and IDGruppo IN(" & Fillnumeri(Me!lstgruppi) & ")" & eff
    
    Dim ord0, ord1 As String
    Select Case Left(Me!cbosel0gr, 1)
    Case Is = "g"
    ord0 = "NomeGruppo"
    Case Is = "c"
    ord0 = "CATEGORIA"
    Case Is = "s"
    ord0 = "NomeStatoGiuridico"
    End Select
    Select Case Left(Me!cbosel1gr, 1)
    Case Is = "g"
    ord1 = "NomeGruppo"
    Case Is = "c"
    ord1 = "CATEGORIA"
    Case Is = "s"
    ord1 = "NomeStatoGiuridico"
    End Select
    
    DoCmd.OpenReport "RptElenco", acViewDesign, , , acHidden
    Reports!rptelenco.GroupLevel(0).ControlSource = ord0
    Reports!rptelenco.GroupLevel(1).ControlSource = ord1
    Reports!rptelenco.OrderBy = Me.cboselord1
    DoCmd.Close acReport, "RptElenco", acSaveYes
    
    DoCmd.OpenReport "RptElenco", acViewPreview, , strwhere, acDialog
    End Sub
    e quello relativo alla formattazione delle due sezioni di raggruppamento
    Option Compare Database
    Option Explicit
    
    
    Private Sub IntestazioneGruppo0_Format(Cancel As Integer, FormatCount As Integer)
    Me!txtgruppo0 = Me.Controls(Me.GroupLevel(0).ControlSource)
    Me!txtgruppo0eti.Caption = Forms!FrmScegliElenco!cbosel0gr.Value
    End Sub
    
    Private Sub IntestazioneGruppo1_Format(Cancel As Integer, FormatCount As Integer)
    Me!txtgruppo1 = Me.Controls(Me.GroupLevel(1).ControlSource)
    Me!txtgruppo1eti.Caption = Forms!FrmScegliElenco!cbosel1gr.Value
    End Sub
    
    
    
    trovo ancora difficoltà ad assegnare un 2 campo per ordinare... anche componendo la stringa orderby è come se accettasse solo il primo campo

    è gradita un indicazione su miglioramenti di codice e su quanto segnalato prima...ovvero la possibilità di raggruppare solo per il primo valore

    PS: mi sono permesso di modificare il famoso fillitems per accettare anche valori di testo tra virgolette...
  • Re: Report dinamico Raggruppamento e ordinamento variabili

    CicciusPrime ha scritto:




    trovo ancora difficoltà ad assegnare un 2 campo per ordinare... anche componendo la stringa orderby è come se accettasse solo il primo campo

    il riposo porta consiglio... mi sono accorto di aver detto una fesseria...in realtà l'ordinamento lo prende passandogli anche il 2 valore solo che agli effetti non si vede perchè il primo campo ordinato è la targa che è univoca quindi non ha modo di effettuare il 2 ordinamento sul 2 campo non avendo due targhe uguali...qlc altro lo spiegherà meglio il concetto

    chiedo scusa per la segnalazione ingiusta...

    mi era venuta la scimmia perchè abitualmente nelle combolist ordino per cognome e nome... ma in quel caso ho dei doppioni di cognome:D...
  • Re: Report dinamico Raggruppamento e ordinamento variabili

    CicciusPrime ha scritto:




    ora il passo successivo è : nel primo passaggio (struttura) se volessi eliminare o anche non visualizzare la sezione relativa a un raggruppamento come posso muovermi?

    spiego meglio: l'utente sceglie di raggruppare solo per stato giuridico le autovetture del parco quindi mi lascia vuoto il campo relativo al 2 raggruppamento,

    nello stesso modo in cui assegno il valore del raggruppamento, avrei la possibilità di eliminarlo (clear o delete??) o quanto meno non farlo visualizzare? tipo .gruoplevel.visible = false...

    se lo elimino ovviamente alla nuova istanza dovrei ricrearlo...additem???

    nessuno si esprime??? ho preso totalmente la via sbagliata creando già i due raggruppamenti??? creo una copia del report con un raggruppamento e apro uno o l'altro a seconda dei casi???
  • Re: Report dinamico Raggruppamento e ordinamento variabili



    creategrouplevel method

    forse ci siamo.....
  • Re: Report dinamico Raggruppamento e ordinamento variabili

    max.riservo ha scritto:


    Il codice che segue è un esempio di come cambio il raggruppamento in funzione di cosa sceglie l'utente.
    Utilizzo una variabile globale per passare il tipo di raggruppamento.
    ......omissis...
    max, scusami se riapro un post che sembrava chiuso... oggi ho provato a salvare un .accde del client e ovviamente( ) quando sono andato a richiamare il report si è inchiodato perché non lo apre (anche se hidden) in Struttura...

    il discorso di "passargli una variabile" evita questo ostacolo??? se si, in che modo posso "passargliela" al report? su open? su load? su format?....

    spero di non tediarvi

    grazie a tutti come sempre per l'immenso aiuto
  • Re: Report dinamico Raggruppamento e ordinamento variabili

    Se compilato è ovvio non lo apra in struttura... non credi.
    Questo impone sempre un approccio a Runtime.

    Quindi tra la form ed il report per scambiare le impostazioni su usano variabili raggiungibili da entrambi gli oggetti, un modo è dichiarare Public... ma ci sono altri metodi.

    Il fatto di definire una struttura è solo un metodo ORDINATO per raggruppare variabili.

    Queste variabili public le puoi leggere da qualsiasi parte del codice il problema no è leggerle... ma mettere in atto modifica nell'evento corretto.
Devi accedere o registrarti per scrivere nel forum
19 risposte