📄 hwselreport.pas.svn-base
字号:
unit HwSelReport;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons, DB, ADODB, FR_Class, ComCtrls,
Grids, DBGrids;
type
THwSelReportForm = class(TForm)
lblReport: TLabel;
cbReport: TComboBox;
bbtnOk: TBitBtn;
bbtnExit: TBitBtn;
adsReport: TADODataSet;
Panel1: TPanel;
lblFromCode: TLabel;
edtFromCode: TEdit;
sbFromCode: TSpeedButton;
edtToCode: TEdit;
sbToCode: TSpeedButton;
lblToCode: TLabel;
Panel2: TPanel;
cbPrintTitle: TCheckBox;
cbPrintCode: TCheckBox;
edtCopys: TEdit;
udCopys: TUpDown;
lblCopys: TLabel;
cbPrintEmpty: TCheckBox;
adsEmpty: TADODataSet;
DataSource1: TDataSource;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure bbtnOkClick(Sender: TObject);
procedure bbtnExitClick(Sender: TObject);
procedure cbReportChange(Sender: TObject);
procedure sbFromCodeClick(Sender: TObject);
procedure sbToCodeClick(Sender: TObject);
procedure cbPrintEmptyClick(Sender: TObject);
procedure edtCopysKeyPress(Sender: TObject; var Key: Char);
private
AForm:TForm;
AKeyField:string;
procedure SetInterface;
procedure PrintEmpty(ADataSet:TDataSet;AReportName:string;AOnGetValue:TDetailEvent);
procedure PrintUnEmpty(ADataSet:TDataSet;AReportName:string;AOnGetValue:TDetailEvent);
{ Private declarations }
public
FDataSet:TDataSet;
AOnGetValue:TDetailEvent;
ACode:string;
procedure OpenData(ARepData:TADOQuery);
{ Public declarations }
end;
var
HwSelReportForm: THwSelReportForm;
implementation
uses SYSDATA, CommFun, HwSelData;
{$R *.dfm}
procedure THwSelReportForm.OpenData(ARepData:TADOQuery);
var
S,ARepName:string;
begin
S:='';
cbReport.Clear;
adsReport.Recordset:=ARepData.Recordset;
adsReport.First;
while not adsReport.Eof do
begin
ARepName:=adsReport.FieldByName('S500F_001').AsString;
ARepName:='['+ARepName+']'+GetRepName(ARepName,2);
cbReport.Items.Add(ARepName);
if (adsReport.FieldByName('S500F_007').AsBoolean) and (S='') then S:=ARepName;
adsReport.Next;
end;
//缺省报表
cbReport.ItemIndex:=cbReport.Items.IndexOf(S);
cbReportChange(cbReport);
end;
procedure THwSelReportForm.SetInterface;
begin
Font.Name:=AFontName;
Caption:=GetDBString('COM00007001'); //选择报表
lblReport.Caption:=GetDBString('COM00007002'); //报表名称
cbPrintTitle.Caption:=GetDBString('COM00007003'); //套用系统参数中设置的报表格式
bbtnOk.Caption:=GetDBString('COM00007004'); //确定(&O)
bbtnExit.Caption:=GetDBString('COM00007005'); //退出(&X)
lblFromCode.Caption:=GetDBString('COM00007006'); //起始编号
lblToCode.Caption:=GetDBString('COM00007007'); //结束编号
cbPrintEmpty.Caption:=GetDBString('COM00007008'); //打印空白报表
cbPrintCode.Caption:=GetDBString('COM00007009'); //空白报表中打印单据编号
lblCopys.Caption:=GetDBString('COM00007010'); //打印份数
end;
procedure THwSelReportForm.FormCreate(Sender: TObject);
begin
SetInterface;
end;
procedure THwSelReportForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
//
end;
//打印空白报表
procedure THwSelReportForm.PrintEmpty(ADataSet:TDataSet;AReportName:string;AOnGetValue:TDetailEvent);
var
I:Integer;
begin
CopyStructure(ADataSet,adsEmpty);
for I:=1 to StrToInt(edtCopys.Text) do
begin
adsEmpty.Append;
adsEmpty.FieldByName('FID').Value:=I;
if cbPrintCode.Checked then adsEmpty.Fields[1].Value:=GetAutoCode(adsReport.FieldByName('S500F_002').AsString);
adsEmpty.Post;
end;
ReportPrint(adsEmpty,AReportName,AOnGetValue,cbPrintTitle.Checked);
adsEmpty.Close;
end;
//打印非空报表
procedure THwSelReportForm.PrintUnEmpty(ADataSet:TDataSet;AReportName:string;AOnGetValue:TDetailEvent);
begin
if edtToCode.Text<edtFromCode.Text then
begin
edtToCode.SetFocus;
ShowMsg('UMS10000324'); //结束编号不能小于起始编号
Abort;
end;
ADataSet.DisableControls;
if (edtFromCode.Text<>'') and (edtToCode.Text<>'') then
begin
ADataSet.Filtered:=False;
ADataSet.Filter:=AKeyField+'>='+''''+edtFromCode.Text+''''+' and '+AKeyField+'<='+''''+edtToCode.Text+'''';
ADataSet.Filtered:=True;
end else
begin
ADataSet.Filtered:=False;
ADataSet.Filter:='';
ADataSet.Filtered:=True;
end;
try
ReportPrint(ADataSet,AReportName,AOnGetValue,cbPrintTitle.Checked);
finally
ADataSet.Filter:='';
ADataSet.Filtered:=False;
ADataSet.EnableControls;
end;
end;
procedure THwSelReportForm.bbtnOkClick(Sender: TObject);
var
AReportName:string;
begin
//确定(&O)
try
Screen.Cursor:=crHourGlass;
AReportName:=adsReport.FieldByName('S500F_001').AsString;
//打印非空白报表
if cbPrintEmpty.Enabled then
begin
//选择的报表为非空白报表,但打印空白报表
if cbPrintEmpty.Checked then
PrintEmpty(FDataSet,AReportName,AOnGetValue)
else //打印非空白报表
PrintUnEmpty(FDataSet,AReportName,AOnGetValue);
end else
//打印空白报表
begin
if cbPrintEmpty.Checked then
PrintEmpty(FDataSet,AReportName,AOnGetValue)
else //打印非空白报表
PrintUnEmpty(FDataSet,AReportName,AOnGetValue);
end;
// ModalResult:=1;
finally
Screen.Cursor:=crDefault;
end;
end;
procedure THwSelReportForm.bbtnExitClick(Sender: TObject);
begin
//退出(&X)
Close;
end;
procedure THwSelReportForm.cbReportChange(Sender: TObject);
var
S,AFormName:String;
begin
S:=cbReport.Text;
S:=copy(S,2,Pos(']',S)-2);
adsReport.Locate('S500F_001',S,[]);
AKeyField:=FDataSet.Fields[0].FieldName;
//套用格式(True=套用系统参数中设置的报表格式,False=不套用)
cbPrintTitle.Checked:=adsReport.FieldByName('S500F_004').AsBoolean;
//是否调用其他窗口程序
AFormName:=adsReport.FieldByName('S500F_005').AsString;
if Assigned(AForm) then FreeAndNil(AForm);
if AFormName<>'' then
begin
AForm:=CreateFormInPackage(AFormName,Panel1);
end;
//是否存在缺省值,如果没有缺省值则清空
edtFromCode.Text:='';
edtToCode.Text:='';
if adsReport.FieldByName('S500F_006').AsBoolean then
begin
edtFromCode.Text:=ACode;
edtToCode.Text:=ACode;
end;
//允许打印空白报表(是否允许打印空白报表)
cbPrintEmpty.Enabled:=adsReport.FieldByName('S500F_008').AsBoolean;
//打印编号(空白报表是否打印编号)
cbPrintCode.Checked:=adsReport.FieldByName('S500F_009').AsBoolean;
//是否空白报表(True=是空白报表,False=非空白报表)
if adsReport.FieldByName('S500F_010').AsBoolean then
begin
cbPrintEmpty.Checked:=True;
cbPrintEmpty.Enabled:=False;
end else
begin
cbPrintEmpty.Checked:=False;
cbPrintEmpty.Enabled:=cbPrintEmpty.Enabled;
end;
cbPrintEmptyClick(cbPrintEmpty);
end;
procedure THwSelReportForm.sbFromCodeClick(Sender: TObject);
begin
//起始编号
if not edtFromCode.Focused then edtFromCode.SetFocus;
HwSelDataForm:=THwSelDataForm.Create(Application);
HwSelDataForm.OpenSelData(FDataSet,nil);
if HwSelDataForm.ShowModal=1 then
begin
edtFromCode.Text:=FDataSet.FieldByName(AKeyField).AsString;
end;
end;
procedure THwSelReportForm.sbToCodeClick(Sender: TObject);
begin
//结束编号
if not edtToCode.Focused then edtToCode.SetFocus;
HwSelDataForm:=THwSelDataForm.Create(Application);
HwSelDataForm.OpenSelData(FDataSet,nil);
if HwSelDataForm.ShowModal=1 then
begin
edtToCode.Text:=FDataSet.FieldByName(AKeyField).AsString;
end;
end;
procedure THwSelReportForm.cbPrintEmptyClick(Sender: TObject);
begin
//打印空白报表
cbPrintCode.Enabled:=cbPrintEmpty.Checked;
lblCopys.Enabled:=cbPrintEmpty.Checked;
edtCopys.Enabled:=cbPrintEmpty.Checked;
udCopys.Enabled:=cbPrintEmpty.Checked;
if edtCopys.Enabled then edtCopys.Color:=AEnableColor else edtCopys.Color:=ADisableColor;
end;
procedure THwSelReportForm.edtCopysKeyPress(Sender: TObject;
var Key: Char);
begin
ValidInteger(Sender,Key);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -