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

📄 tascomm.pas.svn-base

📁 这是一个功能齐全的,代码完整的ERP企业信息管理系统,现在上传和大家分享
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select top 1 T520_009 from TAS520 where T520_009 is not null and T520_002='+''''+ATaskID+''''+' order by T520_009');
  SYSDM.qryQuery.Open;
  if (SYSDM.qryQuery.IsEmpty) or (SYSDM.qryQuery.Fields[0].IsNull) then
    AFactFromDate:=0
  else
    AFactFromDate:=SYSDM.qryQuery.Fields[0].Value;
  //实际完成日期
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select top 1 T520_010 from TAS520,TAS530 where T520_010 is not null and T520_001=T530_002 and T530_010=3 and T520_002='+''''+ATaskID+''''+' order by T520_009 desc');
  SYSDM.qryQuery.Open;
  if (SYSDM.qryQuery.IsEmpty) or (SYSDM.qryQuery.Fields[0].IsNull) then
    AFactToDate:=0
  else
    AFactToDate:=SYSDM.qryQuery.Fields[0].Value;

  //更新任务计划实际工时、工单总数
  ACust:=0;
  AItem:=0;
  AMacNo:='';
  AClass:=0;
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select * from TAS510 where T510_001='+''''+ATaskID+'''');
  SYSDM.qryQuery.Open;
  if not SYSDM.qryQuery.IsEmpty then
  begin
    SYSDM.qryQuery.Edit;
    SYSDM.qryQuery.FieldByName('T510_003').Value:=AStatus;   //任务状态
    SYSDM.qryQuery.FieldByName('T510_013').Value:=ADays;    //实际工时
    SYSDM.qryQuery.FieldByName('T510_015').Value:=ACount;   //工单总数
    if (SYSDM.qryQuery.FieldByName('T510_025').AsString='') and (AFromDate<>0) then
      SYSDM.qryQuery.FieldByName('T510_025').Value:=AFromDate;  //预计开始日期
    if (SYSDM.qryQuery.FieldByName('T510_026').AsString='') and (AToDate<>0) then
      SYSDM.qryQuery.FieldByName('T510_026').Value:=AToDate;  //预计完成日期
    if AFactFromDate=0 then SYSDM.qryQuery.FieldByName('T510_027').AsString:='' else SYSDM.qryQuery.FieldByName('T510_027').Value:=AFactFromDate;  //实际开始日期
    if AFactToDate=0 then SYSDM.qryQuery.FieldByName('T510_028').AsString:='' else if AStatus=3 then SYSDM.qryQuery.FieldByName('T510_028').Value:=AFactToDate;  //实际完成日期
    SYSDM.qryQuery.Post;
    ACust:=SYSDM.qryQuery.FieldByName('T510_016').AsInteger;
    AItem:=SYSDM.qryQuery.FieldByName('T510_017').AsInteger;
    AMacNo:=SYSDM.qryQuery.FieldByName('T510_018').AsString;
    AClass:=SYSDM.qryQuery.FieldByName('T510_004').AsInteger;

    //更新来源单据的相关信息
    AOrderID:=SYSDM.qryQuery.FieldByName('T510_009').AsString;
    if AOrderID<>'' then
    begin
      case SYSDM.qryQuery.FieldByName('T510_008').AsInteger of
        0:UpdateOrderInfo(AOrderID,1);
        1:UpdateCallInfo(AOrderID,1);
        2:UpdateProjectInfo(AOrderID);
      end;
    end;
  end;

  //任务完成时,反写客户资料的产品信息(安装日期、保养日期)
  //仅反写“安装”任务,且为新机的机床(安装日期为空即表示为新机)
  if (GetSysParams('TAS0014')='Y') and (AClass=StrToInt(GetSysParams('TAS0017'))) then
  begin
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('select O153_006 from ORD153 where O153_001='+IntToStr(ACust)+' and O153_002='+IntToStr(AItem)+' and O153_003='+''''+AMacNo+'''');
    SYSDM.qryQuery.Open;
    if SYSDM.qryQuery.IsEmpty then Exit;
    if SYSDM.qryQuery.FieldByName('O153_006').AsString<>'' then Exit;  //安装日期不为空时退出
    ADate:=AFactToDate;
    DecodeDate(ADate,AYear,AMonth,ADay);
    ADate:=EncodeDate(AYear+1,AMonth,ADay)-1;
    AInsDate:=GetDateString(AFactToDate);
    AEndDate:=GetDateString(ADate);
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    if AFactToDate<>0 then
      SYSDM.qryQuery.SQL.Add('update ORD153 set O153_006='+AInsDate+',O153_007='+AInsDate+',O153_008='+AEndDate+' where O153_001='+IntToStr(ACust)+' and O153_002='+IntToStr(AItem)+' and O153_003='+''''+AMacNo+'''')
    else
      SYSDM.qryQuery.SQL.Add('update ORD153 set O153_006=null,O153_007=null,O153_008=null where O153_001='+IntToStr(ACust)+' and O153_002='+IntToStr(AItem)+' and O153_003='+''''+AMacNo+'''');
    SYSDM.qryQuery.ExecSQL;
  end;
end;

//更新任务工单信息(实际工时、实际开始日期、实际结束日期)
  //實際工時=彙報工時*执行人數  反寫任務工單實際工時
//任务汇报单新增、修改、删除时调用
//AWorkID:任务工单编号
procedure UpdateWorksInfo(AWorkID:string);
var
  ADays,APercent:Double;
  AFromDate,AToDate:TDateTime;
  AStatus:Integer;
  ATaskID:String;
begin
  if AWorkID='' then Exit;
  //实际工时
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select sum(T530_004) from TAS530 where T530_002='+''''+AWorkID+'''');
  SYSDM.qryQuery.Open;
  if (SYSDM.qryQuery.Fields[0].IsNull) or (SYSDM.qryQuery.IsEmpty) then
    ADays:=0
  else
    ADays:=SYSDM.qryQuery.Fields[0].Value;

  //实际开始日期
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select top 1 T530_005 from TAS530 where T530_002='+''''+AWorkID+''''+' order by T530_005');
  SYSDM.qryQuery.Open;
  if SYSDM.qryQuery.IsEmpty then AFromDate:=0 else AFromDate:=SYSDM.qryQuery.FieldByName('T530_005').Value;

  //实际结束日期
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select top 1 T530_003,T530_006,T530_010 from TAS530 where T530_002='+''''+AWorkID+''''+' order by T530_005 desc');
  SYSDM.qryQuery.Open;
  if SYSDM.qryQuery.IsEmpty then
  begin
    AStatus:=2;  //执行状态
    AToDate:=0;
    APercent:=0;
  end else
  begin
    APercent:=SYSDM.qryQuery.FieldByName('T530_003').Value;
    AStatus:=SYSDM.qryQuery.FieldByName('T530_010').Value;
    if AStatus<>2 then AToDate:=SYSDM.qryQuery.FieldByName('T530_006').Value else AToDate:=0;
  end;

  //更新任务工单信息
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select * from TAS520 where T520_001='+''''+AWorkID+'''');
  SYSDM.qryQuery.Open;
  ATaskID:=SYSDM.qryQuery.FieldByName('T520_002').AsString;
  SYSDM.qryQuery.Edit;
  if ADays=0 then SYSDM.qryQuery.FieldByName('T520_008').AsString:='' else SYSDM.qryQuery.FieldByName('T520_008').Value:=ADays;
  if AFromDate=0 then SYSDM.qryQuery.FieldByName('T520_009').AsString:='' else SYSDM.qryQuery.FieldByName('T520_009').Value:=AFromDate;
  if AToDate=0 then SYSDM.qryQuery.FieldByName('T520_010').AsString:='' else SYSDM.qryQuery.FieldByName('T520_010').Value:=AToDate;
  SYSDM.qryQuery.Post;

  //更新任务计划状态、完工率
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('update TAS510 set T510_003='+IntToStr(AStatus)+',T510_014='+FloatToStr(APercent)+' where T510_001='+''''+ATaskID+'''');
  SYSDM.qryQuery.ExecSQL;
  //更新任务计划信息(实际工时、工单总数)
  UpdateTasksInfo(ATaskID);
end;

//显示执行人员名称
function GetPersonName(APersonNo:string):string;
var
  AStringList:TStringList;
  I:Integer;
  S:String;
begin
  if APersonNo='' then Exit;
  AStringList:=TStringList.Create;
  for I:=1 to Length(APersonNo) do
  begin
    if Copy(APersonNo,I,1)='[' then
      S:=''
    else if Copy(APersonNo,I,1)=']' then
    begin
      AStringList.Add(trim(S));
      S:='';
    end else
      S:=S+Copy(APersonNo,I,1);
  end;
  for I:=0 to AStringList.Count-1 do
  begin
    if AStringList[I]<>'' then
    begin
      SYSDM.qryQuery.Close;
      SYSDM.qryQuery.SQL.Clear;
      SYSDM.qryQuery.SQL.Add('select H150_002,H150_003 from HRM150 where H150_001='+AStringList[I]);
      SYSDM.qryQuery.Open;
      if SYSDM.qryQuery.FieldByName('H150_002').AsString='Z01' then
        S:=''
      else
        S:=S+','+SYSDM.qryQuery.FieldByName('H150_003').AsString;
    end;
  end;
  Delete(S,1,1);
  Result:=S;
end;

//取得所有任务类别
procedure GetAllTasksClass(AcbClass:TComboBox); overload;
begin
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select * from TAS100');
{  if ASuper then
  begin
    SYSDM.qryQuery.SQL.Add('select * from TAS100');
  end else
  begin
    SYSDM.qryQuery.SQL.Add('select B.* from SYS500C A, TAS100 B');
    SYSDM.qryQuery.SQL.Add('where A.S500C_002=B.T100_001 and A.S500C_003=''TAS'' and A.S500C_004='+GetBoolean(True)+' and A.S500C_001='+IntToStr(AUserID));
  end; }
  AcbClass.Clear;
  AcbClass.Items.Add(GetDBString('TASW0001114'));  //所有任务
  SYSDM.qryQuery.Open;
  while not SYSDM.qryQuery.Eof do
  begin
    AcbClass.Items.Add(SYSDM.qryQuery.FieldByName('T100_002').AsString);
    SYSDM.qryQuery.Next;
  end;
  AcbClass.ItemIndex:=0;
end;

//取得所有任务类别
procedure GetAllTasksClass(ADataSet:TADODataSet;AcbClass:TComboBox); overload;
begin
  ADataSet.Close;
  ADataSet.LockType:=ltBatchOptimistic;
  ADataSet.FieldDefs.Clear;
  ADataSet.FieldDefs.Add('Num',ftInteger,0);
  ADataSet.FieldDefs.Add('Name',ftString,100);
  ADataSet.FieldDefs.Add('Parent',ftInteger,0);
  ADataSet.CreateDataSet;
  ADataSet.Append;
  ADataSet.FieldByName('Num').Value:=0;
  ADataSet.FieldByName('Name').Value:=GetDBString('TASW0001114');  //所有任务
  ADataSet.FieldByName('Parent').Value:=0;
  ADataSet.Post;
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('select * from TAS100');
{  if ASuper then
  begin
    SYSDM.qryQuery.SQL.Add('select * from TAS100');
  end else
  begin
    SYSDM.qryQuery.SQL.Add('select B.* from SYS500C A, TAS100 B');
    SYSDM.qryQuery.SQL.Add('where A.S500C_002=B.T100_001 and A.S500C_003=''TAS'' and A.S500C_004='+GetBoolean(True)+' and A.S500C_001='+IntToStr(AUserID));
  end; }
  SYSDM.qryQuery.Open;
  while not SYSDM.qryQuery.Eof do
  begin
    ADataSet.Append;
    ADataSet.FieldByName('Num').Value:=SYSDM.qryQuery.FieldByName('T100_001').Value;
    ADataSet.FieldByName('Name').Value:=SYSDM.qryQuery.FieldByName('T100_002').Value;
    ADataSet.FieldByName('Parent').Value:=SYSDM.qryQuery.FieldByName('T100_003').Value;
    ADataSet.Post;
    SYSDM.qryQuery.Next;
  end;

  ADataSet.First;
  AcbClass.Clear;
  while not ADataSet.Eof do
  begin
    AcbClass.Items.Add(ADataSet.FieldByName('Name').AsString);
    ADataSet.Next;
  end;
  ADataSet.First;
  AcbClass.ItemIndex:=0;
end;

//取得有子任务的电脑编号
function GetChildTask(ATasClass:string):string;
var
  AStringList:TStringList;
  AClassNo:String;
  I:Integer;
begin
  AStringList:=TStringList.Create;
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select T100_001 from TAS100 where T100_002='+''''+ATasClass+'''');
  SYSDM.qryQuery.Open;
  AClassNo:=SYSDM.qryQuery.Fields[0].AsString;
  if AClassNo<>'' then
  begin
    AStringList.Add(AClassNo);
    if HasChild(AClassNo,'TAS100','T100_003') then GetChild(AClassNo,'TAS100','T100_003','T100_001',AStringList);
  end;
  AClassNo:='';
  for I:=0 to AStringList.Count-1 do AClassNo:=AClassNo+','+AStringList[I];
  Delete(AClassNo,1,1);
  Result:=AClassNo;
end;

//取得汇报工时表中的员工人数
function GetPersons(APersonNo:String):Integer;
var
  I:Integer;
  S:String;
  AStringList:TStringList;
begin
  Result:=0;
  if APersonNo='' then Exit;
  AStringList:=TStringList.Create;
  for I:=1 to Length(APersonNo) do
  begin
    if Copy(APersonNo,I,1)='[' then
      S:=''
    else if Copy(APersonNo,I,1)=']' then
    begin
      AStringList.Add(trim(S));
      S:='';
    end else
      S:=S+Copy(APersonNo,I,1);
  end;
  Result:=AStringList.Count;
  AStringList.Free;
end;
function GetDays(ATimeValue:double):double ;
var
  ADays:double;
  ALeave:double;
begin
  ADays:=Int(ATimeValue/8);
  ALeave:=ATimeValue-ADays*8;
  if ALeave>0 then ADays:=ADays+int(ALeave/4)*0.5;
  ALeave:=ATimeValue-ADays*8;
  if ALeave>0 then ADays:=ADays+0.5;
  Result:=ADays;
end;

end.

⌨️ 快捷键说明

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