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

📄 sysdata_manage.pas

📁 服装厂管理系统源程序压缩包, 请耐心阅读提供的文件包含的内容
💻 PAS
📖 第 1 页 / 共 4 页
字号:
unit Sysdata_manage;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls, Buttons, Grids, DBGrids, ExtCtrls,
  ComCtrls, RpDefine, RpCon, RpConDS, Menus, Mask, DBCtrls, RpRave, RpBase,
  RpSystem, ValEdit;

type
  TfrmSysdata_manage = class(TForm)
    DS_away_query: TDataSource;
    ADOQtmp: TADOQuery;
    ADOQ_away_query: TADOQuery;
    ADOQpersonshouzhi: TADOQuery;
    ADOQemp: TADOQuery;
    ADOQupdate: TADOQuery;
    ADOQGetyearmonth: TADOQuery;
    ADOQtmp_emp: TADOQuery;
    ADOQ_TJFlag: TADOQuery;
    ADOQ_away_queryempid: TIntegerField;
    ADOQ_away_queryempname: TStringField;
    ADOQ_away_querysex: TStringField;
    ADOQ_away_querydepname: TStringField;
    ADOQ_away_querydutyname: TStringField;
    ADOQ_away_querytotal: TBCDField;
    ADOQ_away_queryzhi: TBCDField;
    ADOQ_away_querybalance: TBCDField;
    Panel2: TPanel;
    Panel3: TPanel;
    GroupBox2: TGroupBox;
    ListEditor1: TValueListEditor;
    Panel1: TPanel;
    Label_num: TLabel;
    Label2: TLabel;
    Bevel1: TBevel;
    SaveBtn: TBitBtn;
    BitBtn1: TBitBtn;
    Panel6: TPanel;
    Panel4: TPanel;
    AllBtn: TSpeedButton;
    SigBtn: TSpeedButton;
    DelSigBtn: TSpeedButton;
    DelAllBtn: TSpeedButton;
    GroupBox5: TGroupBox;
    Panel5: TPanel;
    Label_Display: TLabel;
    edtname: TEdit;
    SearchBtn: TBitBtn;
    ComboBox_dep: TComboBox;
    ComboBox_duty: TComboBox;
    ComboBox_awayEmpID: TComboBox;
    DBGrid2: TDBGrid;
    ProgressBar1: TProgressBar;
    Panel7: TPanel;
    RadioGroup1: TRadioGroup;
    Btn_Account: TBitBtn;
    GroupBox1: TGroupBox;
    CheckBox1: TCheckBox;
    LBL_money: TLabel;
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure RadioGroup1Click(Sender: TObject);
    procedure ComboBox_awayEmpIDKeyPress(Sender: TObject; var Key: Char);
    procedure AllBtnClick(Sender: TObject);
    procedure SigBtnClick(Sender: TObject);
    procedure DelSigBtnClick(Sender: TObject);
    procedure DelAllBtnClick(Sender: TObject);
    procedure SaveBtnClick(Sender: TObject);
    procedure ListEditor1StringsChange(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure Btn_AccountClick(Sender: TObject);
    procedure SearchBtnClick(Sender: TObject);
  private
    { Private declarations }
    function Get_lastbalance(empid:integer;yearmonth:string):real;
    procedure Account_emppay;
  public
    { Public declarations }
    empid,empname,depname,dutyname:string;
  end;

var
  frmSysdata_manage: TfrmSysdata_manage;

implementation
uses data,sharevar,sharefun, ColorSetup;
{$R *.dfm}


//得到对应人员在当前日期前的第一个日期的结余
function TfrmSysdata_manage.Get_lastbalance(empid:integer;yearmonth:string):real;
begin
  result:=0;
  with ADOQGetyearmonth do
  begin
    close; sql.Clear;
    sql.Add('select balance from personshouzhi where empid=:empid and yearmonth<:yearmonth order by yearmonth desc');
    parameters.ParamValues['empid']:=empid;
    parameters.ParamValues['yearmonth']:=yearmonth;
    try
      execsql; open;
    except
    end;
    first; if recordcount>0 then
    result:=fieldvalues['balance'];
    close;
  end;
end;

procedure TfrmSysdata_manage.FormShow(Sender: TObject);
begin
  //添加离职人员编码
  with ADOQemp do
  begin
    close;sql.clear;
    sql.add('select empid from employee where state=0');
    try
      execsql; open;
    except
      MsgErr(handle,'添加已离职员工信息失败!'); exit;
    end;
    if recordcount =0 then
    begin
        MsgErr(handle,'无离职员工信息!');
        exit;
    end;
    first;
    ComboBox_awayEmpID.Items.Clear;
    while not eof do
    begin
        ComboBox_awayEmpID.Items.Add(fieldvalues['empid']);
        next;
    end;
  end;
  
  //添加部门信息
  with ADOQtmp do
  begin
    close; sql.Clear;
    sql.Add('select depname from department');
    open;
    combobox_dep.Items.Clear;
    first;
    while not eof do
    begin
      combobox_dep.Items.Add(fieldvalues['depname']);
      next;
    end;
  end;
  //添加职务信息
  with adoqtmp do
  begin
    close; sql.Clear;
    sql.Add('select dutyname from duty');
    open;
    combobox_duty.Items.Clear;
    first;
    while not eof do
    begin
      combobox_duty.Items.Add(fieldvalues['dutyname']);
      next;
    end;
    close;
  end;
  ComboBox_awayEmpID.SetFocus;
end;

//统计查询对应条件的离职人员的工资收入总账状况
procedure TfrmSysdata_manage.Account_emppay;
var
    inprice_num :integer; //未指定工价的工序数量
    tmpstr:string;
    DataTJ_flag:boolean;
begin
  //1.按条件查找到对应的已离职员工
  //关闭已经查找到的数据
  ADOQ_away_query.Close;
  with ADOQemp do
  begin
    close; sql.Clear;
    sql.Add('select a.empid from employee a,department b, duty c');
    sql.Add('where a.depid=b.depid and a.dutyid=c.dutyid and a.state=0');
    case RadioGroup1.ItemIndex of
    0:
      begin
        if empid<>'' then
        begin
          try
            strtoint(empid);
          except
            Msgerr(handle,'请输入正确的员工编号!');
            abort; exit;
          end;
          sql.Add(' and a.empid=:empid');
          parameters.ParamValues['empid']:=strtoint(empid);
        end;
      end;
    1:
      begin
        if empname<>'' then
        begin
          sql.Add('and a.empname=:empname');
          parameters.ParamValues['empname']:=empname;
        end;
      end;
    2:
      begin
        sql.add('and b.depname=:depname');
        parameters.ParamValues['depname']:=depname;
      end;
    3:
      begin
        sql.Add('and c.dutyname=:dutyname');
        parameters.ParamValues['dutyname']:=dutyname;
      end;
    end;
    try
      execsql; open;
    except
      MsgErr(handle,'查找数据出错,请重试!');
      abort; exit;
    end;
    if recordcount=0 then
    begin
      MsgErr(handle,'没查找到对应条件的离职员工!');
      close; abort; exit;
    end;
  end;

   //2.检查是否给当前所有已验收未入总账的工序定工价
   with adoqtmp do
   begin
     close; sql.Clear;
     sql.add('select a.ord_id, b.seq_name, b.seq_price from v_outbom_log2  a,sequence_price b');
     sql.add('where a.flag=1 and a.TJflag=0 and (a.temp_key=b.temp_key)');
     sql.Add('group by  b.temp_key, a.ord_id, b.seq_name, b.seq_price');
     try
        open; first;
     except
        Msgerr(handle,'统计离职人员收支总账报表失败--工价查找!');
        exit;
     end;
     DataTJ_flag:=true;
     inprice_num:=0;
     while not eof do
     begin
        if (fieldvalues['seq_price']=0) or (fieldvalues['seq_price']=null) then
        begin
          tmpstr:='订单批号:['+fieldvalues['ord_id']+'下的工序 ['+fieldvalues['seq_name']+'] 还没有给工价';
          msgerr(handle, tmpstr);
          DataTJ_flag:=false; Inc(inprice_num);
        end;
        next;
     end;
     if not DataTJ_flag then
     begin
        tmpstr:='统计离职人员收支总账报表失败--共有 ['+inttostr(inprice_num)+'] 个工序工价未指定!';
        tmpstr:=tmpstr+#13+#13+'     请先到工序工价表指定工价再作统计!';
        msgerr(handle,tmpstr);
        abort; exit;
     end;
   end;//工序工价统计结束.End

   //初始化进程条
   ProgressBar1.Max:=adoqemp.RecordCount;
   Label_Display.Visible:=true;
   ProgressBar1.Position:=0;
   application.ProcessMessages;
   
   datatj_flag:=true;
   ADOQemp.first;
   //利用循环计算离职员工工资收入
   while not adoqemp.Eof do
   begin

     ProgressBar1.Max:=adoqemp.RecordCount+ProgressBar1.Max;
     application.ProcessMessages;
     //1.得到当前人员收支表所有已统计的记录(刷新)
     with ADOQpersonshouzhi do
     begin
        close;sql.Clear;
        sql.add('select  * from personshouzhi where empid=:v_empid order by yearmonth desc');
        parameters.ParamValues['v_empid']:=adoqemp.fieldvalues['empid'];
        try
          open;
        except
          if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
          datatj_flag:=false; break;
        end;
     end;

     //2.计算工序收入(A~当前日期)************************************************************
     with adoqtmp do
     begin
        close;sql.clear;
        sql.add('select a.empid,a.yearmonth,(sum(b.seq_price*a.num)) as total from v_outbom_log2  a,sequence_price b');
        sql.add('where a.flag=1 and a.TJflag=0 and (a.temp_key=b.temp_key) and (a.empid=:v_empid)');
        sql.add('group by a.yearmonth, a.empid order by  a.yearmonth');
        parameters.ParamValues['v_empid']:=adoqemp.fieldvalues['empid'];
        open; first;
        while not eof do
        begin
          //2.数据开始提交
          DataTJ_flag:=true;
          datamod.ADOCon.BeginTrans;
          with ADOQupdate do
          begin
            //2.1得到当前人员当月的收支总表的记录
            close; sql.Clear;
            sql.Add('select * from personshouzhi where empid=:v_empid and yearmonth=:V_yearmonth');
            parameters.ParamValues['v_empid']:=adoqemp.FieldValues['empid'];
            parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
            try
              execsql; open;
            except
              if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
              datatj_flag:=false; break;
            end;//2.1.End
            //2.2如果该员工该月存在收支记录,则修改收入
            if recordcount>0 then
            begin
              close; sql.Clear;
              sql.Add('update personshouzhi set shou=shou+:v_total');
              sql.Add('where empid=:v_empid and yearmonth=:V_yearmonth');
              parameters.ParamValues['v_empid']:=adoqemp.FieldValues['empid'];
              parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
              parameters.ParamValues['v_total']:=adoqtmp.FieldValues['total'];
              try
                execsql;
              except
                if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
                DataTJ_flag:=false; break;
              end;

              //2.5.1如果员工工序收入入总账成功则修改[Tjflag]字段值
              with ADOQ_TJFlag do
              begin
                close; sql.Clear;
                sql.Add('update outbom_log set Tjflag=1 where empid=:v_empid');
                parameters.ParamValues['v_empid']:=adoqtmp.FieldValues['empid'];
                try
                  execsql;
                except
                  if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
                  DataTJ_flag:=False; break;
                end;
              end;//2.5.1.End
            end//2.2.End
            else
            //如果没找到则添加.Else
            begin
              //2.3如果个人月收支表中没找到记录则直接新增
              if ADOQpersonshouzhi.RecordCount =0 then
              begin
                close; sql.Clear;
                sql.Add('insert into personshouzhi(empid,yearmonth,shou)');
                sql.Add('values(:v_empid,:v_yearmonth,:v_shou)');
                parameters.ParamValues['v_empid']:=adoqemp.FieldValues['empid'];
                parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
                parameters.ParamValues['v_shou']:=adoqtmp.FieldValues['total'];

⌨️ 快捷键说明

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