📄 gsgrhb.pas
字号:
unit GSGRHB;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Mask, DBCtrls, ExtCtrls, Grids, DBGrids, Buttons, ComCtrls,
ActnList, Spin;
type
TFrmGrhb = class(TForm)
Panel3: TPanel;
GroupBox1: TGroupBox;
DBGrid1: TDBGrid;
Panel2: TPanel;
BtnAppend: TBitBtn;
BtnEdit: TBitBtn;
BtnDelete: TBitBtn;
BtnSure: TBitBtn;
BtnCancel: TBitBtn;
BtnExit: TBitBtn;
GroupBox2: TGroupBox;
Label7: TLabel;
Label8: TLabel;
Label19: TLabel;
Label1: TLabel;
CbGzxm: TComboBox;
DTPDate: TDateTimePicker;
GroupBox5: TGroupBox;
EditBz: TEdit;
EditGs: TEdit;
Button1: TButton;
Button2: TButton;
Label2: TLabel;
TVFzLbxx: TTreeView;
Label5: TLabel;
Label3: TLabel;
CbSblx: TComboBox;
EditBm: TEdit;
procedure FormShow(Sender: TObject);
procedure BtnAppendClick(Sender: TObject);
procedure BtnEditClick(Sender: TObject);
procedure BtnDeleteClick(Sender: TObject);
procedure BtnSureClick(Sender: TObject);
procedure BtnCancelClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure TVFzLbxxChange(Sender: TObject; Node: TTreeNode);
procedure TVFzLbxxChanging(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
private
MyGzxm : TStrings;
procedure EditToTable();
public
MyStatus : string;
procedure TableToEdit();
procedure ShowMyButton();
procedure ShowTree();
end;
type
PMyRec = ^TMyRec;
TMyRec = record
FLBbh:integer;
Fbmbh: String;
FGH: String;
end;
var
FrmGrhb: TFrmGrhb;
implementation
uses DGSDM, MyCommon, GSMAIN;
{$R *.DFM}
procedure TFrmGrhb.ShowTree();
var
RootNode: TTreeNode;
MyTreeNode1: TTreeNode;
MyTreeNode2: TTreeNode;
MyRecPtr: PMyRec;
begin
with DM_GSGL do
begin
if QryTemp.Active=true then
QryTemp.Close;
QryTemp.SQL.Clear;
QryTemp.SQL.Add('select * from 轮班信息');
QryTemp.Open;
if QryTemp1.Active=true then
QryTemp1.Close;
QryTemp1.SQL.Clear;
QryTemp1.SQL.Add('select * from 轮班分组信息');
QryTemp1.SQL.Add('where 分组管理员工号 like '+''''+'%'+userName+'%'+'''');
QryTemp1.Open;
end;
with TVFzLbxx.Items do
begin
BeginUpdate;
Clear; { remove any existing nodes }
New(MyRecPtr);
MyRecPtr^.FLBbh := -1;
MyRecPtr^.Fbmbh := 'NOBM';
MyRecPtr^.FGH := 'NO';
RootNode := AddObject(nil,'所有轮班',MyRecPtr); { Add a root node }
while (not DM_GSGL.QryTemp.Eof) do
begin
New(MyRecPtr);
MyRecPtr^.FLBbh := -1;
MyRecPtr^.Fbmbh := 'NOBM';
MyRecPtr^.FGH := 'NO';
MyTreeNode1 := AddChildObject(RootNode,DM_GSGL.QryTemp.FieldByName('轮班名称').AsString,MyRecPtr);
DM_GSGL.QryTemp1.First;
while (not DM_GSGL.QryTemp1.Eof) do
begin
if (DM_GSGL.QryTemp.FieldByName('轮班编号').AsString = DM_GSGL.QryTemp1.FieldByName('轮班编号').AsString) Then
begin
New(MyRecPtr);
MyRecPtr^.FLBbh := -1;
MyRecPtr^.Fbmbh := 'NOBM';
MyRecPtr^.FGH := 'NO';
MyTreeNode2:=AddChildObject(MyTreeNode1,DM_GSGL.QryTemp1.FieldByName('分组名称').AsString,MyRecPtr);
With DM_GSGL do
begin
if (QryMeber.Active = True) Then
QryMeber.Close;
QryMeber.Params[0].AsInteger := QryTemp1.FieldByName('分组编号').AsInteger;
QryMeber.Open;
while (not QryMeber.Eof) do
begin
New(MyRecPtr);
MyRecPtr^.FLBBH := QryTemp1.FieldByName('轮班编号').AsInteger;
MyRecPtr^.Fbmbh := QryMeber.FieldByName('部门编号').AsString;
MyRecPtr^.FGH := QryMeber.FieldByName('工号').AsString;
AddChildObject(MyTreeNode2,QryMeber.FieldByName('工号').AsString+'-'+QryMeber.FieldByName('姓名').AsString,MyRecPtr);
QryMeber.Next;
end;
end;
end;
DM_GSGL.QryTemp1.Next;
end;
DM_GSGL.QryTemp.Next;
end;
EndUpdate;
end;
TVFzLbxx.FullCollapse;
end;
procedure TFrmGrhb.FormShow(Sender: TObject);
begin
DateSeparator := '-';
DTPDate.DateTime := Now;
MyStatus := '浏览';
ShowTree;
TVFzLbxx.Selected:=TVFzLbxx.Items.GetFirstNode;
end;
procedure TFrmGrhb.TableToEdit();
var
sstring:string;
begin
with DM_GSGL do
begin
CbGzxm.ItemIndex:=MyGzxm.IndexOf(QryGsDay.FieldByName('部门工作项目编号').AsString);
sstring := QryGsDay.FieldByName('日期').AsString;
if (Length(sstring)>0) Then
DTPDate.DateTime := strtodate(copy(sstring,1,4)+'-'+copy(sstring,5,2)+'-'+copy(sstring,7,2));
EditGs.Text := QryGsDay.FieldByName('工时').AsString;
EditBz.Text := QryGsDay.FieldByName('备注').AsString;
CbSblx.ItemIndex:=QryGsDay.FieldByName('上班类型').AsInteger-1;
end;
end;
procedure TFrmGrhb.EditToTable();
begin
with DM_GSGL do
begin
QryGsDay.FieldByName('工号').AsString := PMyRec(TVFzLbxx.Selected.Data)^.FGH;
QryGsDay.FieldByName('日期').AsString := FormatDateTime('yyyymmdd',DTPDate.Date);
QryGsDay.FieldByName('部门工作项目编号').AsString := MyGzxm[CbGzxm.ItemIndex];
QryGsDay.FieldByName('工时').AsFloat := StrToFloat(EditGs.Text);
QryGsDay.FieldByName('备注').AsString := EditBz.Text;
QryGsDay.FieldByName('工作项目').AsString := CbGzxm.Text;
if CbSblx.ItemIndex>=0 then
QryGsDay.FieldByName('上班类型').AsInteger := CbSblx.ItemIndex+1;
end;
end;
procedure TFrmGrhb.ShowMyButton();
begin
if (MyStatus = '浏览') then
begin
CbGzxm.Enabled := False;
CbSblx.Enabled := False;
EditGs.ReadOnly := True;
EditBz.ReadOnly := True;
BtnExit.Enabled := True;
BtnAppend.Enabled := True;
if (DM_GSGL.QryGsDay.Eof) and (DM_GSGL.QryGsDay.Bof=True) then
begin
BtnEdit.Enabled := False;
BtnDelete.Enabled := False;
end
else
begin
BtnEdit.Enabled := True;
BtnDelete.Enabled := True;
end;
BtnSure.Enabled := False;
BtnCancel.Enabled := False;
end
else
begin
DTPDate.Enabled := True;
CbGzxm.Enabled := True;
CbSblx.Enabled := True;
EditGs.ReadOnly := False;
EditBz.ReadOnly := False;
BtnAppend.Enabled := False;
BtnEdit.Enabled := False;
BtnDelete.Enabled := False;
BtnExit.Enabled := False;
BtnSure.Enabled := True;
BtnCancel.Enabled := True;
end;
end;
procedure TFrmGrhb.BtnAppendClick(Sender: TObject);
begin
if (PMyRec(TVFzLbxx.Selected.Data)^.FGH = 'NO') then
begin
MessageDlg('请先在人员列表中选择人员。',mtError, [mbYes],0);
exit;
end;
if CbGzxm.Items.Count=0 then
begin
MessageDlg('请先维护本部门工作项目。',mtError, [mbYes],0);
exit;
end;
CbSblx.ItemIndex:=0;
DTPDate.DateTime := Now;
EditGs.Text := '4.0';
EditBz.Text := '';
CbGzxm.ItemIndex := 0;
MyStatus := '增加';
ShowMyButton;
DTPDate.SetFocus;
end;
procedure TFrmGrhb.BtnEditClick(Sender: TObject);
begin
if (DM_GSGL.QryGsDay.FieldByName('日期').AsString = '') then
begin
MessageDlg('没有工时汇报记录可编辑。',mtError, [mbYes],0);
exit;
end;
MyStatus := '编辑';
ShowMyButton;
DTPDate.SetFocus;
end;
procedure TFrmGrhb.BtnDeleteClick(Sender: TObject);
begin
if (DM_GSGL.QryGsDay.FieldByName('日期').AsString = '') then
begin
MessageDlg('没有工时汇报记录可删除。',mtError, [mbYes],0);
exit;
end;
if MessageDlg('确认删除该工时汇报信息吗?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
DM_GSGL.QryGsDay.Delete;
DM_GSGL.QryGsDay.CommitUpdates;
end;
end;
procedure TFrmGrhb.BtnSureClick(Sender: TObject);
var
mycount:integer;
begin
with DM_GSGL do
begin
if QryTemp.Active=true then
QryTemp.Close;
QryTemp.SQL.Clear;
QryTemp.SQL.Add('SELECT count(工号) mycount FROM 每日工时');
QryTemp.SQL.Add('WHERE 工号=:pGh and 日期=:prq and 部门工作项目编号=:pbh');
QryTemp.Params[0].AsString := PMyRec(TVFzLbxx.Selected.Data)^.FGH;
QryTemp.Params[1].AsString := FormatDateTime('yyyymmdd',FrmGrhb.DTPDate.Date);
QryTemp.Params[2].AsString := MyGzxm[CbGzxm.ItemIndex];
QryTemp.Open;
if QryTemp.Eof then
mycount:=0
else
mycount:=QryTemp.FieldByName('mycount').AsInteger;
end;
if (MyStatus = '增加') then
begin
if (mycount>0) then
if MessageDlg('已有记录,再增加吗?',mtConfirmation, [mbYes, mbNo], 0) = mrNo then
exit;
with DM_GSGL.QryGsDay do
begin
Append;
EditToTable;
Post;
CommitUpdates;
DisableControls;
Close;
ParamByName('pGh').AsString := PMyRec(TVFzLbxx.Selected.Data)^.FGH;
ParamByName('prq').AsString := FormatDateTime('yyyymmdd',DTPDate.Date);
Open;
Last;
EnableControls;
end;
end;
if (MyStatus = '编辑') then
begin
DM_GSGL.QryGsDay.Edit;
EditToTable;
DM_GSGL.QryGsDay.Post;
DM_GSGL.QryGsDay.CommitUpdates;
end;
MyStatus := '浏览';
ShowMyButton;
end;
procedure TFrmGrhb.BtnCancelClick(Sender: TObject);
begin
TableToEdit;
MyStatus := '浏览';
ShowMyButton;
end;
procedure TFrmGrhb.FormClose(Sender: TObject; var Action: TCloseAction);
begin
with DM_GSGL do
begin
if (QryGsDay.Active = True) Then
QryGsDay.Close;
if (QryGzxmByBm.Active = True) then
QryGzxmByBm.Close;
end;
end;
procedure TFrmGrhb.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
UserSelect : Word;
begin
if (MyStatus <> '浏览') then
begin
UserSelect := MessageDlg('是否保存改动的工时汇报信息?',mtConfirmation, [mbYes, mbNo, mbCancel],0);
case UserSelect of
mrYes: BtnSureClick(Sender);
mrNo: BtnCancelClick(Sender);
mrCancel: CanClose := False ;
end;
end;
end;
procedure TFrmGrhb.Button1Click(Sender: TObject);
begin
if (MyStatus <> '浏览') then
EditGs.Text:=FloatToStr(StrToFloat(EditGs.Text)+0.5);
end;
procedure TFrmGrhb.Button2Click(Sender: TObject);
begin
if (MyStatus <> '浏览') then
EditGs.Text:=FloatToStr(StrToFloat(EditGs.Text)-0.5);
end;
procedure TFrmGrhb.TVFzLbxxChange(Sender: TObject; Node: TTreeNode);
begin
with DM_GSGL do
begin
if QryTemp.Active=true then
QryTemp.Close;
QryTemp.SQL.Clear;
QryTemp.SQL.Add('SELECT 部门名称 FROM 部门信息');
QryTemp.SQL.Add('WHERE 部门编号=:pbh');
QryTemp.Params[0].AsString := Copy(PMyRec(TVFzLbxx.Selected.Data)^.Fbmbh,1,2);
QryTemp.Open;
EditBm.Text:=QryTemp.FieldByName('部门名称').asstring;
end;
MyGzxm:=TStringList.Create;
CbGzxm.Items.Clear;
with DM_GSGL do
begin
if QryGzxmByBm.Active=true then
QryGzxmByBm.Close;
QryGzxmByBm.Prepare;
QryGzxmByBm.ParamByName('pbmbh').AsString:=Copy(PMyRec(TVFzLbxx.Selected.Data)^.Fbmbh,1,2);
QryGzxmByBm.Open;
while (not QryGzxmByBm.Eof) do
begin
CbGzxm.Items.Add(QryGzxmByBm.FieldByName('部门工作项目名称').AsString);
MyGzxm.Add(QryGzxmByBm.FieldByName('部门工作项目编号').AsString);
QryGzxmByBm.Next;
end;
end;
cbgzxm.itemindex:=-1;
with DM_GSGL do
begin
if (QryGsDay.Active = True) Then
QryGsDay.Close;
QryGsDay.ParamByName('pGh').AsString := PMyRec(TVFzLbxx.Selected.Data)^.FGH;
QryGsDay.ParamByName('prq').AsString := FormatDateTime('yyyymmdd',DTPDate.Date);
QryGsDay.Open;
end;
end;
procedure TFrmGrhb.TVFzLbxxChanging(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
begin
if (MyStatus <> '浏览') then
AllowChange := False;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -