web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

No record found.

Community site session details

Community site session details

Session Id :
Small and medium business | Business Central, N...
Answered

WriteMode , temp blob, not able to generate report, email sending

(1) ShareShare
ReportReport
Posted on by 13

Dear friends,

i am getting the following error when want to create report in pdf and send as attachment in business central.

"The current setting of the WriteMode property is incompatible with the operation."

my code

//----------------
        TempBlob.CreateOutStream(OutStr);
        TempBlob.CreateInStream(InStrm);
if bemailrec.FindSet then begin
REPORT.SAVEAS(ReportID, '', REPORTFORMAT::Pdf, Out, RecRef);
Base64EncodedString := Base64.ToBase64('My Message in Gas Prices 50100 ');
end;
//----------------
I have the same question (0)
  • Suggested answer
    Gianfranco C. Profile Picture
    370 on at

    Hi, is the variable 'Out' in Report.saveAs a typo?
    it should be OutStr like yours.

    the CreateInStr in that position is incorrect, it should be placed after the Report.SaveAs, to retrieve the report created and stored in the "temp blob" stream.

    if it is easier for you, paste your complete code and what you do after creating the pdf.

  • Hafiz@d365 Profile Picture
    13 on at

    //---

     action("Send Email")

               {

                   Image = Email;

                   trigger OnAction()

                   begin

                       CurrPage.Update;

                       noofemails := 0;

                       emailNote.Reset;

                       emailNote.SetRange("Price Date", rec."Gas Price Period");

                       //emailNote.SETRANGE("Email Count",0,salessetup."email count"+5);

                       emailNote.SETRANGE("Send Email", TRUE);

                       //emailNote.SETFILTER("Customer No",'BG-CS-10032');

                       if emailNote.FindSet then begin

                           repeat

                               Consmaster.Reset;

                               Consmaster.SetFilter("Consumer Id", emailNote."Consumer Id");

                               // Consmaster.SETRANGE(Active,TRUE);

                               if Consmaster.Find('-') then begin

                                   if Consmaster."E-Mail" <> '' then begin

                                       Clear(cu501);

                                       Message('At gas Price' + emailNote."Consumer Id" + ' Email ' + Consmaster."E-Mail");

                                       SendSalesShipment(emailNote, emailNote."Order No", emailNote."Customer No", emailNote."Price Date", emailNote.Segment, emailNote."Consumer Id");

                                       noofemails := noofemails + 1;

                                       emailNote."Email Count" := emailNote."Email Count" + 1;

                                       emailNote."Email Date" := WorkDate;

                                       emailNote.Modify;

                                   end;

                               end;

                           //  emailNote.MODIFY;

                           until emailNote.Next = 0;

                       end else begin

                           Error('No Records to send');

                       end;

                       Message('Number of Emails Sent ' + Format(noofemails));

                   end;

               }

    //---------------

    /procedures

    //---------

    procedure SendSalesShipment(SalesShipmentHeader: Record "BGS_Email Notices"; OrderNo: Code[20]; CustNo: Code[20]; srundate: Date; seg1: Code[20]; ConsNo: Code[20]): Boolean

       var

           Customer: Record "BGS_Consumer Master2";

           EmailBodyFilePath: Text;

           FileManagement: Codeunit "File Management";

           ReportID: Integer;

           BodyLayoutCode: Code[20];

           emailrec: Record "BGS_Email Notices";

           fromDt: Date;

           todt: Date;

       begin

           Customer.Reset;

           Customer.SetFilter("Consumer Id", ConsNo);

           if Customer.FindSet then begin

           end else begin

               exit;

           end;

           TempEmailItem."Send to" := Customer."CC Email";

           TempEmailItem."Send CC" := Customer."CC Email 2";

           TempEmailItem."Send BCC" := '';

           TempEmailItem."Send to" := Customer."E-Mail";

           if Customer."CC Email" <> '' then

               TempEmailItem."Send CC" := Customer."CC Email";

           if Customer."CC Email 2" <> '' then

               TempEmailItem."Send BCC" := Customer."CC Email 2";

           ConsName := SalesShipmentHeader."Customer Name";

           Consmaster.Reset;

           Consmaster.SetFilter("Consumer Id", ConsNo);

           if Consmaster.FindSet then

               ConsName := Consmaster."Consumer Name";

           TempEmailItem.Subject := StrSubstNo(ConsName + ' - Monthly Price Revision for month of ' + Format(srundate, 0, '<Month Text,3> <Year4>'));

           fromDt := CalcDate('<-1M>', srundate);

           fromDt := CalcDate('-CM', CalcDate('<-1M>', srundate));

           emailrec.Reset;

           emailrec.SetFilter("Customer No", CustNo);

           emailrec.SetFilter("Order No", OrderNo);

           emailrec.SetRange("Price Date", srundate);

           if emailrec.FindSet then begin

               Message('At Code Unit' + emailrec."Consumer Id" + ' Email ' + Consmaster."E-Mail");

               if emailrec.Segment = 'BULK' then begin

                   GetReportIDandLayoutCode(ReportID, BodyLayoutCode, emailrec.Segment);

                   //  "Attachment File Path" := GenerateDocumentEmailAttachment(emailrec, 50001, srundate, OrderNo, CustNo, seg1);

               end else begin

                   GetReportIDandLayoutCode(ReportID, BodyLayoutCode, emailrec.Segment);

                   // "Attachment File Path" := GenerateDocumentEmailAttachment(emailrec, 50000, srundate, OrderNo, CustNo, seg1);

               end;

               //"Attachment File Path" := GenerateDocumentEmailAttachment(emailrec,ReportID,srundate,OrderNo,CustNo,seg1);

               // "Attachment Name" := StrSubstNo('Monthly Price Note %1', ConsName + '.PDF');

               Clear(Rep50000);

               if emailrec.Segment <> 'BULK' then begin

                   Clear(Rep50000);

                   Rep50000.GetArgs(ConsNo, OrderNo, fromDt, srundate, seg1);

               end else begin

                   Clear(Rep50001);

                   Rep50001.GetArgs(ConsNo, OrderNo, fromDt, srundate, seg1);

               end;

               if emailrec.Segment <> 'BULK' then

                   GenerateShipmentEmailBody(emailrec, 50000, EmailBodyFilePath, BodyLayoutCode, OrderNo, CustNo, srundate, emailrec.Segment)

               else

                   GenerateShipmentEmailBody(emailrec, 50001, EmailBodyFilePath, BodyLayoutCode, OrderNo, CustNo, srundate, emailrec.Segment);

               TempEmailItem.Validate(TempEmailItem."Plaintext Formatted", false);

           end;

       end;

       local procedure GenerateShipmentEmailBody(DocumentVariant: Record "BGS_Email Notices"; ReportID: Integer; var BodyFilePath: Text; LayoutCode: Code[20]; Korderno: Code[20]; Kcustno: Code[20]; Krundate: Date; BulkorMMBS: Code[20])

       var

           FileManagement: Codeunit "File Management";

           ReportLayoutSelection: Record "Report Layout Selection";

           bemailrec: Record "BGS_Email Notices";

           bfromDt: Date;

           btodt: Date;

           TempBlob_lRec: Codeunit "Temp Blob";

           Out: OutStream;

           RecRef: RecordRef;

           attachment1:File;

           //-----------

           TempBlob: Codeunit "Temp Blob";

           OutStr: OutStream;

           InStrm: InStream;

           Base64EncodedString: Text;

           Base64: Codeunit "Base64 Convert";

       //-----------

       begin

           ReportLayoutSelection.SetTempLayoutSelected(LayoutCode);

           bfromDt := CalcDate('<-1M>', Krundate);

           Clear(Rep50000);

           if BulkorMMBS <> 'BULK' then

               Rep50000.GetArgs(Kcustno, Korderno, bfromDt, Krundate, BulkorMMBS)

           else

               Rep50001.GetArgs(Kcustno, Korderno, bfromDt, Krundate, BulkorMMBS);

           bemailrec.Reset;

           bemailrec.SetFilter("Customer No", Kcustno);

           bemailrec.SetFilter("Order No", Korderno);

           bemailrec.SetRange("Price Date", bfromDt, Krundate);

           //----------------

           TempBlob.CreateOutStream(OutStr);

           TempBlob.CreateInStream(InStrm);

           //----------------

           if bemailrec.FindSet then begin

               Message('Here Gas Prices -1');

               REPORT.SAVEAS(ReportID, '', REPORTFORMAT::Pdf, Out, RecRef);

               Base64EncodedString := Base64.ToBase64('My Message in Gas Prices 50100 ');

           end

       end;

       local procedure GenerateDocumentEmailAttachment(DocumentVariant: Record "BGS_Email Notices"; ReportID: Integer; zdate: Date; zorder: Code[20]; zcust: Code[20]; BM3: Code[20]): Text

       var

           FileManagement: Codeunit "File Management";

           FilePath: Text;

           Zemailrec: Record "BGS_Email Notices";

           zfromDt: Date;

           TempBlob_lRec: Codeunit "Temp Blob";

           Out: OutStream;

           RecRef: RecordRef;

           FileManagement_lCdu: Codeunit "File Management";

       begin

           // FilePath := CopyStr(FileManagement.ServerTempFileName('pdf'), 1, 250);

           zfromDt := CalcDate('<-1M>', zdate);

           Zemailrec.Reset;

           Zemailrec.SetFilter("Customer No", zcust);

           Zemailrec.SetFilter("Order No", zorder);

           Zemailrec.SetRange("Price Date", zfromDt, zdate);

           if Zemailrec.FindSet then begin

               Message('Here Gas Prices');

               if Zemailrec.Segment <> 'BULK' then

                   REPORT.SAVEAS(ReportID, '', REPORTFORMAT::Pdf, Out, RecRef)    // save report in TempBlob di recRef

               else

                   REPORT.SAVEAS(ReportID, '', REPORTFORMAT::Pdf, Out, RecRef);    // save report in TempBlob di recRef

               exit(FilePath);

           end;

       end;

       local procedure GetReportIDandLayoutCode(var ReportID: Integer; var LayoutCode: Code[20]; bulkMMBS: Code[20])

       var

           ReportSelections: Record "Report Selections";

       begin

           ReportSelections.SetRange(Usage, ReportSelections.Usage::"C.Statement");

           if ReportSelections.FindFirst then

               if bulkMMBS <> 'BULK' then begin

                   ReportID := 50100;

                   LayoutCode := '50000-000001';

               end else begin

                   ReportID := 50101;

                   LayoutCode := '50001-000001';

               end;

           ReportSelections.SetRange("Use for Email Body", true);

           // IF ReportSelections.FINDFIRST THEN

           //  LayoutCode := ReportSelections."Email Body Layout Code";

       end;

    }

    //--------

    please help

  • Verified answer
    Gianfranco C. Profile Picture
    370 on at

    as I told you before, the variable of type OutStream other than the one you instantiated, and the variable RecRef is not retrieved.

    Correct like this:

       bemailrec.SetRange("Price Date", bfromDt, Krundate);
    
    
    
            //----------------
    
            TempBlob.CreateOutStream(OutStr);
            //TempBlob.CreateInStream(InStrm);
            //----------------
            if bemailrec.FindSet then begin
                RecRef.GetTable(bemailrec);
                Message('Here Gas Prices -1');
                REPORT.SAVEAS(ReportID, '', REPORTFORMAT::Pdf, OutStr, RecRef);
                Base64EncodedString := Base64.ToBase64('My Message in Gas Prices 50100 ');
    
                //pdf report now is in TempBlob  ... 
                TempBlob.CreateInStream(InStrm);
                //now the pdf is in InStrm and you can use it 
                //
            end

    Base64EncodedString what it is for? it is not used...

    Don't forget to help the community by Verifying the answer and Like it if your question has been answered. It will let others know that the topic has verified answer.

    Thanks & Regards,
    Gian

  • Hafiz@d365 Profile Picture
    13 on at

    Thank you

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

Responsible AI policies

As AI tools become more common, we’re introducing a Responsible AI Use…

Neeraj Kumar – Community Spotlight

We are honored to recognize Neeraj Kumar as our Community Spotlight honoree for…

Leaderboard > Small and medium business | Business Central, NAV, RMS

#1
OussamaSabbouh Profile Picture

OussamaSabbouh 2,238

#2
YUN ZHU Profile Picture

YUN ZHU 773 Super User 2025 Season 2

#3
Sumit Singh Profile Picture

Sumit Singh 630

Last 30 days Overall leaderboard

Featured topics

Product updates

Dynamics 365 release plans