gleicher Funktionsablauf - unterschiedliche Ergebnisse

  • Guten Tag,
    ich habe in meinem Programm an zwei Stellen einen äußerst ähnlichen Aufbau für das Ein- bzw. Ausbuchen von Beständen.
    Das Einbuchen sieht so aus:
    docid := @DbLookup("Notes":"NoCache";@DbName;"($ArtikelnachID)";erf_Produkt_ArtNr;1;[ReturnDocumentUniqueID]);
    bestand := @DbLookup("Notes":"NoCache";@DbName;"($ArtikelnachID)";erf_Produkt_ArtNr;"Artikel_Bestand");
    bestand := bestand + @ToNumber(erf_Produkt_Anzahl);
    @SetDocField(docid;"Artikel_Bestand";bestand);
    @SetField("erf_Produkt_Status";"erledigt");
    @Command([FileSave]);
    @Command([ViewRefreshFields]);


    Das Ausbuchen ist so programmiert:
    docid := @DbLookup("Notes":"NoCache";@DbName;"($ArtikelnachID)";erf_Ausbuchung_ArtikelNr;1;[ReturnDocumentUniqueID]);
    bestand := @DbLookup("Notes":"NoCache";@DbName;"($ArtikelnachID)";erf_Ausbuchung_ArtikelNr;"Artikel_Bestand");
    bestand := bestand - @ToNumber(erf_Ausbuchung_Anzahl);
    @SetDocField(docid;"Artikel_Bestand";bestand);
    @Command([FileSave]);
    @Command([ViewRefreshFields]);


    Beide Funktionen werden durch je einen Button gestartet. Das Einbuchen findet aus einer Ansicht auf dem Artikel stehend, das Ausbuchen, nach Auswahl des Artikels aus einer Ansicht in eine Maske, heraus statt.


    Das Einbuchen klappt einwandfrei. Das Ausbuchen überhaupt nicht. Der neu berechnete Bestand wird nicht zurück gespeichert. Durch @Prompt Ausgaben an den entsprechenden Stellen konnte ich sehen, das auch beim Ausbuchen die docid und der Wert von "bestand" richtig ausgewählt bzw. berechnet werden.


    Woran könnte das liegen?


    Vielen Dank für jeden Tipp.


    Ach ja, ich bin Anfänger im Programmieren mit Notes, also nicht zu viel voraussetzen. Programmiererfahrung in anderen Sprachen habe ich allerdings reichlich.


    harmonyker

  • Hallo taurec,


    klare Antwort - Jein. Folgendes Szenario:
    Artikelstamm - darauf aufbauend Bestellungen - daraus entstehen Offene Bestellungen - Wareneingang - Eingang buchen. Hier stehe ich in einer Ansicht auf dem Artikel aus der Bestellung (eigenes Dokument mit entsprechender Kennung zur Unterscheidung) und hole mir den Artikel (mit Artikel-Nr) aus dem Artikelstamm und natürlich diese docid. Dann bestand addieren und zurück speichern in den Artikelstamm.
    Beim Ausbuchen passiert im Prinzip das gleiche. Ich stehe auf dem Artikel aus dem Artikelstamm mit dem aktuellen Bestand und öffne eine Maske und kopiere mir Basisdaten aus dem Artikel da hinein (Neues Dokument mit entsprechender Kennung). Ich erfasse die Anzahl und eine Kostenstelle und speichere ab. Nun soll in das Dokument aus dem Artikelstamm der subtrahierte, neu berechnete Bestand eingetragen werden. Die docid die ich jetzt hole ist tatsächlich auch die vom Artikelstamm. Nicht aus dem gerade erzeugten Ausbuchungsdokument das zu Dokumentationszwecken und Kostenzuordnungen auch weggespeichert werden soll. Insofern also eindeutig Ja weil es die richtige ID ist, aber nein weil es nicht die ID von dem Dokument auf dem ich gerade stehe ist. In beiden Fällen nicht.


    Vielen Dank fürweitere Tipps.


    harmonyker

  • *grins Also wäre die Antwort eigentlich ein klares Nein gewesen.


    Woran erkennst du denn, daß der neue Bestand beim Ausbuchen nicht zurückgeschrieben wird: Öffnest du danach das Bestandsdokument ?

  • Ich kehre in die Ansicht "Artikelstamm" (="($ArtikelnachID)") zurück. Der Bestandswert hat sich nicht verändert.
    Dabei mache ich beim Zurückkehren noch ein @Command([ViewRefreshFields]).

  • FileSave und ViewRefreshFields beziehen sich immer auf das aktuell geöffnete Dokument, auf das im Hintergrund veränderte Dokument hat das keine Auswirkung.


    Bist du auch wirklich sicher, daß der erste Lookup auch die richtige DocID zurückliefert ?

  • Ja, bin ich mir. Ich habe derzeit nur wenige Dokumente in der DB. Sehr überschaubar und ich habe die ID die ch bekomme mit @Prompt anzeigen lassen und mit einer Ansicht, die auch die ID anzeigt, im Designer verglichen. Sie ist genau die ID von dem Artikel den ich ausbuchen will.


    Dein Hinweis zu FileSave bringt mich aber auf einen Weg. Das Ausbuchen findet aus einer Maske heraus statt. Durch drücken des "Speichern" Buttons wird der gezeigte Ablauf durchgeführt. Dann erfolgt das Save. Wenn dieses Save nun nicht die Artikelstammänderung betrifft, dann kann ja auch nichts geändert werden. Das Ausbuchungsdokument wird gespeichert. Fragt sich, wie kann ich denn dann die Änderung des Artikels speichern? Vielleicht muss ich den Ausbuchungsablauf an eine andere Stelle lagern?
    Hast Du dazu einen Tipp?
    Danke schon einmal für den Hinweis.

  • @SetDocField speichert das Dokument das verändert wird.


    Allerdings berechnet es dieses nicht neu. Kann es vielleicht sein, daß du irgendwelche berechneten Felder drin hast auf die sich die Ansicht bezieht ?

  • @SetDocField speichert das Dokument das verändert wird
    und welches das ist, wird durch die docid bestimmt, richtig?


    In der Maske die zur Erfassung der Ausbuchungsdaten bestimmt ist, gibt es 4 berechnete Felder. Diese bekommen aus dem Artikelstamm die Werte Artikel-Nr, Bezeichnung, Bestand und ein Datumsfeld welches mit dem Tagesdatum gefüllt wird. Hierbei werden die Inhalt z.B. über ein @DBLookup aus der View ($ArtikelnachID) geholt.


    Die beiden restlichen Felder sind bearbeitbar und erhalten vom User die Anzahl und die Kostenstelle.


    Dann soll gespeichert werden und der Bestand berechnet und zurück geschrieben werden. Es gibt also eine Beziehung zwischen Ansicht und Maske - nämlich das Feld Artikel_Bestand welches in der Ansicht angezeigt wird und durch die @SetDocField Funktion verändert werden soll.


    Hast Du so was gemeint? Was sagt mir das?

  • Nein ich meinte ob es in der Stamm Maske in der du per @SetDocField was reinschreibst berechnete Felder gibt, die evnteull dafür sorgen können daß falsche Werte angezeigt werden.


    Das Bestandsfeld ist editierbar oder berechnet ?

  • Das Bestandsfeld ist editierbar in der Maske der Artikelstammerfassung (die heißt auch so). In der Ansicht ($ArtikelnachID) sind keine berechneten Felder. Hier werden nur die erfassten Felder aus dem Artikelstamm angezeigt.

  • sorry, war etwas unpässlich in den letzten Tagen. Zu Deiner Frage: darf ich derzeit nicht. Ich werde versucehn eine Testdatenbank zu bauen mit der man meine Situation nachvollziehen kann. Die werde ich dann hier posten.
    Erst einmal Danke für Deine Hilfeversuche