Dimensione Routine troppo grande

di il
20 risposte

20 Risposte - Pagina 2

  • Re: Dimensione Routine troppo grande

    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
  • Re: Dimensione Routine troppo grande

    Non si usano gosub da 30 anni

    Usa le Sub e le Call
  • Re: Dimensione Routine troppo grande

    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
  • Re: Dimensione Routine troppo grande

    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 ....
  • Re: Dimensione Routine troppo grande

    Stragrazie domani mattina motivo subito

    Vi aggiorno

    Stefano
  • Re: Dimensione Routine troppo grande

    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