[gelöst] Problem mit Modify -Trigger

4. Dezember 2009 13:00

Hallo alle zusammen,

ich habe ein kleines Problem mit einer selbstgeschriebenen Funktion:

Wir haben eine Zeiterfassung. In dieser Zeiterfassung werden in den Lines den Projekten die Zeitmengen zugordnet. Wenn ich diesen Beleg freigebe, wird aus diesen Zeilen Job Journal Lines erstellt. In dieser Karte funktioniert auch alles ganz prima.

Die Funktion, die die Job Jounal Lines erzeugt, ist in einer Codeunit ausgelagert und wird im OnValidate des Freigabefeldes in der Tabelle aufgerufen.

Wir haben nun noch eine Karte, wo der Projektleiter alle zugeordneten Zeiten für seine Projekte auf einmal freigeben kann. Wenn ich dort die Funktion anstoße, über den OnValidate-Trigger der Tabelle , bekomme ich ein Fehlermeldung:

"Ein anderer Anwender hat den Datensatz der Arbeitszeitzeilen verändert, nach dem diese angezeigt wurden. Geben Sie die Änderung....."

Der Code der Funktion sieht folgendermaßen aus:

Code:
setWorkTimeSplit2JobJnlLine(VAR pReWorkTimeSplitt : Record "Work time registration split";pInJobJnlLineNo : Integer)
grcJobJournalLine.RESET;
IF NOT grcJobJournalLine.FINDLAST THEN BEGIN
  greJobJournalLine2.INIT;
  greJobJournalLine2."Journal Template Name" := 'System';
  greJobJournalLine2."Journal Batch Name" := 'Standard';
  greJobJournalLine2."Line No." := 10000;
  greJobJournalLine2.INSERT(TRUE); 
  greJobJournalLine2."Job No." := pReWorkTimeSplitt."Job No. (splitted)";
  greJobJournalLine2."Posting Date" := TODAY;
  greJobJournalLine2."Document Date" := pReWorkTimeSplitt."Posting Date";
  greJobJournalLine2."JSP Code" := pReWorkTimeSplitt."JSP Code";
  greJobJournalLine2."Unit of Measure Code" := pReWorkTimeSplitt."Unit of Measure Code";
  greJobJournalLine2."Work Type Code" := pReWorkTimeSplitt."Work Type Code";
  greJobJournalLine2.Quantity := pReWorkTimeSplitt."Quantity (splitted)";
  greJobJournalLine2.Description := pReWorkTimeSplitt.Description;
  greJobJournalLine2."External Document No." := FORMAT(pInJobJnlLineNo);
  pReWorkTimeSplitt."Job Journal Line No." := pInJobJnlLineNo;
  pReWorkTimeSplitt.MODIFY;
  greJobJournalLine2.MODIFY(TRUE);

END ELSE BEGIN
  greJobJournalLine2.INIT;
  greJobJournalLine2."Journal Template Name" := 'System';
  greJobJournalLine2."Journal Batch Name" := 'Standard';
  greJobJournalLine2."Line No." := grcJobJournalLine."Line No." + 10000;
  greJobJournalLine2.INSERT(TRUE);
  greJobJournalLine2."Job No." := pReWorkTimeSplitt."Job No. (splitted)";
  greJobJournalLine2."Posting Date" := TODAY;
  greJobJournalLine2."Document Date" := pReWorkTimeSplitt."Posting Date";
  greJobJournalLine2."JSP Code" := pReWorkTimeSplitt."JSP Code";
  greJobJournalLine2."Unit of Measure Code" := pReWorkTimeSplitt."Unit of Measure Code";
  greJobJournalLine2."Work Type Code" := pReWorkTimeSplitt."Work Type Code";
  greJobJournalLine2.Quantity := pReWorkTimeSplitt."Quantity (splitted)";
  greJobJournalLine2.Description := pReWorkTimeSplitt.Description;
  greJobJournalLine2."External Document No." := FORMAT(pInJobJnlLineNo);
  pReWorkTimeSplitt."Job Journal Line No." := pInJobJnlLineNo;
  pReWorkTimeSplitt.MODIFY;
  greJobJournalLine2.MODIFY(TRUE);
END;


Der Aufruf in der Tabelle wie folgt:
Code:
    IF "Approval Status Responsible" = "Approval Status Responsible"::Released THEN BEGIN
      "Approval Date Responsible" := TODAY;
      // -ROM20091203
      grcWorkTimeRegistrationSplit.RESET;
      grcWorkTimeRegistrationSplit.SETCURRENTKEY("Job Journal Line No.");
      grcWorkTimeRegistrationSplit.SETFILTER("Job Journal Line No.",'>%1',0);
      IF grcWorkTimeRegistrationSplit.FINDLAST THEN
        gInJobJournalNo := grcWorkTimeRegistrationSplit."Job Journal Line No." + 1
      ELSE
        gInJobJournalNo := 1;
      greWorkTImeRegSplit.RESET;
      greWorkTImeRegSplit.SETRANGE("Resource No.","Resource No.");
      greWorkTImeRegSplit.SETRANGE("Line No.","Line No.");
      IF greWorkTImeRegSplit.FINDFIRST THEN BEGIN
        REPEAT
         gCuFunctions.setWorkTimeSplit2JobJnlLine(greWorkTImeRegSplit,gInJobJournalNo);
         greWorkTImeRegSplit.MODIFY;
         gInJobJournalNo += 1;
       UNTIL greWorkTImeRegSplit.NEXT = 0;
      END;
      // +ROM20091203


Es liegt sicherlich am modify und das ich einen Integer in die entsprechenden DS eintrage.. aber wie kann ich diese Meldung unterbinden.

Danke für die Tipps.

lg ROM
Zuletzt geändert von rom am 9. Dezember 2009 12:05, insgesamt 1-mal geändert.

Re: Problem mit Modify -Trigger

4. Dezember 2009 13:14

Mein Tip: das liegt daran, dass du die Variable als VAR übergibst.

Re: Problem mit Modify -Trigger

4. Dezember 2009 13:21

Ohne deinen Code gelesen zu haben, es könnte in der Tat an dem MODIFY liegen, u.U. ist es besser den DS zu löschen und neu anzulegen um das Problem zu umgehen.

Re: Problem mit Modify -Trigger

8. Dezember 2009 16:00

Wenn ich Deine Programmlogik richtig interpretiert habe: Versuch mal den MODIFY im Code der Tabelle (nach Aufruf der Funktion) auszukommentieren. Das müsste meines Erachtens doch eigentlich reichen... den Datensatz selber hast Du ja schon in der Funktion geändert ("Job Journal Line No." eingetragen).

Re: Problem mit Modify -Trigger

9. Dezember 2009 11:48

DYNAMICS-ML hat geschrieben:Wenn ich Deine Programmlogik richtig interpretiert habe: Versuch mal den MODIFY im Code der Tabelle (nach Aufruf der Funktion) auszukommentieren. Das müsste meines Erachtens doch eigentlich reichen... den Datensatz selber hast Du ja schon in der Funktion geändert ("Job Journal Line No." eingetragen).



hallo, danke für die Antwort.

leider funktioniert es nicht mit dem Auskommentieren der MODIFY-Funktion. Außerdem kann ich das Modify nicht weglassen, da es eine anderen Wert schreibt.

Re: [gelöst] Problem mit Modify -Trigger

9. Dezember 2009 12:11

Ist pReWorkTimeSplitt das, was in deiner Tabelle angezeigt wird? Falls ja: da du es als VAR an die Codeunit übergibst und dort ein modify machst, musst du dich nach meiner Meinung nicht wundern, wenn die Fehlermeldung erscheint.

Re: [gelöst] Problem mit Modify -Trigger

9. Dezember 2009 12:29

Und wie hast du das nun gelöst ... ?

Re: [gelöst] Problem mit Modify -Trigger

9. Dezember 2009 14:04

Hi,

ich habe es ein wenig umprogrammiert. Ich mache nun die Änderungen im entsprechenden Header der Zeilen. Somit kommen sich die beiden Modify-trigger sich nicht mehr in die Querre...

lg