unit u_rp_sales_profit_two; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, bsSkinCtrls, ExtCtrls, ComCtrls, bsSkinTabs, DB, ADODB,DateUtils, dxExEdtr, dxDBTLCl, dxGrClms, dxDBGrid, dxTL, dxDBCtrl, dxCntner, kbmMemTable, kbmMemBinaryStreamFormat, Menus, StdCtrls, wwdbdatetimepicker, Grids, DBGridEh, Mask, wwdbedit, Wwdotdot, Wwdbcomb, RxLookup, DBGrids, bsSkinBoxCtrls, DBCtrlsEh,inifiles, CheckLst; type TSalesTc = Record bsNo //编号 ,shippers //委托单位 ,sales //揽货人 ,mblno //主提单号 ,bstype //业务种类 ,FeeStaus //费用状态 ,EtdYearMonth //开船月 ,CorpStlType //客户结费类型 :string; Etd //开船日期 ,StlDate:TDateTime; //结算日期 AmtRmb //RMB合计 ,AmtUsd // USD合计 ,ProfitAmt ,TtlProfitAmt :Double; //毛利润 ACTCQDays, //实际超期天数 CQDays, //超期天数 xyDays //超期天数 :integer; end; Tfrm_rp_sales_profit_two = class(TForm) kbmThreadDataSet1: TkbmThreadDataSet; Panel2: TPanel; Label2: TLabel; Label3: TLabel; Label1: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; bsSkinEdit1: TbsSkinEdit; wwDBComboBox1: TwwDBComboBox; wwDBComboBox20: TwwDBComboBox; wwDBComboBox2: TwwDBComboBox; bsSkinButton10: TbsSkinButton; CheckListBox1: TCheckListBox; bsSkinButton9: TbsSkinButton; bsSkinButton5: TbsSkinButton; dxDBGrid8: TdxDBGrid; dxDBGrid8Column7: TdxDBGridColumn; dxDBGridColumn4: TdxDBGridColumn; dxDBGrid8Column6: TdxDBGridColumn; dxDBGrid8Column4: TdxDBGridColumn; dxDBGrid8Column5: TdxDBGridColumn; dxDBGridColumn7: TdxDBGridColumn; dxDBGridColumn9: TdxDBGridColumn; dxDBGrid8Column8: TdxDBGridColumn; bsSkinPanel2: TbsSkinPanel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; wwDBDateTimePicker1: TwwDBDateTimePicker; wwDBDateTimePicker2: TwwDBDateTimePicker; bsSkinButton3: TbsSkinButton; Edit1: TEdit; tex: TbsSkinButton; Edit2: TEdit; dxDBGrid6: TdxDBGrid; dxDBGrid6Column19: TdxDBGridColumn; dxDBGrid6Column1: TdxDBGridColumn; dxDBGrid6Column2: TdxDBGridColumn; dxDBGrid6Column3: TdxDBGridColumn; dxDBGrid6Column4: TdxDBGridColumn; dxDBGrid6Column5: TdxDBGridColumn; dxDBGrid6Column6: TdxDBGridColumn; dxDBGrid6Column7: TdxDBGridColumn; dxDBGrid6Column10: TdxDBGridColumn; dxDBGrid6Column8: TdxDBGridColumn; dxDBGrid6Column11: TdxDBGridColumn; dxDBGrid6Column12: TdxDBGridColumn; dxDBGrid6Column17: TdxDBGridColumn; dxDBGrid6Column18: TdxDBGridColumn; kbmqc: TkbmMemTable; kbmqcField4: TStringField; kbmqcField: TStringField; kbmqcField2: TStringField; kbmqcField3: TStringField; kbmqcField5: TDateField; kbmqcField6: TDateField; kbmqcField7: TFloatField; kbmqcField8: TFloatField; kbmqcField9: TStringField; kbmqcField11: TIntegerField; kbmqcField10: TIntegerField; kbmqcField12: TFloatField; kbmqcField13: TStringField; kbmqcUSD: TFloatField; kbmqcRMB: TFloatField; kbmqcField14: TDateField; kbmqcRMB2: TFloatField; kbmqcUSD2: TFloatField; kbmqcField15: TFloatField; kbmqcField16: TStringField; kbmqc1: TDataSource; kbmtc: TkbmMemTable; kbmtcField: TStringField; kbmtcField2: TFloatField; kbmtcField3: TFloatField; kbmtcUSD: TFloatField; kbmtcRMB: TFloatField; kbmtcField4: TFloatField; kbmtcField5: TStringField; kbmtcField6: TFloatField; kbmtc1: TDataSource; RxDBLookupCombo3: TRxDBLookupCombo; kbmtcField7: TFloatField; dxDBGrid8Column9: TdxDBGridColumn; kbmqcField17: TStringField; ComboBox1: TComboBox; Label11: TLabel; PopupMenu1: TPopupMenu; MenuItem7: TMenuItem; kbmtcOrdno: TIntegerField; PopupMenu2: TPopupMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; kbmtcField8: TStringField; dxDBGrid8Column10: TdxDBGridColumn; kbmtcField9: TFloatField; dxDBGrid8Column11: TdxDBGridColumn; dxDBGrid8Column12: TdxDBGridColumn; kbmtcField10: TFloatField; Label12: TLabel; ComboBox2: TComboBox; Label13: TLabel; ComboBox3: TComboBox; procedure bsSkinButton5Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); procedure bsSkinButton10Click(Sender: TObject); procedure bsSkinButton3Click(Sender: TObject); procedure texClick(Sender: TObject); procedure bsSkinButton9Click(Sender: TObject); procedure MenuItem7Click(Sender: TObject); procedure N1Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure dxDBGrid6CustomDraw(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxDBTreeListColumn; const AText: String; AFont: TFont; var AColor: TColor; ASelected, AFocused: Boolean; var ADone: Boolean); procedure dxDBGrid8CustomDraw(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxDBTreeListColumn; const AText: String; AFont: TFont; var AColor: TColor; ASelected, AFocused: Boolean; var ADone: Boolean); procedure kbmtcBeforePost(DataSet: TDataSet); private { Private declarations } public { Public declarations } ordno:Integer; procedure GetProfittcLx(depts:string;beginEtd,EndEtd:TDateTime); function CalcProftAmttc(ProftAmt:Double;Employee:string):Double; function getzq(cust: string;aDate:TDateTime):TDateTime; function getzqtype(cust: string;aDate:TDateTime):string; function CalcProftAmtqx(ProftAmt:Double;Employee:string):Double; procedure UpdateBsProfit(bstype,bsno:String;fee:integer); procedure UpdateBsProfitLc(bstype,bsno,LcYYMM:String); end; var frm_rp_sales_profit_two: Tfrm_rp_sales_profit_two; FmDate,ToDate:String; sqlstr:WideString; implementation uses u_main, my_sys_function,u_sys_progress; {$R *.dfm} procedure Tfrm_rp_sales_profit_two.bsSkinButton5Click(Sender: TObject); begin close; end; procedure Tfrm_rp_sales_profit_two.FormClose(Sender: TObject; var Action: TCloseAction); var inifile1:Tinifile; begin savereggrid(dxdbgrid6,caption+'6'); savereggrid(dxdbgrid8,caption+'8'); frm_rp_sales_profit_two.Hide; frm_rp_sales_profit_two.ManualFloat(frm_rp_sales_profit_two.BoundsRect ); frm_main.freeTabs('frm_rp_sales_profit_two'); action:=cafree; frm_rp_sales_profit_two:=nil; inifile1:=Tinifile.Create(ExtractFilePath(application.ExeName)+'main.ini'); inifile1.WriteString('TC','DAYS',bsSkinEdit1.text); inifile1.free; end; procedure Tfrm_rp_sales_profit_two.FormShow(Sender: TObject); var bYear,bMonth,bDate:Word; inifile1:Tinifile; aAdoQuery:TAdoQuery; begin loadreggrid(dxdbgrid6,false,caption+'6'); loadreggrid(dxdbgrid8,false,caption+'8'); DecodeDate(incmonth(Now),bYear,bMonth,bDate); wwDBComboBox20.Text:=IntToStr(bYear); wwDBComboBox20.Text:=IntToStr(YearOf(date)); wwDBComboBox1.Text:=IntToStr(bMonth); wwDBComboBox2.Text:=IntToStr(bMonth); aAdoQuery:=CreateAdoQuery; with aAdoQuery do try Close;SQL.Clear; SQL.Add('select 部门名称 from t_sys_department '); SQL.Add('order by 部门名称'); Open;first; CheckListBox1.Clear; while not eof do begin CheckListBox1.Items.Add(trim(FieldByName('部门名称').AsString)); next; end; finally aAdoQuery.Free; end; inifile1:=Tinifile.Create(ExtractFilePath(application.ExeName)+'main.ini'); bsSkinEdit1.text:=inifile1.Readstring('TC','DAYS','0'); inifile1.free; end; function Tfrm_rp_sales_profit_two.CalcProftAmttc(ProftAmt:Double;Employee:string):Double; var aAdoQueryProfitPlan,aAdoQueryProfitPlanItem:TAdoQuery; PlanName:string; begin result:=0; PlanName:=''; aAdoQueryProfitPlan:=CreateAdoQuery; aAdoQueryProfitPlanItem:=CreateAdoQuery; with aAdoQueryProfitPlan do begin Close;SQL.Clear; SQL.Add('select 提成方案 from t_sys_employee'); SQL.Add('Where 姓名=:Employee'); Parameters.ParamByName('Employee').Value:=Employee; Open; PlanName:=FieldByName('提成方案').AsString; end; if PlanName='' then Exit; with aAdoQueryProfitPlanItem do try Close;SQL.Clear; SQL.Add(' select distinct 利润起,利润止,本月结提成比例 from t_crm_salesproftSet'); SQL.Add('where 方案名称=:PlanName'); SQL.Add('Order by 利润起 '); Parameters.ParamByName('PlanName').Value:=trim(PlanName); Open;First; while not eof do begin if ProftAmt>=FieldByName('利润止').AsFloat then begin result:=result+(FieldByName('利润止').AsFloat-FieldByName('利润起').AsFloat)*FieldByName('本月结提成比例').AsFloat/100; end else begin if (ProftAmt>FieldByName('利润起').AsFloat) and (ProftAmt<=FieldByName('利润止').AsFloat) then begin result:=result+(ProftAmt-FieldByName('利润起').AsFloat)*FieldByName('本月结提成比例').AsFloat/100; end end; Next; end; finally Free; aAdoQueryProfitPlan.Free; end; end; procedure Tfrm_rp_sales_profit_two.GetProfittcLx(depts:string;beginEtd,EndEtd:TDateTime); var betd,eetd:TDate; aquery,bquery:TADOQuery; str,bdatestr:String; begin bdatestr:='开船日期'; betd:=beginEtd; eetd:=EndEtd; aQuery:=CreateAdoQuery; bQuery:=CreateAdoQuery; with bQuery do begin Close;SQL.Clear; SQL.Add('select distinct Fee2 from v_op_bscard'); SQL.Add('where 开船日期 between :beginEtd and :EndEtd'); SQL.Add(' and 揽货人=:揽货人'); end; with aQuery do try Close;SQL.Clear; str:='select 揽货人,sum(合计应收- 合计已收) 未收合计,sum(毛利润) as 毛利润,sum(利润RMB) as 利润RMB,sum(利润USD) as 利润USD from v_op_bscard where 1=1 and '; str:=Str+' '+bdatestr+'>='+''''+DateToStr(betd)+''''; str:=Str+' and '+bdatestr+'<='+''''+DateToStr(eetd)+''''; if RxDBLookupCombo3.DisplayValue<>'' then str:=Str+' and 揽货人='+''''+RxDBLookupCombo3.DisplayValue+''''; if if_open('405') then else begin str:=Str+' and 揽货人='+''''+employee+''''; end; if depts<>'' then str:=Str+' and 销售部门 in ('+depts+')'; SQL.Add(str); SQL.Add(' group by 揽货人'); { case ComboBox3.itemindex of 0:; 1:begin SQL.Add(' having (sum(合计应收- 合计已收)=0) or (sum(合计应收- 合计已收) is null)'); end; 2:begin SQL.Add(' having sum(合计应收- 合计已收)<>0'); end; end; } SQL.Add(' order by 揽货人'); Open;First; while not eof do begin case ComboBox3.itemindex of 0: begin kbmtc.insert; kbmtc.FieldByName('OrdNo').AsInteger:=OrdNo; bQuery.Close; bQuery.Parameters.ParamByName('beginEtd').Value:=betd; bQuery.Parameters.ParamByName('EndEtd').Value:=eetd; bQuery.Parameters.ParamByName('揽货人').Value:=FieldByName('揽货人').AsString; bQuery.Open;bQuery.first; if bQuery.RecordCount>1 then kbmtc.FieldByName('是否发放').AsString:='否' else if bQuery.RecordCount=1 then begin if bQuery.FieldByName('Fee2').AsInteger=1 then kbmtc.FieldByName('是否发放').AsString:='是' else kbmtc.FieldByName('是否发放').AsString:='否'; end else kbmtc.FieldByName('是否发放').AsString:='否'; kbmtc.FieldByName('揽货人').AsString:=FieldByName('揽货人').AsString; kbmtc.FieldByName('利润RMB').AsFloat:=FieldByName('利润RMB').AsFloat; kbmtc.FieldByName('利润USD').AsFloat:=FieldByName('利润USD').AsFloat; kbmtc.FieldByName('毛利润').AsFloat:=FieldByName('毛利润').AsFloat; kbmtc.FieldByName('未收合计').AsFloat:=FieldByName('未收合计').AsFloat; kbmtc.FieldByName('汇率').AsFloat:=getUsdExRate(DateToStr(betd),'USD'); kbmtc.FieldByName('年月').AsString:=FormatDateTime('YYMM',betd); kbmtc.FieldByName('应提成').AsString:=FormatFloat('0;-0;0',CalcProftAmttc(FieldByName('毛利润').AsFloat,FieldByName('揽货人').AsString)); kbmtc.FieldByName('税金').AsString:=FormatFloat('0;-0;0',kbmtc.FieldByName('应提成').AsFloat*0.08); case ComboBox2.itemindex of 0: begin kbmtc.Post; end; 1: begin if kbmtc.FieldByName('是否发放').AsString='否' then kbmtc.Post else kbmtc.Delete; end; 2: begin if kbmtc.FieldByName('是否发放').AsString='是' then kbmtc.Post else kbmtc.Delete; end; end; end; 1:begin if FieldByName('未收合计').AsFloat=0 then begin kbmtc.insert; kbmtc.FieldByName('OrdNo').AsInteger:=OrdNo; bQuery.Close; bQuery.Parameters.ParamByName('beginEtd').Value:=betd; bQuery.Parameters.ParamByName('EndEtd').Value:=eetd; bQuery.Parameters.ParamByName('揽货人').Value:=FieldByName('揽货人').AsString; bQuery.Open;bQuery.first; if bQuery.RecordCount>1 then kbmtc.FieldByName('是否发放').AsString:='否' else if bQuery.RecordCount=1 then begin if bQuery.FieldByName('Fee2').AsInteger=1 then kbmtc.FieldByName('是否发放').AsString:='是' else kbmtc.FieldByName('是否发放').AsString:='否'; end else kbmtc.FieldByName('是否发放').AsString:='否'; kbmtc.FieldByName('揽货人').AsString:=FieldByName('揽货人').AsString; kbmtc.FieldByName('利润RMB').AsFloat:=FieldByName('利润RMB').AsFloat; kbmtc.FieldByName('利润USD').AsFloat:=FieldByName('利润USD').AsFloat; kbmtc.FieldByName('毛利润').AsFloat:=FieldByName('毛利润').AsFloat; kbmtc.FieldByName('未收合计').AsFloat:=FieldByName('未收合计').AsFloat; kbmtc.FieldByName('汇率').AsFloat:=getUsdExRate(DateToStr(betd),'USD'); kbmtc.FieldByName('年月').AsString:=FormatDateTime('YYMM',betd); kbmtc.FieldByName('应提成').AsString:=FormatFloat('0;-0;0',CalcProftAmttc(FieldByName('毛利润').AsFloat,FieldByName('揽货人').AsString)); kbmtc.FieldByName('税金').AsString:=FormatFloat('0;-0;0',kbmtc.FieldByName('应提成').AsFloat*0.08); case ComboBox2.itemindex of 0: begin kbmtc.Post; end; 1: begin if kbmtc.FieldByName('是否发放').AsString='否' then kbmtc.Post else kbmtc.Delete; end; 2: begin if kbmtc.FieldByName('是否发放').AsString='是' then kbmtc.Post else kbmtc.Delete; end; end; end; end; 2:begin if FieldByName('未收合计').AsFloat<>0 then begin kbmtc.insert; kbmtc.FieldByName('OrdNo').AsInteger:=OrdNo; bQuery.Close; bQuery.Parameters.ParamByName('beginEtd').Value:=betd; bQuery.Parameters.ParamByName('EndEtd').Value:=eetd; bQuery.Parameters.ParamByName('揽货人').Value:=FieldByName('揽货人').AsString; bQuery.Open;bQuery.first; if bQuery.RecordCount>1 then kbmtc.FieldByName('是否发放').AsString:='否' else if bQuery.RecordCount=1 then begin if bQuery.FieldByName('Fee2').AsInteger=1 then kbmtc.FieldByName('是否发放').AsString:='是' else kbmtc.FieldByName('是否发放').AsString:='否'; end else kbmtc.FieldByName('是否发放').AsString:='否'; kbmtc.FieldByName('揽货人').AsString:=FieldByName('揽货人').AsString; kbmtc.FieldByName('利润RMB').AsFloat:=FieldByName('利润RMB').AsFloat; kbmtc.FieldByName('利润USD').AsFloat:=FieldByName('利润USD').AsFloat; kbmtc.FieldByName('毛利润').AsFloat:=FieldByName('毛利润').AsFloat; kbmtc.FieldByName('未收合计').AsFloat:=FieldByName('未收合计').AsFloat; kbmtc.FieldByName('汇率').AsFloat:=getUsdExRate(DateToStr(betd),'USD'); kbmtc.FieldByName('年月').AsString:=FormatDateTime('YYMM',betd); kbmtc.FieldByName('应提成').AsString:=FormatFloat('0;-0;0',CalcProftAmttc(FieldByName('毛利润').AsFloat,FieldByName('揽货人').AsString)); kbmtc.FieldByName('税金').AsString:=FormatFloat('0;-0;0',kbmtc.FieldByName('应提成').AsFloat*0.08); case ComboBox2.itemindex of 0: begin kbmtc.Post; end; 1: begin if kbmtc.FieldByName('是否发放').AsString='否' then kbmtc.Post else kbmtc.Delete; end; 2: begin if kbmtc.FieldByName('是否发放').AsString='是' then kbmtc.Post else kbmtc.Delete; end; end; end; end; end; OrdNo:=OrdNo+1; Next; end; finally FreeAndNil(aquery); FreeAndNil(bquery); end; end; procedure Tfrm_rp_sales_profit_two.bsSkinButton10Click(Sender: TObject); var i,j :integer; depts:string; betd,eetd:TDate; begin ordno:=1; for i:=0 to CheckListBox1.Items.Count-1 do begin if CheckListBox1.Checked[i] then if depts='' then depts:=''''+CheckListBox1.Items[i]+'''' else depts:=depts+','+''''+CheckListBox1.Items[i]+''''; end; kbmtc.EmptyTable; kbmtc.Open; for j:=StrToInt(wwDBComboBox1.Text) to StrToInt(wwDBComboBox2.Text) do begin betd:=EncodeDate(StrToInt(wwDBComboBox20.Text), j, 1); eetd:=EncodeDate(StrToInt(wwDBComboBox20.Text), j, MonthDays[isLeapYear(StrToInt(wwDBComboBox20.Text)),j]); GetProfittcLx(depts,betd,eetd); end; end; function Tfrm_rp_sales_profit_two.getzq(cust: string;aDate:TDateTime):TDateTime; var aQuery:TAdoQuery; begin result:=0; aQuery:=CreateAdoQuery; try with aQuery do begin close;sql.Clear; sql.Add('select 客户简称,结费类型,结费期限,类型模式,结费日期,结费金额'); sql.Add('from t_crm_client_sales'); sql.Add('where 客户简称='''+cust+''''); sql.Add('and 开始日期<=:Date1 and 结束日期>=:date2'); Parameters.ParamByName('Date1').Value:=aDate; Parameters.ParamByName('Date2').Value:=aDate; open;First; if IsEmpty then begin result:=aDate; end else begin if Trim(fieldbyname('结费类型').asString)='现结买单' then result:=aDate else if Trim(fieldbyname('结费类型').asString)='约定天数' then result:=aDate+fieldbyname('结费期限').AsFloat else if Trim(fieldbyname('结费类型').asString)='约定时间' then begin if DaysInMonth(IncMonth(aDate,fieldbyname('类型模式').Asinteger))>fieldbyname('结费日期').Asinteger then begin result:=EncodeDate(Yearof(IncMonth(aDate,fieldbyname('类型模式').Asinteger)),Monthof(IncMonth(aDate,fieldbyname('类型模式').Asinteger)),fieldbyname('结费日期').Asinteger); end else begin result:=EncodeDate(Yearof(IncMonth(aDate,fieldbyname('类型模式').Asinteger)),Monthof(IncMonth(aDate,fieldbyname('类型模式').Asinteger)),DaysInMonth(IncMonth(aDate,fieldbyname('类型模式').Asinteger))); end; end; end; end; finally FreeAndNil(aQuery); end; end; function Tfrm_rp_sales_profit_two.getzqtype(cust: string;aDate:TDateTime):string; var aQuery:TAdoQuery; begin result:='现结买单'; aQuery:=CreateAdoQuery; try with aQuery do begin close;sql.Clear; sql.Add('select 客户简称,结费类型,结费期限,类型模式,结费日期,结费金额'); sql.Add('from t_crm_client_sales'); sql.Add('where 客户简称='''+cust+''''); sql.Add('and 开始日期<=:Date1 and 结束日期>=:date2'); Parameters.ParamByName('Date1').Value:=aDate; Parameters.ParamByName('Date2').Value:=aDate; open;First; if IsEmpty then begin end else begin result:=Trim(fieldbyname('结费类型').asString); end; end; finally FreeAndNil(aQuery); end; end; function Tfrm_rp_sales_profit_two.CalcProftAmtqx(ProftAmt:Double;Employee:string):Double; var aAdoQueryProfitPlan,aAdoQueryProfitPlanItem:TAdoQuery; PlanName:string; begin result:=0; PlanName:=''; aAdoQueryProfitPlan:=CreateAdoQuery; aAdoQueryProfitPlanItem:=CreateAdoQuery; with aAdoQueryProfitPlan do begin Close;SQL.Clear; SQL.Add('select 提成方案 from t_sys_employee'); SQL.Add('Where 姓名=:Employee'); Parameters.ParamByName('Employee').Value:=Employee; Open; PlanName:=FieldByName('提成方案').AsString; end; if PlanName='' then Exit; with aAdoQueryProfitPlanItem do try Close;SQL.Clear; SQL.Add(' select distinct 开始天数,结束天数,扣息百分比 from t_crm_saleslxSet'); SQL.Add('where 方案名称=:PlanName'); SQL.Add('Order by 开始天数 '); Parameters.ParamByName('PlanName').Value:=trim(PlanName); Open;First; while not eof do begin if ProftAmt>0 then if (ProftAmt>FieldByName('开始天数').AsFloat) and (ProftAmt<=FieldByName('结束天数').AsFloat) then begin result:=FieldByName('扣息百分比').AsFloat; end; Next; end; finally Free; aAdoQueryProfitPlan.Free; end; end; procedure Tfrm_rp_sales_profit_two.UpdateBsProfit(bstype,bsno:String;fee:integer); var aQuery:TADOQuery; tblname:string; begin tblname:=''; if bstype='海运出口' then tblname:='t_op_seae' else if bstype='海运进口' then tblname:='t_op_seai' else if bstype='空运出口' then tblname:='t_op_aire' else if bstype='空运进口' then tblname:='t_op_airi'; if tblname='' then exit; aQuery:=CreateAdoQuery; with aQuery do try Close;SQL.Clear; SQL.Add('update '+tblname +' set Fee2=:fee'); SQL.Add('where 编号=:bsno'); Parameters.ParamByName('bsno').Value:=bsno; Parameters.ParamByName('fee').Value:=fee; Execsql; finally FreeAndNil(aQuery); end; end; procedure Tfrm_rp_sales_profit_two.UpdateBsProfitLc(bstype,bsno,LcYYMM:String); var aQuery:TADOQuery; tblname:string; begin tblname:=''; if bstype='海运出口' then tblname:='t_op_seae' else if bstype='海运进口' then tblname:='t_op_seai' else if bstype='空运出口' then tblname:='t_op_aire' else if bstype='空运进口' then tblname:='t_op_airi'; if tblname='' then exit; aQuery:=CreateAdoQuery; with aQuery do try Close;SQL.Clear; SQL.Add('update '+tblname +' set 发票号=:发票号'); SQL.Add('where 编号=:bsno'); Parameters.ParamByName('bsno').Value:=bsno; Parameters.ParamByName('发票号').Value:=LcYYMM; Execsql; finally FreeAndNil(aQuery); end; end; procedure Tfrm_rp_sales_profit_two.bsSkinButton3Click(Sender: TObject); var betd,eetd:TDate; aquery,bquery:TADOQuery; str,bdatestr:String; begin if Trim(Edit1.Text)<>'' then begin ComboBox1.ItemIndex:=2; end; if not kbmtc.IsEmpty then with kbmtc do begin First; while not Eof do begin kbmtc.Edit; kbmtc.FieldByName('扣息').AsFloat:=0; kbmtc.FieldByName('实发提成').AsFloat:=0; kbmtc.Post; Next; end; end; bdatestr:='开船日期'; aQuery:=CreateAdoQuery; bQuery:=CreateAdoQuery; with aQuery do try Close;SQL.Clear; str:='select 编号,揽货人,业务类型,主提单号,发票号,委托编号,委托单位,开船日期,(应收RMB-已收RMB) 未收RMB,(应收USD- 已收USD) 未收USD,(合计应收- 合计已收) 未收合计,应收RMB,应收USD,合计应收 应收合计 from v_op_bscard where 1=1 and '; if (wwDBDateTimePicker1.text<>'') and (wwDBDateTimePicker2.text<>'') then begin str:=Str+' '+bdatestr+'>='+''''+DateToStr(wwDBDateTimePicker1.Date)+''''; str:=Str+' and '+bdatestr+'<='+''''+DateToStr(wwDBDateTimePicker2.Date)+''''; end else begin str:=Str+' 1=1'; end; { if Edit1.text<>'' then str:=Str+' and 发票号='+''''+Edit1.text+''''; } if if_open('405') then begin end else begin str:=Str+' and 揽货人='+''''+employee+''''; end; SQL.Add(str); SQL.Add(' and 委托单位 in (select 客户简称 from t_crm_client_sales where 结费类型<>''现结买单'')'); case ComboBox1.ItemIndex of 0:begin //全部 end; 1:begin //未结算 SQL.Add(' and (发票号 is Null or 发票号='''')'); end; 2:begin //已结算 if trim(Edit1.text)<>'' then SQL.Add(' and 发票号='+''''+Edit1.text+'''') else SQL.Add(' and (not 发票号 is Null and 发票号<>'''')'); end; 3:begin //未收款 SQL.Add(' and (合计应收-合计已收)<>0'); end; end; SQL.Add(' order by 揽货人'); Open;First; //ShowMessage(SQL.Text); kbmqc.EmptyTable; kbmqc.Open; while not eof do begin kbmqc.insert; kbmqc.FieldByName('编号').AsString:=FieldByName('编号').AsString; kbmqc.FieldByName('揽货人').AsString:=FieldByName('揽货人').AsString; kbmqc.FieldByName('业务类型').AsString:=FieldByName('业务类型').AsString; kbmqc.FieldByName('扣息月').AsString:=FieldByName('发票号').AsString; kbmqc.FieldByName('主提单号').AsString:=FieldByName('主提单号').AsString; kbmqc.FieldByName('委托编号').AsString:=FieldByName('委托编号').AsString; kbmqc.FieldByName('客户名称').AsString:=FieldByName('委托单位').AsString; kbmqc.FieldByName('开船日期').AsDateTime:=FieldByName('开船日期').AsDateTime; kbmqc.FieldByName('未收RMB').AsFloat:=FieldByName('未收RMB').AsFloat; kbmqc.FieldByName('未收USD').AsFloat:=FieldByName('未收USD').AsFloat; kbmqc.FieldByName('未收合计').AsFloat:=FieldByName('未收合计').AsFloat; kbmqc.FieldByName('应收RMB').AsFloat:=FieldByName('应收RMB').AsFloat; kbmqc.FieldByName('应收USD').AsFloat:=FieldByName('应收USD').AsFloat; kbmqc.FieldByName('应收合计').AsFloat:=FieldByName('应收合计').AsFloat; kbmqc.FieldByName('利息').AsFloat:=0; kbmqc.FieldByName('应结日期').AsDateTime:=getzq(kbmqc.FieldByName('客户名称').AsString,kbmqc.FieldByName('开船日期').AsDateTime); bQuery.Close; bQuery.SQL.Clear; bQuery.SQL.Add('select top 1 结算日期 from v_fee_do_jie where 业务编号='''+kbmqc.FieldByName('编号').AsString+''' order by 结算日期 DESC '); bQuery.Open; if not bQuery.IsEmpty then begin kbmqc.FieldByName('结算日期').VALUE:=bQuery.FieldByName('结算日期').AsDateTime; end; kbmqc.FieldByName('结费类型').AsString:=getzqtype(kbmqc.FieldByName('客户名称').AsString,kbmqc.FieldByName('开船日期').AsDateTime); kbmqc.FieldByName('宽限天数').AsInteger:=StrToInt(bsSkinEdit1.text); if (DaysBetween(Date,kbmqc.FieldByName('应结日期').AsDateTime)-kbmqc.FieldByName('宽限天数').AsInteger)>0 then begin if not kbmqc.FieldByName('结算日期').IsNull then begin if kbmqc.FieldByName('结算日期').AsDateTime>kbmqc.FieldByName('应结日期').AsDateTime then kbmqc.FieldByName('扣息天数').AsInteger:=DaysBetween(kbmqc.FieldByName('结算日期').AsDateTime,kbmqc.FieldByName('应结日期').AsDateTime)-kbmqc.FieldByName('宽限天数').AsInteger else kbmqc.FieldByName('扣息天数').AsInteger:=0; kbmqc.FieldByName('扣息百分比').AsFloat:=CalcProftAmtqx(kbmqc.FieldByName('扣息天数').AsFloat,kbmqc.FieldByName('揽货人').AsString); if trim(kbmqc.FieldByName('结费类型').AsString)<>'现结买单' then kbmqc.FieldByName('利息').AsString:=FormatFloat('0.00;-0.00;0',kbmqc.FieldByName('扣息百分比').AsFloat/100*kbmqc.FieldByName('应收合计').AsFloat*kbmqc.FieldByName('扣息天数').AsInteger); end else begin if Date>kbmqc.FieldByName('应结日期').AsDateTime then kbmqc.FieldByName('扣息天数').AsInteger:=DaysBetween(Date,kbmqc.FieldByName('应结日期').AsDateTime)-kbmqc.FieldByName('宽限天数').AsInteger else kbmqc.FieldByName('扣息天数').AsInteger:=0; kbmqc.FieldByName('扣息百分比').AsFloat:=CalcProftAmtqx(kbmqc.FieldByName('扣息天数').AsFloat,kbmqc.FieldByName('揽货人').AsString); if trim(kbmqc.FieldByName('结费类型').AsString)<>'现结买单' then kbmqc.FieldByName('利息').AsString:=FormatFloat('0.00;-0.00;0',kbmqc.FieldByName('扣息百分比').AsFloat/100*kbmqc.FieldByName('应收合计').AsFloat*kbmqc.FieldByName('扣息天数').AsInteger); end; end; if (Trim(kbmqc.FieldByName('扣息月').AsString)<>'') and (kbmqc.FieldByName('利息').AsFloat>0) then if not kbmtc.IsEmpty then if kbmtc.Locate('揽货人;年月',vararrayof([Trim(kbmqc.FieldByName('揽货人').AsString),Trim(kbmqc.FieldByName('扣息月').AsString)]),[]) then begin kbmtc.Edit; kbmtc.FieldByName('扣息').AsFloat:=kbmtc.FieldByName('扣息').AsFloat+StrToFloat(FormatFloat('0;-0;0',kbmqc.FieldByName('利息').AsFloat)); kbmtc.Post; end; if kbmqc.FieldByName('利息').AsFloat>0 then kbmqc.Post else kbmqc.Delete; Next; end; finally FreeAndNil(aquery); end; end; procedure Tfrm_rp_sales_profit_two.texClick(Sender: TObject); var i:integer; begin if Edit2.text='' then begin if not if_open('406') then begin showmessage('你没有此模块的操作权限!,请联系系统管理员,权限设置路径:操作管理--->销售管理--->取消提成'); exit; end; if MessageDlg('输入月份(YYMM)为空要取消结算吗? 是否继续?',mtWarning,[mbyes,mbno],0)<>mryes then Exit; end else begin if not if_open('405') then begin showmessage('你没有此模块的操作权限!,请联系系统管理员,权限设置路径:操作管理--->销售管理--->发放提成'); exit; end; if MessageDlg('确实要将扣息结算结算到'+Edit2.text+'吗? 是否继续?',mtWarning,[mbyes,mbno],0)<>mryes then Exit; end; if dxDBGrid6.SelectedCount<1 then begin showmessage('请选择数据!!'); exit; end; try kbmqc.DisableControls; for i:=0 to dxDBGrid6.SelectedCount-1 do begin kbmqc.GotoBookmark(pointer(dxDBGrid6.selectedrows[i])); kbmqc.Edit; kbmqc.FieldByName('扣息月').AsString:=Edit2.text; kbmqc.Post; UpdateBsProfitLc(kbmqc.fieldbyname('业务类型').asstring,kbmqc.fieldbyname('编号').asstring,Edit2.text); end; finally kbmqc.EnableControls; end; end; procedure Tfrm_rp_sales_profit_two.bsSkinButton9Click(Sender: TObject); begin sys_print('业务综合统计',2,nil,nil,nil,nil,nil,nil,nil,kbmtc1,kbmqc1,nil,nil); end; procedure Tfrm_rp_sales_profit_two.MenuItem7Click(Sender: TObject); begin grid_save_xls(dxdbgrid6); end; procedure Tfrm_rp_sales_profit_two.N1Click(Sender: TObject); var aquery:TADOQuery; begin if not if_open('405') then begin showmessage('你没有此模块的操作权限!,请联系系统管理员,权限设置路径:操作管理--->销售管理--->发放提成'); exit; end; if MessageDlg('确实要结算 '+kbmtc.FieldByName('揽货人').AsString+' '+kbmtc.FieldByName('年月').AsString+'吗? 是否继续?',mtWarning,[mbyes,mbno],0)<>mryes then Exit; aQuery:=CreateAdoQuery; with aQuery do try close;SQL.Clear; SQL.Add('select * from v_op_bscard'); SQL.Add('where substring(CONVERT(varchar(100), 开船日期, 112),3,4)='''+kbmtc.FieldByName('年月').AsString+''''); SQL.Add('and 揽货人='''+kbmtc.FieldByName('揽货人').AsString+''''); open;First; while not eof do begin UpdateBsProfit(fieldbyname('业务类型').asstring,fieldbyname('编号').asstring,1); Next; end; kbmtc.Edit; kbmtc.FieldByName('是否发放').AsString:='是'; kbmtc.Post; finally Free; end; // end; procedure Tfrm_rp_sales_profit_two.N3Click(Sender: TObject); var aquery:TADOQuery; begin if not if_open('406') then begin showmessage('你没有此模块的操作权限!,请联系系统管理员,权限设置路径:操作管理--->销售管理--->取消提成'); exit; end; if MessageDlg('确实要取消结算 '+kbmtc.FieldByName('揽货人').AsString+' '+kbmtc.FieldByName('年月').AsString+'吗? 是否继续?',mtWarning,[mbyes,mbno],0)<>mryes then Exit; aQuery:=CreateAdoQuery; with aQuery do try close;SQL.Clear; SQL.Add('select * from v_op_bscard'); SQL.Add('where substring(CONVERT(varchar(100), 开船日期, 112),3,4)='''+kbmtc.FieldByName('年月').AsString+''''); SQL.Add('and 揽货人='''+kbmtc.FieldByName('揽货人').AsString+''''); open;First; while not eof do begin UpdateBsProfit(fieldbyname('业务类型').asstring,fieldbyname('编号').asstring,0); Next; end; kbmtc.Edit; kbmtc.FieldByName('是否发放').AsString:='否'; kbmtc.Post; finally Free; end; end; procedure Tfrm_rp_sales_profit_two.dxDBGrid6CustomDraw(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxDBTreeListColumn; const AText: String; AFont: TFont; var AColor: TColor; ASelected, AFocused: Boolean; var ADone: Boolean); begin if uppercase(ANode.Strings[dxDBGrid6Column19.Index])<>'' then begin // AFont.Style:=AFont.Style+[fsStrikeOut]; AColor:=$00E3C784; exit; end; end; procedure Tfrm_rp_sales_profit_two.dxDBGrid8CustomDraw(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxDBTreeListColumn; const AText: String; AFont: TFont; var AColor: TColor; ASelected, AFocused: Boolean; var ADone: Boolean); begin if uppercase(ANode.Strings[dxDBGrid8Column10.Index])='是' then begin // AFont.Style:=AFont.Style+[fsStrikeOut]; AColor:=$00E3C784; exit; end; end; procedure Tfrm_rp_sales_profit_two.kbmtcBeforePost(DataSet: TDataSet); begin kbmtc.FieldByName('实发提成').AsFloat:=StrToFloat(FormatFloat('0;-0;0',kbmtc.FieldByName('应提成').AsFloat-kbmtc.FieldByName('税金').AsFloat-kbmtc.FieldByName('扣息').AsFloat)); end; end.