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

📄 emppay_out.pas

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

interface

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

type
  TForm_EmpPay_Out = class(TForm)
    ADOQtmp: TADOQuery;
    DS_tmp: TDataSource;
    ADOQ_emp: TADOQuery;
    ADOQ_Count: TADOQuery;
    ADOQ_search: TADOQuery;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Panel1: TPanel;
    Panel2: TPanel;
    GroupBox1: TGroupBox;
    ListEditor1: TValueListEditor;
    SaveBtn: TBitBtn;
    ExtBtn: TBitBtn;
    Panel3: TPanel;
    AllBtn: TSpeedButton;
    SigBtn: TSpeedButton;
    DelSigBtn: TSpeedButton;
    DelAllBtn: TSpeedButton;
    GroupBox2: TGroupBox;
    Panel4: TPanel;
    emp_num: TLabel;
    RadioGroup1: TRadioGroup;
    Edit1: TEdit;
    BitBtn1: TBitBtn;
    SearchBtn: TBitBtn;
    ComboBox_dep: TComboBox;
    ComboBox_duty: TComboBox;
    Panel5: TPanel;
    DBGrid2: TDBGrid;
    DBGrid: TDBGrid;
    Panel6: TPanel;
    Label5: TLabel;
    ComboBox_ID: TComboBox;
    ADOQ_Emp_payout: TADOQuery;
    DS_Emp_payout: TDataSource;
    BitBtn_locate: TBitBtn;
    BitBtn3: TBitBtn;
    PrtBtn: TBitBtn;
    edtname: TEdit;
    Label11: TLabel;
    Label12: TLabel;
    edtsex: TEdit;
    ADOQ_Emp_payoutlog_id: TAutoIncField;
    ADOQ_Emp_payoutempid: TIntegerField;
    ADOQ_Emp_payoutyearmonth: TStringField;
    ADOQ_Emp_payoutmoney: TBCDField;
    ADOQ_Emp_payouttmp_id: TIntegerField;
    ADOQ_Emp_payoutrec_date: TDateTimeField;
    ADOQ_Emp_payoutopername: TStringField;
    Label13: TLabel;
    Edtpay: TEdit;
    GroupBox5: TGroupBox;
    Label4: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    year_s: TSpinEdit;
    month_s: TSpinEdit;
    eyear: TSpinEdit;
    emonth: TSpinEdit;
    ADOQ_Emp_payoutempname: TStringField;
    RvProject1: TRvProject;
    RvSystem1: TRvSystem;
    Rv_TJ_EMP_Payout: TRvDataSetConnection;
    GroupBox4: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    syear: TSpinEdit;
    smonth: TSpinEdit;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure AllBtnClick(Sender: TObject);
    procedure SigBtnClick(Sender: TObject);
    procedure DelSigBtnClick(Sender: TObject);
    procedure DelAllBtnClick(Sender: TObject);
    procedure SaveBtnClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure SearchBtnClick(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure ListEditor1StringsChange(Sender: TObject);
    procedure PageControl1Change(Sender: TObject);
    procedure ComboBox_IDKeyPress(Sender: TObject; var Key: Char);
    procedure ComboBox_IDChange(Sender: TObject);
    procedure BitBtn_locateClick(Sender: TObject);
    procedure PrtBtnClick(Sender: TObject);
  private
    { Private declarations }
    s_date, e_date: string;
  public
    { Public declarations }
  end;

var
  Form_EmpPay_Out: TForm_EmpPay_Out;

implementation
uses sharefun, sharevar,data;

{$R *.dfm}

procedure TForm_EmpPay_Out.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  action:=cafree;
end;                                           

procedure TForm_EmpPay_Out.AllBtnClick(Sender: TObject);
var tmpstr, tmpstr2: string;
begin
  if not adoq_emp.Active then exit;
  if adoq_emp.RecordCount =0 then exit;
  with adoq_emp do
  begin
    First;
    while not eof do
    begin
        tmpstr:=trim(adoq_emp.FieldValues['empname']);
        tmpstr2:=inttostr(adoq_emp.FieldValues['empid']);
        if tmpstr<>ListEditor1.Values[tmpstr2] then
        ListEditor1.InsertRow(tmpstr2,tmpstr,false);
        next;
    end;
  end;
end;

procedure TForm_EmpPay_Out.SigBtnClick(Sender: TObject);
var tmpstr, tmpstr2: string;
begin
  if not adoq_emp.Active then exit;
  if adoq_emp.RecordCount =0 then exit;
  tmpstr:=trim(adoq_emp.FieldValues['empname']);
  tmpstr2:=inttostr(adoq_emp.FieldValues['empid']);
  if tmpstr=ListEditor1.Values[tmpstr2] then
  begin
        msgerr(handle,'员工编号:'+tmpstr2+', 姓名:['+tmpstr+'] 已经存在!');
        exit;
  end;
  ListEditor1.InsertRow(tmpstr2,tmpstr,false);
end;

procedure TForm_EmpPay_Out.DelSigBtnClick(Sender: TObject);
begin
  if ListEditor1.Strings.Count=0 then exit;
  if msgqst(handle,'确定删除编号:['+ListEditor1.Cells[0,ListEditor1.Row]+'], 姓名:['+ListEditor1.Cells[1,ListEditor1.Row]+']的数据码?')=idno then exit;
  ListEditor1.Strings.Delete(ListEditor1.Row-1) ;
end;

procedure TForm_EmpPay_Out.DelAllBtnClick(Sender: TObject);
begin
  if ListEditor1.Strings.Count=0 then exit;
  if msgqst(handle,'确定删除当前选择的所有人员数据吗?')=idno then exit;
  ListEditor1.Strings.Clear;
end;

procedure TForm_EmpPay_Out.SaveBtnClick(Sender: TObject);
var
tmpstr, year_str, month_str,yearmonth:string;
i, emp_num_s, emp_num_e:integer;
sys_bool:boolean;
pay:real;
tmp_id:integer;
begin
  if ListEditor1.Strings.Count=0 then exit;
  emp_num_s:=ListEditor1.Strings.Count;
  emp_num_e:=0;
  year_str:=trim(syear.Text);
  month_str:=trim(smonth.Text);
  yearmonth:=formatdatetime('yyyy-mm',strtodate(year_str+'-'+month_str+'-01'));
  if length(yearmonth)<>7 then
  begin
    MsgErr(handle,'请输入正确的发放工资的年、月份!');
    exit;
  end;
  if not checkdate(yearmonth+'-10') then
  begin
    MsgErr(handle,'请输入正确的发放工资的年、月份!');
    exit;
  end;
  tmpstr:='确认将当前所选择的: ['+inttostr(ListEditor1.Strings.count)+'] 位员工的 [';
  tmpstr:=tmpstr+year_str+'年'+month_str+'月] 的工资发放吗?';
  if msgqst(handle,tmpstr)=idno then exit;
  application.ProcessMessages;
  if not get_oper_tmpid(curAdmin.user_id , tmp_id) then
  begin
    MsgErr(handle,'人员工资发放失败,请重试!');
    exit;
  end;

  //利用循环发放人员工资
  for i:=1 to ListEditor1.Strings.Count do
  begin
      //数据提交开始
      sys_bool:=true;
      datamod.ADOCon.BeginTrans;
      
      //计算当前人员的应得工资
      with ADOQ_Count do
      begin
        close; sql.Clear;
        sql.Add('select pay from emp_pay where empid=:V_empid');
        parameters.ParamValues['V_empid']:=strtoint(ListEditor1.Cells[0,i]);
        try
          open;
        except
          if i>1 then tmpstr:=tmpstr+#13+#13+'     截止到编号为:['+ListEditor1.Cells[0,i-1]+'] 人员工资发放成功,剩下其它失败!'
          else tmpstr:='人员工资发放失败,请重试!';
          msgerr(handle,tmpstr);
          sys_bool:=false;
          if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
          break; exit;
        end;
        pay:=fieldvalues['pay'];
      end;//计算当前人员的应得工资.End

      //查找是否已经发放对应人员的该月份工资
      with ADOQ_search do
      begin
        close; sql.Clear;
        tmpstr:='';
        tmpstr:=yearmonth+'_'+ListEditor1.Cells[0,i];
        sql.Add('select money from v_emp_payout where tmp_id=:v_tmp_id');
        parameters.ParamValues['v_tmp_id']:=tmpstr;
        try
          open;
        except
          if i>1 then tmpstr:=tmpstr+#13+#13+'     截止到编号为:['+ListEditor1.Cells[0,i-1]+'] 人员工资发放成功,剩下其它失败!'
          else tmpstr:='人员工资发放失败,请重试!';
          msgerr(handle,tmpstr);
          sys_bool:=false;
          if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
          break; exit;
        end;
        if recordcount>0 then
        begin
          tmpstr:='     ['+year_str+'年'+month_str+'月] 的工资已经发放!';
          tmpstr:='编号为:['+ListEditor1.Cells[0,i]+'] 的员工['+ListEditor1.Cells[1,i]+']'+#13+#13+tmpstr;
          msgok(handle,tmpstr);
          emp_num_e:=emp_num_e+1;
          if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
          continue;
        end;
      end;//查找是否已经发放对应人员的该月份工资.End

      //真正发放人员工资
      with ADOQtmp do
      begin
        close;sql.clear;
        sql.add('insert Emp_Payout (empid,yearmonth,money,tmp_id) values(:v_empid,:v_yearmonth,:V_money,:v_tmp_id)');
        parameters.ParamValues['V_empid']:=strtoint(ListEditor1.Cells[0,i]);
        parameters.ParamValues['v_yearmonth']:=yearmonth;
        parameters.ParamValues['V_money']:=pay;
        parameters.ParamValues['V_tmp_id']:=tmp_id;
        try
          execsql;
        except
          if i>1 then tmpstr:=tmpstr+#13+#13+'     截止到编号为:['+ListEditor1.Cells[0,i-1]+'] 人员工资发放成功,剩下其它失败!'
          else tmpstr:='人员工资发放失败,请重试!';
          msgerr(handle,tmpstr);
          sys_bool:=false;
          if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
          break; exit;
        end;
      end; //真正发放人员工资.End
      
      //提交数据库
      if not sys_bool then
      begin
        if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
        exit;
      end;
      if datamod.ADOCon.InTransaction then
      begin
        try
          datamod.ADOCon.CommitTrans;
        except
          if i>1 then tmpstr:=tmpstr+#13+#13+'     截止到编号为:['+ListEditor1.Cells[0,i-1]+'] 人员工资发放成功,剩下其它失败!'
          else tmpstr:='人员工资发放失败,请重试!';
          msgerr(handle,tmpstr);
          if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans; break; exit;
        end;
      end;
  end;  //利用循环发放人员工资.End
  if emp_num_e>0 then
  begin
    if emp_num_s=emp_num_e then
    begin
      tmpstr:='当前所选择的:['+inttostr(emp_num_s)+']位员工的 [';
      tmpstr:=tmpstr+year_str+'年'+month_str+'月] 的工资已经全部发放,';
      tmpstr:=tmpstr+#13+#13+'     该次发放工资均失效!';
    end
    else
    begin

⌨️ 快捷键说明

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