Newsgroup: it.comp.appl.access
Titolo: [2010] cambio numero decimali da codice

ho predisposto un evento On Format sul dettaglio di un report in quanto 
vorrei cambiare, in base al valore di un gruppo opzioni, il numero dei 
decimali da visualizzare nei controlli presenti
 
nel dettaglio ho 12 controlli, da [01] a [12], i mesi dell'anno
 
in fondo alla riga c'è il totale nel quale ho modificato la formula da
 
=[01]+[02]+[03]+[04]+[05]+[06]+[07]+[08]+[09]+[10]+[11]+[12]
 
a
 
=IIf([Forms]![_WEEKLY]![FrameQV].[Value]=1;FormatNumber(([01]+[02]+[03]+[04
]+[05]+[06]+[07]+[08]+[09]+[10]+[11]+[12]);0);FormatNumber(([01]+[02]+[03]+
[04]+[05]+[06]+[07]+[08]+[09]+[10]+[11]+[12]);1))
 
questo totale è OK, cambia in base alla scelta fatta prima di lanciare 
l'anteprima
 
per i 12 controlli, dato che una formula simile
 
=IIf([Forms]![_WEEKLY]![FrameQV].[Value]=1;FormatNumber(([01]);0);FormatNum
ber(([01]);1))
 
si ostina a darmi errore,
 
"This control has a reference to itself" per via del fatto che il nome del 
controllo corrisponde al nome del campo (o roba del genere)
 
ho pensato di intervenire, appunto, da codice VBA, andando a modificare la 
proprietà DecimalPlaces, come indicato in una pagina di Microsoft:
 
TextBox.DecimalPlaces property (Access) | Microsoft Docs
https://docs.microsoft.com/en-
 
us/office/vba/api/access.textbox.decimalplaces
 
mi sono quindi scritto una cosa così (per provarla sul primo campo):
 
If [Forms]![_WEEKLY]![FrameQV].[Value] = 1 Then
    Reports.Item("_MMM").Controls![01].DecimalPlaces = 1
Else
    Reports.Item("_MMM").Controls![01].DecimalPlaces = 0
End If
 
...ma non funziona, mostra sempre 0 decimali (che è il valore impostato 
nelle proprietà del controllo)
 
 
come ne esco?
 
e grazie
 
 
nota 1
 
ho provato a modificare la formula nel singolo controllo, quella che sopra 
non funziona per via del riferimento a sè stessa, inserendo il nome della 
tabella:
 
=IIf([Forms]![_WEEKLY]![FrameQV].[Value]=1;FormatNumber(([_MMM]![01]);0);Fo
rmatNumber(([_MMM]![01]);1))
 
ma temo di aver dimenticato qualcosa da mettere ancora prima di [_MMM], 
sebbene costruendo al formula con il wizard non mi venga mostrato niente di 
aggiuntivo rispetto a quello che ho scritto
 
 
nota 2
 
potrei cambiare i nomi dei controlli ma ci sono 4 livelli di subtotale 
 
=IIf([Forms]![_WEEKLY]![FrameQV].[Value]=1;FormatNumber(Sum([01]+[02]+[03]+
[04]+[05]+[06]+[07]+[08]+[09]+[10]+[11]+[12]);0);FormatNumber(Sum([01]+[02]
+[03]+[04]+[05]+[06]+[07]+[08]+[09]+[10]+[11]+[12]);1))
 
che vorrei lasciare così come sono
 
 
nota 3
 
e poi lo faccio per imparare qualcosa che mi potrà servire anche un domani 
;)
 
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

Non ho capito cosa sia:
[Forms]![_WEEKLY]![FrameQV].[Value] e che valori possa assumere...
 
Io ho provato in 2 TextBox ed una CheckBox e mi pare funzioni tutto:
txt1 DefaultValue=1.05
txt2 ControlSource= [=IIf([ck]=Vero;FormatNumber([txt1];0);FormatNumber([txt1];1))]
ck Default=False
 
Apro e vedo 1,1, in quanto applica il FormatNumber con 1 Decimale, se faccio il Toggle del Check ottengo 1 o torna 1,1
 
La modifica di DecimalPlaces dalle proprietà di Design non ha impatto ho provata ad impostarla a [0] ma essendo che FormatNumber restituisce un valore STRING non viene applicata la formattazione ExPost del DecimalPlaces.
 
Non so se ti può creare più confusione ma non trovo stranezze, mi pare funzioni tutto...!
 
@Alex

 
 
ok, ma se provo ad applicare la modifica tramite VBA dovrebbe sovrascrivere 
quella predefinita in fase di formattazione
 
o perlomeno, nel programma Designer di SAP posso farlo nello script 
associato a ogni oggetto del report, mi aspettavo di poterlo fare anche di 
qua ;)


Se il valore Opzione è 1 o 2 basta una cosa più semplice:
 
FormatNumber(([01]+[02]+[03]+[04]+[05]+[06]+[07]+[08]+[09]+[10]+[11]+[12]);[Forms]![_WEEKLY]![FrameQV]-1)
 
Saluti
@Alex

 
 
e dagli!  ;)
 
*NON* ho problemi con la formattazione dei totali, li ho con quelle dei 
singoli campi mese, che hanno Name 01 .. 12 e Control Source 01 .. 12
 
questa NON funziona:
 
=IIf([Forms]![_WEEKLY]![FrameQV].[Value]=1;FormatNumber(([01]);0);FormatNum
ber(([01]);1))
 
e nemmeno questa
 
=IIf([Forms]![_WEEKLY]![FrameQV].[Value]=1;FormatNumber(([_MMM]![01]);0);Fo
rmatNumber(([_MMM]![01]);1))
 
probabile che in casi come il mio serva qualcos'altro nell'identificazione 
dei campi 01 .. 12 
 
 
già che ci sono, segnalo anche questo:
 
in un report ho un oggetto Image con proprietà Picture impostata a 
nomedelfile.wmf
 
se cambio a mano la proprietà scrivendo il nome nomedelNUOVOfile.wmf, 
l'immagine non cambia
devo obbligatoriamente andare a selezionarlo con l'apposito pulsante Browse


 devo obbligatoriamente andare a selezionarlo con l'apposito pulsante Browse
 
Intendi in modalità DESIGN nella riga...?
Ovvio non memorizza il Path quindi no ha effetto... metti tutto il PATH completo e vedi se invece funziona.
 
@Alex

 
 
no, sono giusti, infatti il totale mostra il decimale che manca sui singoli 
campi
 
vedi qui un esempio dove i dati di febbraio, seconda colonna, mostrano 
valori senza decimali che invece a destra, nel totale, ci sono
 
https://i.imgur.com/4XJ7QgN.png
 


Togli il controllo e rimettilo nuovo... devi avere qualche proprietà che fa difetto.
 
@Alex

 
 
ho deciso: ho ricreato i 12 campi, dando loro un nome che non fosse lo 
stesso del nome del campo, poi ho inserito la formula iif(cosģ;e;cosą) e 
tutto funziona alla grande, non ho dovuto ritoccare anche i totali
 
resta il dubbio: se ho ben tradotto la pagina che mi č passata sotto il 
naso, pare che alcune proprietą non siano modificabili da codice VBA,il che 
mi perplime
