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

📄 etp_month_acc.pas

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

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls, Buttons, Grids, DBGrids, ExtCtrls,
  ComCtrls, Mask, DBCtrls,Menus, ImgList, Spin,DateUtils, RpCon, RpConDS,
  RpBase, RpSystem, RpDefine, RpRave;
type
  TForm_Etp_Month_ACC = class(TForm)
    ADOQ_Etp_shouzhi: TADOQuery;
    RvProject1: TRvProject;
    RvSystem1: TRvSystem;
    Rv_GJSLMX: TRvDataSetConnection;
    DBGrid: TDBGrid;
    DS_Etp_ShouZhi: TDataSource;
    adoqtmp: TADOQuery;
    ADOQupdate: TADOQuery;
    ADOQEtp_shouzhi: TADOQuery;
    ADOQ_TJFlag: TADOQuery;
    ADOQ_Etp_shouzhiid: TAutoIncField;
    ADOQ_Etp_shouzhiyearmonth: TStringField;
    ADOQ_Etp_shouzhishou: TBCDField;
    ADOQ_Etp_shouzhiyinzhi: TBCDField;
    ADOQ_Etp_shouzhishizhi: TBCDField;
    ADOQ_Etp_shouzhiZhiself: TBCDField;
    ADOQ_Etp_shouzhibalance: TBCDField;
    Panel1: TPanel;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    syear: TSpinEdit;
    smonth: TSpinEdit;
    eyear: TSpinEdit;
    emonth: TSpinEdit;
    CheckBox1: TCheckBox;
    Label_Display: TLabel;
    PrtBtn: TBitBtn;
    SearchBtn: TBitBtn;
    ExtBtn: TBitBtn;
    ProgressBar1: TProgressBar;
    RvProject2: TRvProject;
    RvSystem2: TRvSystem;
    Rv_TJ_Etp_Month: TRvDataSetConnection;
    procedure FormShow(Sender: TObject);
    procedure SearchBtnClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure PrtBtnClick(Sender: TObject);
  private
    { Private declarations }
    sdate, edate: string;
  public
    { Public declarations }
  end;

var
   Form_Etp_Month_ACC: TForm_Etp_Month_ACC;

implementation

uses sharevar,sharefun,data;

{$R *.dfm}

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

procedure TForm_Etp_Month_ACC.FormShow(Sender: TObject);
var tmpdatetime:TDateTime;
begin
  GetHostDateTime(datamod.ADOCon,tmpdatetime);
  syear.MaxValue:=yearof(tmpdatetime);
  syear.Text:=inttostr(yearof(tmpdatetime));
  eyear.MaxValue:=yearof(tmpdatetime);
  eyear.Text:=inttostr(yearof(tmpdatetime));
  emonth.Text:=inttostr(monthof(tmpdatetime));
end;

procedure TForm_Etp_Month_ACC.SearchBtnClick(Sender: TObject);
var
  DataTJ_flag:boolean;
begin
  sdate:=syear.Text +'-'+ smonth.Text;
  edate:=eyear.Text +'-'+ emonth.Text;
  if not checkdate(sdate+'-10') then
  begin
    MsgErr(handle,'请输入正确的开始日期!');
    syear.SetFocus;
    exit;
  end;
  if not checkdate(edate+'-10') then
  begin
    MsgErr(handle,'请输入正确的结束日期!');
    eyear.SetFocus;
    exit;
  end;

  if strtodate(edate+'-1') < strtodate(sdate+'-1') then
  begin
    msgerr(handle,'结束时间不能小于起始时间!');
    eyear.SetFocus;
    exit;
  end;

  //如果是重新统计则执行以下操作
  if CheckBox1.Checked then
  begin
     //2.计算企业的主要收入(A~当前日期)************************************************************
     with adoqtmp do
     begin
        close;sql.clear;
        sql.add('select yearmonth,sum(money) as total from V_earning where tjflag=0');
        sql.add('group by yearmonth order by yearmonth');
        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 Etp_ShouZhi where yearmonth=:V_yearmonth');
            parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
            try
              execsql; open;
            except
              datatj_flag:=false;
              if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
              break; exit;
            end;//2.1.End
            //2.2如果该员工该月存在收支记录,则修改收入
            if recordcount>0 then
            begin
              close; sql.Clear;
              sql.Add('update Etp_ShouZhi set shou=shou+:v_total');
              sql.Add('where yearmonth=:V_yearmonth');
              parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
              parameters.ParamValues['v_total']:=adoqtmp.FieldValues['total'];
              try
                execsql;
              except
                DataTJ_flag:=false;
                if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
                break; exit;
              end;

            end//2.2.End
            else
            //如果没找到则添加.Else
            begin
              //2.3如果个人月收支表中没找到记录则直接新增
                close; sql.Clear;
                sql.Add('insert into Etp_ShouZhi(yearmonth,shou)');
                sql.Add('values(:v_yearmonth,:v_shou)');

                parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
                parameters.ParamValues['v_shou']:=adoqtmp.FieldValues['total'];
                try
                  execsql;
                except
                  DataTJ_flag:=False;
                  if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
                  break; exit;
                end;
            end;//如果没找到则添加.Else.End

            //2.5.1如果入总账成功则修改[Tjflag]字段值
            with ADOQ_TJFlag do
            begin
                close; sql.Clear;
                sql.Add('update earning set Tjflag=1');
                try
                  execsql;
                except
                  DataTJ_flag:=False;
                  if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
                  break; exit;
                end;
            end;//2.5.1.End
          end;//with ADOQupdate do.End
          
          //2.提交数据
          if not DataTJ_flag then
          begin
            if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
            MsgErr(handle,'统计人员收支总账报表失败--工序收入!');
            break; exit;
          end;
          if datamod.ADOCon.InTransaction then
          begin
            try
              datamod.ADOCon.CommitTrans;
            except
              MsgErr(handle,'统计人员收支总账报表失败--工序收入!');
              if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
              break; exit;
            end;
          end;
          next;
        end;
     end;//2.计算企业的主要收入结束.End


     //3.计算企业月应支工资的金额数(从个人收入表中得到)************************************************************
     DataTJ_flag:=true;    //初始化标量,用以控制循环的进度
     with ADOQEtp_shouzhi do
     begin
        //取出当前表内所有有关的数据
        close;sql.Clear;
        sql.add('select * from Etp_ShouZhi order by yearmonth desc');
        open;
     end;
     
     with adoqtmp do
     begin
        close; sql.clear;
        sql.add('select yearmonth,(sum(shou)+sum(fshou)) as total from personshouzhi');
        sql.add('group by yearmonth order by yearmonth');
        open;
        //初始化进程条
        ProgressBar1.Max:=adoqtmp.Recordcount;
        ProgressBar1.Position:=0;
        Label_Display.Visible:=true;
        application.ProcessMessages;
        
        first;
        while not eof do
        begin
          //2.数据开始提交
          ProgressBar1.Position:=ProgressBar1.Position+1;
          application.ProcessMessages;
          DataTJ_flag:=true;
          datamod.ADOCon.BeginTrans;
          with ADOQupdate do
          begin
            //2.1得到当月的收支总表的记录
            close; sql.Clear;
            sql.Add('select * from Etp_ShouZhi where yearmonth=:V_yearmonth');
            parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
            try
              execsql; open;
            except
              DataTJ_flag:=false;
              if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
              break; exit;
            end;//2.1.End
            //2.2如果该员工该月存在收支记录,则修改收入
            if recordcount>0 then
            begin
              close; sql.Clear;
              sql.Add('update Etp_ShouZhi set yinzhi=:v_total');
              sql.Add('where yearmonth=:V_yearmonth');
              parameters.ParamValues['V_yearmonth']:=adoqtmp.FieldValues['yearmonth'];
              parameters.ParamValues['v_total']:=adoqtmp.FieldValues['total'];
              try
                execsql;
              except
                DataTJ_flag:=false;
                if datamod.ADOCon.InTransaction then datamod.ADOCon.RollbackTrans;
                break; exit;
              end;

⌨️ 快捷键说明

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