Change Value of Primary Key field

tompynationtompynation Member Posts: 398
I got a form which contains a simple table box, based on own Custom Record, nl "Return Line"

Enabled Field No. Field Name Data Type Length Description
Yes 1 Customer Code 20
Yes 2 Customer Name Text 30
Yes 3 Item Code 10
Yes 4 Quantity Received Integer
Yes 5 Finished Boolean

Enabled Key SumIndexFields
Yes Customer,Item,Finished

Now on the form i have a Tableview to show only the Records where Finished = FALSE;
In this form the user can enter new lines, Finished will be default False off course...

Now at the bottom there is button which calls a function which should loop through my Custom Return lines
and Create Return Orders for these Lines... this all works fine.

But when the lines have been processed they need to get updated so that their status of the Finished field, equals TRUE


lv_Customer := '';
lv_LineNo := 0;
lv_HeaderCreated := FALSE;

lv_Return.RESET;
lv_Return.SETCURRENTKEY(Customer,Item,Finished);
lv_Return.SETRANGE(Finished,FALSE);
IF lv_Return.FINDSET THEN BEGIN
REPEAT
IF (lv_Customer = '') OR (lv_Customer <> lv_Return.Customer) THEN BEGIN
IF lv_Customer <> lv_Return.Customer THEN
lv_HeaderCreated := FALSE;
IF lv_HeaderCreated = FALSE THEN BEGIN
lv_SalesHeader.INIT;
lv_SalesHeader.VALIDATE("Document Type",lv_SalesHeader."Document Type"::"Return Order");
lv_SalesHeader.VALIDATE("No.",'');
lv_SalesHeader.INSERT(TRUE);

lv_SalesHeader.VALIDATE("Sell-to Customer No.",lv_Return.Customer);
lv_SalesHeader.MODIFY(TRUE);
lv_HeaderCreated := TRUE;
COMMIT;
END;
END;

lv_SalesLine.INIT;
lv_SalesLine.VALIDATE("Document Type",lv_SalesLine."Document Type"::"Return Order");
lv_SalesLine."Document No." := lv_SalesHeader."No.";
lv_LineNo += 10000;
lv_SalesLine."Line No." += lv_LineNo;
lv_SalesLine."Sell-to Customer No." := lv_Return.Customer;
lv_SalesLine.Type := lv_SalesLine.Type::Item;
lv_SalesLine.VALIDATE("No.",lv_Return.Item);
lv_SalesLine.VALIDATE(Quantity,lv_Return."Quantity Received");
lv_SalesLine.INSERT(TRUE);

lv_Customer := lv_Return.Customer;
UNTIL lv_Return.NEXT = 0;
END;

Changing the code to:
...
lv_SalesLine.INSERT(TRUE);

lv_Customer := lv_Return.Customer;
lv_Return.Finished := TRUE;
lv_Return.MODIFY;
UNTIL lv_Return.NEXT = 0;
END;

Leads to following error:

The Return Line does not exist.
Identication fields and values:

Customer No = 10000, Item No = 1960-S, Finished = Yes
Finished: No

Where should i now change the Status of the Finished Field?

Answers

  • AlbertvhAlbertvh Member Posts: 516
    Hi

    you could do it like this
    Changing the code to:
    ...
    lv_SalesLine.INSERT(TRUE);
    
    lv_Customer := lv_Return.Customer;
    
    lv_Return2 := lv_Return
    lv_Return2.Finished := TRUE;
    lv_Return.DELETE;
    lv_Return2.INSERT;
     UNTIL lv_Return.NEXT = 0;
    END;
    
    

    lv_Return2 is a variable of type record the same as lv_Return
    You should do it like this as the Finished field is part of your primary key

    Hope this helps
  • tompynationtompynation Member Posts: 398
    thanks that solved it...
Sign In or Register to comment.