Data scadenza ricorsi

di
Anonimizzato15296
il
21 risposte

Data scadenza ricorsi

Salve a tutti,
sono alle prese con un problema tosto per calcolare le date di scadenza di ricorsi:
inserita una data nel controllo data1, nei controlli data2 e data3 dovrei ottenere rispettivamente: data1+60 (scadenza 2 mesi) e data1+181 (scadenza 6 mesi). Se le date risultanti cadono in un periodo compreso tra 1 agosto e 15 settembre, tale periodo non viene contato e si riprende il conteggio dal 16 settembre.

il problema sorge quando cerco di inserire:
if me.data1 >= " 01/01" and me.data1<= "01/06" then
me.data2 = data1 + 60

if me.data1 >= " 01/01" and me.data1<= "31/01" then
me.data3 = data1 + 181

end if
end if

Ci sarebbero ulteriori if, ma poichè già qui non ottengo risultati, al momento mi fermo.

C'è qualcuno che mi dà una mano? Grazie in anticipo e un salutone.
Antonio

21 Risposte

  • Re: Data scadenza ricorsi

    Ti conviene ragionare tutto in giorni.
    Converti tutte le date in giorni dall''inizio dell'anno.

    Quindi, a questo punto, le tue date diventano dei punti su una retta.
    E i tuoi intervalli di tempo, dei segmenti.

    Su questa retta ci sono dei segmenti vietati: trovi i punti di intersezione tra il tuo segmento, ed il segmento vietato e fai le considerazioni del caso.

    Una volta trovato la posizione finale del tuo segmento, riconverti il numero in una data.
  • Re: Data scadenza ricorsi

    Non servono tutte quelle IF.
    La funzione DateAdd() è quella che fa al caso tuo.
  • Re: Data scadenza ricorsi

    nibbio ha scritto:


    ... Se le date risultanti cadono in un periodo compreso tra 1 agosto e 15 settembre, tale periodo non viene contato e si riprende il conteggio dal 16 settembre...
    Se è come immagino, cioè la "sospensione feriale dei termini", non è necessario che le date risultanti cadano tra l'1 agosto e il 15 settembre ma è sufficiente che nel conteggio sia compreso anche quel periodo perché si debba saltare direttamente al 16 settembre.
    Mi spiego: data iniziale 20 luglio.

    nibbio ha scritto:


    ...Se le date risultanti cadono in un periodo compreso tra 1 agosto e 15 settembre...
    Seguendo questa indicazione il termine dei 60 giorni scade il 18 settembre e sembra a posto.
    In realtà, se si tratta di quello che ho detto all'inizio, è comunque:
    21 luglio -> 31 luglio (10 giorni, il 21 luglio non si conta; ne restano 50 da conteggiare)
    1 agosto -> 15 settembre si saltano in blocco
    16 settembre + 50 giorni = data finale (contando anche il 16 settembre)
    Mi sono permesso di sottolineare questo aspetto perché, se si tratta come ho detto all'inizio della sospensione feriale dei termini, la frase

    nibbio ha scritto:


    ... Se le date risultanti cadono in un periodo compreso tra 1 agosto e 15 settembre, tale periodo non viene contato e si riprende il conteggio dal 16 settembre...
    potrebbe trarre in inganno i "non addetti ai lavori".
    Cosa che non è accaduta a migliorabile, identificando il 1 agosto - 15 settembre come

    migliorabile ha scritto:


    ... segmento vietato
    Attendo conferma dell'inquadramento della situazione.

    Questa invece è una domanda vera e propria: anche il secondo termine, quello dei 6 mesi, è soggetto allo stesso principio? Perché quello non lo conosco.

    Altra domanda vera e propria:

    nibbio ha scritto:


    data1+60 (scadenza 2 mesi) e data1+181 (scadenza 6 mesi)
    60 giorni non sono 2 mesi e 181 non sono 6 mesi. Qual è il parametro giusto per il calcolo? i mesi o i giorni? Il primo a giorni e il secondo a mesi o viceversa? Siccome ci lavoro anch'io con queste scadenze sono particolarmente interessato (e precisino, portate pazienza, ma una volta sicuri di tutto almeno si va tranquilli nell'analisi)
  • Re: Data scadenza ricorsi

    Di logica i calcoli si fanno sui giorni, non sui mesi in quanto il primo è sempre fisso, mentre il secondo è variabile (dato che i mesi hanno un diverso numero di giorni).

    Ma ciò è comunque arbitrario, in quanto nulla vieta di effettuare calcoli sui mesi.

    Il codice sotto restituisce il risultato che vedi qui:



    Aggiungi i controlli indicati nel codice ed inserisci la routine sotto :
    
    Public Sub CalcolaScadenze()
        Dim Data1 As Date
        Dim Data2 As Date
        Dim Data3 As Date
        Dim DataStop1 As Date 'inizio periodo vietato
        Dim DataStop2 As Date 'fine periodo vietato
    
        Label1.Caption = vbNullString
        Label2.Caption = vbNullString
        Label3.Caption = vbNullString
        Label4.Caption = vbNullString
    
        txtScadenza1.Text = 60
        txtScadenza2.Text = 180
    
        DataStop1 = "01/08/2014"
        DataStop2 = "15/09/2014"
    
        ' calcolo normale delle scadenze 
        Data1 = "10/06/2014"
        Data2 = DateAdd("d", txtScadenza1, Data1)
        Data3 = DateAdd("d", txtScadenza2, Data1)
    
        Label1.Caption = Data2
        Label2.Caption = Data3
    
        ' calcolo le scadenze in funzione del periodo vietato
        If Data2 > DataStop1 And Data2 < DataStop2 Then
            Data2 = DateAdd("d", DateDiff("d", DataStop1, DataStop2), Data2)
            Label3.Caption = Data2
        End If
    
        If Data3 > DataStop1 And Data3 < DataStop2 Then
            Data3 = DateAdd("d", DateDiff("d", DataStop1, DataStop2), Data3)
            Label4.Caption = Data3
        End If
    
    End Sub
    
  • Re: Data scadenza ricorsi

    Carissimi amici in access,
    grazie per le risposte tempestive e pertinenti. le ho appena lette e ho bisogno di un po' di tempo per studiarle e capirle per poterle mettere a frutto, anche perché non sono una cima.
    Circa le precisazioni sul metro di calcolo su giorni e mesi, ci sono delle incongruenze (diciamo tecniche).
    Il D.Lgs 546/92 che regolamenta il processo tributario recita che:
    Il ricorso deve essere proposto a pena di inammissibilità entro sessanta giorni dalla data di notificazione dell'atto impugnato.
    Per l’appello, recentemente è stato variato il nuovo termine lungo che, a partire dal 04 luglio 2009, è di sei mesi, che è prorogato di 46 giorni (se ricade nel periodo feriale 1° agosto - 15 settembre) prima era un anno + 46 gg (due volte il periodo feriale).
    Quindi 60 giorni oppure 6 mesi (mah.)
    Grazie, Philcattivocarattere, hai compreso perfettamente le mie esigenze forse perché sei del mestiere come tu stesso hai detto e io mi sono espresso in maniera insufficiente.
    Comunque, per usare il tuo esempio, se la data iniziale è 20 luglio, la data a 60 giorni sarà 3 novembre e quella a sei mesi, 7 marzo dell'anno successivo.
    Ancora mille grazie e a presto. Antonio
  • Re: Data scadenza ricorsi

    In questo link ho caricato un tabulato con tutte le date dell'anno e le relative scadenze. A fianco vi sono i numeri di giorni relativi

    https://drive.google.com/file/d/0B7VNLzySQhGrXzlyTDMzMDE0cjg/edit?usp=sharing

    Ancora grazie
  • Re: Data scadenza ricorsi

    gibra ha scritto:


    ...Il codice sotto restituisce il risultato che vedi qui:...
    Perfetto, per questa definizione:

    nibbio ha scritto:


    ... Se le date risultanti cadono in un periodo compreso tra 1 agosto e 15 settembre, tale periodo non viene contato e si riprende il conteggio dal 16 settembre...
    ma dopo la conferma di

    nibbio ha scritto:


    Grazie, Philcattivocarattere, hai compreso perfettamente le mie esigenze forse perché sei del mestiere come tu stesso hai detto e io mi sono espresso in maniera insufficiente.
    Comunque, per usare il tuo esempio, se la data iniziale è 20 luglio, la data a 60 giorni sarà 3 novembre e quella a sei mesi, 7 marzo dell'anno successivo.
    ho adattato il codice, in modo che la procedura affronti le 4 situazioni:
    1) calcolo normale (non si incontra mai il periodo vietato)
    2) data finale del calcolo normale che cade nel periodo vietato
    3) data di partenza prima del periodo vietato e data finale del calcolo normale successiva al periodo vietato
    4) data di partenza nel periodo vietato
    (metto le note esplicative fuori dal codice, altrimenti c'è troppa confusione)
    ...
        Data1 = txtData1.Value 'Phil - prende il valore da una casella di testo
    
        txtScadenza1.Value = 60
        txtScadenza2.Value = 180
        
        'Phil - ora si adatta a tutti gli anni
        DataStop1 = DateSerial(Year(Data1), 8, 1)
        DataStop2 = DateSerial(Year(Data1), 9, 15)
    
        ' calcolo normale delle scadenze
        Data2 = DateAdd("d", txtScadenza1, Data1)
        Data3 = DateAdd("d", txtScadenza2, Data1)
    
        Label1.Caption = Data2
        Label2.Caption = Data3
    
        ' calcolo le scadenze in funzione del periodo vietato
        If (Data2 >= DataStop1 And Data2 <= DataStop2) Or _
           (Data1 < DataStop1 And Data2 > DataStop2) Then 'Nota1
           Data2 = DateAdd("d", DateAdd("d", 1, DateDiff("d", DataStop1, DataStop2)), Data2)
        ElseIf Data1 >= DataStop1 And Data1 <= DataStop2 Then 'Nota2
        Data2 = DateAdd("d", txtScadenza1.Value, DataStop2)
        End If
        Label3.Caption = Data2
        ...
    Nota1: aggiunge i giorni compresi nel periodo vietato anche quando la data da cui partire inizia prima e la data con i normali 60 giorni va oltre il periodo vietato che è di 46 giorni, ecco perché c'è
    DateAdd("d", 1, DateDiff(...))
    mentre
    DateDiff("d", DataStop1, DataStop2)
    dà 45 (si saltano i giorni dal 01/08 al 15/09 compresi gli estremi). In questo modi si affrontano le situazioni elencate prima ai punti 2) e 3)
    Nota2: se la data di partenza si trova nel periodo vietato inizia a contare dalla fine del periodo vietato (situazione di cui al precedente punto 4) )
    Il calcolo dei 181 giorni non l'ho ancora analizzato.
    Ottimo input, Gibra, grazie. Questa routine entra a far parte del mio kit di programmi autorealizzati per la gestione dell'ufficio (ogni volta con il foglio a calcolare giorni non era il max)
  • Re: Data scadenza ricorsi

    Grazie mille, adesso sono in ufficio e potrò provare più tardi a casa . Spero di essere capace e vi chiederò sicuramente altri aiuti. A presto
  • Re: Data scadenza ricorsi

    Scusatemi ancora ma ho delle incertezze tecniche e non capisco dove sbaglio:
    Riepilogo:
    Ho creato un modulo e ho copiato il codice che mi avete suggerito. Ho lanciato "compila" e mi ha trovato un "end if" in più che avevodimenticato in fase di incollaggio dei due codici e copiatura.

    Faccio prima a mettere il file nel seguente link: https://drive.google.com/file/d/0B7VNLzySQhGrYVY4eS1FRTdnajQ/edit?usp=sharing

    spero che funzioni
    Ciao, a presto
  • Re: Data scadenza ricorsi

    nibbio ha scritto:


    ...Riepilogo:
    Ho creato un modulo e ho copiato il codice che mi avete suggerito. Ho lanciato "compila" e mi ha trovato un "end if" in più che avevodimenticato in fase di incollaggio dei due codici e copiatura.
    ...
    Il "mio" codice è pensato per essere inserito in una maschera di Access, che assomiglia molto a quella pubblicata da Gibra, ed è collegato all'evento click del pulsante Calcola.

    nibbio ha scritto:


    Faccio prima a mettere il file nel seguente link: https://drive.google.com/file/d/0B7VNLzySQhGrYVY4eS1FRTdnajQ/edit?usp=sharing
    Non si scarica niente. Metti il codice qui, direttamente.
  • Re: Data scadenza ricorsi

    Ho creato una maschera come suggerito da Gibra che ringrazio scusandomi di non averlo fatto prima. Ho provato a mettere il codice nella maschera dopo averlo Unito al tuo codice sfruttando i puntini di sospensione ma non sono stato capace di collegare i controlli al codice. Successivamente ho deciso di creare un modulo, ma vedo che non va bene. Nel pomeriggio posterò il codice ma, per favore, suggeritemi come utilizzare i controlli e come nominarlo visto che non ci sono riuscito. Ciao e grazie
  • Re: Data scadenza ricorsi

    nibbio ha scritto:


    Ho creato una maschera come suggerito da Gibra che ringrazio scusandomi di non averlo fatto prima. Ho provato a mettere il codice nella maschera dopo averlo Unito al tuo codice sfruttando i puntini di sospensione ma non sono stato capace di collegare i controlli al codice. Successivamente ho deciso di creare un modulo, ma vedo che non va bene. Nel pomeriggio posterò il codice ma, per favore, suggeritemi come utilizzare i controlli e come nominarlo visto che non ci sono riuscito. Ciao e grazie
    Il codice suggerito da Gibra probabilmente (99,99%) era studiato per VB.NET. Io l'ho adattato ad una maschera di Access (vedi le proprietà .text che diventano .value)
    Nome dei controlli nel mio codice, come visualizzati sulla maschera postata da Gibra, (senza considerare le etichette descrittive), partendo da in alto a sinistra, in orizzontale, scorrendo verso destra
    Riga 1 = txtScadenza1; txtData1
    Riga 2 = txtScadenza2; Label1; Label3
    Riga 3 = label2; (c'è un altro controllo non ancora valorizzato e che non ho ancora sistemato)
    Riga 4 = pulsante Calcola, sul cui evento Click associare la sub
  • Re: Data scadenza ricorsi

    Stupidamente il controllo label lo pensavo etichetta! Rifarò tutto
  • Re: Data scadenza ricorsi

    nibbio ha scritto:


    Stupidamente il controllo label lo pensavo etichetta! Rifarò tutto
    Perché in teoria dovrebbe essere così. Siccome l'impostazione di partenza (il codice) e la maschera tipo sono opera di Gibra, per riconoscerne la "titolarità" non ho fatto modifiche su questo aspetto (cosa che sicuramente mi avrebbe perdonato: non è nel tipo dei controlli che si rispetta il lavoro fatto da un altro). Anzi, mi sono esposto ad un sonoro cartellino rosso, dopo la lezione ricevuta qui http://forum.masterdrive.it/access-79/rendere-permanente-modifica-valore-label-textbox-84006/#post308573 sull'uso di textbox e label. (per fortuna l'infrazione non è così evidente e @Alex non se n'è accorto. Non ancora)
Devi accedere o registrarti per scrivere nel forum
21 risposte