[Gelöst]Datensatz verändern schlägt fehl

27. Mai 2009 10:50

Guten morgen zusammen,

ich versuche mich seit einiger Zeit mit NAV 5.x in "leichtem" programmieren, aber im Moment hänge ich und komme nicht weiter:
Anbei mein Code, ich versuche im OnAfterGetRecord abzuprüfen ob in dem Feld CoA Certifikate No. etwas eingetragen ist, wenn
ja, dann soll er mit einer Meldung abbrechen, wenn nicht, dann soll er die vorher eingegebene AZ-Nr. eintragen. Aber irgendwie will
mir das nicht gelingen.

Hat von euch jemand vielleicht eine Idee, was ich hier falsch mache :oops:

Code:
SETFILTER("Item Ledger Entry"."Entry No.", EntryNo);

IF "Item Ledger Entry"."CoA Certifikate No." <> '' THEN BEGIN
  MESSAGE('Es ist bereits ein Analysezertifikatsposten vorhanden.');
  CurrReport.QUIT;
END;

IF "Item Ledger Entry"."CoA Certifikate No." = '' THEN BEGIN
  "Item Ledger Entry"."CoA Certifikate No." := CoANo;
    IF MODIFY(TRUE) THEN
      MESSAGE('AZ wurde erfolgreich eingetragen.');
END;



Danke für eure Hilfe :-)
Zuletzt geändert von owenw am 3. Juni 2009 08:57, insgesamt 1-mal geändert.

Re: Datensatz verändern schlägt fehl

27. Mai 2009 10:59

Etwa DER Owen?? :)
Moin moin

Versuchs mal statt mit MESSAGE() mit ERROR()...
Mit ERROR wird die gesamte Verarbeitung abgebrochen.
Aber das würde in deinem Fall den kompletten Report abbrechen. Ist doch ein Report!?

Beschreibe doch am besten mal mit welchem Objekt du was ändern willst.

PS: welcher lebensmüder Typ hat dir eigentlich ne Entwicklerlizenz in die Hand gedrückt?? 8-)

Gruß
Christoph (ENGC)

Re: Datensatz verändern schlägt fehl

27. Mai 2009 11:17

Ich habe mir doch fast gedacht, dass du dich hier auch rum treibst ;-)

Der User gibt eine Laufende Nr. und AZ Nummer ein, der Report soll dann prüfen, ob auf der laufenden Nr. bereits eine AZ-Nr vorhanden ist,
wenn ja, soll er abbrechen mit einer Meldung, wenn nicht soll er diese eintragen und eine kurze Rückmeldung geben.

Mit dem ERROR hat leider nicht funktioniert, bei der ersten IF Abfrage (obwohl in der Tabelle nichts eingetragen ist) bricht schon direkt ab.



Gruß
Owen

Re: Datensatz verändern schlägt fehl

27. Mai 2009 11:25

Versuchs mal so
Code:
"Item Ledger Entry".SETFILTER("Item Ledger Entry"."Entry No.", EntryNo);
IF "Item Ledger Entry".FINDFIRST THEN;

IF "Item Ledger Entry"."CoA Certifikate No." <> '' THEN
  MESSAGE('Es ist bereits ein Analysezertifikatsposten vorhanden.')
ELSE BEGIN
  "Item Ledger Entry"."CoA Certifikate No." := CoANo;
  IF "Item Ledger Entry".MODIFY(TRUE) THEN
      MESSAGE('AZ wurde erfolgreich eingetragen.');
END;

(ungetestet)

Alternativ kannst du dir den Posten auch mit "Item Ledger Entry".GET(EntryNo) holen.
Das Feld ist ja der Primärschlüssel.
Dann kannst du dir auch das FINDFIRST sparen.
Zuletzt geändert von ChristophE am 27. Mai 2009 11:34, insgesamt 1-mal geändert.

Re: Datensatz verändern schlägt fehl

27. Mai 2009 11:33

Ungefähr so ähnlich sah mein Code auch mal aus, hier ist nur der mist: Er trägt die AZ-Nr. auf dem Artikelposten ein, zeigt dann
aber die Fehlermeldung: Es ist bereits ein Analysezertifikatsposten vorhanden und AZ wurde erfolgreich eingetragen. Ist bereits einer
vorhanden, dann ruft er 2x die Meldung: Es ist bereits ein Analysezertifikatsposten vorhanden. Ich habe das Gefühl, die erste IF Abfrage
funktioniert nicht sauber.

Re: Datensatz verändern schlägt fehl

27. Mai 2009 11:41

achso
Code:
"Item Ledger Entry".SETFILTER("Item Ledger Entry"."Entry No.", EntryNo);
IF "Item Ledger Entry".FINDFIRST THEN;


gehört auch eigentlich ins OnPreDataItem

im OnAfterGetRecord dann
Code:
IF "Item Ledger Entry"."CoA Certifikate No." <> '' THEN
  ERROR('Es ist bereits ein Analysezertifikatsposten vorhanden.')
ELSE BEGIN
  "Item Ledger Entry"."CoA Certifikate No." := CoANo;
  IF "Item Ledger Entry".MODIFY(TRUE) THEN
      MESSAGE('AZ wurde erfolgreich eingetragen.');
END;


sollte meiner Meinung nach funktionieren

Re: Datensatz verändern schlägt fehl

27. Mai 2009 11:51

Funktioniert danke ;-)

Also mit dem SETFILTER im OnPreDataItem sehe ich ja noch ein, aber was macht der IF "Item Ledger Entry".FINDFIRST THEN; ??

Re: Datensatz verändern schlägt fehl

27. Mai 2009 12:16

mit Item Ledger Entry".FINDFIRST positionierst du dich auf dem ersten gefunden DS der auf den Filter zutrifft.
ansonsten bleibt "Item Ledger Entry" leer und das Feld was du abfragen willst somit auch immer...

die IF Abfrage davor ist nur ne "Schönheitskorrektur" :)
Sollte er mit dem Filter nämlich keinen DS finden, bricht er ansonsten mit einer unschönen Fehlermeldung ab.