⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_reportprint.pas

📁 餐营的数据核算,模拟入库,出库,库存.对餐营的流程详细叙述
💻 PAS
字号:
unit U_ReportPrint;

interface
  uses windows,Controls,DB,Dialogs,Forms,Variants,SysUtils,
    ppCTMain, ppReport, ppDevice, myChkBox,ppDsgner,
    ppSubRpt, ppRegion, ppBarCod, ppCtrls, ppRichTx, ppMemo, ppVar,
    ppStrtch, ppPrnabl, ppClass, ppBands, ppCache, ppEndUsr, ppProd, ppComm,
    ppRelatv, ppDB, ppDBPipe, ppTypes,ppChrtDp,raIDE,daIDE,ppViewr;

type
  TJLSClass= class
  public
    procedure PreviewFormCreate(Sender: TObject);
  end;

  Procedure ReportPrint(WinCtl: TWinControl;
                      Data:Array of TDataSource;
                      DSTemplate: TDataSource;
                      RptName: String;
                      RBegin: TppRangeBeginType;
                      REnd: TppRangeEndType;
                      RDevice: String;Print:boolean=true); StdCall;


implementation


Procedure ReportPrint(WinCtl: TWinControl;                         
                      Data:Array of TDataSource;
                      DSTemplate: TDataSource;
                      RptName: String;
                      RBegin: TppRangeBeginType;
                      REnd: TppRangeEndType;
                      RDevice: String;Print:boolean=true); StdCall;
var
  pl:Array of TppDBPipeline;
  plTemplate: TppDBPipeline;
  Rpt: TppReport;
  Designer: TppDesigner;
  i,HighBounds:integer;
  HasData:Boolean;
  JLSClass:TJLSClass;
begin
  Rpt:=TppReport.Create(WinCtl);
  Rpt.Units:=utMillimeters;
  Designer:=nil;
  
  if Not DSTemplate.DataSet.Active then
    DSTemplate.DataSet.Open;

 
  HasData:=DSTemplate.DataSet.Locate('name', VarArrayOf([RptName]), [loCaseInsensitive]);
  if Not HasData then
  begin
    if Print then
    begin
      MessageDlg('指定报表不存在!',mtInformation, [mbOk],0);
      Exit;
    end
    else
    begin
      if MessageDlg('指定报表不存在,你要新建吗?',mtInformation, [mbOk, mbCancel],0)<>mrOk then
        Exit;
    end;
  end;


  HighBounds:=High(Data);
  SetLength(pl,HighBounds+1);
  try
    
    for i:=0 to HighBounds do
    begin
      pl[i]:=TppDBPipeline.Create(WinCtl);
      pl[i].Name:='pl'+IntToStr(i);
      pl[i].Visible:=true;
      pl[i].DataSource:=Data[i];
      Case i of
        0:begin
          pl[i].UserName:='Data';
          pl[i].RangeBegin:=RBegin;
          pl[i].RangeEnd:=REnd;
        end;
        1:pl[i].UserName:='SubData';
        else pl[i].UserName:='Data'+Data[i].Name ;
      end;         
      pl[i].AutoCreateFields:=true;
    end;

    Rpt.DataPipeline:=pl[0];


    plTemplate:=TppDBPipeline.Create(WinCtl);
    plTemplate.UserName:='Template';
    //plTemplate.AutoCreateFields:=true;   {cgh 2002-07-19} ////////////

    plTemplate.DataSource:=DSTemplate;
    
    Rpt.SavePrinterSetup:=true;
    Rpt.Template.SaveTo:=stDatabase;
    Rpt.Template.Format:=ftASCII;
   // Rpt.Units:=utMillimeters;
    Rpt.AllowPrintToArchive:=true;
    Rpt.AllowPrintToFile:=true;
    Rpt.Template.DatabaseSettings.DataPipeline:=plTemplate;
    Rpt.Template.DatabaseSettings.NameField:='Name';
    Rpt.Template.DatabaseSettings.TemplateField:='Template';
    Rpt.Template.DatabaseSettings.Name:=RptName;

    if Rpt.PrinterSetup.PaperNames.IndexOf('A4')<>-1 then
      Rpt.PrinterSetup.PaperName:='A4';     

    
    if HasData then Rpt.Template.LoadFromDatabase;
    if RDevice = '' then
      Rpt.DeviceType:='dtScreen'
     else
      Rpt.DeviceType:=RDevice;

    Rpt.OnPreviewFormCreate:=JLSClass.PreviewFormCreate;
    if Print then
      Rpt.Print
    else
    begin
      Designer:=TppDesigner.Create(WinCtl);
      Designer.Caption:=Rpt.Template.DatabaseSettings.Name;
      Designer.AllowDataSettingsChange:=true;
      Designer.AllowSaveToFile:=true;
      Designer.DataSettings.AllowEditSQL:=true;
      Designer.DataSettings.DatabaseType:=dtMSSQLServer;
      Designer.DataSettings.SQLType:=sqSQL1;
      Designer.DataSettings.UseDataDictionary:=true;
      Designer.ShowData:=true;
      Designer.Report:=Rpt;
      Designer.ShowModal;
    end;

   finally
     Rpt.Free;
     DsTemplate.DataSet.AfterInsert:=nil;
     if Assigned(Designer) then
       Designer.Free;
     plTemplate.Free;
     for i:=high(pl) to 0 do
       pl[i].Free;
  end;
end;

{ TJLSClass }

procedure TJLSClass.PreviewFormCreate(Sender: TObject);
begin
  TppViewer(TppReport(Sender).PreviewForm.Viewer).ZoomSetting := zs100Percent;
  TppReport(Sender).PreviewForm.WindowState:=wsMaximized;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -