📄 csh510_04.pas.svn-base
字号:
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 + -