Autor Thema: Rechenoperationen mit Feldern  (Gelesen 2230 mal)

Offline TripleH

  • Frischling
  • *
  • Beiträge: 38
  • Ich liebe dieses Forum!
Rechenoperationen mit Feldern
« am: 01.01.04 - 23:58:54 »
Hallo!
Ich hab schon wieder eine kleine Frage.
Und zwar hab ich eine Maske Kalkulation in der bei mir der Haftpflichtbeitrag für eine ein Auto bei einer Versicherung errechnet werden soll.

Meine erste Frage ist folgende:
Ich hab ein Feld vom Typ Dialogliste in dem ich verschiedene Marken habe. Ist es möglich wenn ich z.B. Honda in dem Feld wähle das in einem Feld daneben ich dann die speziellen Typen von Hondas wählen kann und andere Typen?

2. Frage:
Ich hab auch noch ein Feld wo man die Zahlungsweise auswählen kann jährlich oder monatlich.
Wird jährlich angeklickt muss ich ncht viel beachten da ich es so schon berechne. Aber wird jetzt monatlich ausgewählt brauch ich in meinem ergebnisfeld noch eine Abrage die davon abhängig ist weil monatlich ein bißchen teuerer werden soll.
Ist das irgendwie zu realiesieren?

Vielen Dank im vorraus und eure Geduld.

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Rechenoperationen mit Feldern
« Antwort #1 am: 02.01.04 - 10:48:03 »
Hi,

zu Frage 1:

Als erstes brauchst du (wenn nicht schon vorhanden) ein Dokument in dem zu einem Herstellen alle Autotypen enthalten sind. In einer Ansicht muß dann in der ersten Spalte der Hersteller kategorisiert und in der zweiten Spalte die vorhandenen Typen angezeigt werden.

In der Dialogliste holst du dir dann mit @dbColumn die Werte aus der ersten Spalte der Ansicht mit den Typen. In den Eigenschaften der Dialogliste setzt du die Option "Felder bei Schlüsselwortänderung aktualisieren". Dann fügst du eine zweite Dialogliste ein. Als Auswahlformel fügst du @DbLookup("":"NoCache"; ""; "Typen"; "Dialogliste1"; 2) ein (wobei "Dialogliste1" der Feldname der Dialogliste zur Auswahl des Herstellers ist und "Typen" der Name der oben beschriebenen Ansicht). Bei dieser Dialogliste setzt du in den Eigenschaften die Option "Auswahl bei Dokumentaktualisierung aktualisieren".

Frage 2:

Wenn das Ergebnisfeld ein berechnetes FEld ist kannst du in der Werteformel eine @If - Abfrage einfügen. So z.B. @If(Zahlungsweise = "Jährlich"; Betrag; Betrag + Zuschlag).

Sonst würde ich die Berechnung im QuerySave-Event machen.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline TripleH

  • Frischling
  • *
  • Beiträge: 38
  • Ich liebe dieses Forum!
Re:Rechenoperationen mit Feldern
« Antwort #2 am: 02.01.04 - 14:17:10 »
Hallo!
 Schönen Tag wünsch ich.
anke dir Axel für deine Tipps sonst wär ich wirklich schon in ner Sackgasse und anhand der Musterquelltexte kann ich es auch andere Dinge umprogrammieren.
Nun mein neues kleines Problemchen.
Ich führe ja die Berechnungen durch und im Ergebnisfeld wird zusammengerechnet meist mit @TextToNumber Funktion.
So lange ich noch nichts in den Dialoglisten ausgewählt habe steht im Ergebnisfeld immer @Error.
Allerdings möcht ich es jetzt so machen das nichts im Feld steht sondern erst wenn ich aut eine berechnen Schaltfläche klick das Ergebnis erscheint.
Zusammenrechnen tue ich ja im Ergebnisfeld doch wie kann ichjetzt erreichen das erst durch den klick auf die Schaltfläche das Ergebnis dort erscheint?
Danke euch

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Rechenoperationen mit Feldern
« Antwort #3 am: 02.01.04 - 15:21:18 »
Es gibt verschiedene Verfahren, um solcherart Berechnungen durchzuführen - Du musst Dir da genau überlegen, was in Deiner Situation am besten passt.

Variante 1:
Das Ergebnisfeld "Ergebnis" ist berechnet, als Formel gibst Du den eigenen Feldnamen an (Ergebnis). Das Feld bezieht sich damit auf sich selbst.
Im Buhtong belegst Du nun das Feld:
FIELD Ergebnis := Ergebnis;  (notwendige Initialisierung)
- Prüfung, ob die erforderlichen Felder (richtig) belegt sind (Beispiel:
  @If (@IsNumber (Jahresbeitrag); ""; @Return (""))
  (Es passiert nix, wenn Jahresbeitrag numerisch ist, sonst bricht @Return den ganzen Vorgang an dieser Stelle ab)
- Wenn kein fehlerhaftes Feld einen Abbruch erzwang, führst Du jetzt Deine Berechnung durch:
  hilfswert := Jahresbeitrag * x + y;   (oder so)
- Setzen des Feldes:
  @SetField ("Ergebnis"; hilfswert)

Nachteil: Wenn jemand Feldwerte ändert (anderer Hersteller, anderer Typ, andere Zahlweise etc.), dann bleibt der ursprüngliche Ergebniswert erhalten, wenn der Buhtong nicht gedrückt wird.


Variante 2:
"Ergebnis" ist wieder ein berechnetes Feld. Dieses Mal steht aber die Formel in keinem Buhtong, sondern im Feld selbst. Bevor abschliessend die Berechnung erfolgt, prüfst Du ähnlich wie im Buhtong die Gültigkeit aller erforderlichen Werte und brichst den Formelapparat wie im Buhtong sofort ab, wenn ein Wert nicht passt.
Alternativ - wenn das besser passt: Du weist jeden Deiner Faktoren innerhalb der Formel einer Hilfsvariablen zu und belegst diese mit 0, wenn das Feld nicht oder fehlerhaft belegt wurde. Beispiel:
aufschlag := @If (Zahlweise = ""; 0; Zahlweise = "jährlich"; 1; 1,07)
Du berechnest dann mit Deinen Hilfsvariablen. Das Ergebnis ist 0, wenn einer der Werte nicht gepasst hat.

Diese Aufstellung erhebt keinen Anspruch auf Vollständigkeit ;-)

HTH,
Bernhard

Offline TripleH

  • Frischling
  • *
  • Beiträge: 38
  • Ich liebe dieses Forum!
Re:Rechenoperationen mit Feldern
« Antwort #4 am: 02.01.04 - 23:19:17 »
Hallo!
Danke Bernhard, hat supi hingehauen!
Allerdings hab ich noch eine Frage zu deinem Statement Axel und zwar zur Antwort von Frage 1 weil geht noch nicht ganz bei mir leider(ich dummi:))
Und zwar hab ich jetzt eine Ansicht angelegt "Honda".
Die 1. Spalte dort heißt marke und die 2. typ.
In der ersten Spalte hab ich unter Spaltenwert "Honda"eingetragen und in der 2. "civic" usw.
Dann hab ich ein Dialogfenster erstellt "marke" wo ich das häkchen bei "Felder bei Schlüsselwortänderung aktualisieren" gemacht habe und unter Vorgabewert dann flogendes geschrieben hab:

@dbColumn("";"NoCache;"";"Honda";1) wobei 1 doch für den Spaltenwert steht oder?
Und dann hab ich ein 2. Dialogfenster "typ" angelegt wo ich das Häkchen auf  "Auswahl bei Dokumentaktualisierung aktualisieren" gesetzt hab. Und unter Vorgabewert folgendes:

@DbLookup("":"NoCache"; ""; "Honda"; "marke"; 2)

Doch führe ich es in notes aus kommt der Fehler:

Feld 'typ': Eintrag im Index nicht gefunden, oder der Index ist für die Ansicht nicht aufgebaut!

Hab schon nen bißchen probiert aber es ist nie richtig!
Ich hoffe du kannst mir da nochmal helfen.
Und wenn ich das so über eine Ansicht mache nehme ich wohl an geht das nicht so einfach nem Typ einen Zahlenwert zuzuweisen für die Berechnung später!?
OKI
Macht nicht mehr zu lang wie ich:)


Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Rechenoperationen mit Feldern
« Antwort #5 am: 03.01.04 - 15:29:23 »
Hi,

sorry, da hat sich ein Fehler in meiner Formel für das zweite Dialogfeld eingeschlichen. Da sind bei einem Parameter die Anführungzeichen zuviel.

Das muss so aussehen: @DbLookup("":"NoCache"; ""; "Honda"; marke; 2)

Du legst dich aber bei dieser Art und Weise auf einen Hersteller fest.
Ich habe auf die Schnelle mal 'ne Demo zusammengestrickt. Da kannst du sehen wie ich das gemeint habe. In der Ansicht "AutoTypen" werden die verfügbaren Typen nach Hersteller angezeigt. Die Dokumente werden mit der Maske "AutoTypen" erstellt.

In der Maske "Versicherung" gibt es zwei Dialogfelder. Im ersten wird der Hersteller ausgewählt und in der zweiten der Typ. Es werden aber nur Typen des entsprechenden Herstellers zur Auswahl angeboten.

Die Demo-DB findest du als Anhang. Ich hoffe das hilft dir weiter.

Axel

Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline TripleH

  • Frischling
  • *
  • Beiträge: 38
  • Ich liebe dieses Forum!
Re:Rechenoperationen mit Feldern
« Antwort #6 am: 03.01.04 - 20:30:08 »
Hallo!
Dank dir Axel hat gut hingehauen. Und wenn mans auch einmal selber gemacht hat weiß man auch wies geht.
Nur ein kleines Prob hab ich noch.
Vorher hatte ich eine Dialogliste in der man alles auswählen konnte (also Marke und den Autotyp) stand alles unter dort wo jetzt @column und so steht. Ich hatte jeden Wagen mit einem Zahlenwert belegt und dann mir @TextToNumber
Zusammengerechnt.Das geht ja jetzt nicht so einfach.
Wie kann ich das ausgewählte Auto in meine Formel integrieren?
Praktisch muss ich ja nur den Typ belegen weil die MArke ist egal.
Meine Idee war in der Ansicht noch eine 3. Spalte zu machen mit den Zahlenwerten. Dann müßt ich in der Rechenformel nur auf den Wert aus der Ansicht zugreifen.
Ist meine Idee richtig oder gibt es ne einfachere Möglichkeit?
Allen noch eine schönes we.
Bis danni

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Rechenoperationen mit Feldern
« Antwort #7 am: 04.01.04 - 11:42:15 »
Hi,

dein Ansatz ist soweit richtig. Allerdings brauchst du eine zweite Ansicht für den Lookup.
Da ja, wie du schreibst die Marke egal ist, muß die Ansicht in der ersten Spalte den Typ sortiert oder kategorisiert anzeigen und in der zweiten den Zahlenwert.

In deiner Rechenformel holst du die dann den Zahlenwert mit @DbLookup

value := @DbLookup("":"NoCache"; ""; "Name der Lookupansicht"; "Name des Feldes mit AutoTyp"; 2)

Die Parameter mit den Namen musst du an deine Gegebenheiten anpassen. Der Name des Feldes darf nicht in Anführungszeichen stehen.

Mit der Variablen value kannst du dann weiterarbeiten. Dort steht der Zahlenwert drin. Je nach Typ musst du ihn dann noch mit @TextToNumber umwandeln.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz