csh510_02.pas.svn-base
来自「一个用Delphi开发的ERP软件」· SVN-BASE 代码 · 共 996 行 · 第 1/3 页
SVN-BASE
996 行
unit Csh510_02;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Bas200_07, StdCtrls, Buttons, ExtCtrls, DB, ADODB,
dxExEdtr, dxEdLib, dxEditor, dxdbtrel, Menus, wwdbdatetimepicker,
dxDBELib, dxCntner, ComCtrls, dxTL, dxDBCtrl, dxDBGrid;
type
TCsh510_02Form = class(TBas200_07Form)
qryCsh150: TADOQuery;
dsCsh150: TDataSource;
qryHrm100: TADOQuery;
dsHrm100: TDataSource;
qryQuery: TADOQuery;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Shape2: TShape;
Shape3: TShape;
qryCsh140: TADOQuery;
dsCsh140: TDataSource;
lblAcct: TLabel;
lblFrom: TLabel;
lblClass: TLabel;
lblRemark: TLabel;
lblBillNo: TLabel;
lblDate: TLabel;
lblAmount: TLabel;
lblProject: TLabel;
lblDept: TLabel;
cbItem: TdxLookupTreeView;
cbDept: TdxLookupTreeView;
cbClass: TdxLookupTreeView;
edtAmount: TdxCalcEdit;
edtDate: TwwDBDateTimePicker;
lblType: TLabel;
cbType: TComboBox;
lblCode: TLabel;
cbFrom: TComboBox;
cbAcct: TComboBox;
lblObj: TLabel;
cbObj: TComboBox;
edtCode: TEdit;
edtRemark: TEdit;
edtBillNo: TEdit;
dxDBGrid1: TdxDBGrid;
lblName: TLabel;
dsCsh510: TDataSource;
adsCsh510: TADODataSet;
bbtnBack: TBitBtn;
bbtnNext: TBitBtn;
adsCsh510FCode: TStringField;
adsCsh510FLineNo: TIntegerField;
adsCsh510FOrder: TStringField;
adsCsh510FOrderLine: TIntegerField;
adsCsh510FItemID: TStringField;
adsCsh510FItemName: TStringField;
adsCsh510FItemSpec: TStringField;
adsCsh510FUnitName: TStringField;
adsCsh510FTotAmt: TFloatField;
adsCsh510FFactAmt: TFloatField;
dxDBGrid1FCode: TdxDBGridMaskColumn;
dxDBGrid1FOrder: TdxDBGridMaskColumn;
dxDBGrid1FItemID: TdxDBGridMaskColumn;
dxDBGrid1FItemName: TdxDBGridMaskColumn;
dxDBGrid1FUnitName: TdxDBGridMaskColumn;
dxDBGrid1FTotAmt: TdxDBGridMaskColumn;
dxDBGrid1FFactAmt: TdxDBGridMaskColumn;
edtCust1: TEdit;
edtCustName1: TEdit;
lblCust: TLabel;
qryOrd150: TADOQuery;
qryOrd150FNo: TAutoIncField;
qryOrd150FCode: TWideStringField;
qryOrd150FName: TWideStringField;
qryCsh500: TADOQuery;
Label1: TLabel;
edtCust: TEdit;
sbCust: TSpeedButton;
edtCustName: TEdit;
edtWork: TEdit;
sbWork: TSpeedButton;
qryTas520: TADOQuery;
qryTas520T520_001: TWideStringField;
qryTas520T520_002: TWideStringField;
qryTas520T510_002: TWideStringField;
qryTas520T510_004: TIntegerField;
qryTas520T510_016: TIntegerField;
qryTas520T510_017: TIntegerField;
qryTas520T510_005: TSmallintField;
qryTas520T510_018: TWideStringField;
qryTas520T520_003: TWideStringField;
qryTas520T520_019: TWideStringField;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure bbtnSaveClick(Sender: TObject);
procedure edtDateCloseUp(Sender: TObject);
procedure edtDateExit(Sender: TObject);
procedure sbCustClick(Sender: TObject);
procedure cbFromChange(Sender: TObject);
procedure cbObjChange(Sender: TObject);
procedure bbtnBackClick(Sender: TObject);
procedure bbtnNextClick(Sender: TObject);
procedure cbTypeChange(Sender: TObject);
procedure qryCsh500AfterScroll(DataSet: TDataSet);
procedure edtCustExit(Sender: TObject);
procedure sbWorkClick(Sender: TObject);
procedure edtWorkExit(Sender: TObject);
procedure dxDBGrid1ColumnMoved(Sender: TObject; FromIndex,
ToIndex: Integer);
private
AccNo:Integer;
AMode:String;
AOldAccNo:Integer;
AOldDate:TDateTime;
AOldBillNo:Integer;
AOldAmount:Double;
AOldTasks:String;
AOldObjType,AOldCustNo,AOldCurrNo:Integer;
procedure SaveData;
procedure SetInterface;
procedure CheckData;
procedure SetEmptyInit;
{ Private declarations }
public
procedure OpenData(AcctNo:Integer;ADate:TDateTime;ABillNo:Integer);
{ Public declarations }
end;
var
Csh510_02Form: TCsh510_02Form;
implementation
uses SYSDATA, CommFun, CshComm, HwSelData;
{$R *.dfm}
//保存数据到帐本资料表[CSH500]
procedure TCsh510_02Form.SaveData;
var
ACustNo, AItemNo, ADeptNo:string;
ADateTime:TDateTime;
ABillNo,AInOut,ACurrNo,ATypeNo:Integer;
begin
Screen.Cursor:=crHourGlass;
//取得币别编号
ACurrNo:=GetValue('select C550_005 from CSH550 where C550_001='+IntToStr(AccNo));
//修改时,先删除旧的记录,再插入新的记录
if AMode='UPD' then
begin
if cbFrom.ItemIndex=1 then //销售
begin
//反写销售发票ACR510B的已收支金额
UpdateACR510B(AOldAccNo,AOldDate,AOldBillNo,'DEL');
//反写销售定单ORD510B的已收支金额
UpdateORD510B(AOldAccNo,AOldDate,AOldBillNo,'O510B_027','DEL');
end else
if cbFrom.ItemIndex=2 then //采购
begin
//反写采购发票ACR510B的已收支金额
UpdateACP510B(AOldAccNo,AOldDate,AOldBillNo,'DEL');
//反写采购定单PUR510B的已收支金额
UpdatePUR510B(AOldAccNo,AOldDate,AOldBillNo,'P510B_027','DEL');
end;
//更新债权债务帐本表的余额字段
if (PageControl1.ActivePageIndex=1) or (cbType.ItemIndex in [2,3,4,5]) then
begin
UpdateCSH610(AOldObjType,AOldCustNo,AOldCurrNo,0,0,AOldBillNo,0,AOldDate,AOldAmount,'','','DEL');
end;
qryQuery.Close;
qryQuery.SQL.Clear;
qryQuery.SQL.Add('delete from CSH510 where C510_001='+IntToStr(AOldAccNo)+' and C510_003='+GetDateString(AOldDate)+' and C510_004='+IntToStr(AOldBillNo));
qryQuery.ExecSQL;
qryQuery.Close;
qryQuery.SQL.Clear;
qryQuery.SQL.Add('delete from CSH500 where C500_001='+IntToStr(AOldAccNo)+' and C500_003='+GetDateString(AOldDate)+' and C500_004='+IntToStr(AOldBillNo));
qryQuery.ExecSQL;
if AccNo<>AOldAccNo then
begin
//取上条记录的日期&编号
GetPriorRecord(AOldAccNo,AOldDate,AOldBillNo,ADateTime,ABillNo);
//计算余额
ReCalcBalance(AOldAccNo, ADateTime, ABillNo);
end;
end;
//取得客户编号
if edtCust.Enabled then
begin
if qryOrd150.Locate('FCode',edtCust.Text,[]) then
ACustNo:=qryOrd150.FieldByName('FNo').AsString
else
ACustNo:='';
end;
qryQuery.Close;
qryQuery.SQL.Clear;
qryQuery.SQL.Add('select * from CSH500 where C500_001 is null');
qryQuery.Open;
qryQuery.Append;
qryQuery.FieldByName('C500_001').Value:=AccNo; //帐户编号
//收支类型(1=收入单,2=支出单,3=转帐单,4=借入单,5=借出单,6=还入单,7=还出单)
ATypeNo:=1;
case cbType.ItemIndex of
0:ATypeNo:=1;
1:ATypeNo:=2;
2:ATypeNo:=4;
3:ATypeNo:=5;
4:ATypeNo:=6;
5:ATypeNo:=7;
end;
qryQuery.FieldByName('C500_002').Value:=ATypeNo;
qryQuery.FieldByName('C500_003').Value:=edtDate.Date; //收支日期
qryQuery.FieldByName('C500_004').Value:=StrToInt(edtBillNo.Text); //单据编号
qryQuery.FieldByName('C500_005').AsString:=ACustNo; //对象编号
if qryCsh140.Locate('C140_002',cbClass.Text,[]) then
qryQuery.FieldByName('C500_006').Value:=qryCsh140.FieldByName('C140_001').Value //业务类别
else
qryQuery.FieldByName('C500_006').Value:=0;
qryQuery.FieldByName('C500_007').Value:=StrToFloat(edtAmount.Text); //收支金额
AInOut:=0;
case cbType.ItemIndex of
0,2,4:AInOut:=0;
1,3,5:AInOut:=1;
end;
qryQuery.FieldByName('C500_008').Value:=AInOut; //0=收入,1=支出
qryQuery.FieldByName('C500_009').Value:=edtRemark.Text; //摘要
if edtCode.Text<>'' then qryQuery.FieldByName('C500_010').Value:=edtCode.Text; //票据编号
if cbItem.Text='' then
AItemNo:=''
else
AItemNo:=qryCsh150.FieldByName('C150_001').AsString;
qryQuery.FieldByName('C500_011').AsString:=AItemNo; //项目
if cbDept.Text='' then
ADeptNo:=''
else
ADeptNo:=qryHrm100.FieldByName('H100_001').AsString;
qryQuery.FieldByName('C500_012').AsString:=ADeptNo; //部门
qryQuery.FieldByName('C500_013').AsString:=''; //经办人员
qryQuery.FieldByName('C500_014').Value:=0; //帐户余额
qryQuery.FieldByName('C500_015').Value:=cbObj.ItemIndex; //对象类型(0=客户,1=员工,2=空白)
qryQuery.FieldByName('C500_016').Value:=cbFrom.ItemIndex; //来源类型(0=手工输入,1=销售定单,2=采购定单,3=任务工单)
qryQuery.FieldByName('C500_017').AsString:=edtCode.Text; //原始单号
qryQuery.FieldByName('C500_018').AsString:=edtWork.Text; //任务工单
qryQuery.Post;
//保存出纳帐本-子表
qryQuery.Close;
qryQuery.SQL.Clear;
qryQuery.SQL.Add('select * from CSH510 where C510_001 is null');
qryQuery.Open;
if PageControl1.ActivePageIndex=1 then
begin
adsCsh510.First;
while not adsCsh510.Eof do
begin
qryQuery.Append;
qryQuery.FieldByName('C510_001').Value:=AccNo; //帐户编号
qryQuery.FieldByName('C510_002').Value:=ATypeNo; //单据类型
qryQuery.FieldByName('C510_003').Value:=edtDate.Date; //收支日期
qryQuery.FieldByName('C510_004').Value:=edtBillNo.Text; //单据编号
qryQuery.FieldByName('C510_005').Value:=adsCsh510.FieldByName('FCode').Value; //发票编号
qryQuery.FieldByName('C510_006').Value:=adsCsh510.FieldByName('FLineNo').Value; //发票行号
qryQuery.FieldByName('C510_007').Value:=adsCsh510.FieldByName('FTotAmt').Value; //应收金额
qryQuery.FieldByName('C510_008').Value:=adsCsh510.FieldByName('FFactAmt').Value; //实收金额
qryQuery.Post;
adsCsh510.Next;
end;
end;
//取上条记录的日期&编号
GetPriorRecord(AccNo,edtDate.Date,StrToInt(edtBillNo.Text),ADateTime,ABillNo);
//计算余额
ReCalcBalance(AccNo, ADateTime, ABillNo);
if cbFrom.ItemIndex=1 then //销售
begin
//反写销售发票ACR510B的已收支金额
UpdateACR510B(AccNo,edtDate.Date,ABillNo,'ADD');
//反写销售定单ORD510B的已收支金额
UpdateORD510B(AccNo,edtDate.Date,ABillNo,'O510B_027','ADD');
end else
if cbFrom.ItemIndex=2 then //采购
begin
//反写采购发票ACP510B的已收支金额
UpdateACP510B(AccNo,edtDate.Date,ABillNo,'ADD');
//反写采购定单PUR510B的已收支金额
UpdatePUR510B(AccNo,edtDate.Date,ABillNo,'P510B_027','ADD');
end;
//插入到债权债务帐本表CSH610
if (PageControl1.ActivePageIndex=1) or (cbType.ItemIndex in [2,3,4,5]) then
begin
if cbObj.ItemIndex<>2 then
begin
case cbFrom.ItemIndex of
1:ATypeNo:=0; //债权债务(0=债权,1=债务)
2:ATypeNo:=1; //债权债务(0=债权,1=债务)
end;
case cbType.ItemIndex of
3,4:ATypeNo:=0; //债权债务(0=债权,1=债务)
2,5:ATypeNo:=1; //债权债务(0=债权,1=债务)
end;
case cbType.ItemIndex of
0:AInOut:=2; //收入单
1:AInOut:=2; //支出单
2:AInOut:=1; //借入单
3:AInOut:=1; //借出单
4:AInOut:=2; //还入单
5:AInOut:=2; //还出单
end;
UpdateCSH610(cbObj.ItemIndex,StrToInt(ACustNo),ACurrNo,AInOut,ATypeNo,StrToInt(edtBillNo.Text),3,edtDate.Date,StrToFloat(edtAmount.Text),edtBillNo.Text,edtRemark.Text,'ADD');
end;
end;
Screen.Cursor:=crDefault;
end;
procedure TCsh510_02Form.OpenData(AcctNo:Integer;ADate:TDateTime;ABillNo:Integer);
begin
//取得所有帐户名称
GetAllAcct(cbAcct,qryQuery);
qryQuery.Locate('C550_001',AcctNo,[]);
cbAcct.ItemIndex:=cbAcct.Items.IndexOf(qryQuery.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 CSH500,CSH140 where C500_002<>3 and C500_006=C140_001 order by C500_001,C500_003,C500_004');
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?