SaveToStream(Stream: IIOStream; Mode: PrxReportSaveMode);
SaveToStream(Stream: System.IO.Stream; Mode: Prognoz.Platform.Interop.Report.PrxReportSaveMode);
Stream. Поток, в который будет сохранен регламентный отчет.
Mode. Режим сохранения отчета.
Метод SaveToStream сохраняет регламентный отчет в поток.
Сохранение регламентного отчета в поток может использоваться для передачи данных между отчетами, либо для сохранения отчета в таблицу репозитория. Регламентный отчет может быть сохранен в поле пользовательского типа. Более подробно работа с полями пользовательского типа описана в базе знаний в статье «Работа с полями, имеющими пользовательский тип данных».
Для загрузки регламентного отчета из потока используйте метод LoadFromStream.
Для выполнения примера предполагается наличие в репозитории таблицы с идентификатором «RepTable». В данной таблице созданы строковые поля с идентификаторами «REP_ID» и «REP_ID», предназначенные для хранения идентификатора и наименования соответственно. Также создано двоичное поле «REPORT», в котором хранятся сами регламентные отчеты.
Также в репозитории должен быть создан регламентный отчет с идентификатором «Report_1».
Sub UserProc;
Var
MB: IMetabase;
TableInst: IDatasetInstance;
Cache: ICachedDataset;
Fields: IDatasetInstanceFields;
Report: IPrxReport;
RepStream: IMemoryStream;
Begin
MB := MetabaseClass.Active;
//Таблица для сохранения рег.отчета
TableInst := MB.ItemById("RepTable").Open(Null) As IDatasetInstance;
Cache := TableInst.OpenCached;
Fields := Cache.Fields;
//Рег.отчет
Report := MB.ItemById("Report_1").Bind As IPrxReport;
Cache.Append;
Fields.FindById("REP_ID").Value := Report.MetabaseObject.Id;
Fields.FindById("REP_NAME").Value := Report.MetabaseObject.Name;
//Поток, в который будет сохранен рег.отчет
RepStream := New MemoryStream.Create;
Report.SaveToStream(RepStream, PrxReportSaveMode.Full);
//Сохранение содержимого потока в таблицу
Fields.FindById("REPORT").Value := RepStream;
Cache.Post;
Dispose RepStream;
End Sub UserProc;
При выполнения примера в таблице будет создана новая запись. В полях будет сохранена информация о регламентном отчета, а также сам отчет. Сохранение рег.отчета в поле таблицы происходит через поток.
Для выполнения примера предполагается наличие в репозитории таблицы с идентификатором «RepTable». В данной таблице созданы строковые поля с идентификаторами «REP_ID» и «REP_ID», предназначенные для хранения идентификатора и наименования соответственно. Также создано двоичное поле «REPORT», в котором хранятся сами регламентные отчеты.
Также в репозитории должен быть создан регламентный отчет с идентификатором «Report_1».
Imports Prognoz.Platform.Interop.Db;
Imports Prognoz.Platform.Interop.Marshalers;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Report;
Private Sub UserProc();
Var
MB: IMetabase;
TableInst: IDatasetInstance;
Cache: ICachedDataset;
Fields: IDatasetInstanceFields;
Report: IPrxReport;
IOStreamMarsh: ForeIOStreamMarshaler = New ForeIOStreamMarshaler();
RepStream: System.IO.MemoryStream = New System.IO.MemoryStream();
Begin
MB := Self.Metabase;
//Таблица для сохранения рег.отчета
TableInst := MB.ItemById["RepTable"].Open(Null) As IDatasetInstance;
Cache := TableInst.OpenCached();
Fields := Cache.Fields;
//Рег.отчет
Report := MB.ItemById["Report_1"].Bind() As IPrxReport;
Cache.Append();
Fields.FindById("REP_ID").Value := Report.MetabaseObject.Id;
Fields.FindById("REP_NAME").Value := Report.MetabaseObject.Name;
//Сохранение рег.отчет
в поток
Report.SaveToStream(RepStream, PrxReportSaveMode.prsmFull);
//Сохранение содержимого потока в таблицу
Fields.FindById("REPORT").Value := IOStreamMarsh.ManagedToFore(RepStream);
Cache.Post();
RepStream := Null;
End Sub;
При выполнения примера в таблице будет создана новая запись. В полях будет сохранена информация о регламентном отчета, а также сам отчет. Сохранение рег.отчета в поле таблицы происходит через поток.
См. также: