Domanda

Ho un campo incrociato con un campo formula. La query restituisce qualcosa come

 CategoryID   Company       MarketValue   PaymentMode
  1            ABC             1000         H
  1            xyz             2000         H
  3            efg             9800         H

modalità di pagamento è semestrale indicata da 'H' Ho fatto un campo formula per valutare modalità di pagamento da

WhileReadingRecords;
numberVar mode;  
         if({PaymentMode}='H') then mode:=2 else mode:=12

Poi ho fatto un altro campo di formula

WhileReadingRecords;
numberVar mode;
numberVar result:={MarketValue}/mod;
result

Tuttavia restituisce la divisione per zero errore. Perché la mia formula per la modalità di pagamento non valutare correttamente. Ho provato mettendo la formula modalità di pagamento in testa relazione e scheda croce è 2 ° colpo di testa, ma getta ancora lo stesso errore.

È stato utile?

Soluzione

Due problemi.

In primo errore di sintassi - o meglio errore di battitura qui, ultimo 'e' che manca:)

numberVar result:={MarketValue}/mode;

In secondo luogo - è necessario valutare formuals in ordine specificato. Di 'la tua prima formula ha il nome 'calc_mode', poi la seconda dovrebbe iniziare con la prossima dichiarazione:

EvaluateAfter({@calc_mode});

Altri suggerimenti

Sono contento che hai già trovato la risposta di Arvo, ma ho alcuni suggerimenti per semplificare il codice:

  1. modalità è un buit-in funzione di cristallo (vedi file di aiuto di Crystal). Così, quando ti ho visto usare questa parola come nome per una variabile personalizzata, il mio cervello ha fatto un backflip. Che ne dite di definendolo "numPayPeriods", invece?

  2. Dal momento che la formula di esempio include i valori di campo, attrezzi di cristallo WhileReadingRecords di default (di nuovo, vedere i file di aiuto di Crystal). Così l'aggiunta è superflua in questo caso. Si può prendere quella del tutto.

  3. Non c'è bisogno di 2 formule separati nel tuo esempio. Inoltre, il Risultato variabile è inutile nella sintassi Crystal. È possibile semplificare il tutto ad appena 1 formula:

    if({PaymentMode}='H') then
    {MarketValue}/2
    else
    {MarketValue}/12;

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top