When we post than only first row post rests are not

raj002raj002 Member Posts: 8
Hello,
I create two new table( Student Header, Student Line) and form when click on Post Button then an error occur "Posted Student Line No." already exists. Please solve my problem. This code is used.


//Documentation()

<Control1000000014> - OnPush()

PostedStHeader.INIT;
PostedStHeader.SETRANGE(PostedStHeader."Document No.","Student No.");
IF PostedStHeader.FIND('-') THEN
ERROR('%1','This order already posted')
ELSE
//PostedStHeader.TRANSFERFIELDS(StudentHeader);
//PostedStHeader."Student No.":=StudentHeader."Student No.";
IF PostedStHeader.FIND('-') THEN
PostedStHeader."Student Name":=Rec."Student Name";
PostedStHeader."Student RollNo.":=Rec."Student RollNo.";
PostedStHeader."Student Address":=Rec."Student Address";
PostedStHeader."Student TelNo.":=Rec."Student TelNo.";
PostedStHeader."Posting Date":=Rec."Posting Date";
PostedStHeader."Document No.":="Student No.";

PostedStHeader.INSERT;

DELETE;

StudentLine.SETRANGE(StudentLine."Student Code","Student No.");
IF StudentLine.FIND('-') THEN
BEGIN
PostedStLine.INIT;
//StudentHeader.SETRANGE(StudentHeader."Student No.",StudentLine."Student Code");
//PostedStLine.SETRANGE(PostedStLine."No.",Rec."Student No.");

IF PostedStLine.FIND('-') THEN
REPEAT
PostedStLine."No.":=PostedStHeader."Document No.";
PostedStLine.TRANSFERFIELDS(StudentLine);
PostedStLine."Student Category":=StudentLine."Student Category";
PostedStLine."Student Class":=StudentLine."Student Class";
PostedStLine."Student Fees":=StudentLine."Student Fees";
PostedStLine."Student Library Fees":=StudentLine."Student Library Fees";
UNTIL PostedStLine.NEXT=0;
END;

PostedStLine.INSERT;

Comments

  • Marije_BrummelMarije_Brummel Member, Moderators Design Patterns Posts: 4,262
    First of al it is strange that you delete the filters on the line table
    //PostedStHeader.TRANSFERFIELDS(StudentHeader); 
    //PostedStHeader."Student No.":=StudentHeader."Student No.";
    

    You'll need some filter on the lines.

    The loop on the lines is a bit strange, first you do a find on the line, but do a loop on the posted line.
    PostedStLine.INSERT;
    UNTIL PostedStLine.NEXT=0; 
    END; 
    
    

    It should be something like
    IF StudentLine.FIND('-') THEN 
    Repeat
    PostedStLine.INIT; 
    //StudentHeader.SETRANGE(StudentHeader."Student No.",StudentLine."Student Code"); 
    //PostedStLine.SETRANGE(PostedStLine."No.",Rec."Student No."); 
    
    PostedStLine."No.":=PostedStHeader."Document No."; 
    PostedStLine.TRANSFERFIELDS(StudentLine); 
    PostedStLine."Student Category":=StudentLine."Student Category"; 
    PostedStLine."Student Class":=StudentLine."Student Class"; 
    PostedStLine."Student Fees":=StudentLine."Student Fees"; 
    PostedStLine."Student Library Fees":=StudentLine."Student Library Fees"; 
    PostedStLine.insert;
    UNTIL StudentLine.NEXT=0; 
    

    I am sure that if this is corrected it still need finetuning.

    I would also recomend making a posting codeunit instead of coding on a form.
  • lubostlubost Member Posts: 632
    Your code snippet isn't clear so there exist two ways:
    1. If PostedStHeader and Student Header are the same table, you need only add field Posted (Boolean) to Student Line and set its value to true during posting process.

    2. If PostedStHeader and Student Header are different tables your code shoud be following:
    <Control1000000014> - OnPush()

    PostedStHeader.RESET;
    PostedStHeader.SETRANGE(PostedStHeader."Document No.","Student No.");
    IF PostedStHeader.FIND('-') THEN
    ERROR('%1','This order already posted')
    ELSE BEGIN
    PostedStHeader.TRANSFERFIELDS(Rec);
    PostedStHeader."Document No.":="Student No.";
    PostedStHeader.INSERT;
    StudentLine.SETRANGE(StudentLine."Student Code","Student No.");
    IF StudentLine.FIND('-') THEN
    REPEAT
    PostedStLine.INIT;
    PostedStLine.TRANSFERFIELDS(StudentLine);
    PostedStLine."No.":=PostedStHeader."Document No.";
    PostedStLine.INSERT;
    UNTIL StudentLine.NEXT=0;
    StudentLine.DELETEALL; //Best practice: do this line via OnDelete trigger of Rec
    Rec.DELETE;
    END;
Sign In or Register to comment.