Files
temp/CX_YFZLFXB.pas
T
2026-09-01 11:55:20 +08:00

1857 lines
80 KiB
ObjectPascal

unit CX_YFZLFXB;
{
部件名称:应付(YF3.MFC)
单元名称:应付帐款帐龄分析
功能说明:
技术说明:支持多会计单位查询
使用方法:
注意事项:
支持平台:SQL Server 2000 + Oracle
更新记录:
2004-11-11 yuxianming
增加查询条件‘分析预付账款’,选中后只分析应付账款有借方余额的单位。
2005-06-29 喻忠超
允许按记账日期进行分析。
2006-11-16 linfeng
调整程序,原来账龄期是根据ZLQ表的记录进行账龄分析的,
账龄期的取数调整为根据根据SFZLQ表获得账龄期
}
interface
uses
CX_YFZLFXB_d, CX_YFZLFXB_m, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
BaseQryCard, marsCap, Db, DBTables, gtQuery, RXCalc, Menus, RXCtrls, ExtCtrls,
DBSBtn, Grids, DBGrids, RXDBCtrl, Buttons, StdCtrls, COMCtrls,
RxDBCOMb, DBCtrls, Mask, ToolEdit, ImgList, ToolWin, RxDBGrid,
gtReportBuilder, gtrClasses, gtReportDocument, gtCheckedCombo, gtStandard, gtDBControls, gtEdit,
gtSystem, gtToolBar, Datetime, xmldom, XMLIntf, msxmldom, XMLDoc, DBAccess,
Uni, gtDB_Uni, MemDS, DateUtils, MISPROUtils;
type
TfrmCX_YFZLFXB = class (TfrmBaseQryCard)
qryTmp: TgtQuery;
qryZHKZ: TgtQuery;
lblCKRQ: TgtLabel;
Label1: TgtLabel;
Label2: TgtLabel;
lbl1: TgtLabel;
chkOutputMX: TgtDBCheckBox;
datCKRQ: TgtDBDateEdit;
edtGYSID: TgtDBEdit;
cbxKJDW: TgtDBCheckedCombo;
cbxPXFS: TgtDBComboBox;
cbxHB: TgtDBComboBox;
lblPXFS: TgtLabel;
lblTitle: TgtLabel;
chkBL: TgtDBCheckBox;
qryZLQ: TgtQuery;
dsZLQ: TgtDataSource;
qryZLQSFZLQ_ZLXH: TFloatField;
qryZLQSFZLQ_ZLMC: TStringField;
qryZLQSFZLQ_ZLQ: TFloatField;
lbl2: TgtLabel;
cbxGYSFL: TgtDBCheckedCombo;
Label4: TgtLabel;
cbxFXDX: TgtDBCheckedCombo;
edtGYSMC: TgtDBEdit;
gtLabel1: TgtLabel;
cbxKM: TgtDBComboBox;
Label5: TgtLabel;
cbxZRZX: TgtDBCheckedCombo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure grdGriDDblCliCK(Sender: TObject);
procedure grdGridGetRowState(Sender: TObject; Field: TField;
var BackgroundColor: string; var RowInSum: TInSum);
private
{ Private dEClarations }
FXByJZRQ: Boolean; //是否按记账日期进行分析
bInit: Boolean;
function MultiKJDW:Boolean;
function GetKJDWs:String;
property sKJDWs: String read GetKJDWs;
procedure CreatGridColumns;
procedure GetKM;
public
dmlCX_YFZLFXB_m: TdmlCX_YFZLFXB_m;
dmlCX_YFZLFXB_d: TdmlCX_YFZLFXB_d;
procedure FormInit; override;
function ConditionValid:Boolean;override;
procedure Run; override;
function CallBack(aID: TCallBackID; aParam: String=''): String; override;
{ Public dEClarations }
end;
implementation
uses JsERPUtils,CWUtils, BaseNavigator, BaseQry1, BaseTlb;
{$R *.DFM}
function AddFloatField(DataSet: TDataSet; FieldName,
DisplayLabel: string): TFloatField;
begin
Result := TFloatField.Create(DataSet);
Result.FieldName := FieldName;
Result.DisplayLabel := DisplayLabel;
Result.FieldKind := fkData;
Result.Size := 0;
Result.DataSet := DataSet;
end;
function AddStringField(DataSet: TDataSet; FieldName,
DisplayLabel: string; FieldSize: Integer): TStringField;
begin
Result := TStringField.Create(DataSet);
Result.FieldName := FieldName;
Result.DisplayLabel := DisplayLabel;
Result.FieldKind := fkData;
Result.Size := FieldSize;
Result.DataSet := DataSet;
end;
//==============================================================================
{ 内部过程/函数 }
//==============================================================================
function TfrmCX_YFZLFXB.GetKJDWs: String;
begin
Result:=Trim(cbxKJDW.Text);
end;
procedure TfrmCX_YFZLFXB.GetKM;
var
sKM,sSQL: string;
iYear: Integer;
begin
if bInit then exit;
if (pos(',',dmlCX_YFZLFXB_m.memTableKJDWID.AsString)<=0)
and (Trim(dmlCX_YFZLFXB_m.memTableKJDWID.AsString) <> '') then
begin
iYear := YEAROf(dmlCX_YFZLFXB_m.memTablECKRQ.AsDateTime);
sKM:=CWUtils.GetZHKZ(iYear,dmlCX_YFZLFXB_m.memTableKJDWID.AsString,'CW0002',False);
sSQL:='select distinct KJKM_KMID ,KJKM_MC from KJKM where KJKM_YEAR='+intToStr(iYear)
+ ' and KJKM_KJDWID='''+dmlCX_YFZLFXB_m.memTableKJDWID.AsString+'''';
if Trim(sKM)<>'' then
sSQL:=sSQL+' and '+GetWhereLead('KJKM_KMID',sKM)+'order by KJKM_KMID'
else
sSQL:=sSQL+' and 1<>1 order by KJKM_KMID';
JsERPUtils.TCBX.SetRxCBX(sSQL,True,cbxKM);
dmlCX_YFZLFXB_m.memTableKMID.AsString :=' ';
end
else
begin
cbxKM.BeginUpdate;
try
cbxKM.Items.Clear;
cbxKM.Values.Clear;
finally
cbxKM.EndUpdate;
end;
end;
end;
function TfrmCX_YFZLFXB.MultiKJDW: Boolean;
begin
if pos(',',cbxKJDW.Text)>0 then Result:=True
else Result:=False;
end;
procedure TfrmCX_YFZLFXB.CreatGridColumns;
var
aColumn: TRxDBGridColumn;
iLoop: Integer;
i: Integer;
begin
// 获得帐龄期天数和名称
qryZLQ.Close;
qryZLQ.Open;
grdGrid.Columns.BeginUpdate;
try
grdGrid.Columns.Clear;
dmlCX_YFZLFXB_d.qryResult.Close;
for i := dmlCX_YFZLFXB_d.qryResult.FieldCount - 1 downto 0 do
begin
dmlCX_YFZLFXB_d.qryResult.Fields[i].Destroy;
end;
aColumn := grdGrid.Columns.Add;
aColumn.FieldName := 'XH';
aColumn.Title.Alignment := taCenter;
aColumn.Title.Caption := '序号\C';
aColumn.Visible := False;
aColumn.EditorType := etNumber;
aColumn.Width := 64;
AddFloatField(dmlCX_YFZLFXB_d.qryResult, 'XH', '序号');
dmlCX_YFZLFXB_d.qryResult.FieldByName('XH').DisplayWidth := 10;
aColumn := grdGrid.Columns.Add;
aColumn.FieldName := 'XH1';
aColumn.Title.Alignment := taCenter;
aColumn.Title.Caption := '序号1\C';
aColumn.Visible := False;
aColumn.EditorType := etNumber;
aColumn.Width := 64;
AddFloatField(dmlCX_YFZLFXB_d.qryResult, 'XH1', '序号');
dmlCX_YFZLFXB_d.qryResult.FieldByName('XH1').DisplayWidth := 10;
aColumn := grdGrid.Columns.Add;
aColumn.FieldName := 'FLAG';
aColumn.Title.Alignment := taCenter;
aColumn.Title.Caption := '标志\C';
aColumn.Visible := False;
aColumn.Width := 64;
AddStringField(dmlCX_YFZLFXB_d.qryResult,'FLAG','标志',1);
dmlCX_YFZLFXB_d.qryResult.FieldByName('FLAG').DisplayWidth := 10;
aColumn := grdGrid.Columns.Add;
aColumn.FieldName := 'GYS';
aColumn.Title.Alignment := taCenter;
aColumn.Title.Caption := '供应商\C';
aColumn.Width := 64;
AddStringField(dmlCX_YFZLFXB_d.qryResult,'GYS','供应商',80);
dmlCX_YFZLFXB_d.qryResult.FieldByName('GYS').DisplayWidth := 50;
aColumn := grdGrid.Columns.Add;
aColumn.FieldName := 'GYSID';
aColumn.Title.Alignment := taCenter;
aColumn.Title.Caption := '供应商编码\C';
aColumn.Width := 64;
aColumn.Visible := False;
AddStringField(dmlCX_YFZLFXB_d.qryResult,'GYSID','供应商编码',8);
dmlCX_YFZLFXB_d.qryResult.FieldByName('GYSID').DisplayWidth := 15;
aColumn := grdGrid.Columns.Add;
aColumn.FieldName := 'GYSMC';
aColumn.Title.Alignment := taCenter;
aColumn.Title.Caption := '供应商名称\C';
aColumn.Width := 64;
aColumn.Visible := False;
AddStringField(dmlCX_YFZLFXB_d.qryResult,'GYSMC','供应商名称',120);
dmlCX_YFZLFXB_d.qryResult.FieldByName('GYSMC').DisplayWidth := 40;
aColumn := grdGrid.Columns.Add;
aColumn.FieldName := 'ZY';
aColumn.Title.Alignment := taCenter;
aColumn.Title.Caption := '摘要\C';
aColumn.Width := 64;
aColumn.Visible := False;
AddStringField(dmlCX_YFZLFXB_d.qryResult,'ZY','摘要',250);
dmlCX_YFZLFXB_d.qryResult.FieldByName('ZY').DisplayWidth := 50;
aColumn := grdGrid.Columns.Add;
aColumn.FieldName := 'KJDW';
aColumn.Title.Alignment := taCenter;
aColumn.Title.Caption := '会计单位\C';
aColumn.EditorType := etDropDown;
aColumn.Visible := False;
aColumn.Width := 64;
TGRD.SetGridColumn(grdGrid.FindColumnByField('KJDW'),'select KJDW_KJDWID, KJDW_JC from KJDW order by KJDW_KJDWID');
AddStringField(dmlCX_YFZLFXB_d.qryResult,'KJDW','会计单位',20);
dmlCX_YFZLFXB_d.qryResult.FieldByName('KJDW').DisplayWidth := 20;
aColumn := grdGrid.Columns.Add;
aColumn.FieldName := 'ZPZH';
aColumn.Title.Alignment := taCenter;
aColumn.Title.Caption := '总凭证号\C';
aColumn.EditorType := etDropDown;
aColumn.Visible := False;
aColumn.Width := 64;
AddFloatField(dmlCX_YFZLFXB_d.qryResult, 'ZPZH', '总凭证号');
dmlCX_YFZLFXB_d.qryResult.FieldByName('ZPZH').DisplayWidth := 10;
iLoop := 0;
while not qryZLQ.Eof do
begin
aColumn := grdGrid.Columns.Add;
aColumn.FieldName := 'ZLQ'+FloatToStr(iLoop);
aColumn.Title.Alignment := taCenter;
aColumn.Title.Caption := qryZLQSFZLQ_ZLMC.AsString+'\R\r\n金额\C';
aColumn.EditorType := etNumber;
aColumn.Width := 64;
AddFloatField(dmlCX_YFZLFXB_d.qryResult, 'ZLQ'+FloatToStr(iLoop), qryZLQSFZLQ_ZLMC.AsString);
dmlCX_YFZLFXB_d.qryResult.FieldByName('ZLQ'+FloatToStr(iLoop)).DisplayWidth := 15;
aColumn := grdGrid.Columns.Add;
aColumn.FieldName := 'BL'+FloatToStr(iLoop);
aColumn.Title.Alignment := taCenter;
aColumn.Title.Caption := '\n%\C';
aColumn.EditorType := etNumber;
aColumn.Width := 64;
AddFloatField(dmlCX_YFZLFXB_d.qryResult, 'BL'+FloatToStr(iLoop), '%');
dmlCX_YFZLFXB_d.qryResult.FieldByName('BL'+FloatToStr(iLoop)).DisplayWidth := 6;
inc(iLoop);
qryZLQ.Next;
end;
aColumn := grdGrid.Columns.Add;
aColumn.FieldName := 'HJ';
aColumn.Title.Alignment := taCenter;
aColumn.Title.Caption := '合计\C';
aColumn.EditorType := etNumber;
aColumn.Width := 64;
AddFloatField(dmlCX_YFZLFXB_d.qryResult, 'HJ', '合计');
dmlCX_YFZLFXB_d.qryResult.FieldByName('HJ').DisplayWidth := 15;
aColumn := grdGrid.Columns.Add;
aColumn.FieldName := 'XYQN';
aColumn.Title.Alignment := taCenter;
aColumn.Title.Caption := '付款期内\C';
aColumn.EditorType := etNumber;
aColumn.Width := 64;
AddFloatField(dmlCX_YFZLFXB_d.qryResult, 'XYQN', '付款期内');
dmlCX_YFZLFXB_d.qryResult.FieldByName('XYQN').DisplayWidth := 15;
aColumn := grdGrid.Columns.Add;
aColumn.FieldName := 'XYQW';
aColumn.Title.Alignment := taCenter;
aColumn.Title.Caption := '付款期外\C';
aColumn.EditorType := etNumber;
aColumn.Width := 64;
AddFloatField(dmlCX_YFZLFXB_d.qryResult, 'XYQW', '付款期外');
dmlCX_YFZLFXB_d.qryResult.FieldByName('XYQW').DisplayWidth := 15;
iLoop := 0;
qryZLQ.First;
while not qryZLQ.Eof do
begin
if dmlCX_YFZLFXB_m.memTableBL.AsString = 'Y' then
begin
grdGrid.FindColumnByField('BL'+FloatToStr(iLoop)).Visible := True;
grdGrid.FindColumnByField('ZLQ'+FloatToStr(iLoop)).Title.Caption := qryZLQSFZLQ_ZLMC.AsString+'\R\r\n金额\C';
end
else
begin
grdGrid.FindColumnByField('BL'+FloatToStr(iLoop)).Visible := False;
grdGrid.FindColumnByField('ZLQ'+FloatToStr(iLoop)).Title.Caption := qryZLQSFZLQ_ZLMC.AsString;
end;
inc(iLoop);
qryZLQ.Next;
end;
finally
grdGrid.Columns.EndUpdate;
end;
end;
//==============================================================================
{ 模板相关事件/过程/函数 }
//==============================================================================
procedure TfrmCX_YFZLFXB.FormInit;
begin
inherited;
CWUtils.GetKJDW(cbxKJDW,CO_QUERYKJDW,GetUserOption('ZZU003'),False);
TCBX.SetRxCBX('select GYSFL_FLID,GYSFL_FLMC from GYSFL where 1=1 order by GYSFL_FLID', cbxGYSFL);
TCBX.SetRxCBX('select HB_HBID,HB_MC from HB order by HB_HBID',True,cbxHB);
FXByJZRQ := (GetUserOption('YFU001') = 'Y');
bInit := False;
GetKM;
end;
procedure TfrmCX_YFZLFXB.FormCreate(Sender: TObject);
begin
inherited;
bInit := True;
dmlCX_YFZLFXB_d := TdmlCX_YFZLFXB_d.Create(self);
dmlCX_YFZLFXB_m := TdmlCX_YFZLFXB_m.Create(self);
dmlResult := dmlCX_YFZLFXB_D;
dmlCondition := dmlCX_YFZLFXB_M;
// dmlMain:=dmlCondition;
grdGrid.DataSource := dmlCX_YFZLFXB_D.dsData;
AddReadOnlyComponent(edtGYSMC);
end;
procedure TfrmCX_YFZLFXB.FormDestroy(Sender: TObject);
begin
bInit := True;
FreeAndNil(dmlCX_YFZLFXB_d);
FreeAndNil(dmlcx_YFZLFXB_M);
inherited;
end;
function TfrmCX_YFZLFXB.CallBack(aID: TCallBackID; aParam: String): String;
var
sSQL: String;
begin
Result := Inherited CallBack(aID, aParam);
if aID=CBID_FieldChanged then
begin
if aParam='KJDWID' then
begin
sSQL := 'select ZRZX_ZRZXID, ZRZX_MC from ZRZX where ZRZX_MJBZ=''Y'' ';
if MultiKJDW then
sSQL := sSQL + ' and ZRZX_KJDWID='' '' '
else
sSQL := sSQL + ' and (ZRZX_KJDWID='' '' or ZRZX_KJDWID='''+dmlCX_YFZLFXB_m.memTableKJDWID.AsString+''') ';
sSQL := sSQL + ' order by ZRZX_ZRZXID ';
LoadRxCbx(sSQL, cbxZRZX);
dmlCX_YFZLFXB_m.memTableZRZXID.AsString := '';
GetKM;
end;
if aParam='SETKM' then
begin
GetKM;
end;
end;
end;
function TfrmCX_YFZLFXB.ConditionValid: Boolean;
begin
Result := inherited ConditionValid;
if not Result then Exit;
if trim(dmlCX_YFZLFXB_m.memTableKJDWID.AsString) = '' then
begin
WarningMessageBox('会计单位不允许为空!');
cbxKJDW.SetFocus;
Result := False;
Exit;
end;
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) ='' then
begin
WarningMessageBox('请选择货币!');
cbxHB.SetFocus;
Result := False;
exit;
end;
if dmlCX_YFZLFXB_M.memTableCKRQ.AsDateTime =0 then
begin
WarningMessageBox('参考日期不允许为空!');
datCKRQ.SetFocus;
Result := False;
exit;
end;
end;
//按供应商输出帐龄分析表,
procedure TfrmCX_YFZLFXB.Run;
var
iLoop: Integer;
iYear: Integer;
fPriZLQ : Extended;
begin
inherited;
//查询时判断列表是否已经创建,如果未创建,且未设置账龄期,则提示,否则根据设置的账龄期创建列表
qryZLQ.Close;
qryZLQ.Open;
if qryZLQ.IsEmpty then
begin
WarningMessageBox('请先设置账龄期!');
Exit;
end
else
begin
CreatGridColumns;
end;
iYear := TKJQJ.GetYear(dmlCX_YFZLFXB_m.memTablECKRQ.AsDateTime, False);
if dmlCX_YFZLFXB_M.memTableSCMX.AsBoolean then
begin
grdGRID.ShowHint := True;
grdGrid.FindColumnByField('ZY').Visible := True;
grdGrid.FindColumnByField('ZY').Tag := 0;
end
else
begin
grdGRID.ShowHint := False;
grdGrid.FindColumnByField('ZY').Visible := False;
grdGrid.FindColumnByField('ZY').Tag := -1;
end;
grdGrid.FindColumnByField('KJDW').Visible :=MultiKJDW;
qryZLQ.Close;
qryZLQ.Open;
iLoop := 0;
qryZLQ.First;
while not qryZLQ.Eof do
begin
if dmlCX_YFZLFXB_m.memTableBL.AsString = 'Y' then
begin
grdGrid.FindColumnByField('BL'+FloatToStr(iLoop)).Visible := True;
grdGrid.FindColumnByField('ZLQ'+FloatToStr(iLoop)).Title.Caption := qryZLQSFZLQ_ZLMC.AsString+'\R\r\n金额\C';
end
else
begin
grdGrid.FindColumnByField('BL'+FloatToStr(iLoop)).Visible := False;
grdGrid.FindColumnByField('ZLQ'+FloatToStr(iLoop)).Title.Caption := qryZLQSFZLQ_ZLMC.AsString;
end;
inc(iLoop);
qryZLQ.Next;
end;
with dmlcx_YFZLFXB_d.qryResult do
begin
iLoop := 0;
Close;
SQL.Clear;
SQL.Add('select 0.0 as XH,1.0 as XH1,''Y'' as FLAG,YFZK_GYSID||''|''||GYS_MC as GYS ,YFZK_GYSID as GYSID,GYS_MC as GYSMC, ');
SQL.Add(' '' '' as ZY,'' '' as KJDW,0.0 as ZPZH, ');
//循环账龄期
qryZLQ.First;
fPriZLQ := 0;
while not qryZLQ.Eof do
begin
//计算账龄期数据
SQL.Add('round( ');
SQL.Add('sum(' );
if FXByJZRQ then
begin
if iLoop=0 then
SQL.Add(' case when datediff(day,YFZK_JZRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ')
else
SQL.Add(' case when datediff(day,YFZK_JZRQ,:pCKRQ)>'+FloatToStr(fPriZLQ)+' and datediff(day,YFZK_JZRQ,:pCKRQ)<= '+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ');
end
else
begin
if iLoop=0 then
SQL.Add(' case when datediff(day,YFZK_YWRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ')
else
SQL.Add(' case when datediff(day,YFZK_YWRQ,:pCKRQ)>'+FloatToStr(fPriZLQ)+' and datediff(day,YFZK_YWRQ,:pCKRQ)<= '+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ');
end;
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end + isnull(a.WJYSJE,0) ');
SQL.Add(' else 0 end) ');
SQL.Add(',2) as ZLQ'+FloatToStr(iLoop) +',');
//计算比例:各账龄期除以合计
SQL.Add('case ');
SQL.Add('round( ');
SQL.Add('sum( ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2) ' );
SQL.Add(' when 0 then 0 else ');
SQL.Add('round((round( ');
SQL.Add('sum(' );
if FXByJZRQ then
begin
if iLoop=0 then
SQL.Add(' case when datediff(day,YFZK_JZRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ')
else
SQL.Add(' case when datediff(day,YFZK_JZRQ,:pCKRQ)>'+FloatToStr(fPriZLQ)+' and datediff(day,YFZK_JZRQ,:pCKRQ)<= '+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ');
end
else
begin
if iLoop=0 then
SQL.Add(' case when datediff(day,YFZK_YWRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ')
else
SQL.Add(' case when datediff(day,YFZK_YWRQ,:pCKRQ)>'+FloatToStr(fPriZLQ)+' and datediff(day,YFZK_YWRQ,:pCKRQ)<= '+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ');
end;
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end + isnull(a.WJYSJE,0) ');
SQL.Add(' else 0 end) ');
SQL.Add(',2)');
SQL.Add(' /');
SQL.Add('round( ');
SQL.Add('sum( ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2))*100,2) end ' );
sql.Add(' as BL'+FloatToStr(iLoop) +',');
fPriZLQ := qryZLQSFZLQ_ZLQ.AsFloat;
inc(iLoop);
qryZLQ.Next;
end;
//收款期内金额
SQL.Add('round( ');
SQL.Add('sum(' );
SQL.Add(' case ');
SQL.Add(' when datediff(day,YFZK_DQRQ,:pCKRQ)>=0 then ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end ');
SQL.Add(' +isnull(a.WJYSJE,0) ');
SQL.Add(' else 0 end) ');
SQL.Add(',2) as XYQN, ');
//收款期外金额
SQL.Add('round( ');
SQL.Add('sum(' );
SQL.Add(' case ');
SQL.Add(' when datediff(day,YFZK_DQRQ,:pCKRQ)<0 then ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end ');
SQL.Add(' +isnull(a.WJYSJE,0) ');
SQL.Add(' else 0 end) ');
SQL.Add(',2) as XYQW, ');
//取出总的金额
SQL.Add('round( ');
SQL.Add('sum( ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2)as HJ, ');
//排序使用的金额
SQL.Add('round( ');
SQL.Add('sum( ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2)as PXJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' left join ( ');
SQL.Add(' select FLNBH,sum(WJYSJE) as WJYSJE ');
SQL.Add('from (');
//应付账款
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
begin
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH1 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ<=:pCKRQ and YFZKFP_DFJZRQ>:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ<=:pCKRQ and YFZKFP_DFYWRQ>:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH ');
end
//预付账款
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
begin
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(-1*YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH2 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ>:pCKRQ and YFZKFP_DFJZRQ<=:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ>:pCKRQ and YFZKFP_DFYWRQ<=:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH');
end
else
begin
//应付账款
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH1 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ<=:pCKRQ and YFZKFP_DFJZRQ>:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ<=:pCKRQ and YFZKFP_DFYWRQ>:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH ');
SQL.Add(' union all ');
//预付账款
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(-1*YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH2 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ>:pCKRQ and YFZKFP_DFJZRQ<=:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ>:pCKRQ and YFZKFP_DFYWRQ<=:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH');
end;
SQL.Add(' )YFXX ');
SQL.Add(' group by FLNBH ');
SQL.Add(' )a on a.FLNBH=YFZK_FLNBH ');
SQL.Add(' where 1=1 ');
if FXByJZRQ then
SQL.Add(' and YFZK_JZRQ<=:pCKRQ')
else
SQL.Add(' and YFZK_YWRQ<=:pCKRQ');
SQL.ADD(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID');
ParamByName('pGYSID').AsString := trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString);
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_GYSID,GYS_MC ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString='B' then //借方有余额
begin
SQL.Add ('having LT(');
SQL.Add('round(sum( ');
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2) ');
SQL.Add(' ,0)');
end
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString='Y' then //贷方有余额
begin
SQL.Add ('having GT(');
SQL.Add('round(sum( ');
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2) ');
SQL.Add(' ,0)');
end
else
begin
SQL.Add ('having NE(');
SQL.Add('round(sum( ');
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2) ');
SQL.Add(' ,0)');
end;
if dmlCX_YFZLFXB_m.memTableSCMX.AsBoolean then
begin
SQL.Add(' union all ');
//一次性查出各账龄期得值
iLoop := 0;
if FXByJZRQ then
begin
SQL.Add('select 0.0 as XH,2.0 as XH1,''N'' as FLAG,case when ltrim(rtrim(YFZK_GHFPID)) <> '''' then convert(char(10),YFZK_JZRQ)||''#''||YFZK_GHFPID else convert(char(10),YFZK_JZRQ) end as GYS,YFZK_GYSID as GYSID,GYS_MC as GYSMC, ')
end
else
begin
SQL.Add('select 0.0 as XH,2.0 as XH1,''N'' as FLAG,case when ltrim(rtrim(YFZK_GHFPID)) <> '''' then convert(char(10),YFZK_YWRQ)||''#''||YFZK_GHFPID else convert(char(10),YFZK_YWRQ) end as GYS, ');
SQL.Add('YFZK_GYSID as GYSID,GYS_MC as GYSMC, ');
end;
SQL.Add(' YFZK_ZY as ZY,YFZK_KJDWID as KJDW,YFZK_PZNBH as ZPZH, ');
//循环账龄期
qryZLQ.First;
fPriZLQ := 0;
while not qryZLQ.Eof do
begin
SQL.Add('round( ');
if FXByJZRQ then
begin
if iLoop=0 then
SQL.Add(' case when datediff(day,YFZK_JZRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ')
else
SQL.Add(' case when datediff(day,YFZK_JZRQ,:pCKRQ)>'+FloatToStr(fPriZLQ)+' and datediff(day,YFZK_JZRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ');
end
else
begin
if iLoop=0 then
SQL.Add(' case when datediff(day,YFZK_YWRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ')
else
SQL.Add(' case when datediff(day,YFZK_YWRQ,:pCKRQ)>'+FloatToStr(fPriZLQ)+' and datediff(day,YFZK_YWRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ');
end;
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end + isnull(a.WJYSJE,0) ');
SQL.Add(' else 0 end ');
SQL.Add(',2) as ZLQ'+FloatToStr(iLoop) +',');
//计算比例:各账龄期除以合计
SQL.Add('case ');
SQL.Add('round( ');
// SQL.Add('sum( ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0) ');
SQL.Add(' ,2) ' );
SQL.Add(' when 0 then 0 else ');
SQL.Add('round((round( ');
if FXByJZRQ then
begin
if iLoop=0 then
SQL.Add(' case when datediff(day,YFZK_JZRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ')
else
SQL.Add(' case when datediff(day,YFZK_JZRQ,:pCKRQ)>'+FloatToStr(fPriZLQ)+' and datediff(day,YFZK_JZRQ,:pCKRQ)<= '+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ');
end
else
begin
if iLoop=0 then
SQL.Add(' case when datediff(day,YFZK_YWRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ')
else
SQL.Add(' case when datediff(day,YFZK_YWRQ,:pCKRQ)>'+FloatToStr(fPriZLQ)+' and datediff(day,YFZK_YWRQ,:pCKRQ)<= '+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ');
end;
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end + isnull(a.WJYSJE,0) ');
SQL.Add(' else 0 end ');
SQL.Add(',2)');
SQL.Add(' /');
SQL.Add('round( ');
// SQL.Add('sum( ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0) ');
SQL.Add(' ,2))*100,2) end as BL'+FloatToStr(iLoop) +',' );
fPriZLQ := qryZLQSFZLQ_ZLQ.AsFloat;
inc(iLoop);
qryZLQ.Next;
end;
//收款期内金额
SQL.Add('round( ');
SQL.Add(' case ');
SQL.Add(' when datediff(day,YFZK_DQRQ,:pCKRQ)>=0 then ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end ');
SQL.Add(' +isnull(a.WJYSJE,0) ');
SQL.Add(' else 0 end ');
SQL.Add(',2) as XYQN, ');
//收款期外金额
SQL.Add('round( ');
SQL.Add(' case ');
SQL.Add(' when datediff(day,YFZK_DQRQ,:pCKRQ)<0 then ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end ');
SQL.Add(' +isnull(a.WJYSJE,0) ');
SQL.Add(' else 0 end ');
SQL.Add(',2) as XYQW, ');
//取出总的金额
SQL.Add('round( ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0) ');
SQL.Add(' ,2)as HJ, ');
SQL.Add(' PX.PXJE as PXJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' left join ( ');
SQL.Add(' select FLNBH,sum(WJYSJE) as WJYSJE ');
SQL.Add('from (');
//应付账款
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
begin
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH1 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ<=:pCKRQ and YFZKFP_DFJZRQ>:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ<=:pCKRQ and YFZKFP_DFYWRQ>:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH ');
end
//预付账款
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
begin
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(-1*YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH2 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ>:pCKRQ and YFZKFP_DFJZRQ<=:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ>:pCKRQ and YFZKFP_DFYWRQ<=:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH');
end
else
begin
//应付账款
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH1 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ<=:pCKRQ and YFZKFP_DFJZRQ>:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ<=:pCKRQ and YFZKFP_DFYWRQ>:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH ');
SQL.Add(' union all ');
//预付账款
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(-1*YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH2 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ>:pCKRQ and YFZKFP_DFJZRQ<=:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ>:pCKRQ and YFZKFP_DFYWRQ<=:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH');
end;
SQL.Add(' )YFXX ');
SQL.Add(' group by FLNBH ');
SQL.Add(' )a on a.FLNBH=YFZK_FLNBH ');
SQL.Add(' left join (');
//用于查询出总金额后,支持按金额大小排序
SQL.Add('select YFZK_GYSID as GYSID, ');
//取出总的金额
SQL.Add('round( ');
SQL.Add('sum( ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2)as PXJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' left join ( ');
SQL.Add(' select FLNBH,sum(WJYSJE) as WJYSJE ');
SQL.Add('from (');
//应付账款
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
begin
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH1 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ<=:pCKRQ and YFZKFP_DFJZRQ>:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ<=:pCKRQ and YFZKFP_DFYWRQ>:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH ');
end
//预付账款
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
begin
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(-1*YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH2 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ>:pCKRQ and YFZKFP_DFJZRQ<=:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ>:pCKRQ and YFZKFP_DFYWRQ<=:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH');
end
else
begin
//应付账款
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH1 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ<=:pCKRQ and YFZKFP_DFJZRQ>:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ<=:pCKRQ and YFZKFP_DFYWRQ>:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH ');
SQL.Add(' union all ');
//预付账款
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(-1*YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH2 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ>:pCKRQ and YFZKFP_DFJZRQ<=:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ>:pCKRQ and YFZKFP_DFYWRQ<=:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH');
end;
SQL.Add(' )YFXX ');
SQL.Add(' group by FLNBH ');
SQL.Add(' )a on a.FLNBH=YFZK_FLNBH ');
SQL.Add(' where 1=1 ');
if FXByJZRQ then
SQL.Add(' and YFZK_JZRQ<=:pCKRQ')
else
SQL.Add(' and YFZK_YWRQ<=:pCKRQ');
SQL.ADD(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID');
ParamByName('pGYSID').AsString := trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString);
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_GYSID ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString='B' then //借方有余额
begin
SQL.Add ('having LT(');
SQL.Add('round(sum( ');
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2) ');
SQL.Add(' ,0)');
end
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString='Y' then //贷方有余额
begin
SQL.Add ('having GT(');
SQL.Add('round(sum( ');
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2) ');
SQL.Add(' ,0)');
end
else
begin
SQL.Add ('having NE(');
SQL.Add('round(sum( ');
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2) ');
SQL.Add(' ,0)');
end;
//排序金额统计完成
SQL.Add(' )PX on PX.GYSID = YFZK_GYSID ');
SQL.Add(' where 1=1 ');
if FXByJZRQ then
SQL.Add(' and YFZK_JZRQ<=:pCKRQ')
else
SQL.Add(' and YFZK_YWRQ<=:pCKRQ');
SQL.ADD(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID');
ParamByName('pGYSID').AsString := trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString);
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
if dmlCX_YFZLFXB_M.memTableFXDX.AsString='B' then //借方有余额
begin
SQL.Add(' and LT(round( ');
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0) ');
SQL.Add(' ,2),0)');
end
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString='Y' then //贷方有余额
begin
SQL.Add(' and GT(round( ');
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0) ');
SQL.Add(' ,2),0)');
end
else
begin
SQL.Add(' and NE(round( ');
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0) ');
SQL.Add(' ,2),0)');
end;
end;
SQL.Add(' union all ');
iLoop := 0;
SQL.Add('select 3.0 as XH,3.0 as XH1,''H'' as FLAG,''合计'' as GYS,'' '' as GYSID,'' '' as GYSMC, ');
SQL.Add(' '' '' as ZY,'' '' as KJDW,0.0 as ZPZH, ');
//循环账龄期
qryZLQ.First;
while not qryZLQ.Eof do
begin
SQL.Add('round(sum(ZLQ'+FloatToStr(iLoop)+'),2) as ZLQ'+FloatToStr(iLoop) +',');
//计算比例:各账龄期除以合计
SQL.Add('round(round(sum(ZLQ'+FloatToStr(iLoop)+'),2)/');
SQL.Add('round(sum(HJ),2)*100.0,2) as BL'+FloatToStr(iLoop) +',');
inc(iLoop);
qryZLQ.Next;
end;
//收款期内金额
SQL.Add('round(sum(XYQN),2) as XYQN, ');
//收款期外金额
SQL.Add('round(sum(XYQW),2) as XYQW, ');
//取出总的金额
SQL.Add('round(sum(HJ),2) as HJ, ');
SQL.Add(' 0 as PXJE');
SQL.Add(' from (');
SQL.Add('select 3.0 as XH,3.0 as XH1,''H'' as FLAG,''合计'' as GYS,YFZK_GYSID as GYSID,'' '' as GYSMC, ');
SQL.Add(' '' '' as ZY,'' '' as KJDW,0.0 as ZPZH, ');
//循环账龄期
qryZLQ.First;
fPriZLQ := 0;
iLoop := 0;
while not qryZLQ.Eof do
begin
SQL.Add('round( ');
SQL.Add('sum(' );
if FXByJZRQ then
begin
if iLoop=0 then
SQL.Add(' case when datediff(day,YFZK_JZRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ')
else
SQL.Add(' case when datediff(day,YFZK_JZRQ,:pCKRQ)>'+FloatToStr(fPriZLQ)+' and datediff(day,YFZK_JZRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ');
end
else
begin
if iLoop=0 then
SQL.Add(' case when datediff(day,YFZK_YWRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ')
else
SQL.Add(' case when datediff(day,YFZK_YWRQ,:pCKRQ)>'+FloatToStr(fPriZLQ)+' and datediff(day,YFZK_YWRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ');
end;
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end + isnull(a.WJYSJE,0) ');
SQL.Add(' else 0 end) ');
SQL.Add(',2) as ZLQ'+FloatToStr(iLoop) +',');
//计算比例:各账龄期除以合计
SQL.Add('case ');
SQL.Add('round( ');
SQL.Add('sum( ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2) ' );
SQL.Add(' when 0 then 0 else ');
SQL.Add('round((round( ');
SQL.Add('sum(' );
if FXByJZRQ then
begin
if iLoop=0 then
SQL.Add(' case when datediff(day,YFZK_JZRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ')
else
SQL.Add(' case when datediff(day,YFZK_JZRQ,:pCKRQ)>'+FloatToStr(fPriZLQ)+' and datediff(day,YFZK_JZRQ,:pCKRQ)<= '+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ');
end
else
begin
if iLoop=0 then
SQL.Add(' case when datediff(day,YFZK_YWRQ,:pCKRQ)<='+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ')
else
SQL.Add(' case when datediff(day,YFZK_YWRQ,:pCKRQ)>'+FloatToStr(fPriZLQ)+' and datediff(day,YFZK_YWRQ,:pCKRQ)<= '+FloatToStr(qryZLQSFZLQ_ZLQ.AsFloat)+' then ');
end;
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end + isnull(a.WJYSJE,0) ');
SQL.Add(' else 0 end) ');
SQL.Add(',2)');
SQL.Add(' /');
SQL.Add('round( ');
SQL.Add('sum( ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2))*100,2) end as BL'+FloatToStr(iLoop) +',' );
fPriZLQ := qryZLQSFZLQ_ZLQ.AsFloat;
inc(iLoop);
qryZLQ.Next;
end;
//收款期内金额
SQL.Add('round( ');
SQL.Add('sum(' );
SQL.Add(' case ');
SQL.Add(' when datediff(day,YFZK_DQRQ,:pCKRQ)>=0 then ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end ');
SQL.Add(' +isnull(a.WJYSJE,0) ');
SQL.Add(' else 0 end) ');
SQL.Add(',2) as XYQN, ');
//收款期外金额
SQL.Add('round( ');
SQL.Add('sum(' );
SQL.Add(' case ');
SQL.Add(' when datediff(day,YFZK_DQRQ,:pCKRQ)<0 then ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end ');
SQL.Add(' +isnull(a.WJYSJE,0) ');
SQL.Add(' else 0 end) ');
SQL.Add(',2) as XYQW, ');
//取出总的金额
SQL.Add('round( ');
SQL.Add('sum( ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ')
else
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2)as HJ, ');
SQL.Add(' 0 as PXJE');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' left join ( ');
SQL.Add(' select FLNBH,sum(WJYSJE) as WJYSJE ');
SQL.Add('from (');
//应付账款
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'Y' then
begin
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH1 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ<=:pCKRQ and YFZKFP_DFJZRQ>:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ<=:pCKRQ and YFZKFP_DFYWRQ>:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH ');
end
//预付账款
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
begin
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(-1*YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH2 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ>:pCKRQ and YFZKFP_DFJZRQ<=:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ>:pCKRQ and YFZKFP_DFYWRQ<=:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH');
end
else
begin
//应付账款
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH1 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ<=:pCKRQ and YFZKFP_DFJZRQ>:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ<=:pCKRQ and YFZKFP_DFYWRQ>:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH ');
SQL.Add(' union all ');
//预付账款
SQL.Add(' select YFZK_FLNBH as FLNBH, ');
SQL.Add(' round(sum(isnull(-1*YFZKFP_FPJE,0)),2) as WJYSJE ');
SQL.Add(' from YFZK ');
SQL.Add(' left join GYS on GYS_GYSID=YFZK_GYSID ');
SQL.Add(' ,YFZKFP ');
SQL.Add(' where YFZK_FLNBH=YFZKFP_FLNBH2 ');
if FXByJZRQ then
SQL.Add(' and YFZKFP_JFJZRQ>:pCKRQ and YFZKFP_DFJZRQ<=:pCKRQ ')
else
SQL.Add(' and YFZKFP_JFYWRQ>:pCKRQ and YFZKFP_DFYWRQ<=:pCKRQ ');
SQL.Add(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR ');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID ');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID ');
ParamByName('pGYSID').AsString := dmlCX_YFZLFXB_m.memTableGYSID.AsString;
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_FLNBH');
end;
SQL.Add(' )YFXX ');
SQL.Add(' group by FLNBH ');
SQL.Add(' )a on a.FLNBH=YFZK_FLNBH ');
SQL.Add(' where 1=1 ');
if FXByJZRQ then
SQL.Add(' and YFZK_JZRQ<=:pCKRQ')
else
SQL.Add(' and YFZK_YWRQ<=:pCKRQ');
SQL.ADD(' and ' + GetWhereEqual('YFZK_KJDWID', sKJDWs, True));
SQL.Add(' and YFZK_YEAR=:pYEAR');
if trim(dmlCX_YFZLFXB_M.memTableHBID.AsString) <> '' then
begin
SQL.Add(' and YFZK_HBID= :pHBID');
ParamByName('pHBID').AsString := dmlCX_YFZLFXB_m.memTableHBID.AsString;
end;
if trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString) <> '' then
begin
SQL.Add(' and YFZK_GYSID= :pGYSID');
ParamByName('pGYSID').AsString := trim(dmlCX_YFZLFXB_m.memTableGYSID.AsString);
end;
if Trim(dmlCX_YFZLFXB_m.memTableGYSFL.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('GYS_FL', dmlCX_YFZLFXB_m.memTableGYSFL.AsString));
end;
if trim(dmlCX_YFZLFXB_m.memTableKMID.AsString) <> '' then
begin
SQL.Add(' and ' + GetWhereLead('YFZK_KMID', dmlCX_YFZLFXB_m.memTableKMID.AsString));
end;
if (Trim(dmlCX_YFZLFXB_m.memtableZRZXID.AsString) <> '') then
SQL.Add(' and '+GetWhereEqual('YFZK_ZRZXID',dmlCX_YFZLFXB_m.memtableZRZXID.AsString));
SQL.Add(' group by YFZK_GYSID ');
if dmlCX_YFZLFXB_M.memTableFXDX.AsString='B' then //借方有余额
begin
SQL.Add ('having LT(');
SQL.Add('round(sum( ');
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and GT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2) ');
SQL.Add(' ,0)');
end
else if dmlCX_YFZLFXB_M.memTableFXDX.AsString='Y' then //贷方有余额
begin
SQL.Add ('having GT(');
SQL.Add('round(sum( ');
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and LT(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2) ');
SQL.Add(' ,0)');
end
else
begin
SQL.Add ('having NE(');
SQL.Add('round(sum( ');
SQL.Add(' case when isnull(YFZK_YFP,'' '')<>''Y'' and NE(YFZK_WFPJE,0) then -1*(YFZK_WFPJE-YFZK_YFPJE) ');
SQL.Add(' else 0 end +isnull(a.WJYSJE,0)) ');
SQL.Add(' ,2) ');
SQL.Add(' ,0)');
end;
SQL.Add(' ) ZHHJ ');
//排序
if dmlCX_YFZLFXB_M.memTablePXFS.AsString = 'A' then
SQL.ADD('order by XH,GYSID,XH1 ');
if dmlCX_YFZLFXB_M.memTablePXFS.AsString = 'B' then// 应付金额由大到小排序
begin
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add('order by XH,PXJE,XH1 ')
else
SQL.Add('order by XH,PXJE Desc,XH1 ');
end
else if dmlCX_YFZLFXB_M.memTablePXFS.AsString = 'C' then
begin
if dmlCX_YFZLFXB_M.memTableFXDX.AsString = 'B' then
SQL.Add('order by XH,PXJE desc,XH1 ')
else
SQL.Add('order by XH,PXJE,XH1 ');
end;
ParamByName('pYEAR').AsInteger := iYear;
ParamByName('pCKRQ').AsDateTime := dmlCX_YFZLFXB_M.memTableCKRQ.AsDateTime;
Open;
end;
end;
//==============================================================================
{ 数据记录处理 }
//==============================================================================
//==============================================================================
{ 控件事件 }
//==============================================================================
//双击记录显示凭证
procedure TfrmCX_YFZLFXB.grdGriDDblCliCK(Sender: TObject);
begin
inherited;
if grdGrid.DataSource.DataSet.fieldByName('ZPZH').AsInteger <> 0 then
DisPLayPZ(grdGrid.DataSource.DataSet.fieldByName('KJDW').AsString,
grdGrid.DataSOurce.DataSet.FieldByName('ZPZH').AsInteger,Self);
end;
//底色
procedure TfrmCX_YFZLFXB.grdGridGetRowState(Sender: TObject; Field: TField;
var BackgroundColor: string; var RowInSum: TInSum);
begin
inherited;
if grdGrid.DataSource.DataSet.fieldByName('FLAG').AsString = 'Y' then
BaCKgroundColor := 'YFU005'
else if grdGrid.DataSource.DataSet.fieldByName('FLAG').AsString ='H' then//合计
BaCKgroundColor := 'XTS100';
end;
//==============================================================================
{ 查询条件 }
//==============================================================================
//==============================================================================
{ 局部菜单 }
//==============================================================================
end.