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

📄 report2.pas

📁 飞恒进销存(超市批发)管理系统V5.1(含源程序) 语言:Delphi 6/7 相关控件:FastReport 2.4以上, Ehlib 3.4以上 1.数据库为fhe2db_V51.da
💻 PAS
字号:
unit report2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, FR_Ctrls, FR_DSet, FR_DBSet, FR_Class, ExtCtrls, FR_View,math;

type
  TFormRpt1 = class(TForm)
    frPreview1: TfrPreview;
    frReport1: TfrReport;
    frDBDataSet1: TfrDBDataSet;
    Panel1: TPanel;
    frSpeedButton1: TfrSpeedButton;
    frSpeedButton2: TfrSpeedButton;
    frSpeedButton3: TfrSpeedButton;
    frSpeedButton4: TfrSpeedButton;
    frSpeedButton5: TfrSpeedButton;
    frSpeedButton6: TfrSpeedButton;
    frSpeedButton7: TfrSpeedButton;
    frSpeedButton8: TfrSpeedButton;
    frSpeedButton9: TfrSpeedButton;
    frSpeedButton10: TfrSpeedButton;
    frSpeedButton11: TfrSpeedButton;
    frSpeedButton12: TfrSpeedButton;
    frSpeedButton13: TfrSpeedButton;
    procedure frSpeedButton2Click(Sender: TObject);
    procedure frSpeedButton1Click(Sender: TObject);
    procedure frSpeedButton3Click(Sender: TObject);
    procedure frSpeedButton4Click(Sender: TObject);
    procedure frSpeedButton5Click(Sender: TObject);
    procedure frSpeedButton6Click(Sender: TObject);
    procedure frSpeedButton7Click(Sender: TObject);
    procedure frSpeedButton8Click(Sender: TObject);
    procedure frSpeedButton9Click(Sender: TObject);
    procedure frSpeedButton10Click(Sender: TObject);
    procedure frSpeedButton11Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure frSpeedButton13Click(Sender: TObject);
    procedure frSpeedButton12Click(Sender: TObject);
    procedure frReport1UserFunction(const Name: String; p1, p2,
      p3: Variant; var Val: Variant);
  private
    { Private declarations }
    sSql,sCondition:string;
    Function ReadySql(nTableId:integer):string ;
    Function MoneyXToD(nAmount:real):string;
    procedure ShowMyReport(bPrint:boolean);
    procedure SetFrVariables(nTableId:integer;FrName:string);
  public
    { Public declarations }
    procedure PrintInfo(sSql,FrName:string;bPrint:boolean);
    procedure PrintSchReport(sCondition,FrName:string;bPrint:boolean);
    procedure PrintReport(nTableid:integer;bPrint:boolean);
  end;

var
  FormRpt1: TFormRpt1;

implementation

uses datamodule1, IOrder, information;

{$R *.dfm}

procedure TFormRpt1.frSpeedButton4Click(Sender: TObject);
begin
  frPreview1.First;
end;

procedure TFormRpt1.frSpeedButton5Click(Sender: TObject);
begin
  frPreview1.Prev;
end;

procedure TFormRpt1.frSpeedButton6Click(Sender: TObject);
begin
  frPreview1.Next;
end;

procedure TFormRpt1.frSpeedButton7Click(Sender: TObject);
begin
  frPreview1.Last;
end;

procedure TFormRpt1.frSpeedButton8Click(Sender: TObject);
begin
  frPreview1.LoadFromFile;
end;

procedure TFormRpt1.frSpeedButton9Click(Sender: TObject);
begin
  frPreview1.SaveToFile;
end;

procedure TFormRpt1.frSpeedButton10Click(Sender: TObject);
begin
  frPreview1.Print;
end;

procedure TFormRpt1.frSpeedButton1Click(Sender: TObject);
begin
  frPreview1.OnePage;
end;

procedure TFormRpt1.frSpeedButton2Click(Sender: TObject);
begin
  frPreview1.Zoom := 100;
end;

procedure TFormRpt1.frSpeedButton3Click(Sender: TObject);
begin
  frPreview1.PageWidth;
end;

procedure TFormRpt1.FormActivate(Sender: TObject);
begin
  frSpeedButton2.Down := True;
  frSpeedButton2Click(nil);
end;

procedure TFormRpt1.frSpeedButton11Click(Sender: TObject);
begin
  ModalResult := mrOk;
end;

procedure TFormRpt1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=27 then
    frSpeedButton11.Click;
  if (Shift >= [ssAlt]) and (key=80) then
    frSpeedButton12.Click;
  frPreview1.Window.FormKeyDown(Sender, Key, Shift);
end;

procedure TFormRpt1.frSpeedButton13Click(Sender: TObject);
begin
  frReport1.PrintPreparedReport('1',1,false,frAll)
end;

procedure TFormRpt1.frSpeedButton12Click(Sender: TObject);
begin
  frReport1.PrintPreparedReport('',1,false,frAll)
end;

//返回报表的中文名称,为空表示无此报表
//+100 ,detail table sql
Function TFormRpt1.ReadySql(nTableId:integer):string ;
begin
  with dataE2 do
  begin
    result:='';
    //读取SQL
    if not OpenTable('select * from apprptlist where Rptid= :id ',nTableId) then exit;

    sSql:=trim(adoQuery1.fieldbyname('sql1').asstring);
    sSql:=sSql+' '+trim(adoQuery1.fieldbyname('sql2').asstring);
    if queryRpt.active then QueryRpt.Close;
    queryRpt.SQL.clear;
    queryRpt.sql.add(sSql);

    result:=trim(adoQuery1.fieldbyname('rptName').asstring);
    adoQuery1.close;
  end;
end;

procedure TFormRpt1.SetFrVariables(nTableId:integer;FrName:string);
var
  sFrf:string;
