📄 report2.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 + -