Skip to main content

Notifications

Announcements

No record found.

Community site session details

Community site session details

Session Id :
Microsoft Dynamics NAV (Archived)

How to create a Sales return from posted sales invoice

(0) ShareShare
ReportReport
Posted on by 182

Hello Experts,

Please help me with this scenario:

I need to create a Sales Return from posted Sales Invoice page using C/AL Code. 

I created an action on Posted sales invoice page.

I wrote below code but it gives error:

##################

SalesSetup.GET();
SalesInvLine.SETFILTER("Document No.","No.");
IF SalesInvLine.FINDFIRST() THEN BEGIN
IF SalesInvLine."Drop Shipment" = TRUE THEN
//-------------------------------------------------
SalesHdr.INIT;
MESSAGE('TEST');
SalesHdr."Document Type" := SalesHdr."Document Type"::"Return Order";
MESSAGE('Return order');
MESSAGE('%1',"Posting Date");
MESSAGE('%1',SalesSetup."Return Order Nos.");
DocNo := NoSeriesMgt.GetNextNo(SalesSetup."Return Order Nos.","Posting Date",TRUE);
SalesHdr."No." := DocNo ;
MESSAGE('%1',SalesHdr."No.");
MESSAGE('%1',"Sell-to Customer No.");
SalesHdr.VALIDATE("Sell-to Customer No.","Sell-to Customer No.");
MESSAGE('%1',"Sell-to Customer No.");
SalesHdr."Posting Date" := SalesInvHeader."Posting Date";
MESSAGE('Posting date');
SalesHdr."Document Date" := SalesInvHeader."Posting Date";
MESSAGE('Document date');
SalesHdr."Salesperson Code" := SalesInvHeader."Salesperson Code";
SalesHdr.INSERT(TRUE);
MESSAGE('Done');
//===================================
SalesLine2.RESET;
SalesLine2.SETRANGE("Document Type",SalesHdr."Document Type");
SalesLine2.SETRANGE("Document No.",SalesHdr."No.");

IF SalesLine2.FINDLAST THEN
NextLineNo := SalesLine2."Line No." + 10000

ELSE
NextLineNo := 10000;

SalesLine2.INIT;
MESSAGE('Initialize');
SalesLine2.VALIDATE("Document Type", SalesHdr."Document Type");
MESSAGE('Validated');
SalesLine2."Document No." := SalesHdr."No.";
SalesLine2."Line No." := NextLineNo;
SalesLine2.Type := SalesInvLine.Type;
SalesLine2."No." := SalesInvLine."No.";
SalesLine2.Quantity := SalesInvLine.Quantity;
SalesLine2.Description := SalesInvLine.Description;
SalesLine2.INSERT;

Error:

You cannot base a date calculation on an undefined date. Date: 0D Formula:

As I am validating the Sell to customer

Can you please provide your comments on this.

Thanks

*This post is locked for comments

  • Mitr Profile Picture
    Mitr 182 on at
    RE: How to create a Sales return from posted sales invoice

    Thank you all I  resolved the issue by creating webservice and then creating the Sales return & purchase return in other company.

  • Mitr Profile Picture
    Mitr 182 on at
    RE: How to create a Sales return from posted sales invoice

    Hello Amol,

    I have looked into it further & can find that upon changing the company in SalesHeader2 & when I insert it inserts in the current company however it should insert in the changed company that’s why I got that error.

    How to insert in the changed company plese let me know as I need to show it today.

    One option is doing the web service but I don’t know how to utilize it in NAV 2009.

    Can you give me an example to create a web service in this condition within nav without using visual studio.

    My code now looks like this when i try to insert into other company:

    --------------------


    ICPartner.RESET;
    ICPartner.SETRANGE(Code,IC1);
    IF ICPartner.FINDSET THEN BEGIN
    SalesInvHeader2.SETRANGE("No.",No1);
    IF SalesInvHeader2.FINDFIRST() THEN
    T:= SalesInvHeader2."External Document No.";
    PurchaseInvHeader2.RESET;
    PurchaseInvHeader2.CHANGECOMPANY(IC1);
    PurchaseInvHeader2.SETRANGE("Order No.",T);
    IF PurchaseInvHeader2.FINDFIRST() THEN BEGIN
    H:= PurchaseInvHeader2."No.";
    Y:= PurchaseInvHeader2."Shortcut Dimension 2 Code";
    SalesInvHeader2.RESET;
    SalesInvHeader2.CHANGECOMPANY(IC1);
    SalesInvHeader2.SETRANGE("Shortcut Dimension 2 Code", Y);
    IF SalesInvHeader2.FINDFIRST THEN BEGIN
    FromDocNo := SalesInvHeader2."No.";
    SalesInvLine2.CHANGECOMPANY(IC1);
    SalesInvLine2.SETFILTER("Document No.",FromDocNo);
    IF SalesInvLine2.FINDFIRST() THEN BEGIN
    IF SalesInvLine2."Drop Shipment" = TRUE THEN BEGIN
    MESSAGE('Drop');
    SalesHeader2.CHANGECOMPANY(IC1);
    SalesHeader2.INIT;
    SalesHeader2."Document Type":= SalesHeader2."Document Type"::"Return Order";
    SalesHeader2.VALIDATE("No.");
    SalesHeader2.INSERT(TRUE);
    CopyDocMgt.SetProperties(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE);
    CopyDocMgt.CopySalesDoc(DocType::"Posted Invoice",FromDocNo,SalesHeader2);
    SalesHeader2."Posting Date" := WORKDATE;
    SalesHeader2.MODIFY;
    MESSAGE('%1',SalesHeader2."No.");
    IF CONFIRM('Do you want to create Purchase Return',TRUE) THEN BEGIN
    PurchaseInvHeader2.SETRANGE("Shortcut Dimension 2 Code",SalesInvHeader2."Shortcut Dimension 2 Code");
    IF PurchaseInvHeader2.FINDSET() THEN BEGIN
    MESSAGE('%1',PurchaseInvHeader2."No.");
    PurchaseHeader2.CHANGECOMPANY(IC1);
    PurchaseHeader2.INIT;
    PurchaseHeader2."Document Type":= PurchaseHeader2."Document Type"::"Return Order";
    PurchaseHeader2.VALIDATE("No.");
    PurchaseHeader2.INSERT(TRUE);
    CopyDocMgt.SetProperties(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE);
    CopyDocMgt.CopyPurchDoc(DocType::"Posted Invoice",H,PurchaseHeader2);

    PurchaseHeader2."Posting Date" := WORKDATE;
    PurchaseHeader2.MODIFY;
    MESSAGE('%1',PurchaseHeader2."No.");
    MESSAGE('Purchase Return order & Sales Return created');
    SMTP1.CreateMessage('nsc','test@nsc.com','varun.tripathi@yy.com','',TRUE);
    SMTP1.AppendBody('Hello Team,<BR><BR>');
    SMTP1.AppendBody('SRET & PRET has been generated<BR>');
    SMTP1.AppendBody('Please check & Proceed further<BR>');
    SMTP1.AppendBody('SRET:');
    SMTP1.AppendBody(SalesHeader2."No.");
    SMTP1.AppendBody('<BR>');
    SMTP1.AppendBody('SRET:');
    SMTP1.AppendBody(PurchaseHeader2."No.");
    SMTP1.Send();

    END
    ELSE
    MESSAGE('Matching invoice header not found');

    END
    ELSE
    MESSAGE('Sales return_normal Created','%1',SalesHeader2."No.",'No Purchase Return Created');


    END
    ELSE
    MESSAGE('Normal');
    SalesHeader2.CHANGECOMPANY(IC1);
    SalesHeader2.INIT;
    SalesHeader2."Document Type":= SalesHeader2."Document Type"::"Return Order";
    SalesHeader2.VALIDATE("No.");
    SalesHeader2.INSERT(TRUE);
    CopyDocMgt.SetProperties(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE);
    CopyDocMgt.CopySalesDoc(DocType::"Posted Invoice",SalesInvHeader2."No.",SalesHeader2);
    SalesHeader2."Posting Date" := WORKDATE;
    SalesHeader2.MODIFY;
    MESSAGE('%1',SalesHeader2."No.");
    IF CONFIRM('Do you want to create Purchase Return',TRUE) THEN BEGIN
    PurchaseInvHeader2.SETRANGE("Shortcut Dimension 2 Code",SalesInvHeader2."Shortcut Dimension 2 Code");
    IF PurchaseInvHeader2.FINDSET() THEN BEGIN
    MESSAGE('%1',PurchaseInvHeader2."No.");
    PurchaseHeader2.CHANGECOMPANY(IC1);
    PurchaseHeader2.INIT;
    PurchaseHeader2."Document Type":= PurchaseHeader2."Document Type"::"Return Order";
    PurchaseHeader2.VALIDATE("No.");
    PurchaseHeader2.INSERT(TRUE);
    CopyDocMgt.SetProperties(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE);
    CopyDocMgt.CopyPurchDoc(DocType::"Posted Invoice",PurchaseInvHeader2."No.",PurchaseHeader2);

    PurchaseHeader2."Posting Date" := WORKDATE;
    PurchaseHeader2.MODIFY;
    MESSAGE('%1',PurchaseHeader2."No.");
    MESSAGE('Purchase Return order & Sales Return created');
    SMTP1.CreateMessage('nsc','test@nsc.com,varun@nsc.com','SRET/PRET DETAILS','',TRUE);
    SMTP1.AppendBody('Hello Team,<BR><BR>');
    SMTP1.AppendBody('SRET & PRET has been generated<BR>');
    SMTP1.AppendBody('Please check & Proceed further<BR>');
    SMTP1.AppendBody('SRET:');
    SMTP1.AppendBody(SalesHeader2."No.");
    SMTP1.AppendBody('<BR>');
    SMTP1.AppendBody('SRET:');
    SMTP1.AppendBody(PurchaseHeader2."No.");
    SMTP1.Send();


    END
    ELSE
    MESSAGE('Matching invoice header not found');

    END
    ELSE
    MESSAGE('Sales return_normal Created','%1',SalesHeader2."No.",'No Purchase Return Created');

    END;
    END;
    END;
    COMMIT;
    END;

    Please provide your comments.

    Thanks

  • Mitr Profile Picture
    Mitr 182 on at
    RE: How to create a Sales return from posted sales invoice

    Hello Amol,

    Than you for your help & suggestion.

    I have now been able to pull data into different company however when it tries to create new Sales return I get this error:

    ---------------------------

    Microsoft Dynamics NAV Classic

    ---------------------------

    Sales Invoice Header No. 'SI-ES-005999' does not exist.

    ---------------------------

    OK  

    ---------------------------

    I created new function to get into other company & create sales return & purchase return. When i try the code coverage it executes till marked in Greeen & then gives error shown above:

    #############

    Code
    ICRetChngComp(No1,IC)
    ICPartner.RESET;
    //MESSAGE('%1',IC);
    ICPartner.SETRANGE(Code,IC);

    IF ICPartner.FINDSET THEN BEGIN
    //=============================================

    SalesInvHeader2.SETRANGE("No.",No1);
    IF SalesInvHeader2.FINDFIRST() THEN
    T:= SalesInvHeader2."External Document No.";
    MESSAGE('%1',T);
    PurchaseInvHeader2.RESET;
    PurchaseInvHeader2.CHANGECOMPANY(IC);
    //MESSAGE('%1',DocNumber);

    PurchaseInvHeader2.SETRANGE("Order No.",T);
    MESSAGE('%1',PurchaseInvHeader2."Order No.");
    IF PurchaseInvHeader2.FINDFIRST() THEN BEGIN
    //MESSAGE('%1',PurchaseInvHeader2."Order No.");
    MESSAGE('%1',PurchaseInvHeader2."No.");
    H:= PurchaseInvHeader2."No.";
    Y:= PurchaseInvHeader2."Shortcut Dimension 2 Code";
    MESSAGE('%1',H);
    SalesInvHeader2.RESET;
    SalesInvHeader2.CHANGECOMPANY(IC);
    SalesInvHeader2.SETRANGE("Shortcut Dimension 2 Code", Y);
    //SalesInvHeader2.SETRANGE("External Document No.",PurchaseHeader."Purchase Order No.");
    IF SalesInvHeader2.FINDFIRST THEN BEGIN
    DocNumber := SalesInvHeader2."No.";
    MESSAGE('%1',DocNumber);
    // added new



    SalesInvLine2.CHANGECOMPANY(IC);

    SalesInvLine2.SETFILTER("Document No.",DocNumber);
    IF SalesInvLine2.FINDFIRST() THEN BEGIN
    //IF SalesInvLine."Purchasing Code" = 'KIT DROP' THEN BEGIN
    //ICReturn;
    //END
    //ELSE
    //NormalReturn;
    SalesHeader2.CHANGECOMPANY(IC);
    IF SalesInvLine2."Drop Shipment" = TRUE THEN BEGIN
    MESSAGE('Drop');

    SalesHeader2.INIT;
    SalesHeader2."Document Type":= SalesHeader2."Document Type"::"Return Order";
    SalesHeader2.VALIDATE("No.");
    SalesHeader2.INSERT(TRUE);
    CopyDocMgt.SetProperties(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE);
    CopyDocMgt.CopySalesDoc(DocType::"Posted Invoice",SalesInvHeader2."No.",SalesHeader2);
    SalesHeader2."Posting Date" := WORKDATE;
    SalesHeader2.MODIFY;
    MESSAGE('%1',SalesHeader2."No.");
    IF CONFIRM('Do you want to create Purchase Return',TRUE) THEN BEGIN
    PurchaseInvHeader2.SETRANGE("Shortcut Dimension 2 Code",SalesInvHeader2."Shortcut Dimension 2 Code");
    IF PurchaseInvHeader2.FINDSET() THEN BEGIN
    MESSAGE('%1',PurchaseInvHeader2."No.");
    PurchaseHeader2.CHANGECOMPANY(IC);
    PurchaseHeader2.INIT;
    PurchaseHeader2."Document Type":= PurchaseHeader2."Document Type"::"Return Order";
    PurchaseHeader2.VALIDATE("No.");
    PurchaseHeader2.INSERT(TRUE);
    CopyDocMgt.SetProperties(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE);
    CopyDocMgt.CopyPurchDoc(DocType::"Posted Invoice",PurchaseInvHeader2."No.",PurchaseHeader2);

    PurchaseHeader2."Posting Date" := WORKDATE;
    PurchaseHeader2.MODIFY;
    MESSAGE('%1',PurchaseHeader2."No.");
    MESSAGE('Purchase Return order & Sales Return created');
    SMTP1.CreateMessage('nsc','test@nscglobal.com','varun.tripathi@nscglobal.com','SRET/PRET DETAILS','',TRUE);
    SMTP1.AppendBody('Hello Team,<BR><BR>');
    SMTP1.AppendBody('SRET & PRET has been generated<BR>');
    SMTP1.AppendBody('Please check & Proceed further<BR>');
    SMTP1.AppendBody('SRET:');
    SMTP1.AppendBody(SalesHeader2."No.");
    SMTP1.AppendBody('<BR>');
    SMTP1.AppendBody('SRET:');
    SMTP1.AppendBody(PurchaseHeader2."No.");
    SMTP1.Send();

    END
    ELSE
    MESSAGE('Matching invoice header not found');

    END
    ELSE
    MESSAGE('Sales return_normal Created','%1',SalesHeader2."No.",'No Purchase Return Created');


    END
    ELSE
    MESSAGE('Normal');
    SalesHeader2.CHANGECOMPANY(IC);
    SalesHeader2.INIT;
    SalesHeader2."Document Type":= SalesHeader2."Document Type"::"Return Order";
    SalesHeader2.VALIDATE("No.");
    SalesHeader2.INSERT(TRUE);
    CopyDocMgt.SetProperties(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE);
    CopyDocMgt.CopySalesDoc(DocType::"Posted Invoice",SalesInvHeader2."No.",SalesHeader2);
    SalesHeader2."Posting Date" := WORKDATE;
    SalesHeader2.MODIFY;
    MESSAGE('%1',SalesHeader2."No.");
    IF CONFIRM('Do you want to create Purchase Return',TRUE) THEN BEGIN
    PurchaseInvHeader2.SETRANGE("Shortcut Dimension 2 Code",SalesInvHeader2."Shortcut Dimension 2 Code");
    IF PurchaseInvHeader2.FINDSET() THEN BEGIN
    MESSAGE('%1',PurchaseInvHeader2."No.");
    PurchaseHeader2.CHANGECOMPANY(IC);
    PurchaseHeader2.INIT;
    PurchaseHeader2."Document Type":= PurchaseHeader2."Document Type"::"Return Order";
    PurchaseHeader2.VALIDATE("No.");
    PurchaseHeader2.INSERT(TRUE);
    CopyDocMgt.SetProperties(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE);
    CopyDocMgt.CopyPurchDoc(DocType::"Posted Invoice",PurchaseInvHeader2."No.",PurchaseHeader2);

    PurchaseHeader2."Posting Date" := WORKDATE;
    PurchaseHeader2.MODIFY;
    MESSAGE('%1',PurchaseHeader2."No.");
    MESSAGE('Purchase Return order & Sales Return created');
    SMTP1.CreateMessage('nsc','test@nscglobal.com','varun.tripathi@nscglobal.com','SRET/PRET DETAILS','',TRUE);
    SMTP1.AppendBody('Hello Team,<BR><BR>');
    SMTP1.AppendBody('SRET & PRET has been generated<BR>');
    SMTP1.AppendBody('Please check & Proceed further<BR>');
    SMTP1.AppendBody('SRET:');
    SMTP1.AppendBody(SalesHeader2."No.");
    SMTP1.AppendBody('<BR>');
    SMTP1.AppendBody('SRET:');
    SMTP1.AppendBody(PurchaseHeader2."No.");
    SMTP1.Send();


    END
    ELSE
    MESSAGE('Matching invoice header not found');

    END
    ELSE
    MESSAGE('Sales return_normal Created','%1',SalesHeader2."No.",'No Purchase Return Created');

    END;
    END;
    END;
    COMMIT;
    END;

    Why does it gives this error even though the Sales Invoice Header No. 'SI-ES-005999' exists.

    Please provide your comments.

    Thanks for help :)

  • Verified answer
    Amol Salvi Profile Picture
    Amol Salvi 18,694 on at
    RE: How to create a Sales return from posted sales invoice

    You need to us push data from one company and pull in other company by using CHANGECOMPANY function.

    You need to write function in both company

  • Mitr Profile Picture
    Mitr 182 on at
    RE: How to create a Sales return from posted sales invoice

    Hello Experts,

    Thank you for your help on this issue , I was able to create Sales Return & purchase return.

    However I have new requirement to create Sales return & Purchase return in Intercompany.

    I am able to create Sales return & purchase return in one company but not in other.

    The relation is like below:

    First company:

    SI-JP-000XXX --> Project Code: SO-JP-000YYY, External Document number: PO-ES-00ZZ00

    SO-JP-000MMM --> Project Code: SO-JP-000YYY, External Document number: PO-ES-00ZZ00

    PI-JP-000NNN --> Project Code: SO-JP-000YYY, Quote No. : PO-JP-000OOO

    PO-JP-000OOO --> Project Code: SO-JP-000YYY

    ---------------------------------

    Second company:

    PPI-ES-00AAAA --> Project Code: SO-ES-00BBBB, Order No.: PO-ES-00ZZ00 , Vendor Invoice No. SI-JP-000TTT

    PO-ES-00CC00 --> Project Code: SO-ES-00BBBB

    SI-ES-00DDDD --> Project Code: SO-ES-00BBBB, External Document number: SQ-ES-FFFFF/VARIOUS

    SO-ES-00EEEE --> Project Code: SO-ES-00BBBB, External Document number: SQ-ES-FFFFF/VARIOUS

     

    So in First company external document number of posted sales invoice is equal to Order no. of Posted purchase invoice in second company.

    In second company Project Code of Posted purchase invoice is equal to Project Code of Posted sales invoice In second company.

    I try to make the transaction in second company by changing the company but it does not work 

    Code of the function like below:

    SReturnDrop(SIINO : Code[20];ICICCODE : Code[20])
    MESSAGE('Intercompany Drop Return Initiated');
    SalesHeader.INIT;
    SalesHeader."Document Type":= SalesHeader."Document Type"::"Return Order";
    SalesHeader.VALIDATE("No.");
    SalesHeader.INSERT(TRUE);
    CopyDocMgt.SetProperties(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE);
    CopyDocMgt.CopySalesDoc(DocType::"Posted Invoice",SIINO,SalesHeader);
    SalesHeader."Posting Date" := WORKDATE;
    SalesHeader.MODIFY;
    MESSAGE('%1',SalesHeader."No.");

    IF CONFIRM('Do you want to create Purchase Return',TRUE) THEN BEGIN
    PurchaseInvHeader.SETRANGE("Shortcut Dimension 2 Code",SalesInvHeader."Shortcut Dimension 2 Code");
    IF PurchaseInvHeader.FINDSET() THEN BEGIN
    MESSAGE('%1',PurchaseInvHeader."No.");
    PurchaseHeader.INIT;
    PurchaseHeader."Document Type":= PurchaseHeader."Document Type"::"Return Order";
    PurchaseHeader.VALIDATE("No.");
    PurchaseHeader.INSERT(TRUE);
    CopyDocMgt.SetProperties(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE);
    CopyDocMgt.CopyPurchDoc(DocType::"Posted Invoice",PurchaseInvHeader."No.",PurchaseHeader);

    PurchaseHeader."Posting Date" := WORKDATE;
    PurchaseHeader.MODIFY;
    MESSAGE('%1',SalesInvHeader."External Document No.");
    MESSAGE('%1',PurchaseHeader."No.");
    MESSAGE('Purchase Return order & Sales Return created');
    SMTP1.CreateMessage('nsc','test@nscglobal.com','varun.tripathi@nscglobal.com','SRET/PRET DETAILS','',TRUE);

    SMTP1.AppendBody('Hello Team,<BR><BR>');
    SMTP1.AppendBody('SRET & PRET has been generated<BR>');
    SMTP1.AppendBody('Please check & Proceed further<BR>');
    SMTP1.AppendBody('SRET:');
    SMTP1.AppendBody(SalesHeader."No.");
    SMTP1.AppendBody('<BR>');
    SMTP1.AppendBody('SRET:');
    SMTP1.AppendBody(PurchaseHeader."No.");
    SMTP1.Send();
    // END;
    // END;
    //COMMIT;
    //CallWebServiceRET(ICPartner.Code,DocNumber);// needs to see again
    //RET1.ICRetChngComp(SIINO,ICICCODE);
    //======================================================================================================

    ICPartner.RESET;
    //MESSAGE('%1',ICICCODE);
    ICPartner.SETRANGE(Code,ICICCODE);

    IF ICPartner.FINDFIRST THEN BEGIN
    //=============================================
    SalesInvHeader2.RESET;
    SalesInvHeader2.SETRANGE("No.",SIINO);
    IF SalesInvHeader2.FINDFIRST() THEN
    T:= SalesInvHeader2."External Document No.";
    // MESSAGE('%1',T);
    PurchaseInvHeader2.RESET;
    PurchaseInvHeader2.CHANGECOMPANY(ICICCODE);
    //SalesInvHeader2.RESET;

    PurchaseInvHeader2.SETRANGE("Order No.",T);
    IF PurchaseInvHeader2.FINDFIRST() THEN BEGIN
    //MESSAGE('%1',PurchaseInvHeader2."Order No.");
    //MESSAGE('%1',PurchaseInvHeader2."No.");
    H:= PurchaseInvHeader2."No.";
    //MESSAGE('%1',H);
    PurchaseInvHeader2.GET(Comp.Name);
    SalesInvHeader2.CHANGECOMPANY(ICICCODE);

    SalesInvHeader2.SETRANGE("Shortcut Dimension 2 Code", PurchaseInvHeader2."Shortcut Dimension 2 Code");
    //SalesInvHeader2.SETRANGE("External Document No.",PurchaseHeader."Purchase Order No.");
    IF SalesInvHeader2.FINDFIRST THEN BEGIN
    DocNumber := SalesInvHeader2."No.";
    //MESSAGE('%1',DocNumber);
    // added new

    SalesInvLine2.SETFILTER("Document No.",DocNumber);
    IF SalesInvLine2.FINDFIRST() THEN BEGIN
    //IF SalesInvLine."Purchasing Code" = 'KIT DROP' THEN BEGIN
    //ICReturn;
    //END
    //ELSE
    //NormalReturn;

    IF SalesInvLine2."Drop Shipment" = TRUE THEN BEGIN
    MESSAGE('Drop');
    SalesHeader2.INIT;
    SalesHeader2."Document Type":= SalesHeader2."Document Type"::"Return Order";
    SalesHeader2.VALIDATE("No.");
    SalesHeader2.INSERT(TRUE);
    CopyDocMgt.SetProperties(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE);
    CopyDocMgt.CopySalesDoc(DocType::"Posted Invoice",SalesInvHeader2."No.",SalesHeader2);
    SalesHeader2."Posting Date" := WORKDATE;
    SalesHeader2.MODIFY;
    MESSAGE('%1',SalesHeader2."No.");
    IF CONFIRM('Do you want to create Purchase Return',TRUE) THEN BEGIN
    PurchaseInvHeader2.SETRANGE("Shortcut Dimension 2 Code",SalesInvHeader2."Shortcut Dimension 2 Code");
    IF PurchaseInvHeader2.FINDSET() THEN BEGIN
    MESSAGE('%1',PurchaseInvHeader2."No.");
    PurchaseHeader2.INIT;
    PurchaseHeader2."Document Type":= PurchaseHeader2."Document Type"::"Return Order";
    PurchaseHeader2.VALIDATE("No.");
    PurchaseHeader2.INSERT(TRUE);
    CopyDocMgt.SetProperties(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE);
    CopyDocMgt.CopyPurchDoc(DocType::"Posted Invoice",PurchaseInvHeader2."No.",PurchaseHeader2);

    PurchaseHeader2."Posting Date" := WORKDATE;
    PurchaseHeader2.MODIFY;
    MESSAGE('%1',PurchaseHeader2."No.");
    MESSAGE('Purchase Return order & Sales Return created');
    SMTP1.CreateMessage('nsc','test@nscglobal.com','varun.tripathi@nscglobal.com','SRET/PRET DETAILS','',TRUE);
    SMTP1.AppendBody('Hello Team,<BR><BR>');
    SMTP1.AppendBody('SRET & PRET has been generated<BR>');
    SMTP1.AppendBody('Please check & Proceed further<BR>');
    SMTP1.AppendBody('SRET:');
    SMTP1.AppendBody(SalesHeader2."No.");
    SMTP1.AppendBody('<BR>');
    SMTP1.AppendBody('SRET:');
    SMTP1.AppendBody(PurchaseHeader2."No.");
    SMTP1.Send();

    END
    ELSE
    MESSAGE('Matching invoice header not found');

    END
    ELSE
    MESSAGE('Sales return_normal Created','%1',SalesHeader."No.",'No Purchase Return Created');


    END
    ELSE
    MESSAGE('Normal');
    SalesHeader2.INIT;
    SalesHeader2."Document Type":= SalesHeader2."Document Type"::"Return Order";
    SalesHeader2.VALIDATE("No.");
    SalesHeader2.INSERT(TRUE);
    CopyDocMgt.SetProperties(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE);
    CopyDocMgt.CopySalesDoc(DocType::"Posted Invoice",SalesInvHeader2."No.",SalesHeader2);
    SalesHeader2."Posting Date" := WORKDATE;
    SalesHeader2.MODIFY;
    MESSAGE('%1',SalesHeader2."No.");
    IF CONFIRM('Do you want to create Purchase Return',TRUE) THEN BEGIN
    PurchaseInvHeader2.SETRANGE("Shortcut Dimension 2 Code",SalesInvHeader2."Shortcut Dimension 2 Code");
    IF PurchaseInvHeader2.FINDSET() THEN BEGIN
    MESSAGE('%1',PurchaseInvHeader2."No.");
    PurchaseHeader2.INIT;
    PurchaseHeader2."Document Type":= PurchaseHeader2."Document Type"::"Return Order";
    PurchaseHeader2.VALIDATE("No.");
    PurchaseHeader2.INSERT(TRUE);
    CopyDocMgt.SetProperties(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE);
    CopyDocMgt.CopyPurchDoc(DocType::"Posted Invoice",PurchaseInvHeader2."No.",PurchaseHeader2);

    PurchaseHeader2."Posting Date" := WORKDATE;
    PurchaseHeader2.MODIFY;
    MESSAGE('%1',PurchaseHeader2."No.");
    MESSAGE('Purchase Return order & Sales Return created');
    SMTP1.CreateMessage('nsc','test@nscglobal.com','varun.tripathi@nscglobal.com','SRET/PRET DETAILS','',TRUE);
    SMTP1.AppendBody('Hello Team,<BR><BR>');
    SMTP1.AppendBody('SRET & PRET has been generated<BR>');
    SMTP1.AppendBody('Please check & Proceed further<BR>');
    SMTP1.AppendBody('SRET:');
    SMTP1.AppendBody(SalesHeader2."No.");
    SMTP1.AppendBody('<BR>');
    SMTP1.AppendBody('SRET:');
    SMTP1.AppendBody(PurchaseHeader2."No.");
    SMTP1.Send();


    END
    ELSE
    MESSAGE('Matching invoice header not found');

    END
    ELSE
    MESSAGE('Sales return_normal Created','%1',SalesHeader."No.",'No Purchase Return Created');

    END;
    END;
    END;
    COMMIT;
    END;

    //=======================================================================================================================

    END
    ELSE
    MESSAGE('Matching invoice header not found');

    END
    ELSE
    MESSAGE('Sales return_normal Created','%1',SalesHeader."No.",'No Purchase Return Created');

    Please help me get it working.

    Thanks for help.

  • Verified answer
    Amol Salvi Profile Picture
    Amol Salvi 18,694 on at
    RE: How to create a Sales return from posted sales invoice

    Use validate function to validate.

    ##################

    SalesSetup.GET();
    SalesInvLine.SETFILTER("Document No.","No.");
    IF SalesInvLine.FINDFIRST() THEN BEGIN
    IF SalesInvLine."Drop Shipment" = TRUE THEN
    //-------------------------------------------------
    SalesHdr.INIT;
    MESSAGE('TEST');
    SalesHdr."Document Type" := SalesHdr."Document Type"::"Return Order";
    MESSAGE('Return order');
    MESSAGE('%1',"Posting Date");
    MESSAGE('%1',SalesSetup."Return Order Nos.");
    DocNo := NoSeriesMgt.GetNextNo(SalesSetup."Return Order Nos.","Posting Date",TRUE);
    SalesHdr."No." := DocNo ;
    MESSAGE('%1',SalesHdr."No.");
    MESSAGE('%1',"Sell-to Customer No.");
    SalesHdr.VALIDATE("Sell-to Customer No.","Sell-to Customer No.");
    MESSAGE('%1',"Sell-to Customer No.");
    SalesHdr."Posting Date" := SalesInvHeader."Posting Date";

    SalesHdr.Validate(SalesHdr."Posting Date",SalesInvHeader."Posting Date");
    MESSAGE('Posting date');
    SalesHdr."Document Date" := SalesInvHeader."Posting Date";

    SalesHdr.Validate(SalesHdr."Document Date",SalesInvHeader."Posting Date");

    MESSAGE('Document date');
    SalesHdr."Salesperson Code" := SalesInvHeader."Salesperson Code";
    SalesHdr.INSERT(TRUE);
    MESSAGE('Done');
    //===================================
    SalesLine2.RESET;
    SalesLine2.SETRANGE("Document Type",SalesHdr."Document Type");
    SalesLine2.SETRANGE("Document No.",SalesHdr."No.");

    IF SalesLine2.FINDLAST THEN
    NextLineNo := SalesLine2."Line No." + 10000

    ELSE
    NextLineNo := 10000;

    SalesLine2.INIT;
    MESSAGE('Initialize');
    SalesLine2.VALIDATE("Document Type", SalesHdr."Document Type");
    MESSAGE('Validated');
    SalesLine2."Document No." := SalesHdr."No.";
    SalesLine2."Line No." := NextLineNo;
    SalesLine2.Type := SalesInvLine.Type;
    SalesLine2."No." := SalesInvLine."No.";
    SalesLine2.Quantity := SalesInvLine.Quantity;
    SalesLine2.Description := SalesInvLine.Description;
    SalesLine2.INSERT;

  • Verified answer
    Jens Glathe Profile Picture
    Jens Glathe 6,092 on at
    RE: How to create a Sales return from posted sales invoice

    Hi there,

    I would suggest to have a look at Codeunit 6620 Copy Document Mgt. for inspiration. Also, first thing to do after acquiring a new document number - insert the record. Later modifications will be done by modify().

    with best regards

    Jens

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Announcing Our 2025 Season 1 Super Users!

A new season of Super Users has arrived, and we are so grateful for the daily…

Vahid Ghafarpour – Community Spotlight

We are excited to recognize Vahid Ghafarpour as our February 2025 Community…

Tip: Become a User Group leader!

Join the ranks of valued community UG leaders

Leaderboard

#1
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 292,494 Super User 2025 Season 1

#2
Martin Dráb Profile Picture

Martin Dráb 231,309 Most Valuable Professional

#3
nmaenpaa Profile Picture

nmaenpaa 101,156

Leaderboard

Featured topics

Product updates

Dynamics 365 release plans