Newsgroup: it.comp.lang.visual-basic
Titolo: Proprietà Oggetto ANARCHICA

Ciaooooooooooooo
E' tanto che non ci sentiamo ( sono partita ) :))) Non mi dite " e chi se ne
frega eh!"
Comunque come al solito mi serve il vostro prezioso aiuto
In una classe ho 2 proprietà [ A e B]
Nella Property Get di A c'è un controllo IF
che dice ( in caso passi il controllo che B=B+1)
Sembra tutto andare per il meglio solo per il fatto che quando si esce dalla
LET di B il valore ritorna come prima.
Mmmm mi sa che non mi sono spiegata bene. Faccio un esempio pratico
AmministrativaMesi, DiGruppoAnni,AmministrativaANNI sono le proprietà della
classe Anzianità.
In pratica sto cercando di fare in modo che l'applicativo calcoli ( in caso
di Part Time) i mesi e gli anni di anzianità amministrativa
che come è logico si differenzieranno dai mesi ed anni di anzianità di
gruppo.
Il problema insorge dove ho messo la freccia.
Quando VB arriva a quella riga entra prima nella Get di AmministrativaANNI
poi nella Let di AmministrativaANNI e poi esce.
Se AmministrativaANNI = 6 nella Let diventa giustamente 5 ma quando esce
dalla Let e ritorna alla Get di AmministrativaMESI
il valore di AmministrativaANNI  e tornato ad essere 6 anzichè 5.
Come mai perde il valore? Non posso controllare il valore di una proprietà
di un oggetto da un altra proprità dell'oggetto stesso?
Debby!!!
PS
In ferie sono andata molto avanti con il mio programmino.. ora fa anche il
caffè :))))))
----------------------------------------------------------
Public Property Get AmministrativaMESI() As Integer
'Inizialmente gli anni saranno uguali
AmministrativaANNI = DiGruppoANNI
Mesi = DiGruppoMESI
Do[codice ]
        If [codice]
                AmministrativaANNI = AmministrativaANNI - 1 <----
   End If
[codice]
AmministrativaMESI = Mesi
End Property

 End Property
Senza entrare nel merito di cosa devi fare, se vuoi modificare il valore di
un'altra proprietà della stessa classe, modifica direttamente la variabile
privata della classe!
Altrimenti cominci a fare dei giri inutili....
ciaociao


Dissento. Puo' essere vero per le cose semplici, ma quando hai
property che fanno lavori complessi, il fatto di richiamare la
property adeguata per la manipolazione di una variabile è
auspicabilissimo.
Io, per non sbagliarmi, uso sempre una property. E' un pelo
ridondante, ma in questo modo ho un entry point unico e, se lo devo
modificare, modifico solo quello e basta.
Ciao!
Luca


Io lo faccio correntemente senza problemi. Guarda meglio il tuo
codice, che sicuramente c'e' qualcosa che non va (c'e' anche un
piccolo problemino di efficienza, ma non da fastidio). E senno', posta
le due proprieta' come son scritte realmente, che vediamo.
Ciao!
Luca

 Luca
ciaociao

Addio ogni volta che scrivo il mio codice mi metto vergogna perchè so che lo
scrivo male (  a qualcuno ho fatto accapponare la pelle)
Okkio che si va facilmente in confusine con AnzianitàAmministrativa e
AnzianitàDiGruppo ( non sono brava a scegliere i nomi)
Cmq ora prima di uscire dall'ufficio mi stampo tutto e me lo porto a casa,
chissa ce sull'autobus mi viene il lampo di genio
Baci Debby
____________________________________________________
Public Property Get AnzianitàAmministrativaMESI() As Integer
Dim MesiGRUPPO As Integer
Dim x As Integer
AnzianitàAmministrativaANNI = AnzianitàDiGruppoANNI <---
MesiGRUPPO = AnzianitàDiGruppoMESI
x = 0
Do
  MesiGRUPPO = MesiGRUPPO - 1
  x = x + 1
   If MesiGRUPPO = 0 Then
        MesiGRUPPO = 12
        AnzianitàAmministrativaANNI = AnzianitàAmministrativaANNI - 1
   End If
Loop Until x = PT.MesiTotPT
AnzianitàAmministrativaMESI = MesiGRUPPO
End Property
_______________________________________________________
Public Property Let AnzianitàAmministrativaMESI(ByVal vNewValue As Integer)
intAnzianitàAmministrativaMESI = vNewValue
End Property
_______________________________________________________
Public Property Get AnzianitàDiGruppoANNI() As Integer
AnzianitàDiGruppoANNI = TotAnni
'Mi perde il valore se da qualche altra parte si addiziona 1
End Property
_______________________________________________________
Public Property Let AnzianitàDiGruppoANNI(ByVal vNewValue As Integer)
intAnzianitàDiGruppoANNI = vNewValue
End Property
_______________________________________________________
 Public Property Get TotAnni() As Integer
If Collega.PartTime Then
    TotAnni = PT.AnniPrePT + PT.AnniInPT + PT.AnniProPT
Else
    TotAnni = Year(DV.DataBustaPaga) - Year(Collega.Assunzione)
End If
End Property
_______________________________________________________
Public Property Let TotAnni(ByVal vNewValue As Integer)
intTotAnni = vNewValue
End Property
________________________________________________________
 Public Property Get TotMesi() As Integer
TotMesi = (PT.MesiPrePT + PT.MesiInPT + PT.MesiProPT) - (PT.MesiTotPT) _
+ (TotAnniPT * 12)
End Property
________________________________________________________
Public Property Let TotMesi(ByVal vNewValue As Integer)
intTotMesi = vNewValue
End Property
_______________________________________________________
Public Property Get AnzianitàAmministrativaANNI() As Integer
    AnzianitàAmministrativaANNI = intAnzianitàAmministrativaANNI
End Property
_______________________________________________________
Public Property Let AnzianitàAmministrativaANNI(ByVal vNewValue As Integer)
intAnzianitàAmministrativaANNI = vNewValue
End Property
_______________________________________________________
Public Property Get AnzianitàDiGruppoMESI() As Integer
Dim x As Integer
If Collega.PartTime Then
    AnzianitàDiGruppoMESI = (PT.MesiPrePT + PT.MesiInPT + PT.MesiProPT)
        If AnzianitàDiGruppoMESI > 12 Then
            x = 0
            x = (AnzianitàDiGruppoMESI / 12)
            AnzianitàDiGruppoMESI = AnzianitàDiGruppoMESI - (12 * x)
            'Sotto AnzDiGruppo anche se si addiziona qualcosa appena si esce
            'dalla Let perde il valore
            AnzianitàDiGruppoANNI = AnzianitàDiGruppoANNI + x
        End If
End If
End Property
__________________________________________________________

 Altrimenti cominci a fare dei giri inutili....
4 proprietà nell'oggetto Anzianità
AnniAmministratiti
MesiAmministrativi
AnniDiGruppo
MesiDiGruppo
Se nel profilo non si compila il part time gli anni e i mesi Amministrativi
saranno
uguali agli anni e mesi DiGruppo.
Se si va in PartTime questi valori cambiano e quindi per controllare una
busta paga
devo prendere l'anzianità amministrativa e non più quella DiGruppo
Ci sei fin qui?
Quello che sto cercando ci fare è quello. Il codice funzione perchè prima
avevo tutto dentro
una funzione e i valori uscivano perfetti ma poi avevo problemi ad assegnare
questi valori
in giro per il programma, quindi ho pensato di creare l'oggetto con le sue
proprietà in modo
da potermeli portare meglio in giro dove mi servivano.
Debby -----)@

 debuggare)
Marg vai tranquillo non mi offendo anzi mi fa molto piacere perchč vuol dire
che
qualcuno si ricorda di me.
Prima o poi perň le cose difficile le devo pur iniziare a fare no!
Grazie Marg
Non ci crederai ma la tua risposta č stata meglio di qualunque altra!
Baci

 Debby -----)@
ciaociao

 Baci
ciaociao

 casa, chissa ce sull'autobus mi viene il lampo di genio
Non ho guardato bene tutte le routine, ma si notano un po' di cose strane,
che mi pare avessi gia' visto in tuoi vecchi messaggi... per esempio nelle
Get di TotAnni e TotMesi si vede che il valore restituito e' sempre
calcolato in base ad altri fattori, mentre le Let salvano il valore nelle
variabili intTotAnni e intTotMesi, che pero' non vengono poi prese in
considerazione; questo gia' puo' essere causa di disallineamento.
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

____________________________________________________
Molto strano, parrebbe tutto corretto.
Cio'che poi non comprendo e' che mentre nel tuo post iniziale indicavi
il decremento:
AnzianitąAmministrativaANNI = AnzianitąAmministrativaANNI - 1
come problematico, ora viceversa indichi
AnzianitąAmministrativaANNI = AnzianitąDiGruppoANNI <---
Insomma, quale dei due?  Anche perche' AnzianitąDiGruppoANNI non viene
mai aumentato.
Facci sapere lunedi quando torni se sei stat ailluminata.
Ciao!
Luca

considerazione; questo gia' puo' essere causa di disallineamento.
Notato anch'io
La cosa peraltro strana che ho notato e' che la routine che da
problemi (almeno quella indicata nel 1o messaggio, perche' nel secondo
ne indica un'altra) e' l'unica che assegna e reperisce il valore dalla
stessa variabile!!
Ciao!
Luca

Il problema è qui (dove metto il doppio asterisco) nella Get di
AnzianitàDiGruppoMESI
_____________________________________________________________
Public Property Get AnzianitàAmministrativaANNI() As Integer
    AnzianitàAmministrativaANNI = AnzianitàDiGruppoANNI
End Property
_____________________________________________________________
Public Property Let AnzianitàAmministrativaANNI(ByVal vNewValue As Integer)
intAnzianitàAmministrativaANNI = vNewValue
End Property
_____________________________________________________________
Public Property Get AnzianitàAmministrativaMESI() As Integer
Dim Mesi As Integer
Dim x As Integer
'Prende i mesi totali di part time (es. 8) poi prende i mesi di anzianita di
gruppo
'(es.2 , Febbraio) e va indietro a scalare per vedere a quale mese
corrisponde il mese
'di anzianità amministrativa. Se a Febbraio si scalano 8 mesi il risultato è
6 ossia
'Giugno
Mesi = AnzianitàDiGruppoMESI
x = 0
Do
  Mesi = Mesi - 1
  x = x + 1
   If Mesi = 0 Then
        Mesi = 12
        AnzianitàAmministrativaANNI = AnzianitàAmministrativaANNI - 1
   End If
Loop Until x = PT.MesiTotPT
AnzianitàAmministrativaMESI = Mesi
End Property
_____________________________________________________________
Public Property Let AnzianitàAmministrativaMESI(ByVal vNewValue As Integer)
intAnzianitàAmministrativaMESI = vNewValue
End Property
_____________________________________________________________
Public Property Get AnzianitàDiGruppoMESI() As Integer
Dim x As Integer
If Collega.PartTime Then
    AnzianitàDiGruppoMESI = (PT.MesiPrePT + PT.MesiInPT + PT.MesiProPT)
        If AnzianitàDiGruppoMESI > 12 Then
            x = 0
            x = (AnzianitàDiGruppoMESI / 12)
            AnzianitàDiGruppoMESI = AnzianitàDiGruppoMESI - (12 * x)
            'Sotto AnzDiGruppo anche se si addiziona qualcosa appena si esce
            'dalla Let perde il valore
     **   AnzianitàDiGruppoANNI = AnzianitàDiGruppoANNI + x
        End If
End If
End Property
_____________________________________________________________
Public Property Let AnzianitàDiGruppoMESI(ByVal vNewValue As Integer)
intAnzianitàDiGruppoMESI = vNewValue
End Property
_____________________________________________________________
Public Property Get AnzianitàDiGruppoANNI() As Integer
If Collega.PartTime Then
    AnzianitàDiGruppoANNI = PT.AnniPrePT + PT.AnniInPT + PT.AnniProPT
Else
    AnzianitàDiGruppoANNI = Year(DV.DataBustaPaga) -
Year(Collega.Assunzione)
End If
End Property
_____________________________________________________________
Public Property Let AnzianitàDiGruppoANNI(ByVal vNewValue As Integer)
intAnzianitàDiGruppoANNI = vNewValue
End Property
_____________________________________________________________
Come ho detto nell'altro post ipotiziamo che l'utente usufruisca di Part
Time
[DATI ]
Assunzione 01/02/97
Inizio Part Time 01/08/00
Fine Part Time 01/01/03
Mesi in Part Time Feb, Apr, Mag
1^
Prima cosa da contare sono i mesi di Part Time effettuati quindi tra inizio
e fine si contano 8 mesi,
questi mesi li dovrò scalare dall'anzianità di gruppo in modo da trovarmi
l'anzianità amministrativa
Fin qui non ho problemi, ho scritto bene il codice per questi conti e me li
trova alla perfezione
2^
Vi faccio tutti i passaggi logici che VB fa con questo codice dando come
input i dati che ho messo
qui sopra. Ovviamente parto dal punto dove iniziano i calcoli
dell'anzianità.
(1) Get AnzianitàAmministrativaANNI() As Integer
    AnzianitàAmministrativaANNI = AnzianitàDiGruppoANNI
(2) Get AnzianitàDiGruppoANNI() As Integer
     AnzianitàDiGruppoANNI = PT.AnniPrePT + PT.AnniInPT + PT.AnniProPT
              6 = 3+2+1
                                            [giusto]
(3) Get AnzianitàAmministrativaMESI() As Integer
'I Mesi Pre, In e Pro sono i mesi di anzianità prima, durante e dopo il Part
Time
    AnzianitàDiGruppoMESI = (PT.MesiPrePT + PT.MesiInPT + PT.MesiProPT)
                                      14 = 6 + 5 + 3
                                             [giusto]
'Se i mesi sono più di 12 ovviamente dovrò fare in modo di aggiungere un
anno alla
'proprietà AnzianitàDiGruppoANNI  e la differenza diventano i MESI. Se si va
a vedere
'nella proprietà AnzianitàDiGruppoANNI   sono stati calcolati solo gli anni
tralasciando i mesi
        If AnzianitàDiGruppoMESI > 12 Then
                x = 0
                    x = (AnzianitàDiGruppoMESI / 12)
                        AnzianitàDiGruppoMESI = AnzianitàDiGruppoMESI - (12
* x)
           ***           AnzianitàDiGruppoANNI = AnzianitàDiGruppoANNI + x
        End If
End If
End Property
______________________________________________________________________-
E' proprio qui che mi si verifica l'errore ( ***) Se avete seguito il
ragionamento inizialmente
AnzianitàDiGruppoANNI  è uguale a 6
AnzianitàDiGruppoMESI  è uguale a 14
x = 14/12 = 1
quindi 6 Anni più 14 mesi = 7 Anni e 2 Mesi
Beh! Io l'arcano non l'ho capito VB arrivato agli *** entra prima nella  Get
di AnzianitàDiGruppoANNI
e tira fuori 6 poi entra nella Let ed assegna 7 ( il risultato giusto) ma
quando ritorna nella Get di
AnzianitàAmministrativaMESI  scopro che il valore è tornato ad essere 6.
Ma come nella Let era diventato 7  e appena esce ridiventa 6?
Uffiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
Ho provato ad essere più chiara possibile, più di cosi non riesco, spero che
qualcuno mi dia una mano!
Smack Debby ---------)@

 End Property
Tutte salvano il valore passato in assegnazione in una variabile interna,
cosa che nelle property "classiche" e' prassi comune; quello che pero'
lascia perplessi e' che in *tutte* le relative property Get queste variabili
interne non vengono mai prese in considerazione, e il valore di ritorno e'
sempre ricalcolato al volo sulla base di altri valori.
Cio' che succede, perlomeno per il codice visto finora, e' che ogni volta
che tu assegni una di queste proprieta' (cosi' come TotAnni e TotGiorni che
si dicevano prima, affette dallo stesso problema) il valore passato viene
effettivamente perso nel nulla, perche' resta si memorizzato in
'intAnzianitàXXX' ma il codice non lo va mai a considerare e quindi risulta
del tutto ininfluente quando cerchi di rileggere la proprieta'
La riga da te indicata sembra per l'appunto affetta da questo problema: tu
assegni 7 a AnzianitàDiGruppoANNI, il valore finisce in
'intAnzianitàDiGruppoANNI' ma poi il codice nella Get lo restituisce sulla
base dei valori di 'PT' oppure di 'DV' e 'Collega' ignorando completamente
la variabile interna....
A conti fatti, torna un po' difficile darti una soluzione specifica, temo
sarebbe il caso di ripensare completamente tutta la logica della classe: per
esempio, va benissimo che un valore sia calcolato sulla base di altri, ma
quando viene modificato dal codice cosa deve avere la precedenza? il valore
impostato oppure i fattori originali da cui era stato determinato? e se
hanno la precedenza questi ultimi ha senso poter impostare un valore
arbitrario (cioe' ha senso che esista una Let per quella property?)
Ora sparo completamente nel buio, ma forse tu intendevi ottenere qualcosa
del genere:
Private Sub Class_Initialize()
'di default usiamo un valore "impossibile" per sapere che
'la property non e' inizializzata
intAnzianitàDiGruppoANNI = -1
End Sub
Public Property Get AnzianitàDiGruppoANNI() As Integer
If intAnzianitàDiGruppoANNI = -1 Then
    'se non e' stata inizializzata la calcoliamo, altrimenti
    'resta valido l'ultimo valore calcolato/impostato nella Let
    intAnzianitàDiGruppoANNI = CalcolaAnzianitàDiGruppoANNI
End If
AnzianitàDiGruppoANNI = intAnzianitàDiGruppoANNI
End Property
Public Property Let AnzianitàDiGruppoANNI(ByVal vNewValue As Integer)
intAnzianitàDiGruppoANNI = vNewValue
End Property
Private Function CalcolaAnzianitàDiGruppoANNI() As Integer
If Collega.PartTime Then
    AnzianitàDiGruppoANNI = PT.AnniPrePT + PT.AnniInPT + PT.AnniProPT
Else
    AnzianitàDiGruppoANNI = Year(DV.DataBustaPaga) -
Year(Collega.Assunzione)
End If
End Function


 quando viene modificato dal codice cosa deve avere la precedenza?
inizialmente gli AnniAmministrativi sono uguali agli AnniDiGruppo
quindi:
AnzianitaAmministrativaAnni = AnniDiGruppo
Se PartTime SI
[il codice in un altra classe conta il numero di i Mesi di part time
effettuati]
AnzianitaAmministrativaMesi = AnzianitaAmministrativaMesi - MesiDaScalare
    Se i MesiDaScalare sono > 12 vuol dire che devo togliere un anno a
            AnzianitaAmministrativaAnni  quindi
             AnzianitaAmministrativaAnni  = AnzianitaAmministrativaAnni  -1
    Fine Se
Ecco su questo ultimo passaggio AnzianitaAmministrativaAnni  rimane
invariato anche se fin quando
sono dentro la Let di AnzianitaAmministrativaAnni il risultato è quello
desiderato, ma appena fuori
zacccc il valore ritorna ad essere quello prima della sottrazione.
Io sta cosa non riesco proprio a capirla e più la guarda e più non trovo
l'errore.
Che pillola ste classi!
Debby
PS
Per rispondere alla tua domanda il valore deve essere quello modificato!

desiderato, ma appena fuori
Scusate ho commesso un errore nel fare l'esempio
L'errore si verifica nella Get AnizianitàDiGruppoMesi, l'esempio riportato
era
la Get AnzianitàAmministrativaMESI qui dentro tutto funzione alla
perfezione.
Sorry.. mi sto rimbambendo!
Deb

 perfezione.
Ti do un consiglio.
Dato che le Property non ti entrano in testa, sostituisci TUTTE le Property
Let Con delle Sub di assegnazione, es.
    Property Let Anni(Byval valore As Long)
diventerà
    Sub AssegnaAnni(Byval valore As long)
E TUTTE le property Get con funzioni
    Property Get Anni As Long
diventerà
     Function RitornaAnni As Long
In questo modo non puoi più sbagliarti e non ti troverai il debugger che fa
giri strani nel codice.
La funzionalità delle property rimane inalterata anche in questa forma,
perchè le property Let e Get altro non sono che un rimpiazzo di sub e
funzioni (Java ad es. non ha il concetto di property, ma usa al loro posto
funzioni del tipo setAnni(valore) e getAnni).
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 quindi:
Evidentemente non mi sono spiegato... stai continuando a rivedere la logica
con cui effettui i tuoi calcoli, ma quella non e' mai stata messa in
discussione e io non l'ho nemmeno guardata; quello di cui parlavo e' proprio
la logica generale con cui e' strutturata la classe, che mi sembra sbagliata
indipendentemente dal fatto che sia una classe che tratta di anzianita', di
elicotteri oppure di gare a birra e salsicce!
Provo di nuovo a farti vedere un pezzo del tuo codice, ho cambiato nome alle
variabili non per sfotterti, ma perche' cosi' forse vedi la cosa in maniera
astratta:
Public Property Get NumeroBanane() As Integer
If Settimana.Festivo Then
    NumeroBanane = Banco.NumeroPere + Banco.NumeroMele + Banco.NumeroFragole
Else
    NumeroBanane = Nave.Carico - Furgone.Carico
End If
End Property
Public Property Let NumeroBanane(ByVal vNewValue As Integer)
    intNumeroBanane = vNewValue
End Property
questo e' esattamente equivalente ad una delle tue property, non importa
quanto sconclusionati siano i calcoli: *si vede a occhio* che il valore che
imposti quando fai dall'esterno 'NumeroBanane = 7' viene salvato in una
variabile che *non viene assolutamente considerata* nella relativa property
Get... basta mettere un breakpoint all'inizio della Property Get per capire
i "giri" che fa il tuo codice, e dovresti immediatamente capire dove e'
finito e perche' non viene piu' fuori quel 7...
Se non ti e' assolutamente chiara questa cosa, e' meglio che sospendi tutto,
ti prendi un bel libro sulla programmazione a oggetti in VB6 (e sottolineo
_in VB6_) e te lo studi in tutta calma... gli errori in cui puoi incorrere
usando le classi sono in genere piu' insidiosi e meno diretti, e se i
concetti minimi di base scricchiolano, tra poco tempo rischi di impelagarti
in un mare di codice assolutamente ingestibile.


 Get...
Detto in parole povere, se ti danno in mano 7 banane, quando ti chiedono
"quante banane hai in mano?" non puoi metterti a contare quanti sono i
giorni festivi dell'anno in corso.
Devi rispondere contando le banane che hai in mano e rispondere 7.
Se rispondi diversamente significa che la domanda giusta è "quante banane
VORRESTI avere in mano?" e il fatto che ti vengano date 7 banane è del tutto
superfluo e non andrebbe nemmeno considerato come possibile.


 _in VB6_) e te lo studi in tutta calma...
Luca non puoi capire quanti soldi ho speso in libri e a parità di impegno ho
riscontrato molti ma molti
miglioramenti più seguendo il vostro metodo di insegnamento che leggendo i
manuali.
Seguirò anche quest'ultimo consiglio, mi prendero un libro che parli di
programmazione ad oggetti in VB6 sperando di capire
dove ho commesso gli errori di quello che ho scritto fin'ora.
Onestamente speravo in una vostra correzione, non tanto per avere il lavoro
fatto ma perchè penso che
sto sbagliando in una piccola riga.
Penso però che come in passato Zanna, Sergio e Marg mi abbiano spronato nel
capire dei concetti facendomi sbattere
più volte la testa su determinati punti deduco che questo sia il metodo
migliore per me.
Mi viene in mente di quando ero a scuola che non capivo il comportamento dei
miei professori ora li capisco e probabilmente
capirò anche il perchè di questo metodo "vostro" di insegnamento.
Il progetto che sto portando avanti per me è un secondo lavoro ma in primis
è una cosa che mi piace quindi lo faccio con molto
piacere e quello che ho creato dal nulla fin'ora è frutto anche dei vostri
insegnamenti verso la sottoscritta.
Spero di non tornare sull'argomento con la coda tra le gambe perchè sarebbe
un fallimento per me. Un abbraccio e grazie di cuore
Deborah!

Ore 3.21 ho sonno
Ore 3.22 non sono fresca
Ore 3.23 ho risolto
Ore 3.24 con i dubbi ma ho risolto
Ho creato questa Function dentro la Classe Anzianità ( metto sotto anche se
non interessa a nessuno)
L'esempio banane mi ha fatto capire fino ad un certo punto ma ora mi viene
il dubbio che non si possano scrivere Condizioni nelle Property e pensavo
che comunque si potesse aggiungere un qualcosa ad una proprietà anche se
questa, avesse dei calcoli nelle Get.
Ora le mie Get e Let sono diventate molto semplici tipo questa.
Public Property Get AnzianitàDiGruppoANNI() As Integer
    AnzianitàDiGruppoANNI = intAnzianitàDiGruppoANNI
End Property
Public Property Let AnzianitàDiGruppoANNI(ByVal vNewValue As Integer)
intAnzianitàDiGruppoANNI = vNewValue
End Property
Non vedo perchè complicarsi la vita con le Property quando le Function e le
Sub bastano e avanzano....
Vado a nanna che è meglio!!!!!
Debby
_________________________________________
Public Function CaricaDatiAnzianità() As Integer
'######################## AnzianitàAmministrativaANNI
##############################
Dim x As Integer
Dim i As Integer
Dim Mesi As Integer
'######################## AnzianitàDiGruppoANNI
##############################
'######################## AnzianitàDiGruppoMESI
##############################
If Collega.PartTime Then
    AnzianitàDiGruppoANNI = PT.AnniPrePT + PT.AnniInPT + PT.AnniProPT
    AnzianitàDiGruppoMESI = (PT.MesiPrePT + PT.MesiInPT + PT.MesiProPT)
        If AnzianitàDiGruppoMESI > 12 Then
            x = 0
            x = (AnzianitàDiGruppoMESI / 12)
            AnzianitàDiGruppoMESI = AnzianitàDiGruppoMESI - (12 * x)
            'Sotto AnzDiGruppo anche se si addiziona qualcosa appena si esce
            'dalla Let perde il valore
            AnzianitàDiGruppoANNI = AnzianitàDiGruppoANNI + x
        End If
Else
    AnzianitàDiGruppoANNI = Year(DV.DataBustaPaga) -
Year(Collega.Assunzione)
    AnzianitàAmministrativaANNI = AnzianitàDiGruppoANNI
End If
'######################## AnzianitàAmministrativaANNI
##############################
'######################## AnzianitàAmministrativaMESI
##############################
'Prende i mesi totali di part time (es. 8) poi prende i mesi di anzianita di
gruppo
'(es.2 , Febbraio) e va indietro a scalare per vedere a quale mese
corrisponde il mese
'di anzianità amministrativa. Se a Febbraio si scalano 8 mesi il risultato è
6 ossia
'Giugno ma nello stesso tempo avendo passato Dicembre si deve scalare 1 anno
agli Anni
'Amministrativi
AnzianitàAmministrativaANNI = AnzianitàDiGruppoANNI
Mesi = AnzianitàDiGruppoMESI
i = 0
Do
  Mesi = Mesi - 1
  i = i + 1
   If Mesi = 0 Then
        Mesi = 12
        AnzianitàAmministrativaANNI = AnzianitàAmministrativaANNI - 1
   End If
Loop Until i = PT.MesiTotPT
AnzianitàAmministrativaMESI = Mesi
End Function

 questa, avesse dei calcoli nelle Get.
[SNIP]
Certo che puoi farlo, ma devi appunto *farlo*; di per se' una routine
Property Get/Let non e' altro che, nome omen, una routine, senza nessuna
"magia" particolare: se gli dici di restituire un valore calcolato, bene, se
gli dici di restituire un valore memorizzato, bene lo stesso, ma se ti serve
un po' in un modo e un po' nell'altro, devi scrivere tu il codice di
conseguenza.
In particolare a te serviva in un dato momento la risposta a entrambe le
domande
"quale dovrebbe essere *di norma* l'anzianita' X di questa persona?"
e
"quale e' *adesso* l'anzianita' X di questa persona?"
ma per come avevi scritto il codice potevi soddisfare solo la prima.
La soluzione che hai scelto adesso puo' andare bene, altrimenti, se avessi
voluto comunque mantenere l'utilizzo delle property come prima, mantenendo
quindi la funzione di calcolo privata, un possibile approccio lo puoi vedere
in una risposta precedente.


 in una risposta precedente.
Questo può andare bene mi mette paura.... ora i risultati sono giusti ma
perchè non
ha scritto che la soluzione "va bene" anzichè può andar bene?
Scaramanzia o non è pulito il codice?
Deb!

 Scaramanzia o non è pulito il codice?
No, scaramanzia perche' non l'ho guardata nel dettaglio ma mi sembrava
corretta come impostazione.


 ha scritto nel messaggio
news:c6b8ai$a6ebq$1...@ID-138791.news.uni-berlin.de...
