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

📄 gsgrhb.pas

📁 有需要的同仁载回去慢慢研究
💻 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 + -