Report: ordinamento a scelta dell'utente

di il
8 risposte

Report: ordinamento a scelta dell'utente

Buongiorno a tutti!
Il mio problema nasce dalla necessità di far scegliere all'utente il campo in base al quale saranno ordinati i record di un report.

Premendo il pulsante per l'apertura del report, passo un parametro numerico che varia seconda della scelta effettuata dall'utente. E fin qui tutto a posto.

Nell'apertura del record ho provato ad utilizzare diversi metodi per ordinare i record in base al valore passato, ma nessuno sembra funzionare.

Il codice del primo metodo è il seguente (provato su Report_Open, Report_Load, Format, ma sempre non funzionante):
Private Sub Report_Open(Cancel As Integer)

Dim Scelta As Integer
Scelta = Me.OpenArgs

Select Case Scelta
Case 1
          Me.OrderBy = "Progressivo"
          Me.OrderByOn = True
Case 2
          Me.OrderBy = "NumAzienda"
          Me.OrderByOn = True
Case 3
          Me.OrderBy = "NumCliente"
          Me.OrderByOn = True
End Select
End Sub
Questo metodo non funziona in quanto il report si apre ma i record vengono ordinati non in base a criterio scelto, ma in base all'ordine di inserimento in tabella.

L'altro metodo utilizzato è il raggruppamento:

Private Sub Report_Open(Cancel As Integer)

Dim Scelta As Integer
Scelta = Me.OpenArgs

Select Case Scelta
Case 1
          Me.GroupLevel(0).ControlSource = "Progressivo"
          Me.GroupLevel(0).SortOrder = False
Case 2
          Me.GroupLevel(0).ControlSource = "NumAzienda"
          Me.GroupLevel(0).SortOrder = False
Case 3
          Me.GroupLevel(0).ControlSource = "NumCliente"
          Me.GroupLevel(0).SortOrder = False
End Select
End Sub
In questo caso all'apertura del report viene riportato il seguente errore:
Errore di run-time'2464': Nessun campo o espressione di ordinamento o raggruppamento definito per il numero di livello di gruppo utilizzato
In tutti gli esempi che ho visto, il GroupLevel era gestito nello stesso identico modo in cui l'ho gestito io: dove sbaglio?

Ringrazio anticipatamente.

8 Risposte

  • Re: Report: ordinamento a scelta dell'utente

    Nei Report con RAGGRUPPAMENTO non puoi usare ORDERBY generico ma serve usare l'ordine del GRUPPO.
  • Re: Report: ordinamento a scelta dell'utente

    Grazie per la risposta.
    Nel report io non ho i raggruppamenti. Cercavo di crearli con VBA per poter personalizzare l'ordinamento dei record in base ala scelta effettuata dall'utente. Non funzionando ORDERBY ho utilizzato il codice per la creazione del raggruppamento (sperando che funzioni l'ordinamento):
    Private Sub Report_Open(Cancel As Integer)
    
    Dim Scelta As Integer
    Scelta = Me.OpenArgs
    
    Select Case Scelta
    Case 1
              Me.GroupLevel(0).ControlSource = "Progressivo"
              Me.GroupLevel(0).SortOrder = False
    Case 2
              Me.GroupLevel(0).ControlSource = "NumAzienda"
              Me.GroupLevel(0).SortOrder = False
    Case 3
              Me.GroupLevel(0).ControlSource = "NumCliente"
              Me.GroupLevel(0).SortOrder = False
    End Select
    End Sub
    ma anche questo non funziona.
    Non so più dove sbattere la testa!!!
  • Re: Report: ordinamento a scelta dell'utente

    Prova a vedere questo DEMO:

    Scaricalo rinominandolo con Estensione ZIP.
    E' abbastanza complesso, ma consiste in una MASCHERA di gestione che si abilita con il POPUP MENU', l'ultima VOCE "Filtra/Ordina DINAMICO"...

    Se vedi è attiva sia su Form che REPORT, e consente la gestione di RAGGRUPPAMENTI e criteri di ORDINAZIONE...

    Puoi prendere spunto da li se riesci ad entrare nella mia filosofia di sviluppo...
  • Re: Report: ordinamento a scelta dell'utente

    Grazie del consiglio, però la filosofia mi sembra tanto complicata!
    Pensavo fosse più semplice!!
    Comunque sono stata via e non ho potuto provare, ma non mi è ben chiaro il funzionamento...
  • Re: Report: ordinamento a scelta dell'utente

    E' complessa certamente, ma dovuto al fatto che il progetto nel quale è inserito è complesso...

    In questi casi di necessità si fa virtù...

    Se hai VOGLIA/TEMPO ti metti a studiarlo, altrimenti lo lasci...
  • Re: Report: ordinamento a scelta dell'utente

    Grazie @Alex per il tuo tempo, purtroppo però non sono riuscita ad entrare nella tua logica .
    Sono però riuscita ad elaborare un'altra soluzione, un po' meno macchinosa. Anzichè lavorare sull'OpenReport, vado a scrivere il codice e a decidere l'ordinamento direttamente dal pulsante di stampa del report:
    
    Dim Scelta As Integer
    Dim strReportName As String
    
    strReportName = "ReportName"
    Scelta = Me.Ordine
    
    Select Case Scelta
    Case 1
        DoCmd.OpenReport strReportName, acViewDesign
        Set rpt = Reports(strReportName)
        rpt.OrderByOn = True
        rpt.OrderBy = "Progressivo"
        DoCmd.Close acReport, rpt.name, acSaveYes
        DoCmd.OpenReport strReportName, acViewPreview
    Case 2
        DoCmd.OpenReport strReportName, acViewDesign
        Set rpt = Reports(strReportName)
        rpt.OrderByOn = True
        rpt.OrderBy = "NumAzienda"
        DoCmd.Close acReport, rpt.name, acSaveYes
        DoCmd.OpenReport strReportName, acViewPreview
    Case 3
        DoCmd.OpenReport strReportName, acViewDesign
        Set rpt = Reports(strReportName)
        rpt.OrderByOn = True
        rpt.OrderBy = "NumCliente"
        DoCmd.Close acReport, rpt.name, acSaveYes
        DoCmd.OpenReport strReportName, acViewPreview
    End Select
    Questa soluzione non sarà sicuramente la migliore sul mercato, ma sembra funzionare correttamente!

    Grazie per la disponibilità, comunque qualche commento e/o correzione a questa soluzione è ben accetto.
  • Re: Report: ordinamento a scelta dell'utente

    Direi che va bene, ricorda solo che non funziona se il REPORT ha Raggruppamenti...
  • Re: Report: ordinamento a scelta dell'utente

    Allora con i raggruppamenti dovrebbe funzionare il GroupLevel? Io ora di raggruppamenti non ne ho..
Devi accedere o registrarti per scrivere nel forum
8 risposte