begin
  //装入报表
  sFrf:=ExtractFileDir(Application.ExeName)+'\report\'+FrName+'.frf';
  if frReport1.FileName<>sFrf then
     frReport1.LoadFromFile(sFrf);


  //open master table
  with DataE2 do
  begin
    queryRpt.Parameters[0].value:=nBillId;
    queryRpt.Open;
  end;

  //准备报表变量
  //sCondition:='';
  with frReport1.Dictionary do
  begin
    //仓库名称
    if nTableid in [1,2,11,12,21,26] then
      Variables['FrStoreName'] :=''''+dataE2.QueryRpt.fieldbyname('storename').asstring+'''';

    //供应商或客户名称
    if nTableid in [0,1,2,3,10,11,12,13] then
    begin
      Variables['FrShortName'] :=''''+dataE2.QueryRpt.fieldbyname('shortname').asstring+'''';
      Variables['FrPhone'] :=''''+dataE2.QueryRpt.fieldbyname('phone').asstring+'''';
      Variables['FrAddress'] :=''''+dataE2.QueryRpt.fieldbyname('address').asstring+'''';
    end;

    //业务员,或经手人
    if nTableid in [0,1,2,10,11,12,24,25,26,27,30] then
    begin
      Variables['FrEmpName'] :=''''+dataE2.QueryRpt.fieldbyname('empname').asstring+'''';
    end;

    //银行帐号,付款方式
    if nTableid in [3,13] then
    begin
      Variables['FrBankName'] :=''''+dataE2.QueryRpt.fieldbyname('Bankname').asstring+'''';
      Variables['FrPayTypeName'] :=''''+dataE2.QueryRpt.fieldbyname('PayTypename').asstring+'''';
      Variables['FrPayStyle'] :=''''+dataE2.QueryRpt.fieldbyname('PayStyle').asstring+'''';
    end;

    //进出仓库名称
    if nTableid in [22,24,25] then
    begin
      Variables['FrINStoreName'] :=''''+dataE2.QueryRpt.fieldbyname('Instorename').asstring+'''';
      Variables['FrOutStoreName'] :=''''+dataE2.QueryRpt.fieldbyname('OutStorename').asstring+'''';
    end;
    //

    //其它出入库类型
    if nTableid in [26,27] then
    begin
      Variables['FrTypeName'] :=''''+dataE2.QueryRpt.fieldbyname('typename').asstring+'''';
    end;

    //组装、拆卸货品,配料清单
    if nTableid in [24,25,30] then
    begin
      Variables['FrGoodsName'] :=''''+dataE2.QueryRpt.fieldbyname('GoodsName').asstring+'''';
      Variables['FrGoodsCode'] :=''''+dataE2.QueryRpt.fieldbyname('GoodsCode').asstring+'''';
      Variables['FrGoodsUnits'] :=''''+dataE2.QueryRpt.fieldbyname('GoodsUnits').asstring+'''';
      Variables['FrQty'] :=dataE2.QueryRpt.fieldbyname('qty').asfloat;
      if nTableId <> 30 then
        Variables['FrGoodsPrice'] :=dataE2.QueryRpt.fieldbyname('GoodsPrice').asCurrency;
    end;
    //

    Variables['FrInvoNo'] :=''''+dataE2.QueryRpt.fieldbyname('InvoNO').asstring+'''';
    Variables['FrBilldate'] :=dataE2.QueryRpt.fieldbyname('Billdate').asdatetime;
    Variables['FrMemo'] :=''''+dataE2.QueryRpt.fieldbyname('Memo').asstring+'''';

    Variables['FrCustomer'] :=''''+dataE2.sCustomer+'''';
    Variables['FrCusAddress'] :=''''+dataE2.sAddress+'''';
    Variables['FrCusPhone'] :=''''+dataE2.sTelphone+'''';

    Variables['FrUsrName'] :=''''+dataE2.myUsrName+'''';
    Variables['FrOperator'] :=''''+dataE2.QueryRpt.fieldbyname('operator').asstring+'''';
    Variables['FrCondition'] :=''''+sCondition+'''';
    if nTableId <> 30 then
    begin
      Variables['TotalAmount'] :=''''+dataE2.QueryRpt.fieldbyname('BillAmt').asstring+'''';
      Variables['DTotalAmount'] :=''''+MoneyXToD(dataE2.QueryRpt.fieldbyname('BillAmt').AsFloat)+'''';
    end;
    //费用开支
    if nTableid in [33,43] then
    begin
      Variables['FrBankName'] :=''''+dataE2.QueryRpt.fieldbyname('Bankname').asstring+'''';
      Variables['FrPayTypeName'] :=''''+dataE2.QueryRpt.fieldbyname('PayTypename').asstring+'''';
      Variables['FrCheckNo'] :=''''+trim(dataE2.QueryRpt.fieldbyname('CheckNo').asstring)+'''';
    end;
  end;

end;

procedure TFormRpt1.PrintInfo(sSql,FrName:string;bPrint:boolean);
var
  sFrf:string;
begin
  //'',no this report; exit
  if FrName='' then exit;

  //装入报表
  sFrf:=ExtractFileDir(Application.ExeName)+'\report\'+FrName+'.frf';
  if frReport1.FileName<>sFrf then
     frReport1.LoadFromFile(sFrf);

  with DataE2 do
  begin
    if queryRpt.active then QueryRpt.Close;
    queryRpt.SQL.clear;
    queryRpt.sql.add(sSql);
    if pos(':TypeCode',sSql)>0 then
      queryRpt.Parameters[0].Value:=infoForm.edtTypeCode.Text+'%';
    queryRpt.Open;
  end;
  frReport1.Dictionary.Variables['FrUsrName'] :=''''+datae2.myUsrName+'''';

  //按自己的要求进行报表显示
  ShowMyReport(bPrint) ;
end;

procedure TFormRpt1.PrintSchReport(sCondition,FrName:string;bPrint:boolean);
var
  sFrf:string;
begin
  //'',no this report; exit
  if FrName='' then exit;

  //装入报表
  sFrf:=ExtractFileDir(Application.ExeName)+'\report\'+FrName+'.frf';
  if frReport1.FileName<>sFrf then
     frReport1.LoadFromFile(sFrf);
  frReport1.Dictionary.Variables['FrUsrName'] :=''''+datae2.myUsrName+'''';
  frReport1.Dictionary.Variables['FrCondition'] :=''''+sCondition+'''';
  with DataE2 do
    if not queryRpt.active then  exit;

  //按自己的要求进行报表显示
  ShowMyReport(bPrint) ;
end;

procedure TFormRpt1.PrintReport(nTableId:integer;bPrint:boolean);
var
  sFrName:string;
begin
  //设置主表的sql
  sFrname:=ReadySql(nTableid);

  //'',no this report; exit
  if sFrName='' then exit
  else
    SetFrVariables(nTableid,sFrName);

  //设置detailsql
  if ReadySql(nTableid+100)='' then exit;

  with DataE2 do
  begin
//    queryRpt.sql.add('select d.*,g.code,g.name,g.units,g.barcode from O_outstoreD d,goods g where billid= :billid and d.goodsid=g.goodsid');
    queryRpt.Parameters[0].value:=nBillId;
    queryRpt.Open;
  end;

  //按自己的要求进行报表显示
  ShowMyReport(bPrint) ;
end;

procedure  TFormRpt1.ShowMyReport(bPrint:boolean);
begin
  if bPrint then
  begin
    frReport1.PrepareReport ;
    frReport1.PrintPreparedReport('',1,false,frAll) end
  else begin
    frReport1.ShowReport ;
    ShowModal;
  end;
end;

Function TFormRpt1.MoneyXToD(nAmount:real):string;
var
  n,j,nPositon:integer;
  sAmount:string;
  sTmp:string;
  sResutl,sResult:string;
  bInt:boolean;
begin
  sResult:='';
  nAmount:=Abs(nAmount)*100;
  str(nAmount:9:0,sAmount);
  sAmount:=trim(sAmount);
  n:=length(sAmount);
  //已为整
  if nAmount=0 then bInt:=true else bInt:=false;
  for j:=n downto 1 do
  begin
    sTmp:=copy(sAmount,j,1);
    nPositon:=(n-j+1);
    if not bInt then
      if sTmp[1]='0' then
        continue
      else begin bInt:=true;
      case nPositon of
        2,3:     sResult:='整';
        4,5,6,7: sResult:='元整';
        8,9:     sResult:='万元整';
      end;
      end;

    case sTmp[1] of
      '0':sResutl:='零';
      '1':sResutl:='壹';
      '2':sResutl:='贰';
      '3':sResutl:='叁';
      '4':sResutl:='肆';
      '5':sResutl:='伍';
      '6':sResutl:='陆';
      '7':sResutl:='柒';
      '8':sResutl:='捌';
      '9':sResutl:='玖';
    end;
    case nPositon of
      1:sResutl:=sResutl+'分';
      2:sResutl:=sResutl+'角';
      3:sResutl:=sResutl+'元';
      4:sResutl:=sResutl+'拾';
      5:sResutl:=sResutl+'佰';
      6:sResutl:=sResutl+'仟';
      7:sResutl:=sResutl+'万';
      8:sResutl:=sResutl+'拾';
      9:sResutl:=sResutl+'佰';
    end;
    sResult:=sResutl+sResult;
  end;
  Result:='¥'+sResult;
end;

procedure TFormRpt1.frReport1UserFunction(const Name: String; p1, p2,
  p3: Variant; var Val: Variant);
begin
  if AnsiCompareText('XToD', Name) = 0 then
    val := MoneyXToD(frParser.Calc(p1));
end;

end.

⌨️ 快捷键说明

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