Sales Line-Header INSERT

oioi007oioi007 Member Posts: 41
Hi guys

I need a little help/advice

I'm writing code on button which will create Sales Orders from another Test.Table

I have a problem when I want to insert lines in same Sales order. for example

===

No. Item Customer
1 100 100
2 200 200

In this situation button creates 2 sales order

but i want to make like this:

No. Item Customer
1 100 100
2 200 200
3 300 200

1 sales order with customer 100, and 1 with 200, two item in Sales line
(200,300)

Thanks

Comments

  • garakgarak Member Posts: 3,263
    And where is your problem :?:
    Is your source #-o :?:
    Do you make it right, it works too!
  • oioi007oioi007 Member Posts: 41
    garak wrote:
    And where is your problem :?:
    Is your source #-o :?:

    problem is:

    No. Item Customer
    1 100 100
    2 200 200
    3 300 200

    it creates 3 sales order not 2, i want a code like IF customers = same THEN create 1 sales order with different items on sales line ](*,)
  • DenSterDenSter Member Posts: 8,305
    So sort your table by Customer number, and only create a new header when the customer number changes while you're looping through the records.
  • oioi007oioi007 Member Posts: 41
    DenSter wrote:
    So sort your table by Customer number, and only create a new header when the customer number changes while you're looping through the records.

    Please write an example code O:) and what u mean sort table by customer? if you mean Keys, it's enabled on No. and Customer
  • garakgarak Member Posts: 3,263
    zeig mal deinen Quellcode, was du bis jetzt hast.

    Let us view your sourcecode, what you have "designed".
    Than we can halp you
    Do you make it right, it works too!
  • oioi007oioi007 Member Posts: 41
    garak wrote:
    zeig mal deinen Quellcode, was du bis jetzt hast.

    Let us view your sourcecode, what you have "designed".
    Than we can halp you


    SalesHeader.SETRANGE("No.");
    IF Test.FINDSET THEN
    REPEAT
    CLEAR(SalesHeader);
    NoSeries:='S-ORD-1';
    SalesHeader."No." := NoSeriesMgt.GetNextNo(NoSeries,0D,FALSE);
    SalesHeader."Sell-to Customer No." :=Test."Sell-to Customer" ;
    Order := 1;
    SalesHeader.VALIDATE(SalesHeader."Sell-to Customer No.", Test."Sell-to Customer");
    SalesHeader."Document Type" := Order;
    SalesHeader.INSERT;
    CLEAR(SalesLine);
    SalesLine."Document Type" := Order;
    // SalesLine."Document No." :=SalesHeader."No."; ?
    Type :=2;
    SalesLine.Type := Type;
    SalesLine.VALIDATE(SalesLine.Type);
    SalesLine."No." := Test.Item;
    SalesLine.INSERT

    UNTIL Test.NEXT =0;

    that's what've designed:) now help me :wink:
  • oioi007oioi007 Member Posts: 41
    garak wrote:
    zeig mal deinen Quellcode, was du bis jetzt hast.

    Let us view your sourcecode, what you have "designed".
    Than we can halp you


    SalesHeader.SETRANGE("No.");
    IF Test.FINDSET THEN
    REPEAT
    CLEAR(SalesHeader);
    NoSeries:='S-ORD-1';
    SalesHeader."No." := NoSeriesMgt.GetNextNo(NoSeries,0D,FALSE);
    SalesHeader."Sell-to Customer No." :=Test."Sell-to Customer" ;
    Order := 1;
    SalesHeader.VALIDATE(SalesHeader."Sell-to Customer No.", Test."Sell-to Customer");
    SalesHeader."Document Type" := Order;
    SalesHeader.INSERT;
    CLEAR(SalesLine);
    SalesLine."Document Type" := Order;
    // SalesLine."Document No." :=SalesHeader."No."; ?
    Type :=2;
    SalesLine.Type := Type;
    SalesLine.VALIDATE(SalesLine.Type);
    SalesLine."No." := Test.Item;
    SalesLine.INSERT

    UNTIL Test.NEXT =0;

    that's what've designed:) now help me :wink:
  • vanrofivanrofi Member Posts: 272
    Or check the carry out action message tool on the purchase requisition worksheet. It is quite similar to your request and creates Purchase orders.

    Report 493, CU 333.

    That's how I learn...See how standard NAV work...
  • garakgarak Member Posts: 3,263
    oh your source ](*,)

    first you get 3 Orders, because you create a order in your loop. so every entry in your loop creates a new order.

    so, here a "fast" solution

    clear(xCustNo);
    
    TEst.setcurrentkey("Sell-to Customer");
    IF Test.FINDSET(false,false) THEN begin
      REPEAT
        if (xCustNo <> Test."Sell-to Customer") and (Test."Sell-to Customer" <> '') then begin
          SalesHeader.init;
          SalesHeader."No." := '';
          SalesHeader.insert(true); //get No. Series automatic, if you need your own no series, use your code ('S-ORD-1')
          SalesHeader.validate("Sell-to Customer No.",Test."Sell-to Customer");
          ... other Fields validate();
          SalesHeader.modify;
        end;
        
        xCustNo := Test."Sell-to Customer";
    
        if (Test.Item <> '') then begin
          SalesLine.init;
          SalesLine."Document Type" := SalesLine."Document Type"::Order;
          SalesLine."Document No." := SalesHeader."No.";
          SalesLine.validate(Type,SalesLine.Type::Item);
          SalesLine.validate("No.",Test.Item);
          SalesLine.insert;
        end;
    
      until Test.next = 0;
    end;
    

    And, please visit a training ;-)
    Do you make it right, it works too!
  • oioi007oioi007 Member Posts: 41
    :wink:
    thanks garak, im newbie! sorries :mrgreen:
  • oioi007oioi007 Member Posts: 41
    garak wrote:
    oh your source ](*,)

    first you get 3 Orders, because you create a order in your loop. so every entry in your loop creates a new order.

    so, here a "fast" solution

    clear(xCustNo);
    
    TEst.setcurrentkey("Sell-to Customer");
    IF Test.FINDSET(false,false) THEN begin
      REPEAT
        if (xCustNo <> Test."Sell-to Customer") and (Test."Sell-to Customer" <> '') then begin
          SalesHeader.init;
          SalesHeader."No." := '';
          SalesHeader.insert(true); //get No. Series automatic, if you need your own no series, use your code ('S-ORD-1')
          SalesHeader.validate("Sell-to Customer No.",Test."Sell-to Customer");
          ... other Fields validate();
          SalesHeader.modify;
        end;
        
        xCustNo := Test."Sell-to Customer";
    
        if (Test.Item <> '') then begin
          SalesLine.init;
          SalesLine."Document Type" := SalesLine."Document Type"::Order;
          SalesLine."Document No." := SalesHeader."No.";
          SalesLine.validate(Type,SalesLine.Type::Item);
          SalesLine.validate("No.",Test.Item);
          SalesLine.insert;
        end;
    
      until Test.next = 0;
    end;
    

    And, please visit a training ;-)
    CLEAR(xCustNo);
    
    Test.SETCURRENTKEY(Line,"Sell-to Customer");
    IF Test.FINDSET(FALSE,FALSE) THEN BEGIN 
      REPEAT 
        IF (xCustNo <> Test."Sell-to Customer") AND (Test."Sell-to Customer" <> '') THEN BEGIN 
          SalesHeader.INIT; 
          NoSeries:='S-ORD-1';
          SalesHeader."No." := NoSeriesMgt.GetNextNo(NoSeries,0D,FALSE);
          SalesHeader.INSERT(TRUE);
          SalesHeader.VALIDATE("Sell-to Customer No.",Test."Sell-to Customer");         
        END; 
        
        xCustNo := Test."Sell-to Customer"; 
    
        IF (Test.Item <> '') THEN BEGIN 
          SalesLine.INIT; 
          SalesLine."Document Type" := SalesLine."Document Type"::Order; 
          SalesLine."Document No." := SalesHeader."No."; ;
          SalesLine.VALIDATE(Type,SalesLine.Type::Item); 
          SalesLine.VALIDATE("No.",Test.Item); 
          SalesLine.INSERT; 
        END; 
    
      UNTIL Test.NEXT = 0; 
    END;
    

    not working :( on push it says "The Sales Header does not exist; Doc-type Ordder , No-1012
  • vanrofivanrofi Member Posts: 272
    On which Line of code this message occurs?
    (check with debugger)

    Try with Garaks code for use of get standard No. maybe?
  • oioi007oioi007 Member Posts: 41
    Test.SETCURRENTKEY(Line,"Sell-to Customer");
    IF Test.FINDSET(FALSE,FALSE) THEN BEGIN 
      REPEAT
        IF (xCustNo <> Test."Sell-to Customer") AND (Test."Sell-to Customer" <> '') THEN BEGIN
          SalesHeader.INIT; 
          SalesHeader."Document Type" := SalesHeader."Document Type"::Order;
          NoSeries:='S-ORD-1';
          SalesHeader."No." := NoSeriesMgt.GetNextNo(NoSeries,0D,FALSE);
          SalesHeader."Sell-to Customer No." :=Test."Sell-to Customer" ;
          SalesLine.INIT;
          SalesLine."Document Type" := SalesLine."Document Type"::Order;
          SalesLine."Document No." := SalesHeader."No.";
          SalesLine.Type := SalesLine.Type::Item;
          SalesLine."No." :=Test.Item;
          SalesHeader.INSERT(TRUE);
          SalesHeader.MODIFY; 
          SalesLine.INSERT;
        END; 
        
        xCustNo := Test."Sell-to Customer"; 
    UNTIL Test.NEXT =0;
    xCustNo :='';
    END;
    

    This code creates sales headers right,also inserts sales line on each header, BUT it it only inserts the first item of the same Sell-to Customer
    I tried second routine repeat until on sales line, but I cant get work it. what should I do?
  • vanrofivanrofi Member Posts: 272
    Sales Line has Field Line No in its key, so on the repeat you should do LineNo := LineNo +10000 or something like that...just guessing...
  • oioi007oioi007 Member Posts: 41
    vanrofi wrote:
    Sales Line has Field Line No in its key, so on the repeat you should do LineNo := LineNo +10000 or something like that...just guessing...

    sorry but how to guess which line match salesheader line no.??

    I've already tried L:=L+1 , it doesn't work as I want. :/
Sign In or Register to comment.