Endless Loop

nmonty
nmonty Member Posts: 20
Hi All,

I have written a code so as when the user does some entry in the Item Journal & by clicking a button he gets -ve adjmt entry same as for the entry he has done.

My problem is that my code is getting into the loop & is telling me to expand the databse.

My code is as follows:


RecItemJnlLine2.RESET;
RecItemJnlLine2.SETRANGE("Journal Template Name",JnlTemplateName);
RecItemJnlLine2.SETRANGE("Journal Batch Name",JnlBatchName);
IF RecItemJnlLine2.FINDSET THEN
REPEAT
NewLineNo := NewLineNo + 10000;
CustAmount := RecItemJnlLine2.Amount;
RecItemJnlLine3."Journal Template Name" := JnlTemplateName;
RecItemJnlLine3."Journal Batch Name" := JnlBatchName;
RecItemJnlLine3."Posting No. Series" := GetPostNoSeriesFromIJBTable(JnlTemplateName,JnlBatchName);
RecItemJnlLine3."Posting Date" := RecItemJnlLine2."Posting Date";
RecItemJnlLine3."Line No." := NewLineNo;
RecItemJnlLine3.VALIDATE("Item No.",RecItemJnlLine2."Item No.");
RecItemJnlLine3."Entry Type" := RecItemJnlLine2."Entry Type" :: "Negative Adjmt.";
RecItemJnlLine3."Document Type" := RecItemJnlLine2."Document Type";
RecItemJnlLine3."Document No." := RecItemJnlLine2."Document No.";
RecItemJnlLine3.Quantity := RecItemJnlLine2.Quantity;
RecItemJnlLine3.Amount := CustAmount;
RecItemJnlLine3."Source Code" := RecItemJnlLine2."Source Code";
RecItemJnlLine3.VALIDATE(RecItemJnlLine3.Amount);
RecItemJnlLine3."Posting Date" := RecItemJnlLine2."Posting Date";
RecItemJnlLine3.VALIDATE("Document Date",RecItemJnlLine2."Document Date");
RecItemJnlLine3.INSERT;
UNTIL RecItemJnlLine2.NEXT = 0;


Thnx in advance.

Answers

  • meikcremer
    meikcremer Member Posts: 7
    In which trigger did you put this code? If you put it in either one of the following OnValidate-Trigger, you could have an endless loop because of the VALIDATE(...) calls in your code:

    "Item No."
    Amount
    "Document Date
  • nmonty
    nmonty Member Posts: 20
    I have written a function in Item Jnl Mgmt. Codeunit & passed Item Jnl Line as a parameter there.
  • kapamarou
    kapamarou Member Posts: 1,152
    I think that RecItemJnlLine2 and RecItemJnlLine3 are the same record so:

    Everytime you insert a line in RecItemJnlLine3 that line becomes the next line for RecItemJnlLine2 and so on and so forth. What you could do is the following to skip the new lines in RecItemJnlLine2:

    try it and let us know...

    RecItemJnlLine2.RESET;
    RecItemJnlLine2.SETRANGE("Journal Template Name",JnlTemplateName);
    RecItemJnlLine2.SETRANGE("Journal Batch Name",JnlBatchName);
    IF RecItemJnlLine2.FINDLAST THEN 
      RecItemJnlLine2.SETRANGE("Line No.",0,RecItemJnlLine2."Line No");
    
    IF RecItemJnlLine2.FINDSET THEN
    REPEAT
    NewLineNo := NewLineNo + 10000;
    CustAmount := RecItemJnlLine2.Amount;
    RecItemJnlLine3."Journal Template Name" := JnlTemplateName;
    RecItemJnlLine3."Journal Batch Name" := JnlBatchName;
    RecItemJnlLine3."Posting No. Series" := GetPostNoSeriesFromIJBTable(JnlTemplateName,JnlBatchName);
    RecItemJnlLine3."Posting Date" := RecItemJnlLine2."Posting Date";
    RecItemJnlLine3."Line No." := NewLineNo;
    RecItemJnlLine3.VALIDATE("Item No.",RecItemJnlLine2."Item No.");
    RecItemJnlLine3."Entry Type" := RecItemJnlLine2."Entry Type" :: "Negative Adjmt.";
    RecItemJnlLine3."Document Type" := RecItemJnlLine2."Document Type";
    RecItemJnlLine3."Document No." := RecItemJnlLine2."Document No.";
    RecItemJnlLine3.Quantity := RecItemJnlLine2.Quantity;
    RecItemJnlLine3.Amount := CustAmount;
    RecItemJnlLine3."Source Code" := RecItemJnlLine2."Source Code";
    RecItemJnlLine3.VALIDATE(RecItemJnlLine3.Amount);
    RecItemJnlLine3."Posting Date" := RecItemJnlLine2."Posting Date";
    RecItemJnlLine3.VALIDATE("Document Date",RecItemJnlLine2."Document Date");
    RecItemJnlLine3.INSERT;
    UNTIL RecItemJnlLine2.NEXT = 0;
  • nmonty
    nmonty Member Posts: 20
    Thnx a lot.

    It worked.
  • kapamarou
    kapamarou Member Posts: 1,152
    You're welcome... :D