diff --git a/CX_YFZLFXB.pas b/CX_YFZLFXB.pas new file mode 100644 index 0000000..ee76f27 --- /dev/null +++ b/CX_YFZLFXB.pas @@ -0,0 +1,1883 @@ +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. +