📄 hrm230_01.pas.svn-base
字号:
unit Hrm230_01;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Bas100_01, Db, Series, TeEngine, ExtCtrls, TeeProcs, Chart, fr_Class,
DBChart, ComCtrls, ToolWin, StdCtrls, Buttons, ExtDlgs, ADODB, Menus;
type
THrm230_01Form = class(TBas100_01Form)
ScrollBox1: TScrollBox;
DBChart1: TDBChart;
Series1: TBarSeries;
Series2: TPieSeries;
Panel1: TPanel;
lblCondition: TLabel;
ComboBox1: TComboBox;
lblType: TLabel;
ComboBox2: TComboBox;
lblShow: TLabel;
ComboBox3: TComboBox;
CoolBar1: TCoolBar;
ToolBar1: TToolBar;
tlbPrint: TToolButton;
ToolButton4: TToolButton;
tlbExit: TToolButton;
Image1: TImage;
ADOQuery1: TADOQuery;
ADODataSet1: TADODataSet;
procedure FormCreate(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure ComboBox3Change(Sender: TObject);
procedure tlbPrintClick(Sender: TObject);
procedure tlbExitClick(Sender: TObject);
procedure ReportGetValue(const ParName: String;
var ParValue: Variant);
private
procedure InsertRecord(AValue:string);
procedure SetInterface;
{ Private declarations }
public
{ Public declarations }
end;
var
Hrm230_01Form: THrm230_01Form;
implementation
uses SYSDATA, CommFun, Wait;
{$R *.DFM}
procedure THrm230_01Form.SetInterface;
begin
Caption:=GetDBString('HRM23001001'); //员工结构分析
lblCondition.Caption:=GetDBString('HRM23001002'); //分析条件
lblType.Caption:=GetDBString('HRM23001003'); //图表类型
lblShow.Caption:=GetDBString('HRM23001004'); //显示
end;
procedure THrm230_01Form.InsertRecord(AValue:string);
begin
ADODataSet1.Append;
ADODataSet1.FieldByName('R130_001').Value:=AValue; //年龄
ADODataSet1.FieldByName('R130_002').Value:=0; //人数
ADODataSet1.FieldByName('R130_003').Value:=0; //比率
ADODataSet1.Post;
end;
procedure THrm230_01Form.FormCreate(Sender: TObject);
begin
inherited;
ComboBox1.Items.Clear;
ComboBox1.Items.Add(GetDBString('HRM23001005')); //按性别
ComboBox1.Items.Add(GetDBString('HRM23001006')); //按年龄
ComboBox1.Items.Add(GetDBString('HRM23001007')); //按籍贯
ComboBox1.Items.Add(GetDBString('HRM23001008')); //按学历
ComboBox1.Items.Add(GetDBString('HRM23001009')); //按工龄
ComboBox1.ItemIndex:=0;
ComboBox2.Items.Clear;
ComboBox2.Items.Add(GetDBString('HRM23001010')); //柱状图
ComboBox2.Items.Add(GetDBString('HRM23001011')); //圆饼图
ComboBox2.ItemIndex:=0;
ComboBox3.Items.Clear;
ComboBox3.Items.Add(GetDBString('HRM23001012')); //数量
ComboBox3.Items.Add(GetDBString('HRM23001013')); //百分比
ComboBox3.ItemIndex:=0;
ComboBox1Change(ComboBox1);
SetInterface;
end;
procedure THrm230_01Form.ComboBox1Change(Sender: TObject);
var
ACount:Integer;
begin
inherited;
//分析条件
WaitForm.Show;
WaitForm.Update;
//按性别分析
ADODataSet1.Close;
ADODataSet1.FieldDefs.Clear;
ADODataSet1.FieldDefs.Add('R130_001',ftString,30);
ADODataSet1.FieldDefs.Add('R130_002',ftFloat,0);
ADODataSet1.FieldDefs.Add('R130_003',ftFloat,0);
ADODataSet1.CreateDataSet;
ACount:=0;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
if ComboBox1.ItemIndex=0 then
begin
ADOQuery1.SQL.Add('select distinct H150_007 from HRM150 where H150_012=1');
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select count(*) from HRM150 where H150_012=1 and H150_007='+''''+ADOQuery1.Fields[0].Value+'''');
SYSDM.qryQuery.Open;
ACount:=ACount+SYSDM.qryQuery.Fields[0].Value;
ADODataSet1.Append;
ADODataSet1.FieldByName('R130_001').Value:=ADOQuery1.Fields[0].Value;
ADODataSet1.FieldByName('R130_002').Value:=SYSDM.qryQuery.Fields[0].Value;
ADODataSet1.FieldByName('R130_003').Value:=0;
ADODataSet1.Post;
ADOQuery1.Next;
end;
end
//按年龄分析
else if ComboBox1.ItemIndex=1 then
begin
ADOQuery1.SQL.Add('select distinct datediff(''yyyy'',H150_013,date()) from HRM150 where H150_012=1 and H150_013 is not null');
ADOQuery1.Open;
InsertRecord(GetDBString('HRM23001014')); //0~15岁
InsertRecord(GetDBString('HRM23001015')); //16~20岁
InsertRecord(GetDBString('HRM23001016')); //21~25岁
InsertRecord(GetDBString('HRM23001017')); //26~30岁
InsertRecord(GetDBString('HRM23001018')); //31~35岁
InsertRecord(GetDBString('HRM23001019')); //36~40岁
InsertRecord(GetDBString('HRM23001020')); //41~45岁
InsertRecord(GetDBString('HRM23001021')); //46~50岁
InsertRecord(GetDBString('HRM23001022')); //51~55岁
InsertRecord(GetDBString('HRM23001023')); //56~60岁
InsertRecord(GetDBString('HRM23001024')); //61~65岁
InsertRecord(GetDBString('HRM23001025')); //66~70岁
InsertRecord(GetDBString('HRM23001026')); //71~75岁
InsertRecord(GetDBString('HRM23001027')); //76~80岁
while not ADOQuery1.Eof do
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select count(*) from HRM150 where H150_012=1 and datediff(''yyyy'',H150_013,date())='+ADOQuery1.Fields[0].AsString);
SYSDM.qryQuery.Open;
ACount:=ACount+SYSDM.qryQuery.Fields[0].Value;
if ADOQuery1.Fields[0].Value<=15 then ADODataSet1.Locate('R130_001',GetDBString('HRM23001014'),[]) //0~15岁
else if ADOQuery1.Fields[0].Value<=20 then ADODataSet1.Locate('R130_001',GetDBString('HRM23001015'),[]) //16~20岁
else if ADOQuery1.Fields[0].Value<=25 then ADODataSet1.Locate('R130_001',GetDBString('HRM23001016'),[]) //21~25岁
else if ADOQuery1.Fields[0].Value<=30 then ADODataSet1.Locate('R130_001',GetDBString('HRM23001017'),[]) //26~30岁
else if ADOQuery1.Fields[0].Value<=35 then ADODataSet1.Locate('R130_001',GetDBString('HRM23001018'),[]) //31~35岁
else if ADOQuery1.Fields[0].Value<=40 then ADODataSet1.Locate('R130_001',GetDBString('HRM23001019'),[]) //36~40岁
else if ADOQuery1.Fields[0].Value<=45 then ADODataSet1.Locate('R130_001',GetDBString('HRM23001020'),[]) //41~45岁
else if ADOQuery1.Fields[0].Value<=50 then ADODataSet1.Locate('R130_001',GetDBString('HRM23001021'),[]) //46~50岁
else if ADOQuery1.Fields[0].Value<=55 then ADODataSet1.Locate('R130_001',GetDBString('HRM23001022'),[]) //51~55岁
else if ADOQuery1.Fields[0].Value<=60 then ADODataSet1.Locate('R130_001',GetDBString('HRM23001023'),[]) //56~60岁
else if ADOQuery1.Fields[0].Value<=65 then ADODataSet1.Locate('R130_001',GetDBString('HRM23001024'),[]) //61~65岁
else if ADOQuery1.Fields[0].Value<=70 then ADODataSet1.Locate('R130_001',GetDBString('HRM23001025'),[]) //66~70岁
else if ADOQuery1.Fields[0].Value<=75 then ADODataSet1.Locate('R130_001',GetDBString('HRM23001026'),[]) //71~75岁
else if ADOQuery1.Fields[0].Value<=75 then ADODataSet1.Locate('R130_001',GetDBString('HRM23001027'),[]); //76~80岁
ADODataSet1.Edit;
ADODataSet1.FieldByName('R130_002').Value:=ADODataSet1.FieldByName('R130_002').Value+SYSDM.qryQuery.Fields[0].Value; //人数
ADODataSet1.FieldByName('R130_003').Value:=0; //比率
ADODataSet1.Post;
ADOQuery1.Next;
end;
ADODataSet1.First;
while not ADODataSet1.Eof do
begin
if ADODataSet1.FieldByName('R130_002').Value=0 then
ADODataSet1.Delete
else
ADODataSet1.Next;
end;
end
//按籍贯分析
else if ComboBox1.ItemIndex=2 then
begin
ADOQuery1.SQL.Add('select distinct H150_009 from HRM150 where H150_012=1 and H150_009 is not null and H150_009<>''''');
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select count(*) from HRM150 where H150_012=1 and H150_009='+''''+ADOQuery1.Fields[0].Value+'''');
SYSDM.qryQuery.Open;
ACount:=ACount+SYSDM.qryQuery.Fields[0].Value;
ADODataSet1.Append;
ADODataSet1.FieldByName('R130_001').Value:=ADOQuery1.Fields[0].Value; //籍贯
ADODataSet1.FieldByName('R130_002').Value:=SYSDM.qryQuery.Fields[0].Value; //人数
ADODataSet1.FieldByName('R130_003').Value:=0; //比率
ADODataSet1.Post;
ADOQuery1.Next;
end;
end
//按学历分析
else if ComboBox1.ItemIndex=3 then
begin
ADOQuery1.SQL.Add('select distinct H150_022 from HRM150 where H150_012=1 and H150_022 is not null and H150_022<>''''');
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select count(*) from HRM150 where H150_012=1 and H150_022='+''''+ADOQuery1.Fields[0].Value+'''');
SYSDM.qryQuery.Open;
ACount:=ACount+SYSDM.qryQuery.Fields[0].Value;
ADODataSet1.Append;
ADODataSet1.FieldByName('R130_001').Value:=ADOQuery1.Fields[0].Value; //学历
ADODataSet1.FieldByName('R130_002').Value:=SYSDM.qryQuery.Fields[0].Value; //人数
ADODataSet1.FieldByName('R130_003').Value:=0; //比率
ADODataSet1.Post;
ADOQuery1.Next;
end;
end
//按工龄分析
else if ComboBox1.ItemIndex=4 then
begin
ADOQuery1.SQL.Add('select distinct datediff(''yyyy'',H150_011,date()) from HRM150 where H150_012=1');
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select count(*) from HRM150 where H150_012=1 and datediff(''yyyy'',H150_011,date())='+ADOQuery1.Fields[0].AsString);
SYSDM.qryQuery.Open;
ACount:=ACount+SYSDM.qryQuery.Fields[0].Value;
ADODataSet1.Append;
ADODataSet1.FieldByName('R130_001').Value:=ADOQuery1.Fields[0].AsString+GetDBString('HRM23001028'); //年 //工龄
ADODataSet1.FieldByName('R130_002').Value:=SYSDM.qryQuery.Fields[0].Value; //人数
ADODataSet1.FieldByName('R130_003').Value:=0; //比率
ADODataSet1.Post;
ADOQuery1.Next;
end;
end;
ADODataSet1.First;
while not ADODataSet1.Eof do
begin
ADODataSet1.Edit;
ADODataSet1.FieldByName('R130_003').Value:=(100*ADODataSet1.FieldByName('R130_002').Value)/Acount; //比率
ADODataSet1.Post;
ADODataSet1.Next;
end;
WaitForm.Close;
end;
procedure THrm230_01Form.ComboBox3Change(Sender: TObject);
begin
inherited;
//显示 & 图表类型
case ComboBox3.ItemIndex of
0:begin
DBChart1.Legend.TextStyle:=ltsLeftValue;
if ComboBox2.ItemIndex=0 then
begin
Series1.Active:=True;
Series2.Active:=False;
Series1.Marks.Style:=smsLabelValue;
end else
begin
Series1.Active:=False;
Series2.Active:=True;
Series2.Marks.Style:=smsLabelValue;
end;
end;
1:begin
DBChart1.Legend.TextStyle:=ltsRightPercent;
if ComboBox2.ItemIndex=0 then
begin
Series1.Active:=True;
Series2.Active:=False;
Series1.Marks.Style:=smsLabelPercent;
end else
begin
Series1.Active:=False;
Series2.Active:=True;
Series2.Marks.Style:=smsLabelPercent;
end;
end;
end;
end;
procedure THrm230_01Form.tlbPrintClick(Sender: TObject);
var
AfrReport:TfrReport;
begin
inherited;
//打印
with TBitmap.Create do
try
Width:=DBChart1.Width;
Height:=DBChart1.Height;
DBChart1.BufferedDisplay:=False;
DBChart1.Draw(Canvas,Rect(0,0,Width,Height));
DBChart1.BufferedDisplay:=True;
SaveToFile(ASystemPath+'Report\REP230.bmp');
finally
Free;
end;
AfrReport:=TfrReport.Create(nil);
try
PreparedReport(ADODataSet1,AReportName,AfrReport);
SYSDM.frDBDataSet1.DataSet:=ADODataSet1;
ADODataSet1.DisableControls;
TfrPictureView(SYSDM.frReport2.FindObject('Picture1')).Picture.LoadFromFile(ASystemPath+'Report\REP230.bmp');
SYSDM.frReport2.ShowReport;
ADODataSet1.EnableControls;
finally
ADODataSet1.EnableControls;
SYSDM.frReport2.Clear;
// AfrReport.Free;
if FileExists(ASystemPath+'Report\REP230.bmp') then DeleteFile(ASystemPath+'Report\REP230.bmp');
end;
end;
procedure THrm230_01Form.tlbExitClick(Sender: TObject);
begin
inherited;
//退出
Close;
end;
procedure THrm230_01Form.ReportGetValue(const ParName: String;
var ParValue: Variant);
begin
inherited;
if ParName='USENM' then ParValue:=AUserName
else if ParName='PRNDT' then ParValue:=GetDBString('COM00006006') //列印日期
else if ParName='PRNNM' then ParValue:=GetDBString('COM00006007') //列印人員
else if ParName='REPNM' then ParValue:=AReportTitle
else if ParName='R130_001' then ParValue:=GetDBString('HRM23001029') //项目
else if ParName='R130_002' then ParValue:=GetDBString('HRM23001030') //数量
else if ParName='R130_003' then ParValue:=GetDBString('HRM23001031') //比率
end;
initialization
RegisterClass(THrm230_01Form);
finalization
UnRegisterClass(THrm230_01Form);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -