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;
0
Comments
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.
It should be something like
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.
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;