You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
488 lines
15 KiB
Plaintext
488 lines
15 KiB
Plaintext
unit dmAccu;
|
|
|
|
interface
|
|
|
|
uses
|
|
SysUtils, Classes, DBXpress, DB, SqlExpr, FMTBcd, DBClient, Provider,SqlTimSt,
|
|
kbmMemTable,Dialogs,Variants, DBTables,ADODB,inifiles,DateUtils;
|
|
|
|
type
|
|
TdmAcc = class(TDataModule)
|
|
dsrVou: TDataSource;
|
|
dsrVouItems: TDataSource;
|
|
memTblAccItems: TkbmMemTable;
|
|
DsrAccItems: TDataSource;
|
|
ADOTblVou: TADOTable;
|
|
ADOTblVouitems: TADOTable;
|
|
ADOQueryTemp: TADOQuery;
|
|
tempQuery: TADOQuery;
|
|
ADOTblVouitemsORDNO: TIntegerField;
|
|
ADOTblVouitemsITEMNO: TIntegerField;
|
|
ADOTblVouitemsACCID: TStringField;
|
|
ADOTblVouitemsPACCID: TStringField;
|
|
ADOTblVouitemsACCNAME: TStringField;
|
|
ADOTblVouitemsPROPERTY: TSmallintField;
|
|
ADOTblVouitemsGRADE: TSmallintField;
|
|
ADOTblVouitemsDC: TStringField;
|
|
ADOTblVouitemsSUBLEGTYPE: TStringField;
|
|
ADOTblVouitemsAMTDR: TFloatField;
|
|
ADOTblVouitemsAMTCR: TFloatField;
|
|
ADOTblVouitemsFCY: TStringField;
|
|
ADOTblVouitemsFCYNO: TStringField;
|
|
ADOTblVouitemsFCYEXRATE: TFloatField;
|
|
ADOTblVouitemsFCYDR: TFloatField;
|
|
ADOTblVouitemsFCYCR: TFloatField;
|
|
ADOTblVouitemsQTY: TStringField;
|
|
ADOTblVouitemsQTYSPECS: TStringField;
|
|
ADOTblVouitemsQTYUNIT: TStringField;
|
|
ADOTblVouitemsPRICEDR: TFloatField;
|
|
ADOTblVouitemsPRICECR: TFloatField;
|
|
ADOTblVouitemsQTYDR: TFloatField;
|
|
ADOTblVouitemsQTYCR: TFloatField;
|
|
ADOTblVouitemsEXPLAN: TStringField;
|
|
ADOTblVouitemsVERIFYED: TStringField;
|
|
ADOTblVouitemsVERIFYLASTBLC: TFloatField;
|
|
ADOTblVouitemsDEPTACC: TStringField;
|
|
ADOTblVouitemsEMPLACC: TStringField;
|
|
ADOTblVouitemsCORPACC: TStringField;
|
|
ADOTblVouitemsITEMACC: TStringField;
|
|
ADOTblVouitemsDEPTID: TStringField;
|
|
ADOTblVouitemsEMPLID: TStringField;
|
|
ADOTblVouitemsCORPID: TStringField;
|
|
ADOTblVouitemsPITEMID: TIntegerField;
|
|
ADOTblVouitemsITEMID: TIntegerField;
|
|
ADOTblVouitemsFIELD1: TStringField;
|
|
ADOTblVouitemsFIELD2: TStringField;
|
|
ADOTblVouitemsFIELD3: TStringField;
|
|
ADOTblVouitemsFIELD4: TStringField;
|
|
ADOTblVouitemsFIELD5: TStringField;
|
|
ADOTblVouitemsFIELD6: TStringField;
|
|
ADOTblVouitemsFIELD7: TStringField;
|
|
ADOTblVouitemsCF: TSmallintField;
|
|
ADOTblVouitemsCUSTBE: TStringField;
|
|
ADOTblVouitemsCORPBF: TStringField;
|
|
ADOTblVouitemsSTATUS: TSmallintField;
|
|
ADOTblVouitemsBSNO: TStringField;
|
|
ADOTblVouitemsMBLNO: TStringField;
|
|
ADOTblVouitemsFSETTLCODE: TStringField;
|
|
ADOTblVouitemsFSETTLENO: TStringField;
|
|
ADOTblVouitemsEMPL: TStringField;
|
|
ADOTblVouitemsDEPT: TStringField;
|
|
procedure cdsVouNewRecord(DataSet: TDataSet);
|
|
procedure cdsVouItemsNewRecord(DataSet: TDataSet);
|
|
procedure DataModuleCreate(Sender: TObject);
|
|
procedure cdsVouItemsAfterPost(DataSet: TDataSet);
|
|
procedure cdsVouItemsAfterDelete(DataSet: TDataSet);
|
|
procedure cdsVouItemsAfterOpen(DataSet: TDataSet);
|
|
procedure tblVouItemsBeforeClose(DataSet: TDataSet);
|
|
procedure tblVouItemsBeforePost(DataSet: TDataSet);
|
|
procedure tblVouItemsCalcFields(DataSet: TDataSet);
|
|
procedure ADOTblVouNewRecord(DataSet: TDataSet);
|
|
|
|
private
|
|
Plans:String;
|
|
|
|
function GetVoucherOrdNo: Integer;
|
|
function GetVoucherNo(const OrdNo : Integer; const sts : TSQLTimeStamp; const VKNo : String): String;
|
|
function GetLineNo(OrdNo : Integer): Integer;
|
|
function LoadAccounts(Reload : Boolean) : Boolean;
|
|
// function LoadCorp(Reload : Boolean) : Boolean;
|
|
procedure UpdateVoucherAmt;
|
|
procedure AccIDFieldChange(Sender : TField);
|
|
procedure FCYDRFieldChange(Sender : TField);
|
|
procedure FCYCRFieldChange(Sender : TField);
|
|
// procedure InitSQL(iKind : SmallInt);
|
|
// procedure SetFieldsProviderFlags(DataSet : TDataSet; FieldNames : String; pfFlag : TProviderFlag);
|
|
|
|
|
|
|
|
{ Private declarations }
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
dmAcc:TdmAcc;
|
|
VoucherDate:TDatetime;
|
|
|
|
// function GetCorpID(helpmem:String):Integer;
|
|
|
|
implementation
|
|
|
|
uses u_main, my_sys_function, u_data_share;
|
|
|
|
|
|
{$R *.dfm}
|
|
|
|
|
|
|
|
function TdmAcc.GetVoucherOrdNo: Integer;
|
|
begin
|
|
with ADOQueryTemp do
|
|
try
|
|
Close;SQL.Clear;
|
|
SQL.Add('Select Max(OrdNo) OrdNo from Vouchers');
|
|
Open;
|
|
if not FieldByName('OrdNo').IsNull then
|
|
Result:=FieldByName('OrdNo').AsInteger+1
|
|
else Result:=1;
|
|
finally
|
|
Close;
|
|
end;
|
|
end;
|
|
|
|
function TdmAcc.GetVoucherNo(const OrdNo : Integer; const sts : TSQLTimeStamp; const VKNo : String): String;
|
|
var iResult : Integer;
|
|
function sResult : String;
|
|
begin
|
|
Result:=IntToStr(iResult);
|
|
while Length(Result)<6 do
|
|
Result:='0'+Result;
|
|
end;
|
|
|
|
begin
|
|
with ADOQueryTemp do
|
|
try
|
|
Close;SQL.Clear;
|
|
SQL.Add('Select VouNo from Vouchers');
|
|
SQL.Add('where Year(VouDate)=:AccYear and Month(VouDate)=:AccMonth');
|
|
SQL.Add('and VKNo=:VKNo and OrdNo<>:OrdNo');
|
|
Parameters.ParamByName('AccYear').Value:=sts.Year;
|
|
Parameters.ParamByName('AccMonth').value:=sts.Month;
|
|
Parameters.ParamByName('VKNo').value:=VKNo;
|
|
Parameters.ParamByName('OrdNo').value:=OrdNo;
|
|
SQL.Add('Order By VouNo');
|
|
Open;
|
|
iResult:=1;
|
|
with ADOQueryTemp do
|
|
if not (Bof and Eof) then
|
|
while Locate('VouNo', sResult, []) do
|
|
Inc(iResult);
|
|
|
|
Result:=sResult;
|
|
finally
|
|
Close;
|
|
end;
|
|
end;
|
|
|
|
function TdmAcc.GetLineNo(OrdNo : Integer): Integer;
|
|
begin
|
|
with ADOQueryTemp do
|
|
try
|
|
Close;SQL.Clear;
|
|
SQL.Add('Select Max(ItemNo) Itemno from VouItems');
|
|
SQL.Add(Format('where OrdNo=%d', [OrdNo]));
|
|
Open;
|
|
if not FieldByName('Itemno').IsNull then
|
|
Result:=FieldByName('Itemno').AsInteger+1
|
|
else Result:=1;
|
|
finally
|
|
Close;
|
|
end;
|
|
end;
|
|
|
|
function TdmAcc.LoadAccounts(Reload : Boolean) : Boolean;
|
|
var CanLoad : Boolean;
|
|
begin
|
|
Result:=true;
|
|
CanLoad:=Reload or (not memTblAccItems.Active);
|
|
if not CanLoad then exit;
|
|
with ADOQueryTemp do
|
|
try
|
|
Close;SQL.Clear;
|
|
SQL.Add('Select * from ACCITEMS');
|
|
SQL.Add('Order By AccID');
|
|
Open;
|
|
memTblAccitems.LoadFromDataSet(ADOQueryTemp, [mtcpoStructure,mtcpoProperties,mtcpoFieldIndex]);
|
|
finally
|
|
close;
|
|
end;
|
|
end;
|
|
{
|
|
function TdmAcc.LoadCorp(Reload : Boolean) : Boolean;
|
|
var CanLoad : Boolean;
|
|
aQuery:TQuery;
|
|
begin
|
|
Result:=true;
|
|
CanLoad:=Reload or (not memTblCorp.Active);
|
|
if not CanLoad then exit;
|
|
aQuery:=CreateQuery;
|
|
with aQuery do
|
|
try
|
|
Close;SQL.Clear;
|
|
SQL.Add('Select * from Customer');
|
|
SQL.Add('Order By CustID');
|
|
Open;
|
|
memTblCorp.LoadFromDataSet(aQuery, [mtcpoStructure,mtcpoProperties,mtcpoFieldIndex]);
|
|
finally
|
|
FreeAndNil(aQuery);
|
|
end;
|
|
end;
|
|
}
|
|
|
|
procedure TdmAcc.cdsVouNewRecord(DataSet: TDataSet);
|
|
begin
|
|
{
|
|
VoucherDate.Hour:=0;
|
|
VoucherDate.Minute:=0;
|
|
VoucherDate.Second:=0;
|
|
VoucherDate.Fractions:=0;
|
|
}
|
|
with DataSet do begin
|
|
FieldByName('OrdNo').AsInteger:=GetVoucherOrdNo;
|
|
FieldByName('VKNo').AsString:=inttostr(aVKNO);
|
|
FieldByName('VouDate').AsDateTime:=VoucherDate;
|
|
FieldByName('AccYear').AsInteger:=Yearof(Voucherdate);
|
|
FieldByName('AccMonth').AsInteger:=monthof(Voucherdate);
|
|
FieldByName('VouNo').AsString:=GetVoucherNo(FieldByName('OrdNo').AsInteger, DateTimeToSQLTimeStamp(FieldByName('VouDate').AsDateTime), FieldByName('VKNo').AsString);
|
|
FieldByName('Prepared').AsString:=employee;
|
|
FieldByName('ItemsCount').AsInteger:=0;
|
|
end;
|
|
end;
|
|
|
|
procedure TdmAcc.cdsVouItemsNewRecord(DataSet: TDataSet);
|
|
begin
|
|
|
|
with DataSet do begin
|
|
FieldByName('OrdNo').AsInteger:=AdotblVou.FieldByName('OrdNo').AsInteger;
|
|
FieldByName('ItemNo').AsInteger:=GetLineNo(FieldByName('OrdNo').AsInteger);
|
|
FieldByName('QTY').AsString:='1';
|
|
FieldByName('CF').AsInteger:=0;
|
|
FieldByName('EXPLAN').AsString:='';
|
|
FieldByName('PRICEDR').AsFloat:=0.0;
|
|
FieldByName('PRICECR').AsFloat:=0.0;
|
|
FieldByName('QTYDR').AsFloat:=0.0;
|
|
FieldByName('QTYCR').AsFloat:=0.0;
|
|
FieldByName('VERIFYED').AsString:='F';
|
|
FieldByName('VERIFYLASTBLC').AsFloat:=0.0;
|
|
FieldByName('FIELD1').AsString:='';
|
|
FieldByName('FIELD2').AsString:='';
|
|
FieldByName('FIELD3').AsString:='';
|
|
FieldByName('FIELD4').AsString:='';
|
|
FieldByName('FIELD5').AsString:='';
|
|
FieldByName('FIELD6').AsString:='';
|
|
FieldByName('FIELD7').AsString:='';
|
|
end;
|
|
end;
|
|
|
|
procedure TdmAcc.DataModuleCreate(Sender: TObject);
|
|
|
|
begin
|
|
|
|
{
|
|
with SQLConnectionAcc do begin
|
|
Params.LoadFromFile(ExtractFilePath(ParamStr(0))+'Account.ini');
|
|
try
|
|
Connected:=true;
|
|
except
|
|
exit;
|
|
end;
|
|
end;
|
|
}
|
|
|
|
LoadAccounts(true);
|
|
// LoadCorp(True);
|
|
// QryDept.Open;
|
|
// QrySaleID.Open;
|
|
// tblSTLMODE.Open;
|
|
// InitSQL(1);
|
|
// cdsVou.Open;
|
|
// cdsVouItems.Open;
|
|
// CreatememTblVou;
|
|
end;
|
|
|
|
procedure TdmAcc.UpdateVoucherAmt;
|
|
var AmtDR, AmtCR,D,C : Double;
|
|
OrdNo,Counts : Integer;
|
|
begin
|
|
OrdNo:=AdotblVouItems.FieldByName('OrdNo').AsInteger;
|
|
D:=AdotblVou.FieldByName('AmtDR').AsFloat;
|
|
C:=AdotblVou.FieldByName('AmtCR').AsFloat;
|
|
with ADOQueryTemp do
|
|
try
|
|
Close;SQL.Clear;
|
|
SQL.Add('Select Sum(AmtDR) AmtDR, Sum(AmtCR) AmtCR');
|
|
SQL.Add('from VouItems');
|
|
SQL.Add(Format('where OrdNo=%d', [OrdNo]));
|
|
Open;
|
|
|
|
AmtDR:=StrToFloatDef(FormatFloat('0.00;-0.00;0.0',FieldByName('AmtDR').AsFloat), 0);
|
|
AmtCR:=StrToFloatDef(FormatFloat('0.00;-0.00;0.0',FieldByName('AmtCR').AsFloat), 0);
|
|
|
|
Close;SQL.Clear;
|
|
SQL.Add('Select Count(ItemNo) itemcount from VouItems');
|
|
SQL.Add(Format('where OrdNo=%d', [OrdNo]));
|
|
Open;
|
|
counts:=fieldByName('itemcount').AsInteger;
|
|
|
|
if (D<>AmtDR)or(C<>AmtCR) then begin
|
|
Close;SQL.Clear;
|
|
SQL.Add('Update VOUCHERS set AMTDR=:AmtDR,AmtCR=:AmtCR,ITEMSCOUNT=:counts');
|
|
SQL.Add(Format('where OrdNo=%d', [OrdNo]));
|
|
Parameters.ParamByName('AmtDR').value:=AmtDR;
|
|
Parameters.ParamByName('AmtCR').value:=AmtCR;
|
|
Parameters.ParamByName('counts').value:=counts;
|
|
ExecSQL;
|
|
end;
|
|
finally
|
|
Close;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
procedure TdmAcc.cdsVouItemsAfterPost(DataSet: TDataSet);
|
|
begin
|
|
UpdateVoucherAmt;
|
|
end;
|
|
|
|
procedure TdmAcc.cdsVouItemsAfterDelete(DataSet: TDataSet);
|
|
begin
|
|
UpdateVoucherAmt;
|
|
end;
|
|
|
|
procedure TdmAcc.cdsVouItemsAfterOpen(DataSet: TDataSet);
|
|
begin
|
|
DataSet.FieldByName('AccID').OnChange:=AccIDFieldChange;
|
|
DataSet.FieldByName('FCYDR').OnChange:=FCYDRFieldChange;
|
|
DataSet.FieldByName('FCYCR').OnChange:=FCYCRFieldChange;
|
|
end;
|
|
procedure TdmAcc.AccIDFieldChange(Sender : TField);
|
|
begin
|
|
memTblAccitems.First;
|
|
while not memTblAccItems.Eof do begin
|
|
if Trim(memTblAccItems.FieldByName('AccID').AsString)=Trim(Sender.AsString) then begin
|
|
Sender.DataSet.Edit;
|
|
Sender.DataSet.FieldByName('AccName').AsString:=memTblAccItems.fieldByName('AccName').AsString;
|
|
Sender.DataSet.FieldByName('DC').asString:=memTblAccItems.fieldByName('DC').AsString;
|
|
Sender.DataSet.FieldByName('FCY').asString:=memTblAccItems.fieldByName('FCY').AsString;
|
|
Sender.DataSet.FieldByName('DEPTACC').asString:=memTblAccItems.fieldByName('DEPTACC').AsString;
|
|
Sender.DataSet.FieldByName('EMPLACC').asString:=memTblAccItems.fieldByName('EMPLACC').AsString;
|
|
Sender.DataSet.FieldByName('CORPACC').asString:=memTblAccItems.fieldByName('CORPACC').AsString;
|
|
Sender.DataSet.FieldByName('ITEMACC').asString:=memTblAccItems.fieldByName('ITEMACC').AsString;
|
|
if (Sender.AsString<>AccInfo.DebitAccID) and (Sender.AsString<>AccInfo.CreditAccID) then
|
|
Sender.DataSet.FieldByName('EXPLAN').AsString:=Plans;
|
|
exit;
|
|
end;
|
|
memTblAccItems.Next;
|
|
end;
|
|
end;
|
|
procedure TdmAcc.tblVouItemsBeforeClose(DataSet: TDataSet);
|
|
begin
|
|
UpdateVoucherAmt;
|
|
end;
|
|
|
|
procedure TdmAcc.FCYCRFieldChange(Sender: TField);
|
|
begin
|
|
if Sender.AsFloat=0 then exit;
|
|
//Sender.DataSet.FieldByName('FCYEXRATE').AsFloat:=8.32;
|
|
Sender.DataSet.FieldByName('FCY').AsString:='T';
|
|
Sender.DataSet.FieldByName('AMTCR').AsFloat:=StrToFloatDef(FormatFloat('0.00;-0.00;0.0', Sender.AsFloat*Sender.DataSet.FieldByName('FCYEXRATE').AsFloat), 0);
|
|
end;
|
|
|
|
procedure TdmAcc.FCYDRFieldChange(Sender: TField);
|
|
begin
|
|
if Sender.AsFloat=0 then exit;
|
|
// Sender.DataSet.FieldByName('FCYEXRATE').AsFloat:=8.32;
|
|
Sender.DataSet.FieldByName('FCY').AsString:='T';
|
|
Sender.DataSet.FieldByName('AMTDR').AsFloat:=StrToFloatDef(FormatFloat('0.00;-0.00;0.0', Sender.AsFloat*Sender.DataSet.FieldByName('FCYEXRATE').AsFloat), 0);
|
|
end;
|
|
|
|
procedure TdmAcc.tblVouItemsBeforePost(DataSet: TDataSet);
|
|
begin
|
|
if (DataSet.FieldByName('AccID').AsString=AccInfo.DebitAccID) or (DataSet.FieldByName('AccID').AsString=AccInfo.CreditAccID) then
|
|
Plans:=DataSet.fieldByName('EXPLAN').AsString;
|
|
if DataSet.FieldByName('CorpBf').AsString<>'F' then DataSet.FieldByName('CorpBf').AsString:='T';
|
|
end;
|
|
|
|
procedure TdmAcc.tblVouItemsCalcFields(DataSet: TDataSet);
|
|
{
|
|
function DrCorpDisplayName(cCusCode:String ) : String;
|
|
var
|
|
CorpNo,Corp:String;
|
|
begin
|
|
with ADOQuery1 do begin
|
|
Close;SQL.Clear;
|
|
SQL.Add('Select cCusCode, cCusName,cCusAbbName from Customer');
|
|
SQL.Add(Format('where cCusCode=%s', [cCusCode]));
|
|
Open;
|
|
CorpNo:=Trim(FieldByName('cCusCode').AsString);
|
|
Corp:=Trim(FieldByName('cCusAbbName').AsString);
|
|
if Corp='' then
|
|
Corp:=Trim(FieldByName('cCusAbbName').AsString);
|
|
Result:=Trim(Format('%s %s', [CorpNo, Corp]));
|
|
end;
|
|
end;
|
|
|
|
function CrCorpDisplayName(cCusCode:String ) : String;
|
|
var
|
|
CorpNo,Corp:String;
|
|
begin
|
|
with ADOQuery1 do begin
|
|
Close;SQL.Clear;
|
|
SQL.Add('Select cVenCode, cVenName,cVenAbbName from Vendor');
|
|
SQL.Add(Format('where cVenCode=%s', [cCusCode]));
|
|
Open;
|
|
CorpNo:=Trim(FieldByName('cVenCode').AsString);
|
|
Corp:=Trim(FieldByName('CName').AsString);
|
|
if Corp='' then
|
|
Corp:=Trim(FieldByName('SName').AsString);
|
|
Result:=Trim(Format('%s %s', [CorpNo, Corp]));
|
|
end;
|
|
end;
|
|
}
|
|
{
|
|
function CorpDisplayName(cCusCode:String ) : String;
|
|
var
|
|
CorpNo,Corp:String;
|
|
aQuery:TQuery;
|
|
begin
|
|
aQuery:=CreateQuery;
|
|
try
|
|
with aQuery do begin
|
|
Close;SQL.Clear;
|
|
SQL.Add('Select sname from Customer where Custid=:CustID');
|
|
ParamByName('CustID').AsString:=cCusCode;
|
|
Open;
|
|
Corp:=Trim(FieldByName('sname').AsString);
|
|
Result:=Trim(Format('%s %s', [CorpNo, Corp]));
|
|
end;
|
|
finally
|
|
FreeAndNil(aQuery);
|
|
end;
|
|
end;
|
|
}
|
|
begin
|
|
{
|
|
if DataSet.FieldByName('AccID').AsString=AccInfo.DebitAccID then
|
|
DataSet.FieldByName('AccNameCalc').AsString:=DataSet.FieldByName('AccName').AsString+CorpDisplayName(DataSet.FieldByName('CorpID').AsString)
|
|
else
|
|
DataSet.FieldByName('AccNameCalc').AsString:=DataSet.FieldByName('AccName').AsString+CorpDisplayName(DataSet.FieldByName('CorpID').AsString);
|
|
}
|
|
end;
|
|
|
|
procedure TdmAcc.ADOTblVouNewRecord(DataSet: TDataSet);
|
|
begin
|
|
{
|
|
VoucherDate.Hour:=0;
|
|
VoucherDate.Minute:=0;
|
|
VoucherDate.Second:=0;
|
|
VoucherDate.Fractions:=0;
|
|
Tdate
|
|
}
|
|
with DataSet do begin
|
|
FieldByName('VouDate').AsDatetime:=dateof(VoucherDate);
|
|
FieldByName('AccYear').AsInteger:=yearof(VoucherDate);
|
|
FieldByName('AccMonth').AsInteger:=monthof(VoucherDate);
|
|
FieldByName('VouNo').AsString:=' ';
|
|
FieldByName('AMTDR').AsFloat:=0.00;
|
|
FieldByName('AMTCR').AsFloat:=0.00;
|
|
// FieldByName('Prepared').AsString:=employee;
|
|
FieldByName('ItemsCount').AsInteger:=0;
|
|
FieldByName('Status').AsInteger:=0;
|
|
end;
|
|
|
|
end;
|
|
|
|
end.
|