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; function GetSYSID:string; { 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; function TfrmCX_YFZLFXB.GetSYSID:string; begin Result:=''; with qryTool do begin Close; SQL.Clear; SQL.Add('select SYSID from system where 1=1 '); Open; First; if not IsEmpty then begin Result:=FieldByName('SYSID').AsString; end; end; 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; SYSID:string; iflag:Extended; //锐洋系统 begin inherited; //查询时判断列表是否已经创建,如果未创建,且未设置账龄期,则提示,否则根据设置的账龄期创建列表 SYSID:=GetSYSID; iflag:=1; if SYSID='0413000101' then iflag:=-1; 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 :iflag*(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 :iflag*(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 :iflag*(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 :iflag*(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 :iflag*(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 :iflag*(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 :iflag*(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 :iflag*(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(:iflag*-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_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(:iflag*-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_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(:iflag*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 :iflag*(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 :iflag*(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 :iflag*(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 :iflag*(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 :iflag*(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 :iflag*(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 :iflag*(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(:iflag*-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_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(:iflag*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(:iflag*-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_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(:iflag*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 :iflag*(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(:iflag*-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_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(:iflag*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(:iflag*-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_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(:iflag*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 :iflag*(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 :iflag*(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 :iflag*(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 :iflag*(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 :iflag*(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 :iflag*(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 :iflag*(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(:iflag*-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_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(:iflag*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(:iflag*-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_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(:iflag*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 :iflag*(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.