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

📄 hwselreport.pas.svn-base

📁 这是一个功能齐全的,代码完整的ERP企业信息管理系统,现在上传和大家分享
💻 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 + -