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

📄 csh510_04.pas.svn-base

📁 这是一个功能齐全的,代码完整的ERP企业信息管理系统,现在上传和大家分享
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
unit Csh510_04;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Bas200_07, DB, ADODB, dxExEdtr, dxEdLib, dxCntner, dxEditor,
  StdCtrls, Buttons, ExtCtrls, Menus, wwdbdatetimepicker;

type
  TCsh510_04Form = class(TBas200_07Form)
    Label2: TLabel;
    lblFromAcc: TLabel;
    lblToAcc: TLabel;
    lblRemark: TLabel;
    lblBillNo: TLabel;
    lblDate: TLabel;
    lblAmount: TLabel;
    edtAmount: TdxCalcEdit;
    ADOQuery5: TADOQuery;
    edtDate: TwwDBDateTimePicker;
    qryCsh500: TADOQuery;
    cbFromAcc: TComboBox;
    cbToAcc: TComboBox;
    edtBillNo: TEdit;
    edtRemark: TEdit;
    qryCsh550: TADOQuery;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure bbtnSaveClick(Sender: TObject);
    procedure edtDateCloseUp(Sender: TObject);
    procedure edtDateExit(Sender: TObject);
    procedure qryCsh500AfterScroll(DataSet: TDataSet);
  private
    AMode:string;
    AOldOutAccNo:Integer;
    AOldInAccNo:Integer;
    AOldDate:TDateTime;
    AOldBillNo:Integer;
    AOldAmount:Double;
    procedure SaveData(AccNo:Integer;AInOut:Integer);
    procedure SetInterface;
    procedure SetEmptyInit;
    function GetUserNo(AEngName:string):integer;
    { Private declarations }
  public
    procedure OpenData(AcctNo:Integer;ADate:TDateTime;ABillNo:Integer);
    { Public declarations }
  end;

var
  Csh510_04Form: TCsh510_04Form;

implementation

uses SYSDATA, CommFun, CshComm;

{$R *.dfm}

//保存数据到帐本资料表[CSH500]
//AccNo:帐户编号
//AInOut:0=收入,1=支出
//帐户上资金的转移过程:从旧帐户转入新帐户


procedure TCsh510_04Form.SaveData(AccNo:Integer;AInOut:Integer);
var
  ADate,ADateTime:TDateTime;
  ABillNo:Integer;
  ACode:string;
begin
  //修改时,先删除旧的记录,再插入新的记录
  if AMode='UPD' then
  begin
    if AInOut=0 then
    begin
      //删除旧的转入帐号
      ADOQuery5.Close;
      ADOQuery5.SQL.Clear;
      ADOQuery5.SQL.Add('delete from CSH510A where C510A_003='+IntToStr(AOldInAccNo)+' and C510A_010='+GetDateString(AOldDate)+' and C510A_002='+IntToStr(AOldBillNo));
      ADOQuery5.ExecSQL;
      if AccNo<>AOldInAccNo then
      begin
        //取上一条记录的日期&编号
        GetPriorRecord(AOldInAccNo,AOldDate,AOldBillNo,ADateTime,ABillNo);
        //计算余额
        ReCalcBalance(AOldInAccNo, ADateTime, ABillNo);
      end;
    end else
    if AInOut=1 then
    begin
      //删除旧的转出帐号
      ADOQuery5.Close;
      ADOQuery5.SQL.Clear;
      ADOQuery5.SQL.Add('delete from CSH510A where C510A_003='+IntToStr(AOldOutAccNo)+' and C510A_010='+GetDateString(AOldDate)+' and C510A_002='+IntToStr(AOldBillNo));
      ADOQuery5.ExecSQL;
      if AccNo<>AOldOutAccNo then
      begin
        //取上一条记录的日期&编号
        GetPriorRecord(AOldOutAccNo,AOldDate,AOldBillNo,ADateTime,ABillNo);
        //计算余额
        ReCalcBalance(AOldOutAccNo, ADateTime, ABillNo);
      end;
    end;
  end;
//新增的时候
  ACode:=GetAutoCode('CSH510');
showmessage(ACode);
  ADOQuery5.Close;
  ADOQuery5.SQL.Clear;
  ADOQuery5.SQL.Add('select top 1 * from CSH510A');
  ADOQuery5.Open;
//在这里需要更新CSH510A,CSH510B这两个表,关键的是:单据的自动编号
//处理的一笔记录,没有复杂的关系
  ADOQuery5.Append;
//所有内容要重新写过
  ADOQuery5.FieldByName('C510A_001').Value:=ACode;   //收支单号
  ADOQuery5.FieldByName('C510A_002').Value:=StrToInt(edtBillNo.Text);   //顺序编号
  ADOQuery5.FieldByName('C510A_003').Value:=AccNo;                      //帐户编号(关联帐户表)
  ADOQuery5.FieldByName('C510A_004').Value:=3;                          //单据类型(0=建帐单,1=收入单,2=支出单,3=转帐单,4=借入单,5=借出单,6=还入单,7=还出单)
  ADOQuery5.FieldByName('C510A_005').Value:=AInOut;                     //收入支出(0=收入,1=支出)
  ADOQuery5.FieldByName('C510A_006').Value:=0;                          //来源类型(0=手工输入,1=销售定单,2=采购定单,3=任务工单)
  ADOQuery5.FieldByName('C510A_007').Value:=2;                          //对象类型(0=客户,1=员工,2=空白)
//  ADOQuery5.FieldByName('C510A_008').Value:=;                         //对象编号(存放客户编号,员工编号)
  ADOQuery5.FieldByName('C510A_009').Value:=StrToFloat(edtAmount.Text); //收支金额(收支金额汇总)
  ADOQuery5.FieldByName('C510A_010').Value:=edtDate.Date;               //收支日期
//  ADOQuery5.FieldByName('C510A_011').Value:=;                         //票据编号(银行帐使用(未使用))
  ADOQuery5.FieldByName('C510A_012').Value:=GetUserNo(AUserName);       //经办人员(关联员工表)
  ADOQuery5.FieldByName('C510A_013').Value:=0;                          //帐户余额(怎么计算这个字段呢?)
//  ADOQuery5.FieldByName('C510A_014').Value:=;                         //原始单号
  ADOQuery5.FieldByName('C510A_015').Value:=edtRemark.Text;             //摘要说明
  ADate:=GetServerDate;
  ADOQuery5.FieldByName('C510A_016').Value:=FormatDateTime('yyyy-mm-dd hh:mm:ss',ADate);   //制单日期
  ADOQuery5.FieldByName('C510A_017').Value:=AUserName;                  //制单人员
  ADOQuery5.FieldByName('C510A_018').Value:=FormatDateTime('yyyy-mm-dd hh:mm:ss',ADate);   //修改日期
  ADOQuery5.FieldByName('C510A_019').Value:=AUserName;                  //修改人员
  ADOQuery5.Post;

  ADOQuery5.Close;
  ADOQuery5.SQL.Clear;
  ADOQuery5.SQL.Add('select top 1 * from CSH510B');
  ADOQuery5.Open;
  ADOQuery5.Append;
  ADOQuery5.FieldByName('C510B_001').Value:=ACode;  //收支单号(关联主表)
  ADOQuery5.FieldByName('C510B_002').Value:=1;   //收支行号(子表行号)
//  ADOQuery5.FieldByName('C510B_003').Value:=;  //发票编号(能够关系到采购定单和销售定单得到料品的详细信息)
//  ADOQuery5.FieldByName('C510B_004').Value:=;  //发票行号(能够得到发票上每一行的应收金额       来源类型是销售发票和采购发票时显示)
//  ADOQuery5.FieldByName('C510B_005').Value:=;  //应收金额(应收应付金额)
  ADOQuery5.FieldByName('C510B_006').Value:=StrToFloat(edtAmount.Text);  //实收金额(实际交易金额)
//  ADOQuery5.FieldByName('C510B_007').Value:=;  //业务分类(关联业务表)
//  ADOQuery5.FieldByName('C510B_008').Value:=;  //项目编号(关联项目表)
//  ADOQuery5.FieldByName('C510B_009').Value:=;  //部门编号(关联部门表)
//  ADOQuery5.FieldByName('C510B_010').Value:=;  //任务工单(来源类型是任务工单时显示)
  ADOQuery5.FieldByName('C510B_011').Value:=edtRemark.Text;  //备注说明(备注说明)
  ADOQuery5.Post;

  //取上条记录的日期&编号
  GetPriorRecord(AccNo,edtDate.Date,StrToInt(edtBillNo.Text),ADateTime,ABillNo);
  //计算余额
  ReCalcBalance(AccNo, ADateTime, ABillNo);
end;

procedure TCsh510_04Form.OpenData(AcctNo:Integer;ADate:TDateTime;ABillNo:Integer);
begin
  //取得所有帐户名称
  GetAllAcct(cbFromAcc,qryCsh550);
  GetAllAcct(cbToAcc,qryCsh550);
  qryCsh550.Locate('C550_001',AcctNo,[]);
  cbFromAcc.ItemIndex:=cbFromAcc.Items.IndexOf(qryCsh550.FieldByName('C550_002').AsString);
  cbToAcc.ItemIndex:=cbToAcc.Items.IndexOf(qryCsh550.FieldByName('C550_002').AsString);

  if ABillNo=0 then AMode:='ADD' else AMode:='UPD';
  qryCsh500.DisableControls;
  qryCsh500.Close;
  qryCsh500.SQL.Clear;
  qryCsh500.SQL.Add('select * from CSH510A where C510A_004=3 order by C510A_003,C510A_010,C510A_002');
  qryCsh500.Open;
  qryCsh500.Locate('C510A_003;C510A_010;C510A_002',VarArrayOf([AcctNo,ADate,ABillNo]),[]);
  qryCsh500.EnableControls;
  qryCsh500AfterScroll(qryCsh500);
end;

procedure TCsh510_04Form.SetInterface;
begin
  lblFromAcc.Caption:=GetDBString('CSH51004001');  //转出帐户
  lblToAcc.Caption:=GetDBString('CSH51004002');    //转入帐户
  lblRemark.Caption:=GetDBString('CSH51004003');   //摘要说明
  lblBillNo.Caption:=GetDBString('CSH51004004');   //单据编号
  lblDate.Caption:=GetDBString('CSH51004005');     //转帐日期
  lblAmount.Caption:=GetDBString('CSH51004006');   //转帐金额
end;

procedure TCsh510_04Form.FormCreate(Sender: TObject);
begin
  inherited;
  SetInterface;

  edtDate.Date:=GetServerDate;
  //取票据编号
  edtBillNo.Text:=GetBillNo(edtDate.Date);
end;

procedure TCsh510_04Form.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
//
end;

procedure TCsh510_04Form.bbtnSaveClick(Sender: TObject);
var
  AOutAccNo:Integer;        //转出帐户编号
  AInAccNo:Integer;         //转入帐户编号
  AOutStartDate:TDateTime;  //转出帐户的建帐日期
  AInStartDate:TDateTime;   //转入帐户的建帐日期
  ABalance:Double;
begin
//保存
  //检验帐户的合法性
  if (cbFromAcc.Text='') or (cbToAcc.Text='') then
  begin
    ShowMsg('UMS10000169');  //转出帐户或转入帐户不能为空
    if cbFromAcc.Text='' then cbFromAcc.SetFocus
    else if cbToAcc.Text='' then cbToAcc.SetFocus;
    Abort;
  end;
  if cbFromAcc.Text=cbToAcc.Text then
  begin
    ShowMsg('UMS10000170');   //转出帐户或转入帐户不能相同
    cbToAcc.SetFocus;
    Abort;
  end;
  //取得转出帐户编号及建帐日期
  ADOQuery5.Close;
  ADOQuery5.SQL.Clear;
  ADOQuery5.SQL.Add('select C550_001,C550_007 from CSH550 where C550_002='+''''+cbFromAcc.Text+'''');
  ADOQuery5.Open;
  AOutAccNo:=ADOQuery5.Fields[0].Value;
  AOutStartDate:=ADOQuery5.Fields[1].Value;
  //取得转入帐户编号及建帐日期
  ADOQuery5.Close;
  ADOQuery5.SQL.Clear;
  ADOQuery5.SQL.Add('select C550_001,C550_007 from CSH550 where C550_002='+''''+cbToAcc.Text+'''');
  ADOQuery5.Open;
  AInAccNo:=ADOQuery5.Fields[0].Value;
  AInStartDate:=ADOQuery5.Fields[1].Value;
  //检验票据编号的合法性

⌨️ 快捷键说明

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