Dimensione Routine troppo grande

di Anonimizzato27207 il
20 risposte

20 Risposte - Pagina 2

  • Ciao

    riducendo le dimensioni della routine con gosub return non da più l'errore di routine troppo grande

    in compenso da questr'altro errore

    probabilmente perchè sbaglio la sintassi del gosub

    
    Paghe:
    
                                                
                                        With rstdetfat
                                                .AddNew
                                                .Fields("IdFattura") = intNumFattura
                                                .Fields("IdUnitàMisura") = 2
                                                .Fields("Anno") = intAnno
                                                
                                            If Format(Date, "mmmm") = "gennaio" Then
                                                .Fields("Descrizione") = str13 & UCase(Format(DateAdd("m", -1, (Date)), "mmmm")) & " " & Year(DateAdd("yyyy", -1, Date))
                                                .Fields("Quantità") = rstdit("Paghe") * 2
                                             Else
                                                .Fields("Descrizione") = strPag & UCase(Format(DateAdd("m", -1, (Date)), "mmmm")) & " " & Year(Date)
                                                .Fields("Quantità") = rstdit("Paghe")
                                            End If
                                            
                                                .Fields("Importo") = rstdit("QuotaPaghe") '* rstdit("Paghe")
                                                .Fields("IdAliquotaIva") = 8
                                                
                                        End With
    Return
    
    

    Allegati:
    27207_7be6cbafd039a51b2ec880010e968876.png
    27207_7be6cbafd039a51b2ec880010e968876.png
  • Non si usano gosub da 30 anni

    Usa le Sub e le Call
  • Ciao

    lo so non si usano e le ho sempre evitate come la peste e vorrei eliminarle

    il problema è che questa routine usa una transazione e non so come può funzionare con una sub

    sicuramente è colpa mia che non so come si fa

    ma come posso fare visto che ho aperto dei recordset a fare in modo di creare una sub che funzioni?

    Tra parentesi ho provato a fare il debug durante il ciclo della routine e per qualche motivo arrivati ad un certo punto il return non funziona e va in errore

    Mistero
  • Senza la pretesa che sia senza errori (scritto al volo) e volutamente senza aver dato nomi diversi ai parametri della sub :
    
    public sub MiaSub(rstdetfat as ADODB.recordset, intNumFattura as integer, intAnno as integer, str13 as string, strPag as string, rstdit as ADODB.recordset)                
    '
    ' Questa sub, anche se aiuta a spezzare la mega routine NON è certamente ben congegnata
    ' Lo scopo è solo quello di mostrare la sintassi per poter separare il 'Codicione' in 'codicilli'
    '
    ' La sub è dichiara come Public ma potrebbe anche essere dichiarata come Private (da valutare)
    '
    ' I nomi dei parametri sono stati volutamente mantenuti uguali ai nomi delle variabili del chiamante
    '
    With rstdetfat
           .AddNew
           .Fields("IdFattura") = intNumFattura
           .Fields("IdUnitàMisura") = 2
           .Fields("Anno") = intAnno
                                                
            If Month(Date) = 1 Then  'controlla il n° del mese NON la sua denominazione
                .Fields("Descrizione") = str13 & UCase(Format(DateAdd("m", -1, (Date)), "mmmm")) & " " & Year(DateAdd("yyyy", -1, Date))
                .Fields("Quantità") = rstdit("Paghe") * 2
           Else
                .Fields("Descrizione") = strPag & UCase(Format(DateAdd("m", -1, (Date)), "mmmm")) & " " & Year(Date)
                .Fields("Quantità") = rstdit("Paghe")
           End If
                                            
           .Fields("Importo") = rstdit("QuotaPaghe") '* rstdit("Paghe")
           .Fields("IdAliquotaIva") = 8
                              
    End With
    Return
    
    Così richiami la sub :
    
    MiaSub(rstdetfat, intNumFattura, intAnno, str13, strPag, rstdit )
    
    P.S. - La tua mega routine, nell'insieme, è quanto di peggio possa incontrare chi dovesse farci manutenzione (e questo vale anche per chi l'ha scritta).
    Impara a separare il codice in piccole routine (sub / function) magari riutilizzabili ....
  • Stragrazie domani mattina motivo subito

    Vi aggiorno

    Stefano
  • stevesally ha scritto:


    Ah naturalmente option explicit è all'inizio del modulo che contiene altre routine
    Di male in (potenzialmente) peggio: non solo quella è una routine lunghissima ma è pure contenuta in un modulo in cui sono presenti altre routine e se le hai scritte con lo stesso stile... poveri noi.
    Rilancio con il caricamento di un file di testo con l'intero modulo. Come diceva oregon: filesharing gratuito, dropbox; aggiungo: google drive, onedrive e via dicendo, anche se sarà molto difficile, almeno per me, darti suggerimenti specifici e completi perché bisognerebbe prima capire tutto e bene.
Devi accedere o registrarti per scrivere nel forum
20 risposte