[gelöst]FINDLAST greift nicht

27. Januar 2011 10:00

Hallo zusammen,

bin langsam am verzweifeln.
Ich habe folgendes Fenomen:
Ich hole mir beim einlesen einer Textdatei immer den letzten Datensatz mit FINDLAST (FIND'+' schon probiert) um die laufende Nummer
zu bekommen.
Nun habe ich eine Tabelle mit zusammengesetzten Primärschlüssel vobei die laufende Nummer zum PrimKey gehört.
Ich prüfe mit "IF NOT GET" ob es den Datensatz schon gibt wenn nicht füge ich ein... INSERT TRUE;

Soweit so gut...
Jetzt kommt die Zweite Zeile - Ich fühe wieder den Findlast aus aber finde meine eben eingefügte Zeile nicht- also habe ich die selbe Laufende nummer im Zugriff,
und das system denkt es gibt diesen Datensatz schon!!

Also zum testen
COMMIT eingefügt
Zuweisung auf vom neuen auf den Alten Datensatz.
Debugger
Stammdaten...
und und und...

Derwitz ist, die Funktion lief jetzt schon ein halbes jahr lang ... ohne Probleme???
Und was noch lustiger ist, im Testsystem bekomme ich die Datei ohne weiteres eingelesen...???

Hier mal der Code, vielleicht habe ich ja Tomatos auf die Augen:

Dies ist der Aufruf:
Code:
l_inv_setup.GET;
l_file.SETRANGE(l_file.Path,l_inv_setup."Path Invoice ShipEDI");
l_file.SETFILTER(l_file.Name,'*.TXT|*.CSV|*.txt|*.csv|*.Txt|*.Csv');
l_file.SETRANGE("Is a file",TRUE);
IF l_file.FINDFIRST THEN BEGIN
  REPEAT
    check :=FALSE;
    Dateiname:=l_file.Path+l_file.Name;
    Datei.TEXTMODE(TRUE);
    Datei.OPEN(Dateiname);
    WHILE (Datei.READ(inTEXT) <> 0) DO BEGIN
      check := Lese_Invoice(inTEXT);   //Hier aufruf der Lesen Funktion
    END;


Und hier der Problemfall:

Code:
IF Setup.GET(COPYSTR(Datastring,1,10),Setup.Type::"Import Rechung") THEN BEGIN // muss von allen Sped gleich lang sein.
  WITH Setup DO BEGIN
    IF NOT l_head.GET((COPYSTR(Datastring,Agent_von,Agent_len)),(COPYSTR(Datastring,Referenzno_von,Referenzno_len))) THEN BEGIN
      l_head.INIT;
      EVALUATE(l_head."Shipping Agent",(COPYSTR(Datastring,Agent_von,Agent_len)));
      EVALUATE(l_head."Invoice number",(COPYSTR(Datastring,Referenzno_von,Referenzno_len)));
      l_head."read Date":=TODAY;
      l_head.INSERT(TRUE);
    END;
   
   IF Line_last.FINDLAST THEN BEGIN //Hier sollte der letzte gefunden werden!!! Tut er aber nicht.
      l_lineno:=Line_last."Line No"+100;
   
 END ELSE l_lineno:=100;
    IF NOT l_line.GET(COPYSTR(Datastring,Agent_von,Agent_len),(COPYSTR(Datastring,Referenzno_von,Referenzno_len)),l_lineno) THEN
                BEGIN
      l_line.INIT;
      EVALUATE(l_line."Shipping Agent",(COPYSTR(Datastring,Agent_von,Agent_len)));
      EVALUATE(l_line."Invoice number",(COPYSTR(Datastring,Referenzno_von,Referenzno_len)));
      l_line."Line No":=l_lineno;
      l_line."Sending No.":=(COPYSTR(Datastring,SendingNo_von,Setup.SendingNo_len));
      l_line."Delivery Date":=get_date((COPYSTR(Datastring,"Delivery Date_von","Delivery Date_len")));
      l_line."Order No.":=(COPYSTR(Datastring,Order_von,Order_len));
      EVALUATE(l_line."Distance ( km )",(COPYSTR(Datastring,"Distance(km)_von","Distance(km)_len")));
      EVALUATE(l_line."Weight calculated",(COPYSTR(Datastring,Weightcalculated_von,Weightcalculated_len)));
      EVALUATE(l_line."Cargo net",(COPYSTR(Datastring,Cargonet_von,Cargonet_von)));
      EVALUATE(l_line."sum without cargo",(COPYSTR(Datastring,sumwithoutcargo_von,sumwithoutcargo_len)));
      EVALUATE(l_line.Maut,(COPYSTR(Datastring,Maut_von,Maut_len)));
      EVALUATE(l_line."Sending Amount",(COPYSTR(Datastring,Sending_Amount_von,Sending_Amount_len)));
      EVALUATE(l_line.Plots,(COPYSTR(Datastring,pallets_von,pallets_len)));
      EVALUATE(l_line.Receiver,(COPYSTR(Datastring,Receiver_von,Receiver_len)));
      EVALUATE(l_line.PLZ,(COPYSTR(Datastring,PLZ_von,PLZ_len)));
      EVALUATE(l_line.City,(COPYSTR(Datastring,City_von,City_len)));
      EVALUATE(l_line."Country code",(COPYSTR(Datastring,Countrycode_von,Countrycode_len)));
      EVALUATE(l_line.DD,(COPYSTR(Datastring,DD_von,DD_len)));
      EVALUATE(l_line.EUR,(COPYSTR(Datastring,EUR_von,EUR_len)));
      EVALUATE(l_line.CHEP,(COPYSTR(Datastring,CHEP_von,CHEP_len)));
      EVALUATE(l_line.KUBI,(COPYSTR(Datastring,KUBI_von,KUBI_len)));
      EVALUATE(l_line.IPAL,(COPYSTR(Datastring,IPAL_von,IPAL_len)));
      EVALUATE(l_line.KAR,(COPYSTR(Datastring,KAR_von,KAR_len)));
      IF l_line.INSERT(TRUE) THEN
        Line_last:=l_line;
      EXIT(TRUE);
    END;
  END;

END ELSE BEGIN
ERROR('Konnte nicht gefunden werden : '+ ((COPYSTR(Datastring,1,10)))+' '+FORMAT(Setup.Type::"Import Rechung"));
END;


kann es vielleicht sein, dass wir uns mit einem update oder ähnliches was zerschossen haben?
Wir haben vor nicht allzulager Zeit ein Technisches Update von 5.0 auf NAV2009 gemacht... kann es vielleicht daran liegen?

Vielen Dank für ure Hilfe im Voraus!

Gruß Matthias
Zuletzt geändert von himi81 am 27. Januar 2011 10:46, insgesamt 1-mal geändert.

Re: FINDLAST greift nicht

27. Januar 2011 10:29

Ein technisches Update von 5 auf 2009 wird von MS nicht supported soweit ich weiß.
Welche Probleme dort auftauchen können habe ich nicht untersucht, wir haben aber auch Kunden mit 4.03 BW und 2009 technisch bei denen alles Einwandfrei funktioniert.

Beim überfliegen deines Codes ist mir aufgefallen, dass du die Variable mit der du die letzte Line holst nicht resettest.
Vielleicht hat er da noch einen vorherigen Datensatz im Zugriff.. probier es einfach mal aus.

Sonst konnte ich auch den ersten Blick nichts auffälliges entdecken.

Code:
Line_Last.RESET; // DIese Zeile würde ich zum Test ergänzen
IF Line_last.FINDLAST THEN BEGIN //Hier sollte der letzte gefunden werden!!! Tut er aber nicht.

Re: FINDLAST greift nicht

27. Januar 2011 10:35

Hallo Eroberto,

Das war auch mein erster Ansatz, aber egal wie mans dreht ändert sich nichts.
Der Debugger liefert auch ein nicht inizialiesert...
Dankfür deine Idee, aber das wars nicht.

Das das Upgrade nicht supported wird, hat uns unser Systemhaus aber vorher nicht verraten...
Bisher sind auch sonst keine "größeren" Problme aufgetreten, diese "Art" von ich hole mir die letzte Nummer wird ja öfter benuzt...

Gruß Matthias

Re: FINDLAST greift nicht

27. Januar 2011 10:43

Hallo,

seit ihr bei der Gelegenheit auch auf SQL umgestiegen?

Falls ja:
Der SQL sortiert CODE- Felder anders:
NAV sortiert: 1,2,10,20
SQL sortiert: 1,10,2,20

könnte das auch den Problem sein?

Gruß, Fiddi

Re: FINDLAST greift nicht

27. Januar 2011 10:45

Elroberto .... Sorry Vertippt!

Habe die Lösung... ist so einfach. :-)

Die laufende Nummer steht nicht an erster Stelle... Da bisher die Rechungsnummern von unserm Spediteur laufend waren fiel das nicht weiter auf.

Die lösung ein neuer Sortierschlüssel mit "Line No" an erster stelle, und diesen vorm FINDLAST auf den Record anwenden.
Also so:
Code:
    Line_last.RESET;
    Line_last.SETCURRENTKEY(Line_last."Line No");
    IF Line_last.FINDLAST THEN BEGIN
      l_lineno:=Line_last."Line No"+100;
    END ELSE l_lineno:=100;


Manchmal ist es so einfach, aber man kommt nicht drauf...

Trotzdem Danke an Alle