📄 gzlr_unit.~pas
字号:
unit gzlr_Unit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, DBNavPlus, Grids, DBGridEh, DB,
DBTables, CalcExpress, PrnDbgeh, WinSkinData, ComCtrls, StrUtils,
Animate, GIFCtrl, Mask, RzStatus, printers, DJPrint, ToolEdit, RzEdit,
RzPrgres, RzDBProg, RzDBStat;
type
Tgzlr = class(TForm)
Table2: TTable;
DataSource2: TDataSource;
CalcExpress1: TCalcExpress;
Panel1: TPanel;
DBGridEh1: TDBGridEh;
Panel2: TPanel;
Button1: TButton;
dbgehp1: TPrintDBGridEh;
Button3: TButton;
sb1: TStatusBar;
table1: TQuery;
q_qj: TQuery;
DataSource3: TDataSource;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
cb_bz: TComboBox;
cb_fc: TComboBox;
cb_dw: TComboBox;
tb_dw: TTable;
tb_bm: TTable;
tb_bz: TTable;
Button2: TButton;
Button4: TButton;
lab_xs: TLabel;
RxGIFAnimator1: TRxGIFAnimator;
cb_yuefen: TComboBox;
tb_yuefen: TTable;
Label4: TLabel;
Panel3: TPanel;
Splitter1: TSplitter;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit7: TDBEdit;
DBEdit8: TDBEdit;
DBEdit9: TDBEdit;
DBEdit10: TDBEdit;
CheckBox1: TCheckBox;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
Label26: TLabel;
DBEdit12: TDBEdit;
DBEdit20: TDBEdit;
DBEdit21: TDBEdit;
DBEdit22: TDBEdit;
DBEdit23: TDBEdit;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
TabSheet3: TTabSheet;
Label22: TLabel;
Label27: TLabel;
Label28: TLabel;
CheckBox4: TCheckBox;
Label29: TLabel;
DBEdit25: TDBEdit;
rzt: TRzClockStatus;
tb_mz: TTable;
dbc_mz: TDBComboBox;
dbc_xb: TDBComboBox;
dbc_zzmm: TDBComboBox;
dbc_jszw: TDBComboBox;
tb_jszw: TTable;
dbc_zw: TDBComboBox;
tb_zw: TTable;
dbc_rysf: TDBComboBox;
dbc_dfyh: TDBComboBox;
tb_dfyh: TTable;
dbc_sfff: TDBComboBox;
dbc_whcd: TDBComboBox;
tb_whcd: TTable;
dbc_xl: TDBComboBox;
dbc_byxx: TDBComboBox;
tb_byxx: TTable;
Label30: TLabel;
dbc_zy: TDBComboBox;
tb_zy: TTable;
DataSource1: TDataSource;
Button5: TButton;
p: TPrinterSetupDialog;
values: TMemo;
q_vars: TDBMemo;
vars: TMemo;
qj_memo: TDBMemo;
dateedit1: TRzDateTimeEdit;
dateedit2: TRzDateTimeEdit;
dateedit3: TRzDateTimeEdit;
Label31: TLabel;
dbc_gw: TDBComboBox;
tb_gw: TTable;
DBM_ll: TDBMemo;
Label32: TLabel;
procedure Button1Click(Sender: TObject);
procedure DBGridEh1ColumnsUpdateData(Sender: TObject;
var Text: string; var Value: Variant; var UseText, Handled: Boolean);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
procedure DBGridEh1Exit(Sender: TObject);
procedure DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
AFont: TFont; var Background: TColor; State: TGridDrawState);
procedure DBGridEh1KeyPress(Sender: TObject; var Key: Char);
procedure Table2AfterScroll(DataSet: TDataSet);
procedure cb_dwChange(Sender: TObject);
procedure cb_fcChange(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure cb_yuefenChange(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
procedure CheckBox3Click(Sender: TObject);
procedure CheckBox4Click(Sender: TObject);
procedure dbc_dfyhChange(Sender: TObject);
procedure dbc_jszwChange(Sender: TObject);
procedure dbc_zwChange(Sender: TObject);
procedure dbc_xlChange(Sender: TObject);
procedure dbc_byxxChange(Sender: TObject);
procedure dbc_zyChange(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure DateEdit2Change(Sender: TObject);
procedure rdte_rq1Change(Sender: TObject);
procedure dateedit3Change(Sender: TObject);
procedure dbc_jszwExit(Sender: TObject);
procedure dbc_zwExit(Sender: TObject);
procedure dbc_whcdChange(Sender: TObject);
procedure dbc_whcdExit(Sender: TObject);
procedure dbc_byxxExit(Sender: TObject);
procedure dbc_zyExit(Sender: TObject);
procedure dbc_gwChange(Sender: TObject);
procedure dbc_gwExit(Sender: TObject);
procedure dbc_xlExit(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
aa: real; //参与计算的公用变量
bb: integer;
dybb_bz: integer; //打印报表标志
end;
var
gzlr: Tgzlr;
gzlrbz: integer;
gzlrshezhi: integer;
chuqin: integer;
implementation
uses Unit1, rl_wait_Unit;
{$R *.dfm}
procedure Tgzlr.Button1Click(Sender: TObject);
var args: array[0..150] of extended; // array of arguments - variable values
i, j: integer;
ASs: array[0..150] of extended;
bSs: array[0..150] of string;
qj_gongshi, ME: string;
qj_chazhao: integer;
begin
// form2.Caption := form2.Caption + ' ' + dbgrideh1.Columns[bb - 1].FieldName; //dbgrideh1.Columns[bb].FieldName;
table1.First;
for i := 1 to 30 do
table1.Next;
with table1 do
while not eof do
begin
// showmessage(inttostr(table1.RecNo)+' '+floattostr(aa)+' '+inttostr(bb));
if table2[table1.FieldByName('gzdm').AsString] = null then
ASS[TABLE1.RecNo] := 0
else
ASS[TABLE1.RecNo] := table2[table1.FieldByName('gzdm').AsString];
bSS[TABLE1.RecNo] := table1['gzdm'];
TABLE1.Next;
end;
//form2.Caption := form2.Caption + ' ' + FLOATTOSTR(ass[1]);
TABLE1.First;
for i := 1 to 30 do
table1.Next;
with table1 do
while not eof do
begin
//为通用公式计算过程
if table1['biaozhi'] = 1 then
begin
vars.Lines.Clear;
vars.Lines.AddStrings(q_vars.Lines);
// showmessage('dddddddddddd');
Values.Lines.Clear;
for i := 0 to Vars.Lines.Count - 1 do
begin
// showmessage(INTTOSTR(I));
if uppercase(vars.Lines.Strings[i]) = uppercase('chuqin') then
Values.Lines.Add(inttostr(chuqin))
else
if uppercase(vars.Lines.Strings[i]) = uppercase(dbgrideh1.Columns[dbgrideh1.col - 1].FieldName) then
begin
//
Values.Lines.Add(floattostr(aa))
end
else
begin
for j := 0 to 150 do
begin
if vars.Lines.Strings[i] = bss[j] then
begin
// SHOWMESSAGE(vars.Lines.Strings[i]);
// showmessage(floattostr(aSS[j]));
Values.Lines.Add(floattostr(aSS[j]));
end
end;
//Values.Lines.Add(floattostr(ASS[TABLE1.RecNo]));
end;
end;
// ME:='VARS='+inttostr(vars.Lines.Count)+' VALUES='+inttostr(values.Lines.COUNT)+' ;;;'+table1.FieldByName('XSMC').AsString;
//SHOWMESSAGE('aa');
if (Vars.Lines.Count = Values.Lines.Count) then
begin
//set expression to calculate
CalcExpress1.Formula := table1['gongshi']; ;
// set used variables list
CalcExpress1.Variables := Vars.Lines;
// prepare arguments
// SetLength(args,Values.Lines.Count);
for i := 0 to Values.Lines.Count - 1 do
args[i] := StrToFloat(Values.Lines[i]);
// calculate expression
ASS[TABLE1.RecNo] := round((CalcExpress1.calc(args) * 100)) / 100;
table2.Edit;
if round(CalcExpress1.calc(args) * 100) / 100 = 0 then
table2[table1.FieldByName('gzdm').AsString] := null
else
table2[table1.FieldByName('gzdm').AsString] := round(CalcExpress1.calc(args) * 100) / 100;
//showmessage(table1.FieldByName('gzdm').AsString+' '+ floattostr(args[0]));
end
else
MessageDlg('变量数与变量值数应相同!', mtInformation, [mbOk], 0);
end;
//通用计算公式结束
// showmessage(inttostr(table1.RecNo)+' '+inttostr(Vars.Lines.Count)+' '+inttostr(Values.Lines.Count));
//{
//以下为计算区间公式
if table1['biaozhi'] = 4 then
begin
qj_chazhao := 0;
vars.Lines.Clear;
q_qj.Open;
q_qj.First;
with q_qj do
while not eof do
begin
if qj_chazhao = 0 then
if uppercase(dbgrideh1.Columns[dbgrideh1.col - 1].FieldName) = UPPERCASE(qj_memo.Lines.Strings[0]) then
begin
if (q_qj['gzdm'] = table1['gzdm']) and (aa >= q_qj['min_x']) and (aa <= q_qj['max_x']) then
begin
qj_chazhao := 1;
vars.Lines.AddStrings(qj_memo.Lines);
qj_gongshi := q_qj['gongshi'];
end;
end
else
begin
if table2[qj_memo.Lines.Strings[0]] = null then
begin
if (q_qj['gzdm'] = table1['gzdm']) and (0 >= q_qj['min_x']) and (0 <= q_qj['max_x']) then
begin
qj_chazhao := 1;
vars.Lines.AddStrings(qj_memo.Lines);
qj_gongshi := q_qj['gongshi'];
end;
end
else
begin
if (q_qj['gzdm'] = table1['gzdm']) and (table2[qj_memo.Lines.Strings[0]] >= q_qj['min_x']) and (table2[qj_memo.Lines.Strings[0]] <= q_qj['max_x']) then
begin
qj_chazhao := 1;
vars.Lines.AddStrings(qj_memo.Lines);
qj_gongshi := q_qj['gongshi'];
end;
end;
end;
next;
end;
q_qj.close;
if qj_chazhao = 0 then
begin
showmessage('输入的区间变量数据有误或区间公式设置有误,请返回查找!');
vars.Lines.Clear;
end
else
begin
Values.Lines.Clear;
for i := 0 to Vars.Lines.Count - 1 do
begin
if uppercase(vars.Lines.Strings[i]) = uppercase('chuqin') then
Values.Lines.Add(inttostr(chuqin))
else
if uppercase(vars.Lines.Strings[i]) = uppercase(dbgrideh1.Columns[dbgrideh1.col - 1].FieldName) then
begin
//showmessage('sdjfhsdkf');
Values.Lines.Add(floattostr(aa))
end
else
begin
for j := 0 to 150 do
begin
if vars.Lines.Strings[i] = bss[j] then
begin
// showmessage(floattostr(ass[TABLE1.RecNo]));
Values.Lines.Add(floattostr(aSS[j]));
end
end;
//Values.Lines.Add(floattostr(ASS[TABLE1.RecNo]));
end;
end;
// ME:='VARS='+inttostr(vars.Lines.Count)+' VALUES='+inttostr(values.Lines.COUNT)+FLOATTOSTR(table2[table1.FieldByName('gzdm').AsString]);
// SHOWMESSAGE(ME);
if (Vars.Lines.Count = Values.Lines.Count) then
begin
//set expression to calculate
CalcExpress1.Formula := qj_gongshi;
// set used variables list
CalcExpress1.Variables := Vars.Lines;
// prepare arguments
// SetLength(args,Values.Lines.Count);
for i := 0 to Values.Lines.Count - 1 do
args[i] := StrToFloat(Values.Lines[i]);
// calculate expression
ASS[TABLE1.RecNo] := round((CalcExpress1.calc(args) * 100)) / 100;
table2.Edit;
if round(CalcExpress1.calc(args) * 100) / 100 = 0 then
table2[table1.FieldByName('gzdm').AsString] := null
else
table2[table1.FieldByName('gzdm').AsString] := round(CalcExpress1.calc(args) * 100) / 100;
//showmessage('sdjfhsdkf');
end
else
MessageDlg('变量列表与变量对应值的列表不符!', mtInformation, [mbOk], 0);
end;
end;
//区间公式计算结束
//}
table1.Next;
end;
end;
procedure Tgzlr.DBGridEh1ColumnsUpdateData(Sender: TObject;
var Text: string; var Value: Variant; var UseText, Handled: Boolean);
begin
if value = EmptyStr then
aa := 0
else
aa := value;
bb := dbgrideh1.col;
button1.Click;
if aa = 0 then
text := EmptyStr;
end;
procedure Tgzlr.FormClose(Sender: TObject; var Action: TCloseAction);
begin
with table2 do
if State = dsEdit then
Post;
// table1.Close;
// table2.Close;
end;
procedure Tgzlr.Button3Click(Sender: TObject);
begin
if dybb_bz > 0 then
begin
dbgehp1.PageHeader.CenterText.Clear;
dbgehp1.Pagefooter.LeftText.Clear;
dbgehp1.Title.Clear;
dbgehp1.Pagefooter.LeftText.Add('审核人: 制表人: ' + ' 打印日期:' + FormatDateTime('yyyy年mm月dd日', Date()));
if dybb_bz = 1 then
begin
dbgehp1.Title.Add('单位汇总' + ' ' + copy(pchar(cb_yuefen.Text), 1, strlen(pchar(cb_yuefen.text)) - 6));
dbgehp1.PageHeader.CenterText.Add(cb_dw.text + ' 薪资报表');
end;
if dybb_bz = 2 then
begin
dbgehp1.PageHeader.CenterText.Add(cb_dw.text + ' ' + cb_fc.text + ' 薪资报表');
dbgehp1.Title.Add(copy(pchar(cb_yuefen.Text), 1, strlen(pchar(cb_yuefen.text)) - 6));
end;
if dybb_bz = 3 then
begin
dbgehp1.PageHeader.CenterText.Add(cb_dw.text + ' ' + cb_fc.Text + ' 薪资报表');
dbgehp1.Title.Add(cb_bz.Text + ' ' + copy(pchar(cb_yuefen.Text), 1, strlen(pchar(cb_yuefen.text)) - 6));
end;
//bgehp1.BeforeGridText.Add('单位:' + cb_dw.text + ' ' + cb_fc.text + ' ' + cb_bz.Text + ' ' + FormatDateTime('yyyy年mm月dd日 ', Date()));
dbgehp1.Preview;
end;
end;
procedure Tgzlr.FormCreate(Sender: TObject);
var
i: integer;
begin
dbc_gw.Items.Clear;
dbc_gw.Items.Add('无');
tb_gw.Open;
tb_gw.First;
with tb_gw do
while not eof do
begin
dbc_gw.Items.Add(tb_gw['gwmc']);
next;
end;
tb_gw.close;
//
dbc_mz.Items.Clear;
dbc_mz.Items.Add('无');
tb_mz.Open;
tb_mz.First;
with tb_mz do
while not eof do
begin
dbc_mz.Items.Add(tb_mz['mzmc']);
next;
end;
tb_mz.close;
//
dbc_jszw.Items.Clear;
dbc_jszw.Items.Add('无');
tb_jszw.Open;
tb_jszw.First;
with tb_jszw do
while not eof do
begin
dbc_jszw.Items.Add(tb_jszw['jszwmc']);
next;
end;
tb_jszw.close;
//
dbc_zw.Items.Clear;
dbc_zw.Items.Add('无');
tb_zw.Open;
tb_zw.First;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -