+ Rispondi al Thread
Pagina 1 di 3 123 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Discussione: Evento open in sottoreport ripetuto

  1. #1
    marinoernestoch non è in linea Novello
    Post
    37

    Evento open in sottoreport ripetuto

    Buon giorno.
    Sono ormai giorni che mi scervello sul problema.
    Ho un report che contiene più sottoreport: il report primario mi da l'insieme sintetico di una commessa di lavoro.
    I sottoreport (chiamati x comodità AMov, AOre, AVar, ARapp1, ARapp2) contengono i dettagli; a discrezione posso volere o no i dettagli.
    Tutto funzionava (anche se il codice VBA non è ottimizzato). I problemi sono sorti quando ho perfezionato le possibili richieste: oltre a chiedere se voglio o no i dettagli, chiedo anche l'ordine (x data e descrizione o viceversa).
    Ho inserito le istruzioni OrderBy e Hideduplicate nell'evento Open di un sottoreport (es.AOre).
    Di cosa mi sono accorto: quando nella sub del form apro il report primario, si aprono anche i sottoreport (OK), ma gli stessi sottoreport ripetono l'evento Open anche se vado a modificare l'attributo visible dei sottoreport "fratelli". Mi spiego con un esempio:
    DoCmd.OpenReport "RptCommesseSituazione", acViewReport, , filtro, acHidden
    scatena gli eventi Report_open di RptCommesse.... Report_open di Amov, Report_open di AOre, Report_open di Avar, Report_load di RptCommesse...;
    Assegnazione al report ARapp1 di visible= false, scatena gli eventi: Report_open di Amov, Report_open di AOre, Report_open di Avar
    Assegnazione al report ARapp2 di visible= false, scatena ancora gli eventi: Report_open di Amov, Report_open di AOre, Report_open di Avar.
    Ovviamente le istruzioni OderBy e Hideduplicate sono ripetute in continuazione.
    ((Inoltre il report non viene chiuso (ho il controllo della Form di partenza anche se Access non esce da comando
    DoCmd.RunCommand acCmdPrint); se tolgo gli eventi open, non ho l'ordinamento, ma il report esce regolarmente??!!))

    E' corretto il ripetersi degli eventi OPEN? E' possibile evitare che succeda ciò?
    Ringrazio.

  2. #2
    Phil_cattivocarattere non è in linea Scribacchino
    Luogo
    Verona-Mantova
    Post
    1,262
    Quote Originariamente inviato da marinoernestoch Visualizza il messaggio
    ... E' possibile evitare che succeda ciò?
    In attesa di qualche intervento più ferrato, per poter dire la mia dovrei vedere un po' di codice: da dove apri il report, quello che hai scritto su ogni report, credo sia sufficiente nell'evento Open. Spiega per cortesia il nome del report principale e dei vari sottoreport, perché ad esempio vedo che viene aperto "RptCommesseSituazione" ma viene nascosto (acHidden), poi scrivi che c'è RptCommesse. Non ci trovo il capo. L'ideale sarebbe un db dimostrativo ridotto all'osso ma... la tengo come ultima spiaggia.

  3. #3
    marinoernestoch non è in linea Novello
    Post
    37
    Grazie della risposta.
    Ho scritto RptCommesse.... per non scrivere tutto il nome ma è "Private Sub RptCommesseSituazione_Open(Cancel As Integer)" la prima routine giustamente aperta dal docmd.openreport. Il problema non è qui (almeno penso) ma nei ripetuti Open dei sottoreport.
    Sto cercando di preparare un DB appunto all'osso da allegare all'occorrenza.
    SE, nel frattempo, qualcuno.....
    grazie ancora
    Ultima modifica di marinoernestoch; 11-01-2017 15:12 

  4. #4
    L'avatar di willy55
    willy55 non è in linea Scribacchino
    Post
    548
    Tieni presente che gli eventi nella sottomaschera si succedono prima di quelli della maschera principale (in quanto devono essere caricati inizialmente i record della sottomaschera in modo da completare tale controllo nella maschera principale):
    https://support.office.com/it-it/art...86553682f9#bm3
    Order of Events - Access 2007 VBA - Engram 9 VBA Scripts
    Willy

  5. #5
    marinoernestoch non è in linea Novello
    Post
    37
    Grazie willy.
    Avevo già letto questi articoli (anche il secondo, x quanto il mio inglese sia minimo), ma non mi spiego la ripetuta attivazione degli eventi open dei sottoreport quando modifico gli status di visible dei sottoreport 'fratelli'. Ho preparato un db di esempio, ma non so come allegarlo: ho chiesto aiuto allo staff. Appena ho una risposta, allego il db.
    grazie ancora willy.

  6. #6
    Phil_cattivocarattere non è in linea Scribacchino
    Luogo
    Verona-Mantova
    Post
    1,262
    Quote Originariamente inviato da marinoernestoch Visualizza il messaggio
    ..Ho preparato un db di esempio, ma non so come allegarlo: ho chiesto aiuto allo staff. Appena ho una risposta, allego il db..
    Se non riesci a caricarlo qui puoi usare un filehost esterno (purché, per quanto mi riguarda, non richieda la registrazione per lo scarico)

  7. #7
    marinoernestoch non è in linea Novello
    Post
    37
    Non lo so fare! Inoltre ho paura che andando su questi host esterni possa prendere qualche virus. Preferisco allegarlo qui, sono più tranquillo. Attendo una risposta dallo staff in aiuto (magari, se possibile, mi abilita) .
    grazie phil

  8. #8
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    14,609
    Ora mi viene da chiederti... cosa fai nell'evento OPEN dei SottoReport...?

    Peraltro l'evento si verifica prima dell'evento OPEN del Report padre... motivo per cui di norma NON SI USA MAI in un SubControllo(sia Report che Form) tale evento.

    Nei Report peraltro, tali eventi si generano anche ad una EMULAZIONE di REQUERY... che si fa quando si vuole aggiornare il Report inseguito a Filtraggio dati...

    Insomma è normale per come sono gestiti.
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  9. #9
    marinoernestoch non è in linea Novello
    Post
    37
    Grazie alex.
    L'evento Open del sottoreport (che si chiama sRptSituazAttivita) è:
    codice:
    Private Sub Report_Open(Cancel As Integer)
    
    Debug.Print "apro attivita " & Now
    GoTo non_faccio_quiATT                   '<<<<<<<<<<< TOGLIere IL GOTO per attivare qui
                                          '>>>>>> se si toglie il goto qui, va attivato nel Parent
    Me.OrderByOn = False
    With Forms!frmCommesseGestione         'la form che contiene, tra le altre funzioni, la stampa e le sue opzioni
      If !optStpAttivita = 1 Then                   ' l'opzione di ordinamento
     'tbl_b_RisorseUmane.Cognome_e_nome, tbl_b_Attivita.Data_attiv
          Me.OrderBy = "[tbl_b_attivita]![Data_attiv], [tbl_b_RisorseUmane]![Cognome_e_nome]"   'data e operaio
          Me.Data_attiv.HideDuplicates = True
          Me.Cognome_e_nome.HideDuplicates = False
      Else
          Me.OrderBy = "[tbl_b_RisorseUmane]![Cognome_e_nome],[tbl_b_attivita]![Data_attiv]"    ' operaio e data
          Me.Data_attiv.HideDuplicates = False
          Me.Cognome_e_nome.HideDuplicates = True
      End If
    End With
    Me.OrderByOn = True                                
    non_faccio_quiATT:
    End Sub
    Al sotto report è associata la query sql:
    codice:
    SELECT tbl_b_Attivita.Matr_operaio, tbl_b_RisorseUmane.Cognome_e_nome, tbl_b_Attivita.Data_attiv, tbl_b_Attivita.Ora_inizio, tbl_b_Attivita.Ora_fine, tbl_b_Attivita.tot_ore, tbl_b_Attivita.Luogo, tbl_b_Attivita.Commessa, tbl_b_Attivita.Costo_orario_Azienda, tbl_b_Attivita.Costo_orario_Cliente, tbl_b_Attivita.data_modifica
    FROM tbl_b_RisorseUmane INNER JOIN tbl_b_Attivita ON tbl_b_RisorseUmane.Cod_Matricola = tbl_b_Attivita.Matr_operaio;

    dal momento che l'evento open subreport veniva attivato più volte, prima l'ho spostato nell'evento open del report padre, ottenendo errore, e poi nell'evento format del corpo del padre.
    codice:
    Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)
    Debug.Print "Formato Corpo Principale " & Now
    GoTo non_faccio_qui                   '<<<<<<<<<<< TOGLIere IL GOTO per attivare qui
                                                   '>>>>>> se si toglie il goto qui, va attivato nel figlio  sRptSituazAttivita
                                                      '
    ' attivando queste istruzioni a volte si  ottiene errore su
    '    Me.SpazioSituazAttivita.Report.OrderByOn = True
    ' altre volte il report non esce!!!!
    Me.SpazioSituazAttivita.Report.OrderByOn = False
    With Forms!frmcommessegestione
      If !optStpAttivita = 1 Then
     'tbl_b_RisorseUmane.Cognome_e_nome, tbl_b_Attivita.Data_attiv
          Me.SpazioSituazAttivita.Report.OrderBy = "[Data_attiv], [Cognome_e_nome]"   'data e operaio
          Me.SpazioSituazAttivita.Report!Data_attiv.HideDuplicates = True
          Me.SpazioSituazAttivita.Report!Cognome_e_nome.HideDuplicates = False
      Else
          Me.SpazioSituazAttivita.Report.OrderBy = "[Cognome_e_nome],[Data_attiv]"    ' operaio e data
          Me.SpazioSituazAttivita.Report!Data_attiv.HideDuplicates = False
          Me.SpazioSituazAttivita.Report!Cognome_e_nome.HideDuplicates = True
      End If
    End With
    Me.SpazioSituazAttivita.Report.OrderByOn = True   'le volte che becco l'errore è su questa istruzione!!!
    non_faccio_qui:
    
    
    End Sub
    Un'altra cosa che non ho capito è se sul .orderby= vanno messi i nomi dei campi di tabelle (come ho fatto) o i nomi dei controlli del report.

    grazie
    Ultima modifica di @Alex; 12-01-2017 16:17  Motivo: MESSI I TAG...!!!!!

  10. #10
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    14,609
    Non serve:
    codice:
    Me.SpazioSituazAttivita.Report.OrderByOn = False
    Hai provato l'evento LOAD del Padre...?

    Su OrderBy vanno messi se, l'origine della Query ha più Tabelle... è però una questione di chiarezza... in quanto il NOME CAMPO lo risolve ugualmente, a meno non sia preso da 2 Tabelle con nome uguale... cosa che nessuno farebbe...

    P.S. Metti i TAG per il codice...!!!
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

+ Rispondi al Thread
Pagina 1 di 3 123 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi