Autor Thema: Feld Wert abziehen/Substrahieren  (Gelesen 4674 mal)

Offline Lurchi

  • Frischling
  • *
  • Beiträge: 48
  • Ich liebe dieses Forum!
Feld Wert abziehen/Substrahieren
« am: 09.10.15 - 12:28:00 »
Hallo zusammen,

leider habe ich nichts passendes im Forum gefunden.

Ich habe eine Ansicht. In dieser Ansicht setze ich den Cursor auf ein bestehendes Dokument "Bereich". Dieses Dokument hat ein Feld mit der Bezeichnung "BereichBudget".
Wenn ich nun den unten aufgeführten Code per Klick ausführe. Öffnet sich eine Dialogbox mit der Maske "Seminar" mit Eingabefeldern. Eins dieser Feld ist das Feld "Semianrkosten". Nun soll beim Bestätigen der Dialogbox der Wert im Feld "Seminarkosten" vom Wert im Feld "BereichBudget" abgezogen/ substrahiert werden.

Mit dem Befehl:
Call doc.ReplaceItemValue("BereichBudget", - Str(newdoc.Seminarkosten(0)))
ersetzt mir es den Wert im Feld "BereichBudget" mit dem Wert vom Feld "Seminarkosten".
Leider zieht es mir nicht den Wert ab.

Irgendwie müsste es doch mit diesem Befehl gehen:
doc.BereichBudget(0) - newdoc.Seminarkosten(0)

Wo liegt der Fehler? Hat mir jemand eine Lösung? Bin am Verzweifeln.... :(


Sub Click(Source As Button)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim db As NotesDatabase
Dim newdoc As NotesDocument
Dim dlgdoc As NotesDocument
   
Set db = session.CurrentDatabase
Set dlgdoc = New NotesDocument(db)
   
   
'Dialog anzeigen und wenn mit OK bestätigt wird neues Dokument mit Maske Seminar angelegt.   

If workspace.DialogBox( "Seminar", False, False, True, False, False, False, "Neues Dokument", dlgdoc, True) Then
      
            
'Neues Dokument mit Maske Seiminar anlegen

Set newdoc = New NotesDocument(db)
newdoc.Form = "Seminar"
            
'Daten aus den Dialogfeldern in die Felder der Maske Seminar einfügen

newdoc.Nachname = dlgdoc.Nachname
newdoc.Vorname = dlgdoc.Vorname   
newdoc.Seminaranbieter = dlgdoc.Seminaranbieter
newdoc.Seminarkosten = dlgdoc.Seminarkosten      
      
      
Dim doc As NotesDocument         
Dim uidoc As NotesUIDocument
Dim uiview As NotesUIView
Set uiview = workspace.CurrentView
Set doc = db.GetDocumentByID(workspace.CurrentView.CaretNoteID)
doc.BereichBudget(0) - newdoc.Seminarkosten(0)
Call doc.Save(True,False)   
Set uidoc = workspace.CurrentDocument
      
'Neues Dokument speichern
Call newdoc.Save(True,False)   
      
End If
   
End Sub

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Feld Wert abziehen/Substrahieren
« Antwort #1 am: 09.10.15 - 13:06:33 »
Bist Du sicher, dass doc auch das richtige Dokument ist? Ich würde mir das vor dem Öffnen der Dialogbox holen

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Feld Wert abziehen/Substrahieren
« Antwort #2 am: 09.10.15 - 13:07:23 »
Eine Kombination aus Deinen beiden Zeilen ist die Lösung:
Code
Call doc.ReplaceItemValue("BereichBudget", doc.BereichBudget(0) - newdoc.Seminarkosten(0)))

Die Zeile doc.BereichBudget(0) - newdoc.Seminarkosten(0) macht die Berechnung. Du weist diesen Wert aber nirgends zu. Das macht doc.ReplaceItemValue()

Alternativ könntest Du -um komplett in der "verkürzten" Notation zu bleiben- das hier tun:

Code
doc.BereichBudget = doc.BereichBudget(0) - newdoc.Seminarkosten(0)))

Dass Dein Code nicht berücksichtigt, dass sowohl BereichBudget als auch SeminarKosten leer sein können, und dass Du "seltsame" Ergebnisse bekommst, wenn Du den Button mehrfach drückst (es werden jedesmal aufs neue die SeminarKosten vom Budget abgezogen), und dass kein ErrrorHandler generell in Verwendung ist lasse ich hier gezielt mal aussen vor...
« Letzte Änderung: 09.10.15 - 13:09:11 von Tode »
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
Re: Feld Wert abziehen/Substrahieren
« Antwort #3 am: 09.10.15 - 13:13:55 »
Hallo Lurchi,

ich kenne zwar solche Konstrukte aus anderen Programmiersprachen, aber meines Wissens nach ist
Code
doc.BereichBudget(0) - newdoc.Seminarkosten(0)

in Lotusscript nicht möglich.

Code
doc.bereichbudget = doc.bereichbudget(0) - newdoc.seminarkosten(0) 

Das sollte funktionieren. Und ReplaceItemValue macht genau das was es soll wie Du beschrieben hast. Es berechnet keine Differenzen, sondern ersetzt den Wert eines Items/Feldes.

Und das doc solltest Du vor dem Dialog setzen.

Bye,
Markus
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

Offline Lurchi

  • Frischling
  • *
  • Beiträge: 48
  • Ich liebe dieses Forum!
Re: Feld Wert abziehen/Substrahieren
« Antwort #4 am: 09.10.15 - 13:57:54 »
Vielen Dank rambrand und Tode. genau diese Lösung habe ich gebraucht. Als ich mir die Lösung angeschaut habe, war mir es klar. Echt blöd von mir. Es funktioniert :) Bin wohl Wochenendreif.

@ Peter Klatt: Das macht echt Sinn. Am Besten wär es, wenn geprüft wird, ob in der Ansicht ein Dokument mit der Maske "Bereich" angeklickt ist. Nur jetzt stellt sich die Frage, wie mache ich das? :-:

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Feld Wert abziehen/Substrahieren
« Antwort #5 am: 09.10.15 - 14:08:35 »
Set doc = db.GetDocumentByID(workspace.CurrentView.CaretNoteID)
If doc.Form (0) <> "Bereich" Then
   Msgbox "Sie haben kein Bereichsdokument markiert", 16, "Fehler"
   Exit Sub
End If

Offline Lurchi

  • Frischling
  • *
  • Beiträge: 48
  • Ich liebe dieses Forum!
Re: Feld Wert abziehen/Substrahieren
« Antwort #6 am: 09.10.15 - 14:27:16 »
Super vielen Dank "Peter Klett". Funktioniert einwandfrei.

Danke euch allen für die schnelle Hilfe :)))

Offline Lurchi

  • Frischling
  • *
  • Beiträge: 48
  • Ich liebe dieses Forum!
Re: Feld Wert abziehen/Substrahieren
« Antwort #7 am: 12.10.15 - 17:13:05 »
Jetzt bin ich es nochmal.

Ich bin doch wieder am verzweifeln :-( :-(

Nun versuche ich den Wert nicht zu subtrahieren, sondern zu addieren.

semdoc.BereichAktuellesBudget = Cstr(semdoc.BereichAktuellesBudget(0)) + Cstr(semdoc.Seminarkosten(0))
semdoc.BereichAktuelleTage = Cstr(semdoc.BereichAktuelleTage(0)) + Cstr(semdoc.SeminarAnzahlTage(0))

Wenn mein LS ausgeführt wird, dann werden die Felder "BereichAktuellesBudget" und "BereichAktuelleTage" sozusagen, 'angefasst'; die Felder werden jeweils in ein Text-Feld umgewandelt, aber leider nicht addiert.

Wie bekomme ich es hin, dass die Felder ein Zahlenfeld bleiben und die Werte addiert werden?

Ich komm einfach nicht weiter :-(

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Feld Wert abziehen/Substrahieren
« Antwort #8 am: 12.10.15 - 17:19:20 »
Hallo,

So wie ich es sehe, wandelst du mittels "CStr" die Werte aus den beiden betreffenden Feldern zuerst einmal
in String-Wert um.

Und mit Text-Werten, was Strings nunmal sind, kannst du nicht rechnen.

Eventuell so.
Code
semdoc.BereichAktuellesBudget = Cstr(semdoc.BereichAktuellesBudget(0) + semdoc.Seminarkosten(0))


Andreas

Offline Lurchi

  • Frischling
  • *
  • Beiträge: 48
  • Ich liebe dieses Forum!
Re: Feld Wert abziehen/Substrahieren
« Antwort #9 am: 12.10.15 - 17:24:15 »
Hallo Andreas,

wenn ich Cstr weg lasse bzw. bei deiner Variante erhalte ich die Meldung "Falscher Datentyp in Methode CoerStrToNum: STRING gefunden, DOUBLE wurde erwartet"

 :-:

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Feld Wert abziehen/Substrahieren
« Antwort #10 am: 12.10.15 - 17:26:41 »
Du solltest wirklich anfangen zu VERSTEHEN, was Du an Code verwendest... Sonst könnte Dir bei Deiner nächsten Frage jemand bös gesinntes mit solchem Code kommen
Code
Set dc = db.AllDocuments
Call dc.RemoveAll( True )

Wenn Du Code hast, dann solltest Du GENAU wissen, was JEDE EINZELNE Anweisung tut, vorher setzt Du den Code nicht ein, sonst kommst Du in Teufels Küche...
Mache Dir mal klar, was jede einzelne Anweisung bedeutet:

semdoc.BereichAktuellesBudget=???
==???
Cstr(=???
semdoc.BereichAktuellesBudget=???
(0)=???
+=???
Cstr(=???
semdoc.Seminarkosten=???
(0)=???
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Lurchi

  • Frischling
  • *
  • Beiträge: 48
  • Ich liebe dieses Forum!
Re: Feld Wert abziehen/Substrahieren
« Antwort #11 am: 12.10.15 - 17:34:58 »
Tode ich verstehe schon was du mir damit sagen möchtest. Kann dich auch gut verstehen.

Aber du darfst aber auch nicht den Sinn eines Forums vergessen. Daher wäre ich über produktive Hilfe dankbar.
Polemik hat im Forum nichts zu suchen.

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Feld Wert abziehen/Substrahieren
« Antwort #12 am: 12.10.15 - 18:45:12 »
Hallo,

Ich kann Tode auch verstehen, aber prinzipiell hat er recht.

Zuerst wissen wir (noch) nicht, in welchen Format die Daten in den betreffenden Feldern vorliegen.

In die Meldung, die du hier gepostet hast deutet eigentlich schon darauf hin, dass hier Werte
in einem Format vorliegen, welches durch "CStr" nicht verarbeitet werden kann.


Andreas

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Feld Wert abziehen/Substrahieren
« Antwort #13 am: 12.10.15 - 19:39:38 »
Das hat nichts mit Polemik zu tun. Ich versuche mal zu "Zeigen", was ich meine:

semdoc.BereichAktuellesBudget=Nimm das Item "BereichAktuellesBudget" im Dokument "semdoc"
==schreibe was da rein
Cstr(=Konvertiere den Ausdruck der da kommt in Text
semdoc.BereichAktuellesBudget=Das sind alle Werte, die im Item "BereichAktuellesBudget" im Dokument semdoc sind (ist immer ein Array, auch wenn nur ein Wert drin steht)
(0)=nimmt Dir das 0te Element aus dem ausgelesenen Wert. Selbst wenn hier eine Zahl drinstehen sollte (Du hast uns noch nicht gesagt, welchen Feldtyp BereichAktuellesBudget hat), dann wird diese Zahl in einen Text gewandelt... sehr sinnvoll, wenn man nachher damit weiterrechnen will...
+=Ein Operator. Wenn man 2 Zahlen reinschmeisst, dann addiert er die: 2 + 2 = 4. Schreibt man zwei Texte rein, dann hängt er die Aneinander: "2" + "2" = "22" (stimmt nicht zu 100% weil Script im normalfall erkennt, dass das beides Zahlen sind, obwohl sie in String- Variablen stehen, und dann doch 4 draus macht)
semdoc.Seminarkosten=Das sind alle Werte, die im Item "Seminarkosten" im Dokument semdoc sind
(0)=0tes Element des obigen Arrays

Wenn Du Dir den Code so auseinandernimmst, wirst Du sehen, dass das gar nicht klappen kann, weil Du versuchst, Texte zu verrechnen.

Jetzt kannst Du selbst weitermachen.

Tipp: Für ein leeres Feld liefert doc.Feldname leider auf jeden Fall einen String zurück, nämlich "", selbst dann, wenn das Feld eigentlich eine Zahl ist.

In dem Fall schlägt Dein Versuch zu addieren mit einem "Type Missmatch" fehl...

Und von wegen "produktive Hilfe": Ein Forum kann Dir nicht helfen, das Programmieren zu lernen, dafür gibt es Kurse, Handbücher, Lehrer, und die kosten im professionellen Umfeld einfach Geld...
Wenn Deine Firma nicht bereit ist, Dich für Deinen Job richtig auszubilden, dann kann das ein Forum nicht auffangen...
« Letzte Änderung: 12.10.15 - 19:43:33 von Tode »
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz