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

📄 cwa550_02.pas.svn-base

📁 一个用Delphi开发的ERP软件
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
    ATime[3]:=qryCwa120.FieldByName('C120_006').AsString;
    ATime[4]:=qryCwa120.FieldByName('C120_007').AsString;
    ATime[5]:=qryCwa120.FieldByName('C120_008').AsString;
    ATime[6]:=qryCwa120.FieldByName('C120_009').AsString;
    AType[1]:=qryCwa120.FieldByName('C120_012').AsInteger;
    AType[2]:=qryCwa120.FieldByName('C120_013').AsInteger;
    AType[3]:=qryCwa120.FieldByName('C120_014').AsInteger;
    ADate:=qryCwa120.FieldByName('C120_003').Value;
    //取得电脑卡号
    AID:=GetValue('select top 1 C130_001 from CWA130 where C130_002='+IntToStr(AEmpNo)+' and C130_003<='+GetDateString(ADate)+' order by C130_003 desc');

    CalcTime(AEmpNo,AID,ADate,AMin,ATime,AType);  //计算时间
    qryCwa120.Next;
  end;
end;

procedure TCwa550_02Form.SetInterface;
begin
  Caption:=GetDBString('CWA55002001');  //计算
  lblDept.Caption:=GetDBString('CWA55002002');  //部门编号
  lblFromEmpID.Caption:=GetDBString('CWA55002003');  //员工编号
  lblTo.Caption:=GetDBString('CWA55002004');  //至
  lblYear.Caption:=GetDBString('CWA55002005');  //年份月份
  cbReCalc.Caption:=GetDBString('CWA55002006');  //重新计算否
  bbtnOk.Caption:=GetDBString('CWA55002007');  //确定(&O)
  bbtnExit.Caption:=GetDBString('CWA55002008');  //退出(&X)
  PageControl1.ActivePageIndex:=0;
end;

procedure TCwa550_02Form.FormCreate(Sender: TObject);
begin
  inherited;
  qryHrm150.Close;
  qryHrm150.SQL.Clear;
  if not ASuper then
    qryHrm150.SQL.Add('select H150_001,H150_002,H150_003 from HRM150 where H150_005 in (select S500C_002 from SYS500C where S500C_003=''DEP'' and S500C_004='+GetBoolean(True)+' and S500C_001='+IntToStr(AUserID)+') order by H150_002')
  else
    qryHrm150.SQL.Add('select H150_001,H150_002,H150_003 from HRM150 order by H150_002');
  qryHrm150.Open;
  //部门资料
  cbDepart.Items.Clear;
  cbDepart.Items.Add(GetDBString('COM00004007'));  //所有部门
  qryHrm100.Close;
  qryHrm100.SQL.Clear;
  qryHrm100.SQL.Add('select * from HRM100 where H100_004='+GetBoolean(True));
  qryHrm100.Open;
  while not qryHrm100.Eof do
  begin
    cbDepart.Items.Add(qryHrm100.FieldByName('H100_002').AsString);
    qryHrm100.Next;
  end;
  cbDepart.ItemIndex:=0;

  GetYears(cbYear);
  GetMonths(StrToInt(cbYear.Text),cbMonth);
  //设置界面信息
  SetInterface;
  Label1.Alignment:=taLeftJustify;
  Label2.Alignment:=taLeftJustify;
end;

procedure TCwa550_02Form.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
//
end;

//计算考勤
procedure TCwa550_02Form.CalcCwa(AEmpNo,AYear,AMonth,ADays,AHours:Integer;AIsCheck:Boolean);
var
  AItemNo:Integer;
  AItemID,AItemNm:string;
  AType:Integer;  //项目类型 
  AIsAuto:Boolean;
begin
  //如果系统参数设置为"手工录入考勤数据",则由考勤事务表(CWA500)中计算出'迟到','早退','旷工'
  //否则,由卡钟的考勤数据中计算'迟到','早退','旷工'
  AIsAuto:=GetSysParams('CWA0007')='2';    //按卡钟数据计算考勤

  qryCwa150.Close;
  qryCwa150.SQL.Clear;
  qryCwa150.SQL.Add('select * from CWA150 where C150_008='+GetBoolean(True)+' order by C150_007');
  qryCwa150.Open;
  ProgressBar1.Position:=0;
  ProgressBar1.Max:=qryCwa150.RecordCount;
  qryCwa150.First;
  while not qryCwa150.Eof do
  begin
    AItemNo:=qryCwa150.FieldByName('C150_001').Value;  //项目电脑编号
    AItemID:=qryCwa150.FieldByName('C150_002').Value;  //项目编号
    AItemNm:=qryCwa150.FieldByName('C150_003').Value;  //项目名称
    AType:=qryCwa150.FieldByName('C150_004').Value;    //0=按考勤事务处理,1=按公式计算
    Application.ProcessMessages;
    ProgressBar1.Position:=ProgressBar1.Position+1;
    Label1.Caption:=GetDBString('CWA55002011')+'['+AItemID+']['+AItemNm+']...';  //正在计算考勤项目
    Update;
    if (AItemNo in [1,2,3]) and (AIsAuto) then
    begin
      //按卡钟数据自动计算考勤
      CalcByAuto(AItemNo,AEmpNo,AYear,AMonth);
    end else
    begin
      case AType of
        0:CalcByTrans(AItemNo,AEmpNo,AYear,AMonth,AIsCheck);
        1:CalcByFormalu(AItemNo,AEmpNo,AYear,AMonth,ADays,AHours);
      end;
    end;
    qryCwa150.Next;
  end;
end;

procedure TCwa550_02Form.bbtnOkClick(Sender: TObject);
var
  AFromEmpID,AToEmpID,AYear,AMonth:String;
  ADeptNo,AEmpNo:Integer;
  AEmpID,AEmpNm:string;
  I:Integer;
  AMin:Integer;
  ASec:Double;
  ADays,AHours:Integer;
  S:String;
  AIsCheck:Boolean;
begin
  inherited;
//确定
  ADeptNo:=0;
  if cbDepart.ItemIndex<>0 then
    ADeptNo:=GetValue('select H100_001 from HRM100 where H100_002='+''''+cbDepart.Text+'''');
  AFromEmpID:=trim(edtFromEmpID.Text);
  AToEmpID:=trim(edtToEmpID.Text);
  AYear:=cbYear.Text;
  AMonth:=cbMonth.Text;

  if AFromEmpID>AToEmpID then
  begin
    ShowMsg('UMS10000076');  //起始员工编号不能大于结束编号
    edtFromEmpID.SetFocus;
    Abort;
  end;

  if (AYear='') or (AMonth='') then
  begin
    ShowMsg('UMS10000218');  //年份或月份不能为空
    if AYear='' then cbYear.SetFocus
    else if AMonth='' then cbMonth.SetFocus;
    Abort;
  end;

  //取得期段的起始结束日期
  GetPeriodDate(AYear,AMonth,AStartDate,AEndDate,APeriod);
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select 1 from CWA550A where C550A_006='+GetBoolean(True)+' and C550A_001='+AYear+' and C550A_002='+IntToStr(APeriod));
  SYSDM.qryQuery.Open;
  if not SYSDM.qryQuery.IsEmpty then
  begin
    ShowMsg('UMS10000215');  //本月数据已审核,不能重新计算
    Abort;
  end;

  Screen.Cursor:=crHourGlass;
  bbtnOk.Enabled:=False;
  AStartTime:=GetTickCount;
  PageControl1.ActivePageIndex:=1;
  //计薪天数(1=按每月实际天数,2=按固定天数(2-3位数字表示天数))
  ADays:=30;
  S:=trim(GetSysParams('PAY0001'));
  if copy(S,1,1)='1' then
    ADays:=GetValue('select C170_005-C170_004+1 from CWA170 where C170_001='+AYear+' and C170_002='+IntToStr(APeriod))
  else if copy(S,1,1)='2' then
    ADays:=StrToInt(copy(S,2,2));
  //每日开工时数
  AHours:=StrToInt(trim(GetSysParams('CWA0006')));
  //薪资考勤事务数据是否必须审核
  AIsCheck:=GetSysParams('PAY0006')='Y';

  if AFromEmpID='' then AFromEmpID:=VarToStr(GetValue('select min(H150_002) from HRM150'));
  if AToEmpID='' then AToEmpID:=VarToStr(GetValue('select max(H150_002) from HRM150'));

  //删除考勤明细数据
  Label2.Caption:=GetDBString('CWA55002012')+'...';  //正在删除考勤明细数据
  Update;
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('delete from CWA550B');
  SYSDM.qryQuery.SQL.Add('where C550B_001>='+GetDateString(AStartDate)+' and C550B_001<='+GetDateString(AEndDate));
  SYSDM.qryQuery.SQL.Add(' and exists(select 1 from HRM150 where C550B_002=H150_001 and H150_002>='+''''+AFromEmpID+''''+' and H150_002<='+''''+AToEmpID+'''');
  SYSDM.qryQuery.SQL.Add(' and H150_012<>2 ');
  if ADeptNo<>0 then SYSDM.qryQuery.SQL.Add(' and H150_005='+IntToStr(ADeptNo));
  SYSDM.qryQuery.SQL.Add(' )');
  SYSDM.qryQuery.ExecSQL;

  //删除考勤汇总数据
  Label2.Caption:=GetDBString('CWA55002013')+'...';  //正在删除考勤汇总数据
  Update;
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('delete from CWA550A where C550A_001='+AYear+' and C550A_002='+IntToStr(APeriod));
  SYSDM.qryQuery.SQL.Add(' and exists(select 1 from HRM150 where C550A_003=H150_001 and H150_002>='+''''+AFromEmpID+''''+' and H150_002<='+''''+AToEmpID+'''');
  SYSDM.qryQuery.SQL.Add(' and H150_012<>2 ');
  if ADeptNo<>0 then SYSDM.qryQuery.SQL.Add(' and H150_005='+IntToStr(ADeptNo));
  SYSDM.qryQuery.SQL.Add(')');
  SYSDM.qryQuery.ExecSQL;

  qryEmployee.Close;
  qryEmployee.SQL.Clear;
  qryEmployee.SQL.Add('select H150_001,H150_002,H150_003 from HRM150 where H150_012<>2 and H150_002>='+''''+AFromEmpID+''''+' and H150_002<='+''''+AToEmpID+'''');
  if ADeptNo<>0 then qryEmployee.SQL.Add(' and H150_005='+IntToStr(ADeptNo));
  qryEmployee.Open;
  ProgressBar2.Position:=0;
  ProgressBar2.Max:=qryEmployee.RecordCount;
  qryEmployee.First;
  I:=1;
  while not qryEmployee.Eof do
  begin
    AEmpNo:=qryEmployee.FieldByName('H150_001').Value;
    AEmpID:=qryEmployee.FieldByName('H150_002').Value;
    AEmpNm:=qryEmployee.FieldByName('H150_003').Value;
    Application.ProcessMessages;
    ProgressBar2.Position:=ProgressBar2.Position+1;
    Label2.Caption:=GetDBString('CWA55002010')+'['+AEmpID+']['+AEmpNm+']... '+IntToStr(I)+'/'+IntToStr(qryEmployee.RecordCount);  //正在计算员工的考勤
    Update;
    CalcCwa(AEmpNo,StrToInt(AYear),APeriod,ADays,AHours,AIsCheck);
    qryEmployee.Next;
    I:=I+1;
  end;

  //考勤汇总表(考勤年份,考勤月份,员工编号,考勤项目,数值,已审核否)
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('insert into CWA550A(C550A_001,C550A_002,C550A_003,C550A_004,C550A_005,C550A_006)');
  SYSDM.qryQuery.SQL.Add('select '+AYear+','+IntToStr(APeriod)+',C550B_002,C550B_003,sum(C550B_004),0 ');
  SYSDM.qryQuery.SQL.Add('from CWA550B ');
  SYSDM.qryQuery.SQL.Add('where C550B_001>='+GetDateString(AStartDate)+' and C550B_001<='+GetDateString(AEndDate));
  SYSDM.qryQuery.SQL.Add(' and exists(select 1 from HRM150 where C550B_002=H150_001 and H150_002>='+''''+AFromEmpID+''''+' and H150_002<='+''''+AToEmpID+'''');
  SYSDM.qryQuery.SQL.Add(' and H150_012<>2 ');
  if ADeptNo<>0 then SYSDM.qryQuery.SQL.Add(' and H150_005='+IntToStr(ADeptNo));
  SYSDM.qryQuery.SQL.Add(')');
  SYSDM.qryQuery.SQL.Add('group by C550B_002,C550B_003');
  SYSDM.qryQuery.ExecSQL;

  //插入没有明细数据的所有使用的考勤项目
  //考勤汇总表(考勤年份,考勤月份,员工编号,考勤项目,数值,已审核否)
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('insert into CWA550A(C550A_001,C550A_002,C550A_003,C550A_004,C550A_005,C550A_006)');
  SYSDM.qryQuery.SQL.Add('select '+AYear+','+IntToStr(APeriod)+',H150_001,C150_001,0,0 ');
  SYSDM.qryQuery.SQL.Add('from HRM150 A, CWA150 B ');
  SYSDM.qryQuery.SQL.Add('where H150_002>='+''''+AFromEmpID+''''+' and H150_002<='+''''+AToEmpID+''''+' and C150_008='+GetBoolean(True));
  SYSDM.qryQuery.SQL.Add(' and H150_012<>2 ');
  if ADeptNo<>0 then SYSDM.qryQuery.SQL.Add(' and H150_005='+IntToStr(ADeptNo));
  SYSDM.qryQuery.SQL.Add(' and not exists(select 1 from CWA550A where C550A_001='+AYear+' and C550A_002='+IntToStr(APeriod)+' and C550A_003=H150_001 and C550A_004=C150_001)');
  SYSDM.qryQuery.ExecSQL;

  Screen.Cursor:=crDefault;
  bbtnOk.Enabled:=True;
  ARunTime:=(GetTickCount-AStartTime)/1000;
  AMin:=Round(ARunTime) div 60;
  ASec:=ARunTime-AMin*60;
  ShowMsg(GetDBString('UMS10000217')+IntToStr(AMin)+GetDBString('CWA55002014')+' '+FloatToStr(ASec)+GetDBString('CWA55002015'),1);  //考勤计算成功,共计耗时:
  ModalResult:=1;
end;

procedure TCwa550_02Form.bbtnExitClick(Sender: TObject);
begin
  inherited;
//退出
  Close;
end;

procedure TCwa550_02Form.SpeedButton1Click(Sender: TObject);
begin
  inherited;
//员工编号查询1
  if not edtFromEmpID.Focused then edtFromEmpID.SetFocus;
  HwSelDataForm:=THwSelDataForm.Create(Application);
  HwSelDataForm.OpenSelData(qryHrm150,nil);
  if HwSelDataForm.ShowModal=1 then
  begin
    edtFromEmpID.Text:=qryHrm150.FieldByName('H150_002').AsString;
  end;
end;

procedure TCwa550_02Form.SpeedButton2Click(Sender: TObject);
begin
  inherited;
//员工编号查询2
  if not edtToEmpID.Focused then edtToEmpID.SetFocus;
  HwSelDataForm:=THwSelDataForm.Create(Application);
  HwSelDataForm.OpenSelData(qryHrm150,nil);
  if HwSelDataForm.ShowModal=1 then
  begin
    edtToEmpID.Text:=qryHrm150.FieldByName('H150_002').AsString;
  end;
end;

procedure TCwa550_02Form.edtFromEmpIDKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  inherited;
  if Key=vk_F4 then SpeedButton1.Click;
end;

procedure TCwa550_02Form.edtToEmpIDKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  inherited;
  if Key=vk_F4 then SpeedButton2.Click;
end;

procedure TCwa550_02Form.cbYearChange(Sender: TObject);
begin
  inherited;
  GetMonths(StrToInt(cbYear.Text),cbMonth);
end;

procedure TCwa550_02Form.cbMonthChange(Sender: TObject);
begin
  inherited;
  //取得期段的起始结束日期
  GetPeriodDate(cbYear.Text,cbMonth.Text,AStartDate,AEndDate,APeriod);
end;

initialization
  RegisterClass(TCwa550_02Form);

finalization
  UnRegisterClass(TCwa550_02Form);

end.

⌨️ 快捷键说明

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