📄 csh550_01.pas.svn-base
字号:
unit Csh550_01;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, BAS200_01, dxExEdtr, ActnList, DB, ADODB, Menus, dxCntner, dxTL,
dxDBCtrl, dxDBGrid, ComCtrls, ExtCtrls,
ToolWin, StdCtrls, DBCtrls, dxEditor, dxEdLib, dxDBELib, Mask,
wwdbdatetimepicker, dxDBTLCl, dxGrClms;
type
TCsh550_01Form = class(TBas200_01Form)
lblName: TLabel;
lblDesc: TLabel;
lblType: TLabel;
lblCurr: TLabel;
lblPerson: TLabel;
lblDate: TLabel;
lblAmount: TLabel;
edtName: TDBEdit;
edtDesc: TDBEdit;
edtAmount: TDBEdit;
cbPerson: TDBLookupComboBox;
cbType: TComboBox;
cbCurr: TDBLookupComboBox;
dsHrm150: TDataSource;
qryHrm150: TADOQuery;
dsGld100: TDataSource;
qryGld100: TADOQuery;
dtpDate: TwwDBDateTimePicker;
ADOQuery1C550_001: TAutoIncField;
ADOQuery1C550_002: TStringField;
ADOQuery1C550_003: TStringField;
ADOQuery1C550_005: TIntegerField;
ADOQuery1C550_006: TIntegerField;
ADOQuery1C550_007: TDateTimeField;
ADOQuery1C550_008: TFloatField;
dxDBGrid1C550_002: TdxDBGridMaskColumn;
dxDBGrid1C550_003: TdxDBGridMaskColumn;
dxDBGrid1C550_004: TdxDBGridMaskColumn;
dxDBGrid1G100_003: TdxDBGridMaskColumn;
dxDBGrid1H150_003: TdxDBGridMaskColumn;
dxDBGrid1C550_007: TdxDBGridDateColumn;
dxDBGrid1C550_008: TdxDBGridMaskColumn;
ADOQuery1G100_003: TStringField;
ADOQuery1H150_003: TStringField;
ADOQuery1C550_004: TSmallintField;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ADOQuery1AfterScroll(DataSet: TDataSet);
procedure ActSaveExecute(Sender: TObject);
procedure ActInsertExecute(Sender: TObject);
procedure ActUpdateExecute(Sender: TObject);
procedure ActDeleteExecute(Sender: TObject);
procedure ADOQuery1C550_004GetText(Sender: TField; var Text: String;
DisplayText: Boolean);
procedure ActPrintExecute(Sender: TObject);
private
AOldName:string;
procedure CheckAccoutUsed(AccNo:integer);
function GetUserNo(AEngName:string):integer;
{ Private declarations }
public
procedure SetInterface; override;
procedure ReportGetValue(const ParName: String; var ParValue: Variant); override;
{ Public declarations }
end;
var
Csh550_01Form: TCsh550_01Form;
implementation
uses CommFun, SYSDATA;
{$R *.dfm}
//检验帐户是否正在使用
procedure TCsh550_01Form.CheckAccoutUsed(AccNo:integer);
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select * from CSH510A where C510A_004<>0 and C510A_003='+IntToStr(AccNo));
SYSDM.qryQuery.Open;
if not SYSDM.qryQuery.IsEmpty then
begin
ShowMsg('UMS10000175'); //该帐户正在使用,操作无效
Abort;
end;
end;
procedure TCsh550_01Form.SetInterface;
begin
inherited;
Caption:=GetDBString('CSH55001001'); //新建帐户
lblName.Caption:=GetDBString('CSH55001002'); //帐户名称
lblDesc.Caption:=GetDBString('CSH55001003'); //帐户说明
lblType.Caption:=GetDBString('CSH55001004'); //帐户类型
lblCurr.Caption:=GetDBString('CSH55001005'); //币别
lblPerson.Caption:=GetDBString('CSH55001006'); //经办人
lblDate.Caption:=GetDBString('CSH55001007'); //建帐日期
lblAmount.Caption:=GetDBString('CSH55001008'); //余额
ADOQuery1C550_002.DisplayLabel:=GetDBString('CSH55001002'); //帐户名称
ADOQuery1C550_003.DisplayLabel:=GetDBString('CSH55001003'); //帐户说明
ADOQuery1C550_004.DisplayLabel:=GetDBString('CSH55001004'); //帐户类型
ADOQuery1G100_003.DisplayLabel:=GetDBString('CSH55001005'); //币别
ADOQuery1H150_003.DisplayLabel:=GetDBString('CSH55001006'); //经办人
ADOQuery1C550_007.DisplayLabel:=GetDBString('CSH55001007'); //建帐日期
ADOQuery1C550_008.DisplayLabel:=GetDBString('CSH55001008'); //余额
cbType.Items.Clear;
cbType.Items.Add(GetDBString('CSH55001009')); //现金帐
cbType.Items.Add(GetDBString('CSH55001010')); //银行帐
end;
procedure TCsh550_01Form.FormCreate(Sender: TObject);
begin
inherited;
SetInterface;
qryGld100.Open;
qryHrm150.Open;
ADOQuery1AfterScroll(ADOQuery1);
end;
procedure TCsh550_01Form.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
inherited;
qryGld100.Close;
qryHrm150.Close;
end;
procedure TCsh550_01Form.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
inherited;
AOldName:=trim(ADOQuery1C550_002.Value);
cbType.ItemIndex:=ADOQuery1C550_004.Value;
end;
procedure TCsh550_01Form.ActSaveExecute(Sender: TObject);
var
AUserNo,AccNo:Integer;
ACode:string;
ADate:TDateTime;
begin
//保存
//帐户名称
if trim(edtName.Text)='' then
begin
ShowMsg('UMS10000176'); //帐户名称不能为空
edtName.SetFocus;
Abort;
end;
if AOldName<>trim(edtName.Text) then
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select * from CSH550 where C550_002='+''''+trim(edtName.Text)+'''');
SYSDM.qryQuery.Open;
if not SYSDM.qryQuery.IsEmpty then
begin
ShowMsg('UMS10000255'); //帐户名称已存在,请重新输入
edtName.SetFocus;
Abort;
end;
end;
//币别
if trim(cbCurr.Text)='' then
begin
ShowMsg('UMS10000020'); //币别名称不能为空
cbCurr.SetFocus;
Abort;
end;
//建帐日期
if trim(dtpDate.Text)='' then
begin
ShowMsg('UMS10000017'); //建帐日期不能为空
dtpDate.SetFocus;
Abort;
end;
//余额
if trim(edtAmount.Text)='' then
begin
ShowMsg('UMS10000256'); //余额不能为空
edtAmount.SetFocus;
Abort;
end;
AccNo:=0;
try
SYSDM.ADOC.BeginTrans;
ADOQuery1C550_004.Value:=cbType.ItemIndex;
inherited;
ADOQuery1.Refresh;
AccNo:=ADOQuery1C550_001.AsInteger;
//删除旧数据
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select C510A_001 from CSH510A where C510A_004=0 and C510A_003='+IntToStr(AccNo));
SYSDM.qryQuery.Open;
ACode:=SYSDM.qryQuery.FieldByName('C510A_001').AsString;
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('delete from CSH510A where C510A_004=0 and C510A_003='+IntToStr(AccNo));
SYSDM.qryQuery.ExecSQL;
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('delete from CSH510B where C510B_001='+''''+ACode+'''');
SYSDM.qryQuery.ExecSQL;
//插入新数据
ACode:=GetAutoCode('CSH510');
AUserNo:=GetUserNo(AUserName);
ADate:=GetServerDate;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select * from CSH510A');
SYSDM.qryQuery.Open;
SYSDM.qryQuery.Append;
SYSDM.qryQuery.FieldByName('C510A_001').Value:=ACode; //收支单号
SYSDM.qryQuery.FieldByName('C510A_002').Value:=0; //顺序编号
SYSDM.qryQuery.FieldByName('C510A_003').Value:=AccNo; //帐户编号(关联帐户表)
SYSDM.qryQuery.FieldByName('C510A_004').Value:=0; //单据类型(0=建帐单,1=收入单,2=支出单,3=转帐单,4=借入单,5=借出单,6=还入单,7=还出单)
SYSDM.qryQuery.FieldByName('C510A_005').Value:=0; //收入支出(0=收入,1=支出)
SYSDM.qryQuery.FieldByName('C510A_006').Value:=0; //来源类型(0=手工输入,1=销售定单,2=采购定单,3=任务工单)
SYSDM.qryQuery.FieldByName('C510A_007').Value:=2; //对象类型(0=客户,1=员工,2=空白)
// SYSDM.qryQuery.FieldByName('C510A_008').Value:=; //对象编号(存放客户编号,员工编号)
SYSDM.qryQuery.FieldByName('C510A_009').Value:=0; //收支金额(收支金额汇总)
SYSDM.qryQuery.FieldByName('C510A_010').Value:=ADOQuery1.FieldByName('C550_007').value; //收支日期
// SYSDM.qryQuery.FieldByName('C510A_011').Value:=; //票据编号(银行帐使用(未使用))
SYSDM.qryQuery.FieldByName('C510A_012').Value:=AUserNo; //经办人员(关联员工表)
SYSDM.qryQuery.FieldByName('C510A_013').Value:=ADOQuery1.FieldByName('C550_008').Value; //帐户余额
// SYSDM.qryQuery.FieldByName('C510A_014').Value:=; //原始单号
SYSDM.qryQuery.FieldByName('C510A_015').Value:=GetDBString('CSH55001012'); //摘要说明
SYSDM.qryQuery.FieldByName('C510A_016').Value:=FormatDateTime('yyyy-mm-dd hh:mm:ss',ADate); //制单日期
SYSDM.qryQuery.FieldByName('C510A_017').Value:=AUserName; //制单人员
SYSDM.qryQuery.FieldByName('C510A_018').Value:=FormatDateTime('yyyy-mm-dd hh:mm:ss',ADate); //修改日期
SYSDM.qryQuery.FieldByName('C510A_019').Value:=AUserName; //修改人员
SYSDM.qryQuery.Post;
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select top 1 * from CSH510B');
SYSDM.qryQuery.Open;
//在这里需要更新CSH510A,CSH510B这两个表,关键的是:单据的自动编号
//处理的一笔记录,没有复杂的关系
SYSDM.qryQuery.Append;
SYSDM.qryQuery.FieldByName('C510B_001').Value:=ACode; //收支单号(关联主表)
SYSDM.qryQuery.FieldByName('C510B_002').Value:=1; //收支行号(子表行号)
//SYSDM.qryQuery.FieldByName('C510B_003').Value:=; //发票编号(能够关系到采购定单和销售定单得到料品的详细信息)
//SYSDM.qryQuery.FieldByName('C510B_004').Value:=; //发票行号(能够得到发票上每一行的应收金额 来源类型是销售发票和采购发票时显示)
//SYSDM.qryQuery.FieldByName('C510B_005').Value:=; //应收金额(应收应付金额)
SYSDM.qryQuery.FieldByName('C510B_006').Value:=0; //实收金额(实际交易金额)
//SYSDM.qryQuery.FieldByName('C510B_007').Value:=; //业务分类(关联业务表)
//SYSDM.qryQuery.FieldByName('C510B_008').Value:=; //项目编号(关联项目表)
//SYSDM.qryQuery.FieldByName('C510B_009').Value:=; //部门编号(关联部门表)
//SYSDM.qryQuery.FieldByName('C510B_010').Value:=; //任务工单(来源类型是任务工单时显示)
SYSDM.qryQuery.FieldByName('C510B_011').Value:=GetDBString('CSH55001012'); //备注说明(备注说明)
SYSDM.qryQuery.Post;
//插入权限表
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('insert into SYS500C(S500C_001,S500C_002,S500C_003,S500C_004)');
SYSDM.qryQuery.SQL.Add('select S500A_001,C550_001,''ACC'',0 from CSH550,SYS500A');
SYSDM.qryQuery.SQL.Add('where not exists(select 1 from SYS500C where S500C_001=S500A_001 and S500C_003=''ACC'' and S500C_002=C550_001)');
SYSDM.qryQuery.ExecSQL;
SYSDM.ADOC.CommitTrans;
except
SYSDM.ADOC.RollbackTrans;
ShowMsg(SYSDM.ADOC.Errors[0].Description,1);
ActUpdate.Execute;
Abort;
end;
ADOQuery1.Refresh;
ADOQuery1.Locate('C550_001',AccNo,[]);
end;
procedure TCsh550_01Form.ActInsertExecute(Sender: TObject);
var
ACurrNo:Integer;
begin
inherited;
//新增
if not (ADOQuery1.State in [dsInsert]) then ADOQuery1.Insert;
cbType.ItemIndex:=0;
//取得本位币
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select * from GLD100 where G100_004='+GetBoolean(True));
SYSDM.qryQuery.Open;
ACurrNo:=SYSDM.qryQuery.FieldByName('G100_001').Value;
ADOQuery1C550_004.Value:=0;
ADOQuery1C550_005.Value:=ACurrNo;
ADOQuery1C550_007.Value:=Date;
ADOQuery1C550_008.Value:=0;
edtName.SetFocus;
end;
procedure TCsh550_01Form.ActUpdateExecute(Sender: TObject);
begin
//修改
CheckAccoutUsed(ADOQuery1C550_001.Value);
inherited;
edtName.SetFocus;
if not (ADOQuery1.State in [dsEdit]) then ADOQuery1.Edit;
end;
procedure TCsh550_01Form.ActDeleteExecute(Sender: TObject);
var
AQuery:TADOQuery;
begin
//删除
CheckAccoutUsed(ADOQuery1C550_001.Value);
if ADOQuery1.IsEmpty then
begin
ShowMsg('UMS10000002'); //表记录为空,操作无效
Abort;
end;
AQuery:=TADOQuery.Create(nil);
AQuery.Connection:=SYSDM.ADOC;
if ShowDialog('UMS10000008')=IDYES then //确定要删除此记录吗?
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select * from CSH510A where C510A_003='+IntToStr(ADOQuery1.FieldByName('C550_001').Value));
SYSDM.qryQuery.Open;
//删除帐户相关的收支记录
SYSDM.qryQuery.First;
while not SYSDM.qryQuery.Eof do
begin
AQuery.Close;
AQuery.SQL.Clear;
AQuery.SQL.Add('delete * from CSH510B where C510B_001='+''''+SYSDM.qryQuery.FieldByName('C510A_001').AsString+'''');
AQuery.ExecSQL;
SYSDM.qryQuery.Next;
end;
AQuery:=nil;
AQuery.Free;
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('delete from CSH510A where C510A_003='+IntToStr(ADOQuery1.FieldByName('C550_001').Value));
SYSDM.qryQuery.ExecSQL;
//删除相关的权限记录
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('delete from SYS500C where S500C_003=''ACC'' and S500C_002='+IntToStr(ADOQuery1C550_001.Value));
SYSDM.qryQuery.ExecSQL;
ADOQuery1.Delete;
end else
Abort;
// inherited;
end;
procedure TCsh550_01Form.ReportGetValue(const ParName: String;
var ParValue: Variant);
begin
inherited;
if ParName='C550_002' then ParValue:=GetDBString('CSH55001002') //'帐户名称'
else if ParName='C550_003' then ParValue:=GetDBString('CSH55001003') //'帐户说明'
else if ParName='C550_004' then ParValue:=GetDBString('CSH55001004') //'帐户类型'
else if ParName='C550_005' then ParValue:=GetDBString('CSH55001005') //'币别'
else if ParName='C550_006' then ParValue:=GetDBString('CSH55001006') //'经办人'
else if ParName='C550_007' then ParValue:=GetDBString('CSH55001007') //'建帐日期'
else if ParName='C550_008' then ParValue:=GetDBString('CSH55001008') //'余额'
end;
procedure TCsh550_01Form.ADOQuery1C550_004GetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
inherited;
if ADOQuery1C550_004.AsString='' then Exit;
case ADOQuery1C550_004.AsInteger of
0:Text:=GetDBString('CSH55001009'); //现金帐
1:Text:=GetDBString('CSH55001010'); //银行帐
end;
end;
procedure TCsh550_01Form.ActPrintExecute(Sender: TObject);
begin
try
SYSDM.frReport2.OnGetValue:=ReportGetValue;
inherited;
finally
SYSDM.frReport2.OnGetValue:=nil;
end;
end;
function TCsh550_01Form.GetUserNo(AEngName: string): integer;
var
AQyery:TADOQuery;
begin
AQyery:=TADOQuery.Create(nil);
AQyery.Connection:=SYSDM.ADOC;
AQyery.Close;
AQyery.SQL.Clear;
AQyery.SQL.Add('select * from SYS500A where S500A_002='+''''+AEngName+'''');
AQyery.Open;
Result:=AQyery.FieldByName('S500A_001').Value;
AQyery:=nil;
AQyery.Free;
end;
initialization
RegisterClass(TCsh550_01Form);
finalization
UnRegisterClass(TCsh550_01Form);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -