frm_k_jrdjpas.pas

来自「是一个用delphi设计的考勤系统」· PAS 代码 · 共 543 行 · 第 1/2 页

PAS
543
字号
unit Frm_K_JrdjPas;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ModalForm, Menus, StdCtrls, ExtCtrls, DB, DBTables, ComCtrls,
  Buttons, YLabelButton, ChangeImage, ADODB, ImgList, UErrDisplay,
  ModalForm1;

type
  TFrm_K_Jrdj = class(TMyModalForm1)
    pnlxxsd: TPanel;
    Label1: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Shape1: TShape;
    Shape2: TShape;
    labny: TLabel;
    labn: TLabel;
    laby: TLabel;
    Label4: TLabel;
    ProgressBar1: TProgressBar;
    BtnRefresh: TChangeImg;
    LBtnRefresh: TLabelB;
    BtnOk: TChangeImg;
    LBtnOk: TLabelB;
    pkq_M_IniDay: TADOStoredProc;
    TV: TTreeView;
    BtnFirst: TChangeImg;
    BtnPrev: TChangeImg;
    BtnLast: TChangeImg;
    BtnNext: TChangeImg;
    YhLv: TListView;
    cmbrq: TComboBox;
    Label3: TLabel;
    BitBtn2: TBitBtn;
    BitBtn1: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure BtnOkClick(Sender: TObject);
    procedure BtnRefreshClick(Sender: TObject);
    procedure cmbrqClick(Sender: TObject);
    procedure TVClick(Sender: TObject);
    procedure BtnNextClick(Sender: TObject);
    procedure BtnLastClick(Sender: TObject);
    procedure BtnPrevClick(Sender: TObject);
    procedure BtnFirstClick(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Frm_K_Jrdj: TFrm_K_Jrdj;
  oRq:array of TCheckBox;
  old_values:array of integer;
   nodevalue: string; //树节点的数值
implementation

uses DM_DataModal, UGlobal;
{$R *.dfm}

procedure TFrm_K_Jrdj.FormCreate(Sender: TObject);
var
  i:integer;
  sKsrq:string;
  ts:integer;
  query:TADOQuery;
begin
  gtKqgl.LoadOrganTree(Winddata.AdoConn, TV, 4); //初始化用户信息
  borderstyle := bsdialog;
  query:=TADOQuery.create(self);
  try
    with query do
    begin
      Connection:=WindData.AdoConn;
      sql.clear;
      sql.add('select distinct n,y from kq_bcsd');
      open;
      cmbrq.Items.Clear;
      while not eof do
      begin
        cmbrq.Items.Add(fieldbyname('n').asstring+'-'+fieldbyname('y').asstring);
        next;
      end;
    end;
  finally
    query.free;
  end;
  ////////////////初始化复选框///////////////
  setlength(orq,32);
  setlength(old_values,32);
  for i:=1 to 31 do
  begin
     orq[i]:=Tcheckbox.Create(pnlxxsd);
     orq[i].parent:=pnlxxsd;
     orq[i].Caption:=inttostr(i);
     orq[i].Width:=60;
     orq[i].Checked:=true;
     old_values[i]:=1;
  end;
  //////////////提取已有的无考勤日期////////////
  query := TADOQuery.Create(screen.activeform);
  try
    query.Connection := WindData.AdoConn;
    with query do
    begin
      sql.Clear;
      sql.add('select distinct y,n from kq_bcsd where y+n in(select max(y+n) from kq_bcsd)');
      open;
      if not eof then
      begin
        labn.caption:=trim(fieldbyname('n').asstring);
        laby.caption:=trim(fieldbyname('y').asstring);
      end
      else
      begin
       labn.caption:=copy(datetostr(date),1,4);
       laby.caption:=copy(datetostr(date),6,2);
      end;
    end;
    with query do
    begin
      sql.Clear;
      sql.Add('select * from kq_bcsd where n='''+trim(labn.caption)+''' and y='''+trim(laby.caption)+'''');
      open;
      if not eof then
      begin
        for i:=1 to 31 do
          if Fields[i+4].AsString='X' then
          begin
            orq[i].Checked:=true;
            old_values[i]:=1;
          end
          else
          begin
            orq[i].Checked:=False;
            old_values[i]:=0;
          end;
      end
      else
        for i:=1 to 31 do
        begin
          orq[i].Checked:=False;
          old_values[i]:=0;
        end;
    end;
    sksrq:=labn.Caption+'-'+laby.Caption+'-'+'01';
    ts:=(dayofweek(strtodate(sksrq))) -2;
    for i:=1 to 31 do
    begin
      orq[i].Caption:=inttostr(i);
      orq[i].top:=((i+ts) div 7)*32+80;
      orq[i].Left:=((i+ts) mod 7)*60+21;
      orq[i].Width:=60;
    end;
    pnlxxsd.BringToFront;
    pnlxxsd.Visible:=True;
  finally
    query.free;
  end;
end;

procedure TFrm_K_Jrdj.BtnOkClick(Sender: TObject);
var
  misaturday, misunday, mistartsj, miendsj,i: integer;
  query:Tquery;
begin
  if application.MessageBox('设置后的时间将不需要考勤,是否继续?','系统提示',mb_okcancel+mb_iconwarning)=id_cancel then exit;
  progressbar1.Max:=31;
  progressbar1.Position:=0;
  with pkq_M_IniDay do
  begin
    for i:=1 to 31 do
    begin
      progressbar1.Position:=progressbar1.Position+1;
      if orq[i].Checked then
      begin
        if i<10 then
          Parameters.ParamByName('@sDay').Value:='0'+inttostr(i)
        else
          Parameters.ParamByName('@sDay').Value:=inttostr(i);
        Parameters.ParamByName('@svalue').Value:='X';
        old_values[i]:=1;
        Parameters.ParamByName('@n').Value:=labn.caption;
        Parameters.ParamByName('@y').Value:=laby.caption;
        execproc;
      end
      else
      begin
        if old_values[i]=1 then
        begin
          if i<10 then
            Parameters.ParamByName('@sDay').Value:='0'+inttostr(i)
          else
            Parameters.ParamByName('@sDay').Value:=inttostr(i);
          Parameters.ParamByName('@svalue').Value:='O';
          old_values[i]:=0;
          Parameters.ParamByName('@n').Value:=labn.caption;
          Parameters.ParamByName('@y').Value:=laby.caption;
          execproc;
        end;
      end;
    end;
    application.MessageBox('节假日时间设置完毕!','系统提示',mb_ok);
    progressbar1.Position:=0;
  end;
end;
procedure TFrm_K_Jrdj.BtnRefreshClick(Sender: TObject);
var
  i:integer;
  sKsrq:string;
  ts:integer;
  query:TADOQuery;
begin
  if cmbrq.Text='' then
  begin
    application.MessageBox('请选择日期后重试!','系统提示',mb_ok+mb_iconwarning);
    exit;
  end;
//////////////提取已有的无考勤日期////////////
  query := TADOQuery.Create(screen.activeform);
  try
    query.Connection := WindData.AdoConn;
    with query do
    begin
      labn.caption:=copy(cmbrq.text,1,4);
      laby.caption:=copy(cmbrq.text,6,2);
      sql.Clear;
      sql.Add('select * from kq_bcsd where n='''+trim(labn.caption)+''' and y='''+trim(laby.caption)+'''');
      open;
      if not eof then
      begin
        for i:=1 to 31 do
          if Fields[i+4].AsString='X' then
          begin
            orq[i].Checked:=true;
            old_values[i]:=1;
          end
          else
          begin
            orq[i].Checked:=False;
            old_values[i]:=0;
          end;
      end
      else
      begin
        application.MessageBox('无此月分份的班次设置','系统提示',mb_ok+mb_iconwarning);
        for i:=1 to 31 do
        begin
          orq[i].Checked:=False;
          old_values[i]:=0;
        end;
        BtnOk.Enabled:=false;
        LBtnOk.Enabled:=false;
      end;
    end;
    sksrq:=labn.Caption+'-'+laby.Caption+'-'+'01';
    ts:=(dayofweek(strtodate(sksrq))) -2;
    for i:=1 to 31 do
    begin
      orq[i].Caption:=inttostr(i);
      orq[i].top:=((i+ts) div 7)*32+80;
      orq[i].Left:=((i+ts) mod 7)*60+21;

⌨️ 快捷键说明

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