it's needed to know the standard business processes very exactly.
following the code, that works:
pageextension 50102 SalesQuoteListExt extends "Sales Quotes"
{
actions
{
addlast(Processing)
{
action(CreatePO)
{
Caption = 'Create Purchase Order';
ToolTip = 'Create new Purchase Order and add Item Lines from Sales Quote';
ApplicationArea = All;
Image = Add;
Promoted = true;
PromotedCategory = Process;
PromotedIsBig = true;
trigger OnAction()
var
salesHeader: Record "Sales Header";
purchHeader: Record "Purchase Header";
begin
//select first sales quote of list: change that as you need
salesHeader.SetRange("Document Type", salesHeader."Document Type"::Quote);
salesHeader.FindFirst();
// sales quote loaded?
if salesHeader."No." = '' then
exit;
clear(purchHeader);
purchHeader."Document Type" := purchHeader."Document Type"::Order;
purchHeader.Validate("Buy-from Vendor No.", '10000'); // default vendor
purchHeader."Vendor Invoice No." := 'DUMMY-01';
// sets (doc.) no. autom., but also fields "sell-to customer no." and "ship-to code" to ''
// means, if these values are set before insert, then they are overwritten
// seems to be default behavior
// so first make insert, then set the values, then make a modify to get the correct values
purchHeader.Insert(true);
purchHeader."Document Date" := SalesHeader."Document Date"; // or use workdate as default
purchHeader."Due Date" := Salesheader."Due Date";
purchHeader."Sell-to Customer No." := Salesheader."Sell-to Customer No.";
if Salesheader."Ship-to Code" <> '' then
purchHeader.Validate("Ship-to Code", Salesheader."Ship-to Code")
else begin
//ship-to code can be empty, but the adress fields can have a value
purchHeader."Ship-to Name" := salesHeader."Ship-to Name";
purchHeader."Ship-to Address" := salesHeader."Ship-to Address";
purchHeader."Ship-to Address 2" := salesHeader."Ship-to Address 2";
purchHeader."Ship-to Post Code" := salesHeader."Ship-to Post Code";
purchHeader."Ship-to City" := salesHeader."Ship-to City";
purchHeader."Ship-to Contact" := salesHeader."Ship-to Contact";
purchHeader."Ship-to Country/Region Code" := salesHeader."Ship-to Country/Region Code";
end;
purchHeader.Modify();
page.run(page::"Purchase Order", purchHeader);
end;
}
}
}
}