[Gelöst]zwischen Reitern vergl.&Felder auf gleichheit prüfen

2. Dezember 2016 12:31

Hallo erstmal,

ich bin neu in Navision und habe von meinem Ausbilder denn Auftrag bekommen in eine Codeunit so zu programmieren das sie in der Debitorenkarte den Namen,Adresse und Postleitzahl von zwei Reitern vergleicht.
Wenn diese gleich sind soll ein Haken bei einem Boolischen Feld abgehakt werden und ein Error ausgegeben werden Das die Rechnungsadresse nicht gleich der Lieferadresse sein darf.

Wie geht das ? :?:

Schon mal danke im Voraus.

LG
Marc
Zuletzt geändert von MarcBe am 6. Dezember 2016 15:34, insgesamt 4-mal geändert.

Re: Reiter vergleichen

2. Dezember 2016 12:46

Hallo Marc,

zunächst einmal herzlich willkommen im Forum.

Zu deiner Frage: Das kommt drauf an. :mrgreen:

Es wäre vielleicht ganz gut, wenn du zu nächst einmal die Aufgabenstellung genau beschreibst, denn ich glaube nicht, dass dein Ausbilder dir nicht mehr gesagt hat. :-?
Dann beschreibst du wo dein Problem genau liegt, du willst dabei doch auch etwas lernen. :lol:
Evtl. fällt dir das schon selbst ein, wie man es lösen kann.

Ich kann mir auch nicht vorstellen, das die Liefer- Verkaufs- und Rechnungsadresse nicht auch mal gleich sein können (hängt natürlich von eurer Branche ab).

Gruß Fiddi

Re: Reiter vergleichen

2. Dezember 2016 12:50

Danke ,

mir wäre es nur wichtig zu wissen wie ich die Reiter vergleichen kann.

Ich arbeite bei einer Reifen verkauf Firma die international vertreten ist.

Re: Reiter vergleichen

2. Dezember 2016 12:51

Hallo,

"Reiter" kannst du gar nicht vergleichen, nur Variablen, die auf den Reitern angezeigt werden.

Gruß Fiddi

Re: Reiter vergleichen

2. Dezember 2016 12:52

:oops: das meinte ich eigentlich auch .

Re: Reiter vergleichen

2. Dezember 2016 13:01

Hallo,

gut, dann vergleich doch einfach die Variablen auf den Reitern, und wenn alle zusammengehörenden Felder gleich sind, schreist du FEHLER :wink:

Wobei ich allerdings glaube, dass es vielleicht doch nicht ganz so einfach ist, weil da noch ein paar kleine Fallstricke verborgen sind. 8-)

Aber grundsätzlich benötigst du erst mal eine Funktion, der du die Variablen übergibst, die die Gleichheit prüft, und ggf. einen Fehler ausgibt.

Gruß Fiddi

Re: Reiter vergleichen

2. Dezember 2016 13:36

Hallo,

Ok Danke :)

LG
Marc

Re: Reiter vergleichen

2. Dezember 2016 14:07

fiddi hat geschrieben:Aber grundsätzlich benötigst du erst mal eine Funktion, der du die Variablen übergibst, die die Gleichheit prüft, und ggf. einen Fehler ausgibt.

Gruß Fiddi


Was für eine Funktion könnte man da benutzen ?

LG
Marc

Re: Reiter vergleichen

2. Dezember 2016 14:21

Was für eine Funktion könnte man da benutzen ?


Die, die du noch schreiben solltest. :wink:

Gruß Fiddi

Re: Reiter vergleichen

6. Dezember 2016 11:19

Hallo,
lCustomer.RESET;
lCustomer.SETRANGE(lCustomer."Immer Fremdversand",TRUE);
lCustomer.SETRANGE(lCustomer."No.",lSalesHeader."Sell-to Customer No.");
IF lCustomer.FINDSET THEN
IF( lSalesHeader."Ship-to Name" = lSalesHeader."Bill-to Name") AND(
lSalesHeader."Ship-to Address" = lSalesHeader."Bill-to Address")AND(
lSalesHeader."Ship-to City" = lSalesHeader."Bill-to City") THEN
ERROR('Rechnungsadresse und Lieferadresse darf nicht gleich sein!')
ELSE

Könnte mir jemand sagen was ich dort oben Falsch gemacht habe? Wenn ich ein Versuch mache gibt der mir den Error aus selbst wenn Immer Fremdversand auf FALSE steht.

Gruß
Marc

Re: Reiter vergleichen

6. Dezember 2016 11:37

mit Rec.FINDSET bekommst du keinen Record.
https://msdn.microsoft.com/en-us/library/dd301434.aspx
Schau dir mal FINDFIRST an
https://msdn.microsoft.com/en-us/library/dd338835.aspx

obwohl ich das eher mit GET machen würde
Code:
lCustomer.GET(lSalesHeader."Sell-to Customer No.");
IF lCustomer."Immer Fremdversand" THEN

Re: Reiter vergleichen

6. Dezember 2016 12:00

hallo,

sehr großen Dank hat alles super funktioniert.
:)

LG
Marc

Re: Reiter vergleichen

6. Dezember 2016 12:31

Hallo,

Ted hat geschrieben:mit Rec.FINDSET bekommst du keinen Record.


Wie kommst du darauf? :shock: . Natürlich bekommst du mit FINDSET einen Record, im Zweifel sogar ganz viele.

@Marc:
Obwohl dein Code, zugegeben, etwas merkwürdig aussieht (Teds Vorschlag solltest du schon berücksichtigen) müsste er eigentlich trotzdem funktionieren. Es sei denn du rufst Ihn an de falschen Stelle bzw. zu falschen Zeitpunkt auf.

Dazu musst zunächst einmal prüfen, wann deine Funktion aufgerufen wird/werden muss.
Nach der Eingabe der "Verkauf-An Kundennr." ist sicher die falsche Stelle, da hier die Adressen noch gleich sind, da sie mit den Daten aus dem Verkauf an Debitor (oder gar nicht) gefüllt sind. Die "Liefer-an Adresse" ändert sich erst wenn du manuell einen andere "Liefer-an Adresse" eingegeben hast, aber dann musst du es auch nicht mehr prüfen :wink:.

Jetzt überlege dir eine Stelle, an der du die Überprüfung einbauen könntest. :mrgreen:

EDIT:Ein Grund warum das auch evtl. jetzt schon mal funktioniert ist, wenn der Verkauf-an Debitor ein anderer ist, als der Rechnung-an Debitor.

Gruß Fiddi

Re: Reiter vergleichen

6. Dezember 2016 13:32

fiddi hat geschrieben:Hallo,

Ted hat geschrieben:mit Rec.FINDSET bekommst du keinen Record.


Wie kommst du darauf?:shock: Natürlich bekommst du mit FINDSET einen Record, im Zweifel sogar ganz viele.


Hm, wenn ich so richtig darueber nachdenke ... schande auf mein Haupt.
Dachte du bekommst den Datensatz erst wenn du "Next" aufrufst... was aber quatsch ist.
War gedanklich irgendwie bei "mysql_fetch" :D

Re: Reiter vergleichen

6. Dezember 2016 14:54

Hallo,

Obwohl dein Code, zugegeben, etwas merkwürdig aussieht (Teds Vorschlag solltest du schon berücksichtigen)

Ja das hab ich mir später dann auch gedacht jetzt funktioniert alles.

PS: Ich bin gerade erst von der Realschule runter und hab aus zufall den Job bekommen :D

Re: [Gelöst]Reiter vergleichen

6. Dezember 2016 14:57

Hallo,

meine Funktion sieht jetzt so aus :

Code:
    lCustomer.RESET;
    lCustomer.GET(lSalesHeader."Sell-to Customer No.");
      IF lCustomer."Immer Fremdversand" = TRUE THEN
        IF( lSalesHeader."Ship-to Name" = lSalesHeader."Bill-to Name") AND(
         lSalesHeader."Ship-to Address" = lSalesHeader."Bill-to Address")AND(
         lSalesHeader."Ship-to City" = lSalesHeader."Bill-to City") THEN
          ERROR('Rechnungsadresse und Lieferadresse darf nicht gleich sein!')
      ELSE


LG
Marc

Re: [Gelöst]Reiter vergleichen

6. Dezember 2016 15:23

Hallo,

so hätte ich es gemacht:

Code:
lCustomer.GET(lSalesHeader."Sell-to Customer No.");
IF lCustomer."Immer Fremdversand" THEN
  IF (lSalesHeader."Ship-to Name" = lSalesHeader."Bill-to Name") AND
      (lSalesHeader."Ship-to Name 2" = lSalesHeader."Bill-to Name 2") AND
      (lSalesHeader."Ship-to Address" = lSalesHeader."Bill-to Address") AND
      (lSalesHeader."Ship-to Address 2" = lSalesHeader."Bill-to Address 2") AND
      (lSalesHeader."Ship-to City" = lSalesHeader."Bill-to City") THEN
    ERROR('Rechnungsadresse und Lieferadresse darf nicht gleich sein!')
  ELSE


Ein paar kleine Fallstricke sind hier noch drin.
Denke bitte daran, lSalesHeader nicht unbedingt aus der Datenbank zu lesen, das könnte Probleme bereiten, da NAV an manchen Stellen mit temporären Salesheadern arbeitet, die nicht in der Datenbank gespeichert sind.
Und wie schon vorher gesagt, an der falschen Stelle eingebaut, und mit dem falschen Debitor getestet zeigt nur, dass die Funktion manchmal funktioniert.

Ich bin gerade erst von der Realschule runter und hab aus zufall den Job bekommen :D

Dafür ist das schon eine recht anspruchsvolle Aufgabe :wink:
Nur rein aus Interesse, wo hast du die Abfrage eingebaut?

Gruß Fiddi

Re: [Gelöst]Reiter vergleichen

6. Dezember 2016 15:29

Hi,

in eine Codeunit die unsere Freigabe regel und nochmal überprüft. :)

Dafür ist das schon eine recht anspruchsvolle Aufgabe :wink:


Ja schon werde schon recht hart dran genommen ist auch manchmal echt schwer zu folgen aber
irgendwie funktioniert das schon und man hat ja auch noch die Hilfe von Foren wie diesen. :)

Re: [Gelöst]zwischen Reitern vergl.&Felder auf gleichheit pr

6. Dezember 2016 17:29

Hallo nochmal,

Für alle die so eine ähnliche Aufgabe mal haben:

Code:
  lCustomer.RESET;
  lCustomer.GET(Rec."Sell-to Customer No.");
  IF lCustomer."Immer Fremdversand" THEN BEGIN
    IF(Rec."Ship-to Name" = Rec."Bill-to Name") AND (Rec."Ship-to Address" = Rec."Bill-to Address")
     AND(Rec."Ship-to City" = Rec."Bill-to City") THEN
      ERROR('Rechnungsadresse und Lieferadresse darf nicht gleich sein!');


und Danke für eure Hilfe :)

LG
Marc

Re: [Gelöst]zwischen Reitern vergl.&Felder auf gleichheit pr

6. Dezember 2016 17:50

Hallo,

in NAV 2017 gibts diese Funktion schon fertig. :mrgreen:

P.S.: Du hast in deinem Beispiel "Name 2" und "Adresse 2" vergessen, die gehören auch noch zur Adresse, auch wenn Ihr sie normalerweise nicht verwendet.

Gruß Fiddi