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

📄 ryfz.pas

📁 有需要的同仁载回去慢慢研究
💻 PAS
字号:
unit RYFZ;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Grids, DBGrids, Db, Buttons, ComCtrls;

type
  TFrmRyFz = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    CbDept: TComboBox;
    LbNoLbbh: TListBox;
    Label2: TLabel;
    LbLbbh: TListBox;
    BtnSelect: TBitBtn;
    BtnUnselect: TBitBtn;
    BtnSure: TBitBtn;
    BtnExit: TBitBtn;
    BtnCancel: TBitBtn;
    GroupBox1: TGroupBox;
    TVFzLbxx: TTreeView;
    PFzmc: TPanel;
    procedure CbDeptChange(Sender: TObject);
    procedure BtnSelectClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BtnUnselectClick(Sender: TObject);
    procedure LbNoLbbhClick(Sender: TObject);
    procedure LbLbbhClick(Sender: TObject);
    procedure BtnSureClick(Sender: TObject);
    procedure BtnCancelClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure TVFzLbxxChange(Sender: TObject; Node: TTreeNode);
    procedure TVFzLbxxChanging(Sender: TObject; Node: TTreeNode;
      var AllowChange: Boolean);
    procedure FormShow(Sender: TObject);
  private
    MyStatus : String;
    MyBmnoNoLbdm : TStrings;
    MyBmnoLbdm : TStrings;
    MySourceBmnoLbdm : TStrings;
    procedure InitLbList();
    procedure ShowMyButton();
    { Private declarations }
  public
    { Public declarations }
  end;

type
  PMyRec = ^TMyRec;
  TMyRec = record
    FLbbh: integer;
    FFzbh: Integer;
end;


var
  FrmRyFz: TFrmRyFz;

implementation

uses DGSDM, mycommon;



{$R *.DFM}

procedure TFrmRyFz.InitLbList();
begin
  LbNoLbbh.Items.Clear;
  LbLbbh.Items.Clear;
  With DM_GSGL do
  begin
    if (TVFzLbxx.Selected.Level=1) Then
    begin
      if (QryBmLb.Active = True) Then
        QryBmLb.Close;
      if (CbDept.Items.Count = 0) Then
        QryBmLb.Params[0].AsString := 'nobm'
      else
        QryBmLb.Params[0].AsString := MyGsbm[CbDept.ItemIndex]+'%';
      QryBmLb.Params[1].Asinteger := PMyRec(TVFzLbxx.Selected.Data)^.FLbbh;
      QryBmLb.Open;
      while (not QryBmLb.Eof) do
      begin
        LbNoLbbh.Items.Add(QryBmLb.FieldByName('工号').AsString+'-'+QryBmLb.FieldByName('姓名').AsString
                  + StringOfChar(' ', 11-Length(QryBmLb.FieldByName('姓名').AsString))
                  + QryBmLb.FieldByName('分组名称').AsString);
        QryBmLb.Next;
      end;
    end
    else
    begin
      MyBmnoNoLbdm.Clear;
      MyBmnoLbdm.Clear;
      //产生不属于部门某一分组的所有人员
      if (QryNoLbbh.Active = True) Then
        QryNoLbbh.Close;
      if (CbDept.Items.Count = 0) Then
        QryNoLbbh.Params[0].AsString := 'nobm'
      else
        QryNoLbbh.Params[0].AsString := MyGsbm[CbDept.ItemIndex]+'%';
      QryNoLbbh.Params[1].AsInteger := PMyRec(TVFzLbxx.Selected.Data)^.FFzbh;
      QryNoLbbh.Open;
      while (not QryNoLbbh.Eof) do
      begin
        LbNoLbbh.Items.Add(QryNoLbbh.FieldByName('工号').AsString+'-'+QryNoLbbh.FieldByName('姓名').AsString
                  + StringOfChar(' ', 11-Length(QryNoLbbh.FieldByName('姓名').AsString))
                  + QryNoLbbh.FieldByName('分组名称').AsString);
        MyBmnoNoLbdm.Add(QryNoLbbh.FieldByName('工号').AsString);
        QryNoLbbh.Next;
      end;

      //产生属于部门某一分组的所有人员
      if (QryLbbh.Active = True) Then
        QryLbbh.Close;
      if (CbDept.Items.Count = 0) Then
        QryLbbh.Params[0].AsString := 'a'
      else
        QryLbbh.Params[0].AsString := MyGsbm[CbDept.ItemIndex]+'%';
      QryLbbh.Params[1].AsInteger := PMyRec(TVFzLbxx.Selected.Data)^.FFzbh;
      QryLbbh.Open;
      while (not QryLbbh.Eof) do
      begin
        LbLbbh.Items.Add(QryLbbh.FieldByName('工号').AsString+'-'+QryLbbh.FieldByName('姓名').AsString
                  + StringOfChar(' ', 11-Length(QryLbbh.FieldByName('姓名').AsString)));
        MyBmnoLbdm.Add(QryLbbh.FieldByName('工号').AsString);
        QryLbbh.Next;
      end;
      MySourceBmnoLbdm.Assign(MyBmnoLbdm);
    end;
  end;
end;

procedure TFrmRyFz.CbDeptChange(Sender: TObject);
begin
  InitLbList;
  ShowMyButton;
end;

procedure TFrmRyFz.BtnSelectClick(Sender: TObject);
var
  I:Integer;
begin
  I := LbNoLbbh.Items.Count - 1;
  while I >= 0 do
  begin
    if LbNoLbbh.Selected[i] Then
    begin
      LbLbbh.Items.Insert(0,Copy(LbNoLbbh.Items[I],0,11));
      MyBmnoLbdm.Insert(0,MyBmnoNoLbdm[i]);
      LbNoLbbh.Items.Delete(i);
      MyBmnoNoLbdm.Delete(i);
    end;
    I := I-1;
  end;
  MyStatus := '编辑';
  ShowMyButton;
end;

procedure TFrmRyFz.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i : Integer;
begin
  with DM_GSGL do
  begin
    if (QryTemp.Active = True) Then
      QryTemp.Close;
    if (QryTemp1.Active = True) Then
      QryTemp1.Close;
    if (QryBmLb.Active = True) Then
      QryBmLb.Close;
    if (QryNoLbbh.Active = True) Then
      QryNoLbbh.Close;
    if (QryLbbh.Active = True) Then
      QryLbbh.Close;
  end;
  for i:=0 to TVFzLbxx.Items.Count-1 do
    Dispose(PMyRec(TVFzLbxx.Items[i].Data));
  MyBmnoNoLbdm.Free;
  MyBmnoLbdm.Free;
end;

procedure TFrmRyFz.BtnUnselectClick(Sender: TObject);
var
  I:Integer;
begin
  I := LbLbbh.Items.Count - 1;
  while I >= 0 do
  begin
    if LbLbbh.Selected[i] Then
    begin
      LbNoLbbh.Items.Insert(0,Copy(LbLbbh.Items[I],0,11));
      MyBmnoNoLbdm.Insert(0,MyBmnoLbdm[i]);
      LbLbbh.Items.Delete(i);
      MyBmnoLbdm.Delete(i);
    end;
    I := I-1;
  end;
  MyStatus := '编辑';
  ShowMyButton;
end;

procedure TFrmRyFz.ShowMyButton();
begin
  if (TVFzLbxx.Selected.Level=2) then
  begin
    if (MyStatus='编辑') Then
    begin
      CbDept.Enabled := false;
      BtnSure.Enabled := true;
      BtnCancel.Enabled := true;
      BtnExit.Enabled := false;
    end
    else
    begin
      CbDept.Enabled := true;
      BtnSure.Enabled := false;
      BtnCancel.Enabled := false;
      BtnExit.Enabled := true;
    end;
    if LbNoLbbh.SelCount>=1 Then
      BtnSelect.Enabled := True
    else
      BtnSelect.Enabled := False;
    if LbLbbh.SelCount>=1 Then
      BtnUnSelect.Enabled := True
    else
      BtnUnSelect.Enabled := False;
  end
  else
  begin
    BtnSelect.Enabled := False;
    BtnUnSelect.Enabled := False;
    BtnSure.Enabled := False;
    BtnCancel.Enabled := False;
    BtnExit.Enabled := True;
  end;
end;

procedure TFrmRyFz.LbNoLbbhClick(Sender: TObject);
begin
  ShowMyButton;
end;

procedure TFrmRyFz.LbLbbhClick(Sender: TObject);
begin
  ShowMyButton;
end;

procedure TFrmRyFz.BtnSureClick(Sender: TObject);
var
  I : Integer;
begin
  With DM_GSGL do
  begin
    //扫描原来排当前轮班的人员工号List,如不在MyBmnoLbdm中,则置该工号轮班和分组为NULL
    for I := 0 to MySourceBmnoLbdm.Count - 1 do
    begin
      if (MyBmnoLbdm.IndexOf(MySourceBmnoLbdm[i])=-1) then
      begin  //不在现列表
        if QryTemp.Active=true then
          QryTemp.Close;
        QryTemp.SQL.Clear;
        QryTemp.SQL.Add('UPDATE 员工信息 SET 分组编号=NULL WHERE 工号=:pgh');
        QryTemp.Parambyname('pgh').AsString := MySourceBmnoLbdm[i];
        QryTemp.ExecSql;
      end;
    end;
    //扫描排当前分组的人员工号List,如不在MySourceBmnoLbdm中,则置该工号分组为当前分组
    for I := 0 to MyBmnoLbdm.Count - 1 do
    begin
      if (MySourceBmnoLbdm.IndexOf(MyBmnoLbdm[i])=-1) then
      begin  //不在原来的列表
        if QryTemp.Active=true then
          QryTemp.Close;
        QryTemp.SQL.Clear;
        QryTemp.SQL.Add('UPDATE 员工信息 SET 分组编号=:pfzbh WHERE 工号=:pgh');
        QryTemp.Parambyname('pfzbh').Asinteger := PMyRec(TVFzLbxx.Selected.Data)^.FFzbh;
        QryTemp.Parambyname('pgh').AsString := MyBmnoLbdm[i];
        QryTemp.ExecSql();
      end;
    end;
  end;
  MyStatus := '浏览';
  ShowMyButton;
end;

procedure TFrmRyFz.BtnCancelClick(Sender: TObject);
begin
  InitLbList;
  MyStatus := '浏览';
  ShowMyButton;
end;

procedure TFrmRyFz.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  UserSelect : Word;
begin
  if (MyStatus='编辑') then
  begin
    UserSelect := MessageDlg('是否保存对 '+CbDept.Items[CbDept.ItemIndex]+'-'
      +TVFzLbxx.Selected.Text+' 的修改?',mtConfirmation, [mbYes, mbNo, mbCancel],0);
    case UserSelect of
      mrYes: BtnSureClick(Sender);
      mrNo: BtnCancelClick(Sender);
      mrCancel: CanClose := False ;
    end;
  end;
end;

procedure TFrmRyFz.TVFzLbxxChange(Sender: TObject; Node: TTreeNode);
begin
  InitLbList;
  if (TVFzLbxx.Selected.Level=0) Then
    PFzmc.Caption := TVFzLbxx.Selected.Text
  else
    PFzmc.Caption := TVFzLbxx.Selected.Parent.Text+':'+TVFzLbxx.Selected.Text;
  ShowMyButton;
end;

procedure TFrmRyFz.TVFzLbxxChanging(Sender: TObject; Node: TTreeNode;
  var AllowChange: Boolean);
begin
  if (MyStatus <> '浏览') then
    AllowChange := False;
end;

procedure TFrmRyFz.FormShow(Sender: TObject);
var
  RootNode: TTreeNode;
  MyTreeNode: TTreeNode;
  MyRecPtr: PMyRec;
begin
  with DM_GSGL do
  begin
    if QryTemp.Active=true then
      QryTemp.Close;
    QryTemp.SQL.Clear;
    QryTemp.SQL.Add('select *');
    QryTemp.SQL.Add('from 轮班信息');
    QryTemp.Open;

    if QryTemp1.Active=true then
      QryTemp1.Close;
    QryTemp1.SQL.Clear;
    QryTemp1.SQL.Add('select *');
    QryTemp1.SQL.Add('from 轮班分组信息');
    QryTemp1.SQL.Add('where 分组管理员工号 like '+''''+'%'+userName+'%'+'''');
    QryTemp1.Open;
  end;
  with TVFzLbxx.Items do
  begin
    Clear; { remove any existing nodes }
    New(MyRecPtr);
    MyRecPtr^.FLbbh := -1;
    MyRecPtr^.FFzbh := -1;
    RootNode := AddObject(nil,'所有轮班',MyRecPtr); { Add a root node }
    while (not DM_GSGL.QryTemp.Eof) do
    begin
      New(MyRecPtr);
      MyRecPtr^.FLbbh := DM_GSGL.QryTemp.FieldByName('轮班编号').AsInteger;
      MyRecPtr^.FFzbh := -1;
      MyTreeNode := 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 := DM_GSGL.QryTemp1.FieldByName('轮班编号').AsInteger;
          MyRecPtr^.FFzbh := DM_GSGL.QryTemp1.FieldByName('分组编号').AsInteger;
          AddChildObject(MyTreeNode,DM_GSGL.QryTemp1.FieldByName('分组名称').AsString,MyRecPtr);
        end;
        DM_GSGL.QryTemp1.Next;
      end;
      DM_GSGL.QryTemp.Next;
    end;
  end;
  MyBmnoNoLbdm := TStringList.Create; //For use in InitLbList
  MyBmnoLbdm := TStringList.Create;  //For use in InitLbList
  MySourceBmnoLbdm := TStringList.Create;

  MyStatus := '浏览';
  CbDept.Items.Assign(MyGSNo);
  if (CbDept.Items.Count > 0) Then
    CbDept.ItemIndex := 0;
  TVFzLbxx.Selected := TVFzLbxx.Items.GetFirstNode;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -