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

📄 gzlr_unit.~pas

📁 通用人力资源系统,分类可以自设定 可以熟练掌握DELPHI语言
💻 ~PAS
📖 第 1 页 / 共 3 页
字号:
unit gzlr_Unit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, DBCtrls, DBNavPlus, Grids, DBGridEh, DB,
  DBTables, CalcExpress, PrnDbgeh, WinSkinData, ComCtrls, StrUtils,
  Animate, GIFCtrl, Mask, RzStatus, printers, DJPrint, ToolEdit, RzEdit,
  RzPrgres, RzDBProg, RzDBStat;

type
  Tgzlr = class(TForm)
    Table2: TTable;
    DataSource2: TDataSource;
    CalcExpress1: TCalcExpress;
    Panel1: TPanel;
    DBGridEh1: TDBGridEh;
    Panel2: TPanel;
    Button1: TButton;
    dbgehp1: TPrintDBGridEh;
    Button3: TButton;
    sb1: TStatusBar;
    table1: TQuery;
    q_qj: TQuery;
    DataSource3: TDataSource;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    cb_bz: TComboBox;
    cb_fc: TComboBox;
    cb_dw: TComboBox;
    tb_dw: TTable;
    tb_bm: TTable;
    tb_bz: TTable;
    Button2: TButton;
    Button4: TButton;
    lab_xs: TLabel;
    RxGIFAnimator1: TRxGIFAnimator;
    cb_yuefen: TComboBox;
    tb_yuefen: TTable;
    Label4: TLabel;
    Panel3: TPanel;
    Splitter1: TSplitter;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit7: TDBEdit;
    DBEdit8: TDBEdit;
    DBEdit9: TDBEdit;
    DBEdit10: TDBEdit;
    CheckBox1: TCheckBox;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label23: TLabel;
    Label24: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    DBEdit12: TDBEdit;
    DBEdit20: TDBEdit;
    DBEdit21: TDBEdit;
    DBEdit22: TDBEdit;
    DBEdit23: TDBEdit;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    TabSheet3: TTabSheet;
    Label22: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    CheckBox4: TCheckBox;
    Label29: TLabel;
    DBEdit25: TDBEdit;
    rzt: TRzClockStatus;
    tb_mz: TTable;
    dbc_mz: TDBComboBox;
    dbc_xb: TDBComboBox;
    dbc_zzmm: TDBComboBox;
    dbc_jszw: TDBComboBox;
    tb_jszw: TTable;
    dbc_zw: TDBComboBox;
    tb_zw: TTable;
    dbc_rysf: TDBComboBox;
    dbc_dfyh: TDBComboBox;
    tb_dfyh: TTable;
    dbc_sfff: TDBComboBox;
    dbc_whcd: TDBComboBox;
    tb_whcd: TTable;
    dbc_xl: TDBComboBox;
    dbc_byxx: TDBComboBox;
    tb_byxx: TTable;
    Label30: TLabel;
    dbc_zy: TDBComboBox;
    tb_zy: TTable;
    DataSource1: TDataSource;
    Button5: TButton;
    p: TPrinterSetupDialog;
    values: TMemo;
    q_vars: TDBMemo;
    vars: TMemo;
    qj_memo: TDBMemo;
    dateedit1: TRzDateTimeEdit;
    dateedit2: TRzDateTimeEdit;
    dateedit3: TRzDateTimeEdit;
    Label31: TLabel;
    dbc_gw: TDBComboBox;
    tb_gw: TTable;
    DBM_ll: TDBMemo;
    Label32: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure DBGridEh1ColumnsUpdateData(Sender: TObject;
      var Text: string; var Value: Variant; var UseText, Handled: Boolean);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
    procedure DBGridEh1Exit(Sender: TObject);
    procedure DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
      AFont: TFont; var Background: TColor; State: TGridDrawState);
    procedure DBGridEh1KeyPress(Sender: TObject; var Key: Char);
    procedure Table2AfterScroll(DataSet: TDataSet);
    procedure cb_dwChange(Sender: TObject);
    procedure cb_fcChange(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure cb_yuefenChange(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure CheckBox2Click(Sender: TObject);
    procedure CheckBox3Click(Sender: TObject);
    procedure CheckBox4Click(Sender: TObject);
    procedure dbc_dfyhChange(Sender: TObject);
    procedure dbc_jszwChange(Sender: TObject);
    procedure dbc_zwChange(Sender: TObject);
    procedure dbc_xlChange(Sender: TObject);
    procedure dbc_byxxChange(Sender: TObject);
    procedure dbc_zyChange(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure DateEdit2Change(Sender: TObject);
    procedure rdte_rq1Change(Sender: TObject);
    procedure dateedit3Change(Sender: TObject);
    procedure dbc_jszwExit(Sender: TObject);
    procedure dbc_zwExit(Sender: TObject);
    procedure dbc_whcdChange(Sender: TObject);
    procedure dbc_whcdExit(Sender: TObject);
    procedure dbc_byxxExit(Sender: TObject);
    procedure dbc_zyExit(Sender: TObject);
    procedure dbc_gwChange(Sender: TObject);
    procedure dbc_gwExit(Sender: TObject);
    procedure dbc_xlExit(Sender: TObject);
  private
    { Private declarations }
  public
   { Public declarations }
    aa: real; //参与计算的公用变量
    bb: integer;
    dybb_bz: integer; //打印报表标志
  end;

var
  gzlr: Tgzlr;
  gzlrbz: integer;
  gzlrshezhi: integer;
  chuqin: integer;
implementation

uses Unit1, rl_wait_Unit;

{$R *.dfm}

procedure Tgzlr.Button1Click(Sender: TObject);
var args: array[0..150] of extended; // array of arguments - variable values
  i, j: integer;
  ASs: array[0..150] of extended;
  bSs: array[0..150] of string;
  qj_gongshi, ME: string;
  qj_chazhao: integer;
begin
// form2.Caption := form2.Caption + '    ' + dbgrideh1.Columns[bb - 1].FieldName; //dbgrideh1.Columns[bb].FieldName;
  table1.First;
  for i := 1 to 30 do
    table1.Next;
  with table1 do
    while not eof do
    begin
   // showmessage(inttostr(table1.RecNo)+'   '+floattostr(aa)+'  '+inttostr(bb));
      if table2[table1.FieldByName('gzdm').AsString] = null then
        ASS[TABLE1.RecNo] := 0
      else
        ASS[TABLE1.RecNo] := table2[table1.FieldByName('gzdm').AsString];
      bSS[TABLE1.RecNo] := table1['gzdm'];
      TABLE1.Next;
    end;
  //form2.Caption := form2.Caption + '  ' + FLOATTOSTR(ass[1]);
  TABLE1.First;
  for i := 1 to 30 do
    table1.Next;
  with table1 do
    while not eof do
    begin
//为通用公式计算过程
      if table1['biaozhi'] = 1 then
      begin
        vars.Lines.Clear;
        vars.Lines.AddStrings(q_vars.Lines);
     //  showmessage('dddddddddddd');
        Values.Lines.Clear;
        for i := 0 to Vars.Lines.Count - 1 do
        begin
        // showmessage(INTTOSTR(I));
          if uppercase(vars.Lines.Strings[i]) = uppercase('chuqin') then
            Values.Lines.Add(inttostr(chuqin))
          else
            if uppercase(vars.Lines.Strings[i]) = uppercase(dbgrideh1.Columns[dbgrideh1.col - 1].FieldName) then
            begin
        //
              Values.Lines.Add(floattostr(aa))
            end
            else
            begin
              for j := 0 to 150 do
              begin
                if vars.Lines.Strings[i] = bss[j] then
                begin
            //  SHOWMESSAGE(vars.Lines.Strings[i]);
             //    showmessage(floattostr(aSS[j]));
                  Values.Lines.Add(floattostr(aSS[j]));
                end
              end;
            //Values.Lines.Add(floattostr(ASS[TABLE1.RecNo]));
            end;

        end;
// ME:='VARS='+inttostr(vars.Lines.Count)+'   VALUES='+inttostr(values.Lines.COUNT)+'   ;;;'+table1.FieldByName('XSMC').AsString;
 //SHOWMESSAGE('aa');
        if (Vars.Lines.Count = Values.Lines.Count) then
        begin
       //set expression to calculate
          CalcExpress1.Formula := table1['gongshi']; ;
    // set used variables list
          CalcExpress1.Variables := Vars.Lines;
    // prepare arguments
//    SetLength(args,Values.Lines.Count);
          for i := 0 to Values.Lines.Count - 1 do
            args[i] := StrToFloat(Values.Lines[i]);
    // calculate expression
          ASS[TABLE1.RecNo] := round((CalcExpress1.calc(args) * 100)) / 100;
          table2.Edit;
          if round(CalcExpress1.calc(args) * 100) / 100 = 0 then
            table2[table1.FieldByName('gzdm').AsString] := null
          else
            table2[table1.FieldByName('gzdm').AsString] := round(CalcExpress1.calc(args) * 100) / 100;
        //showmessage(table1.FieldByName('gzdm').AsString+'  '+ floattostr(args[0]));
        end
        else
          MessageDlg('变量数与变量值数应相同!', mtInformation, [mbOk], 0);

      end;
//通用计算公式结束
//         showmessage(inttostr(table1.RecNo)+'   '+inttostr(Vars.Lines.Count)+'  '+inttostr(Values.Lines.Count));
//{
//以下为计算区间公式
      if table1['biaozhi'] = 4 then
      begin
        qj_chazhao := 0;
        vars.Lines.Clear;
        q_qj.Open;
        q_qj.First;
        with q_qj do
          while not eof do
          begin
            if qj_chazhao = 0 then
              if uppercase(dbgrideh1.Columns[dbgrideh1.col - 1].FieldName) = UPPERCASE(qj_memo.Lines.Strings[0]) then
              begin
                if (q_qj['gzdm'] = table1['gzdm']) and (aa >= q_qj['min_x']) and (aa <= q_qj['max_x']) then
                begin
                  qj_chazhao := 1;
                  vars.Lines.AddStrings(qj_memo.Lines);
                  qj_gongshi := q_qj['gongshi'];
                end;
              end
              else
              begin
                if table2[qj_memo.Lines.Strings[0]] = null then
                begin
                  if (q_qj['gzdm'] = table1['gzdm']) and (0 >= q_qj['min_x']) and (0 <= q_qj['max_x']) then
                  begin
                    qj_chazhao := 1;
                    vars.Lines.AddStrings(qj_memo.Lines);
                    qj_gongshi := q_qj['gongshi'];
                  end;
                end
                else
                begin
                  if (q_qj['gzdm'] = table1['gzdm']) and (table2[qj_memo.Lines.Strings[0]] >= q_qj['min_x']) and (table2[qj_memo.Lines.Strings[0]] <= q_qj['max_x']) then
                  begin
                    qj_chazhao := 1;
                    vars.Lines.AddStrings(qj_memo.Lines);
                    qj_gongshi := q_qj['gongshi'];
                  end;
                end;
              end;
            next;
          end;
        q_qj.close;
        if qj_chazhao = 0 then
        begin
          showmessage('输入的区间变量数据有误或区间公式设置有误,请返回查找!');
          vars.Lines.Clear;

        end
        else
        begin
          Values.Lines.Clear;
          for i := 0 to Vars.Lines.Count - 1 do
          begin
            if uppercase(vars.Lines.Strings[i]) = uppercase('chuqin') then
              Values.Lines.Add(inttostr(chuqin))
            else
              if uppercase(vars.Lines.Strings[i]) = uppercase(dbgrideh1.Columns[dbgrideh1.col - 1].FieldName) then
              begin
          //showmessage('sdjfhsdkf');
                Values.Lines.Add(floattostr(aa))
              end
              else
              begin
                for j := 0 to 150 do
                begin
                  if vars.Lines.Strings[i] = bss[j] then
                  begin
                 // showmessage(floattostr(ass[TABLE1.RecNo]));
                    Values.Lines.Add(floattostr(aSS[j]));
                  end
                end;
            //Values.Lines.Add(floattostr(ASS[TABLE1.RecNo]));
              end;

          end;
// ME:='VARS='+inttostr(vars.Lines.Count)+'   VALUES='+inttostr(values.Lines.COUNT)+FLOATTOSTR(table2[table1.FieldByName('gzdm').AsString]);
// SHOWMESSAGE(ME);
          if (Vars.Lines.Count = Values.Lines.Count) then
          begin
       //set expression to calculate
            CalcExpress1.Formula := qj_gongshi;
    // set used variables list
            CalcExpress1.Variables := Vars.Lines;
    // prepare arguments
//    SetLength(args,Values.Lines.Count);
            for i := 0 to Values.Lines.Count - 1 do
              args[i] := StrToFloat(Values.Lines[i]);
    // calculate expression
            ASS[TABLE1.RecNo] := round((CalcExpress1.calc(args) * 100)) / 100;
            table2.Edit;
            if round(CalcExpress1.calc(args) * 100) / 100 = 0 then
              table2[table1.FieldByName('gzdm').AsString] := null
            else
              table2[table1.FieldByName('gzdm').AsString] := round(CalcExpress1.calc(args) * 100) / 100;
        //showmessage('sdjfhsdkf');
          end
          else
            MessageDlg('变量列表与变量对应值的列表不符!', mtInformation, [mbOk], 0);

        end;
      end;

//区间公式计算结束
//}
      table1.Next;
    end;

end;

procedure Tgzlr.DBGridEh1ColumnsUpdateData(Sender: TObject;
  var Text: string; var Value: Variant; var UseText, Handled: Boolean);
begin
  if value = EmptyStr then
    aa := 0
  else
    aa := value;
  bb := dbgrideh1.col;
  button1.Click;
  if aa = 0 then
    text := EmptyStr;
end;

procedure Tgzlr.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  with table2 do
    if State = dsEdit then
      Post;
 // table1.Close;
 // table2.Close;
end;

procedure Tgzlr.Button3Click(Sender: TObject);

begin
  if dybb_bz > 0 then
  begin
    dbgehp1.PageHeader.CenterText.Clear;
    dbgehp1.Pagefooter.LeftText.Clear;
    dbgehp1.Title.Clear;
    dbgehp1.Pagefooter.LeftText.Add('审核人:                 制表人:       ' + '   打印日期:' + FormatDateTime('yyyy年mm月dd日', Date()));
    if dybb_bz = 1 then
    begin
      dbgehp1.Title.Add('单位汇总' + '  ' + copy(pchar(cb_yuefen.Text), 1, strlen(pchar(cb_yuefen.text)) - 6));
      dbgehp1.PageHeader.CenterText.Add(cb_dw.text + ' 薪资报表');
    end;
    if dybb_bz = 2 then
    begin
      dbgehp1.PageHeader.CenterText.Add(cb_dw.text + '  ' + cb_fc.text + '  薪资报表');
      dbgehp1.Title.Add(copy(pchar(cb_yuefen.Text), 1, strlen(pchar(cb_yuefen.text)) - 6));
    end;
    if dybb_bz = 3 then
    begin
      dbgehp1.PageHeader.CenterText.Add(cb_dw.text + '  ' + cb_fc.Text + '    薪资报表');
      dbgehp1.Title.Add(cb_bz.Text + '   ' + copy(pchar(cb_yuefen.Text), 1, strlen(pchar(cb_yuefen.text)) - 6));
    end;
      //bgehp1.BeforeGridText.Add('单位:' + cb_dw.text + '        ' + cb_fc.text + '       ' + cb_bz.Text + '       ' + FormatDateTime('yyyy年mm月dd日 ', Date()));
    dbgehp1.Preview;
  end;
end;

procedure Tgzlr.FormCreate(Sender: TObject);
var
  i: integer;
begin
  dbc_gw.Items.Clear;
  dbc_gw.Items.Add('无');
  tb_gw.Open;
  tb_gw.First;
  with tb_gw do
    while not eof do
    begin
      dbc_gw.Items.Add(tb_gw['gwmc']);
      next;
    end;
  tb_gw.close;
//
  dbc_mz.Items.Clear;
  dbc_mz.Items.Add('无');
  tb_mz.Open;
  tb_mz.First;
  with tb_mz do
    while not eof do
    begin
      dbc_mz.Items.Add(tb_mz['mzmc']);
      next;
    end;
  tb_mz.close;
//
  dbc_jszw.Items.Clear;
  dbc_jszw.Items.Add('无');
  tb_jszw.Open;
  tb_jszw.First;
  with tb_jszw do
    while not eof do
    begin
      dbc_jszw.Items.Add(tb_jszw['jszwmc']);
      next;
    end;
  tb_jszw.close;
//
  dbc_zw.Items.Clear;
  dbc_zw.Items.Add('无');
  tb_zw.Open;
  tb_zw.First;

⌨️ 快捷键说明

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