unit U_PayableList; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxGraphics, cxCustomData, cxStyles, cxTL, cxMaskEdit, DB, ADODB, cxInplaceContainer, cxDBTL, cxControls, cxTLData, ComCtrls, ToolWin, StdCtrls, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, DBClient, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, ExtCtrls, cxSplitter, cxGridLevel, cxClasses, cxGridCustomView, cxGrid, cxGridCustomPopupMenu, cxGridPopupMenu, RM_Dataset, RM_System, RM_Common, RM_Class, RM_GridReport, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdFTP, ShellAPI, IniFiles, cxCheckBox, cxCalendar, cxButtonEdit, cxTextEdit, cxPC, cxDropDownEdit, cxLookAndFeels, cxLookAndFeelPainters, cxNavigator, dxBarBuiltInMenu, dxSkinsCore, dxSkinsDefaultPainters, dxDateRanges, U_BaseList, Vcl.Menus, Vcl.Clipbrd, dxSkinWXI, dxScrollbarAnnotations; type TfrmPayableList = class(TfrmBaseList) ToolBar1: TToolBar; TBRafresh: TToolButton; btnDel: TToolButton; TBClose: TToolButton; ADOQueryTemp: TADOQuery; ADOQueryCmd: TADOQuery; Panel1: TPanel; ADOQueryMain: TADOQuery; RM1: TRMGridReport; RMDB_Main: TRMDBDataSet; Label3: TLabel; OppCoName: TEdit; cxGrid1: TcxGrid; Tv1: TcxGridDBTableView; v2CRTime: TcxGridDBColumn; cxGridLevel1: TcxGridLevel; begdate: TDateTimePicker; Enddate: TDateTimePicker; GPM_1: TcxGridPopupMenu; DS_1: TDataSource; CDS_1: TClientDataSet; btnAdd: TToolButton; v2FactoryName: TcxGridDBColumn; F_Name: TEdit; Label4: TLabel; CheckBox1: TCheckBox; Label6: TLabel; F_Code: TEdit; v2OrderNo: TcxGridDBColumn; cxTabControl1: TcxTabControl; Label10: TLabel; ConNo: TEdit; Label11: TLabel; BuyConNo: TEdit; v2Column2: TcxGridDBColumn; btnChk: TToolButton; btnReChk: TToolButton; PopupMenu1: TPopupMenu; N1: TMenuItem; ToolButton4: TToolButton; Label2: TLabel; OppParentCoName: TEdit; ToolButton5: TToolButton; N2: TMenuItem; btnEdit: TToolButton; Tv1Column3: TcxGridDBColumn; Tv1Column4: TcxGridDBColumn; Tv1Column5: TcxGridDBColumn; Tv1Column6: TcxGridDBColumn; Tv1Column7: TcxGridDBColumn; Tv1Column8: TcxGridDBColumn; Tv1Column9: TcxGridDBColumn; Tv1Column10: TcxGridDBColumn; Tv1Column11: TcxGridDBColumn; Tv1Column12: TcxGridDBColumn; Tv1Column13: TcxGridDBColumn; Tv1Column14: TcxGridDBColumn; Tv1Column15: TcxGridDBColumn; Tv1Column16: TcxGridDBColumn; Tv1Column17: TcxGridDBColumn; Tv1Column18: TcxGridDBColumn; Tv1Column19: TcxGridDBColumn; Tv1Column20: TcxGridDBColumn; Tv1Column21: TcxGridDBColumn; Tv1Column22: TcxGridDBColumn; Tv1Column23: TcxGridDBColumn; N3: TMenuItem; Tv1Column24: TcxGridDBColumn; Tv1Column1: TcxGridDBColumn; Tv1Column2: TcxGridDBColumn; ToolButton1: TToolButton; Tv1Column25: TcxGridDBColumn; Tv1Column26: TcxGridDBColumn; Tv1Column27: TcxGridDBColumn; ToolButton2: TToolButton; Tv1Column28: TcxGridDBColumn; Tv1Column29: TcxGridDBColumn; Tv1Column30: TcxGridDBColumn; Label1: TLabel; OrderNo: TEdit; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure TBCloseClick(Sender: TObject); procedure btnDelClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure TBRafreshClick(Sender: TObject); procedure cxGridDBColumn5PropertiesEditValueChanged(Sender: TObject); procedure btnAddClick(Sender: TObject); procedure OppCoNameKeyPress(Sender: TObject; var Key: Char); procedure cxTabControl1Change(Sender: TObject); procedure btnChkClick(Sender: TObject); procedure btnReChkClick(Sender: TObject); procedure N1Click(Sender: TObject); procedure ToolButton4Click(Sender: TObject); procedure ToolButton5Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure btnEditClick(Sender: TObject); procedure N3Click(Sender: TObject); procedure ToolButton1Click(Sender: TObject); procedure Tv1CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); procedure ToolButton2Click(Sender: TObject); private procedure InitGrid(); procedure SetStatus(); public FAuthority, MFFID: string; end; implementation uses U_DataLink, U_RTFun, U_PayableInput, U_ZDYHelp, U_PayableEdit; {$R *.dfm} procedure TfrmPayableList.SetStatus(); begin btnChk.Enabled := false; //审核 btnReChk.Enabled := false; //撤销 btnAdd.Enabled := false; //新增 btnEdit.Enabled := false; //修改 btnDel.Enabled := false; //删除 // if Trim(FAuthority) = '管理' then begin btnAdd.Enabled := true; case cxTabControl1.TabIndex of 0: begin btnEdit.Enabled := true; btnDel.Enabled := true; btnChk.Enabled := true; end; 1: begin btnReChk.Enabled := true; end; 2: begin end; end; end; end; procedure TfrmPayableList.InitGrid(); var WSql: string; begin WSql := SGetFilters(Panel1, 1, 2); if Trim(WSql) <> '' then WSql := ' and ' + WSql else CheckBox1.Checked := True; if not CDS_1.IsEmpty then MFFID := Trim(CDS_1.FieldByName('FFID').AsString) else MFFID := ''; try ADOQueryMain.DisableControls; with ADOQueryMain do begin Close; SQL.Clear; Filtered := False; sql.Add(' select BuyConNO=ISNULL(A.BuyConNo,(select TOP 1 BuyConNo from Trade_Plan_Sub X where X.MainID=A.OrdMainId )),A.* '); sql.Add('from Finance_Flow A where A.FFType=''应付款登记'' '); case cxTabControl1.TabIndex of 0: begin sql.Add(' and isnull(status,''0'')=''0'' '); end; 1: begin sql.Add(' and isnull(status,''0'')=''9'' '); end; end; if CheckBox1.Checked then begin sql.Add(' and A.FFTime>=''' + FormatDateTime('yyyy-MM-dd', begdate.DateTime) + ''' '); sql.Add(' and A.FFTime<''' + FormatDateTime('yyyy-MM-dd', Enddate.DateTime + 1) + ''' '); end; sql.Add(WSql); sql.Add('Order By FFTime,OppCoName,OrderNo'); // ShowMessage(sql.text) ; Open; end; SCreateCDS(ADOQueryMain, CDS_1); SInitCDSData(ADOQueryMain, CDS_1); finally ADOQueryMain.EnableControls; TV1.DataController.Filter.Clear; end; if MFFID <> '' then CDS_1.Locate('FFID', MFFID, []); end; procedure TfrmPayableList.N1Click(Sender: TObject); begin SelOKNo(CDS_1, true) end; procedure TfrmPayableList.N2Click(Sender: TObject); begin Clipboard.SetTextBuf(PChar(Trim(CDS_1.fieldbyname(TV1.Controller.FocusedColumn.DataBinding.FilterFieldName).AsString))); end; procedure TfrmPayableList.N3Click(Sender: TObject); begin SelOKNo(CDS_1, false) end; procedure TfrmPayableList.FormClose(Sender: TObject; var Action: TCloseAction); begin inherited; Action := caFree; end; procedure TfrmPayableList.TBCloseClick(Sender: TObject); begin Close; end; procedure TfrmPayableList.btnDelClick(Sender: TObject); var FFFIDS: string; MOrderNoS: string; begin if CDS_1.IsEmpty then exit; if not CDS_1.Locate('SSel', True, []) then begin application.MessageBox('请选择数据', '提示'); Exit; end; with ADOQueryTemp do begin Close; SQL.Clear; sql.Add(' select * from Trade_Plan_Main where OrderNo = ' + QuotedStr(CDS_1.FieldByName('OrderNo').AsString) + ' and status = ''10'' '); open; end; if not ADOQueryTemp.IsEmpty then begin application.MessageBox('计划单已完成,无法删除', '提示'); Exit; end; with CDS_1 do begin DisableControls; while CDS_1.Locate('SSel', True, []) do begin FFFIDS := FFFIDS + Trim(CDS_1.fieldbyname('FFID').AsString) + ','; if MOrderNoS <> '' then MOrderNoS := MOrderNoS + ',' + QuotedStr(CDS_1.fieldbyname('OrderNo').AsString) else MOrderNoS := MOrderNoS + QuotedStr(CDS_1.fieldbyname('OrderNo').AsString); CDS_1.Delete; end; EnableControls; end; try with ADOQueryCmd do begin Close; sql.Clear; sql.Add(' exec P_Fin_Flow_Del '); sql.Add(' @FFIDS=' + QuotedStr(FFFIDS)); Sql.Add(',@DCode=' + quotedstr(Trim(DCode))); Sql.Add(',@DName=' + quotedstr(Trim(DName))); open; end; if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString))); application.MessageBox('删除成功', '提示'); with ADOQueryCmd do begin close; sql.clear; SQL.Add(' UPDATE Costing_Table '); SQL.Add(' SET COrderSF = cast(( '); SQL.Add(' (cast(isnull(CCPKPJE,0) as decimal(18,2)) - '); SQL.Add(' (SELECT ISNULL(SUM(ISNULL(price,0) * ISNULL(qty, 0)),0) '); SQL.Add(' FROM Finance_Flow X '); SQL.Add(' WHERE FFType = ''应付款登记'' '); SQL.Add(' AND FFAbstract IN (''S1-面料支出'', ''S2-印染支出'', ''S3-后加工费用'') '); SQL.Add(' AND X.OrderNo = Costing_Table.COrderNo)) * cast(ISNULL(COrtherRate,0) as decimal(18,2))) as decimal(18, 2)) '); SQL.Add(' where COrderNo in( ' + MOrderNoS + ')'); // ShowMessage(sql.Text); ExecSQL; end; except application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0); InitGrid(); end; end; procedure TfrmPayableList.FormShow(Sender: TObject); begin inherited; ReadCxGrid(trim(Self.Caption), Tv1, '财务管理'); Enddate.DateTime := SGetServerDate(ADOQueryTemp); begdate.DateTime := Enddate.DateTime - 365; SetStatus(); InitGrid(); end; procedure TfrmPayableList.TBRafreshClick(Sender: TObject); begin begdate.SetFocus; with ADOQueryCmd do begin Close; Sql.Clear; Sql.Add('exec P_Fin_Generate_BQ '); Open; end; if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then begin application.MessageBox(pchar(ADOQueryCmd.FieldByName('ShowMsg').AsString), '提示信息'); Exit; end; InitGrid(); end; procedure TfrmPayableList.cxGridDBColumn5PropertiesEditValueChanged(Sender: TObject); var mvalue, FFieldName: string; FPS, FQty, FPrice, FQTFee, FMoney, FZKMoney: Double; begin FFieldName := Trim(Tv1.Controller.FocusedColumn.DataBinding.FilterFieldName); mvalue := TcxTextEdit(Sender).EditingText; if Trim(mvalue) = '' then begin mvalue := '0'; end; with CDS_1 do begin Edit; FieldByName(FFieldName).Value := Trim(mvalue); Post; FPS := CDS_1.fieldbyname('PS').AsFloat; FQty := CDS_1.fieldbyname('Qty').AsFloat; FQTFee := CDS_1.fieldbyname('QTFee').AsFloat; FPrice := CDS_1.fieldbyname('Price').AsFloat; FMoney := CDS_1.fieldbyname('Money').AsFloat; FZKMoney := CDS_1.fieldbyname('ZKMoney').AsFloat; end; if Trim(FFieldName) <> 'Money' then begin FMoney := FQty * FPrice + FQTFee - FZKMoney; end; with CDS_1 do begin Edit; FieldByName('Money').Value := FMoney; Post; end; with ADOQueryCmd do begin Close; SQL.Clear; sql.Add('update Finance_Flow set ' + FFieldName + '=' + Trim(mvalue)); if Trim(FFieldName) <> 'Money' then sql.Add(' ,Money=' + FloatToStr(FMoney)); sql.Add('where FFID=' + quotedstr(Trim(CDS_1.fieldbyname('FFID').AsString))); ExecSQL; end; Tv1.Controller.EditingController.ShowEdit(); end; procedure TfrmPayableList.btnChkClick(Sender: TObject); var FFFIDS, FFFIDS2: string; Count: Integer; Value: string; begin if CDS_1.IsEmpty then exit; if not CDS_1.Locate('SSel', True, []) then begin application.MessageBox('请选择数据', '提示'); Exit; end; Count := 1; // value :=FConNo; CDS_1.DisableControls; with CDS_1 do begin First; while not Eof do begin if CDS_1.fieldbyname('SSel').AsBoolean then begin FFFIDS := FFFIDS + Trim(CDS_1.fieldbyname('FFID').AsString) + ','; if Value = '' then begin Value := FieldByName('OrderNo').AsString; end; if Value <> '' then begin if Value <> FieldByName('OrderNo').AsString then begin Count := Count + 1; end; end; end; Next; end; end; CDS_1.EnableControls; if Count > 1 then begin application.MessageBox('选择的不是同一计划单!', '提示信息'); exit; end; with ADOQueryTemp do begin close; sql.Clear; sql.Add(' select COrderNO from Costing_Table where COrderNO = ' + QuotedStr(CDS_1.FieldByName('OrderNO').AsString)); Open; end; if not ADOQueryTemp.IsEmpty then begin with ADOQueryCmd do begin close; sql.clear; sql.add(' update Costing_Table set HYStatus = 1 where COrderNo =' + QuotedStr(CDS_1.FieldByName('OrderNO').AsString)); SQL.Add(' UPDATE Costing_Table '); SQL.Add(' SET COrderSF = cast(( '); SQL.Add(' (cast(isnull(CCPKPJE,0) as decimal(18,2)) - '); SQL.Add(' (SELECT ISNULL(SUM(ISNULL(price,0) * ISNULL(qty, 0)),0) '); SQL.Add(' FROM Finance_Flow X '); SQL.Add(' WHERE FFType = ''应付款登记'' '); SQL.Add(' AND FFAbstract IN (''S1-面料支出'', ''S2-印染支出'', ''S3-后加工费用'') '); SQL.Add(' AND X.OrderNo = Costing_Table.COrderNo)) * cast(ISNULL(COrtherRate,0) as decimal(18,2))) as decimal(18, 2)) '); SQL.Add(' where COrderNo = ' + QuotedStr(CDS_1.FieldByName('OrderNo').AsString)); // ShowMessage(sql.Text); ExecSQL; end; end; try with ADOQueryCmd do begin Close; sql.Clear; sql.Add(' exec P_Fin_Flow_SetStatus '); sql.Add(' @FFIDS=' + QuotedStr(FFFIDS)); sql.Add(',@Operation=''审核'' '); Sql.Add(',@DCode=' + quotedstr(Trim(DCode))); Sql.Add(',@DName=' + quotedstr(Trim(DName))); open; end; if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString))); application.MessageBox('审核成功', '提示'); InitGrid(); except application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0); end; end; procedure TfrmPayableList.btnReChkClick(Sender: TObject); var FFFIDS, FFFIDS2: string; Value: string; count: Integer; begin if CDS_1.IsEmpty then exit; if not CDS_1.Locate('SSel', True, []) then begin application.MessageBox('请选择数据', '提示'); Exit; end; count := 1; // value :=FConNo; CDS_1.DisableControls; with CDS_1 do begin First; while not Eof do begin if CDS_1.fieldbyname('SSel').AsBoolean then begin FFFIDS := FFFIDS + Trim(CDS_1.fieldbyname('FFID').AsString) + ','; if Value = '' then begin Value := FieldByName('OrderNo').AsString; end; if Value <> '' then begin if Value <> FieldByName('OrderNo').AsString then begin count := count + 1; end; end; end; Next; end; end; CDS_1.EnableControls; if count > 1 then begin application.MessageBox('选择的不是同一计划单!', '提示信息'); exit; end; // with CDS_1 do // begin // DisableControls; // while CDS_1.Locate('SSel', True, []) do // begin // FFFIDS := FFFIDS + Trim(CDS_1.fieldbyname('FFID').AsString) + ','; // CDS_1.Delete; //// Next; // end; // EnableControls; // end; with ADOQueryCmd do begin close; sql.clear; sql.add(' update Costing_Table set HYStatus = 1 where COrderNo =' + QuotedStr(CDS_1.FieldByName('OrderNO').AsString)); // ShowMessage(sql.Text); ExecSQL; end; try with ADOQueryCmd do begin Close; sql.Clear; sql.Add(' exec P_Fin_Flow_SetStatus '); sql.Add(' @FFIDS=' + QuotedStr(FFFIDS)); sql.Add(',@Operation=''撤销审核'' '); Sql.Add(',@DCode=' + quotedstr(Trim(DCode))); Sql.Add(',@DName=' + quotedstr(Trim(DName))); open; end; if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString))); application.MessageBox('撤销审核成功', '提示'); InitGrid(); except application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0); end; end; procedure TfrmPayableList.btnAddClick(Sender: TObject); begin try frmPayableInput := TfrmPayableInput.Create(Application); with frmPayableInput do begin FFFID := ''; if ShowModal = 1 then begin InitGrid(); end; end; finally frmPayableInput.Free; end; end; procedure TfrmPayableList.ToolButton1Click(Sender: TObject); begin try frmPayableInput := TfrmPayableInput.Create(Application); with frmPayableInput do begin FFFID := Trim(SELF.CDS_1.fieldbyname('FFID').AsString); PState := '复制'; if ShowModal = 1 then begin InitGrid(); end; end; finally frmPayableInput.Free; end; end; procedure TfrmPayableList.ToolButton2Click(Sender: TObject); var MFFIDS: string; begin if CDS_1.IsEmpty then exit; if not CDS_1.Locate('SSel', True, []) then begin application.MessageBox('请选择数据', '提示'); Exit; end; with ADOQueryTemp do begin Close; SQL.Clear; sql.Add(' select * from Trade_Plan_Main where OrderNo = ' + QuotedStr(CDS_1.FieldByName('OrderNo').AsString) + ' and status = ''10'' '); open; end; if not ADOQueryTemp.IsEmpty then begin application.MessageBox('计划单已完成,单价无法删除', '提示'); Exit; end; with CDS_1 do begin DisableControls; while CDS_1.Locate('SSel', True, []) do begin MFFIDS := MFFIDS + Trim(CDS_1.fieldbyname('FFID').AsString) + ','; CDS_1.Delete; end; EnableControls; end; try with ADOQueryCmd do begin Close; sql.Clear; sql.Add(' exec P_Fin_Flow_Judge '); sql.Add(' @FFIDS=' + QuotedStr(MFFIDS)); Sql.Add(',@DCode=' + quotedstr(Trim(DCode))); Sql.Add(',@DName=' + quotedstr(Trim(DName))); open; end; if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString))); except application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0); Exit; end; try frmPayableEdit := TfrmPayableEdit.Create(Application); with frmPayableEdit do begin FFFIDS := MFFIDS; if ShowModal = 1 then begin InitGrid(); end; end; finally frmPayableEdit.Free; end; end; procedure TfrmPayableList.ToolButton4Click(Sender: TObject); begin if ADOQueryMain.IsEmpty then Exit; TcxGridToExcel(self.Caption, cxgrid1); end; procedure TfrmPayableList.ToolButton5Click(Sender: TObject); begin WriteCxGrid(trim(Self.Caption), Tv1, '财务管理'); end; procedure TfrmPayableList.Tv1CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); begin if (AViewInfo.GridRecord.Values[tv1.GetColumnByFieldName('Filler').Index] <> '自动') and (AViewInfo.GridRecord.Values[tv1.GetColumnByFieldName('FFAbstract').Index] <> 'S4-仓储打包费用') then ACanvas.Font.Color := clBlue; // if '自动' <> AViewInfo.GridRecord.Values[Tv1Column25.Index] then ACanvas.Font.Color := clBlue; end; procedure TfrmPayableList.btnEditClick(Sender: TObject); begin with ADOQueryTemp do begin Close; SQL.Clear; sql.Add(' select * from Trade_Plan_Main where OrderNo = ' + QuotedStr(CDS_1.FieldByName('OrderNo').AsString) + ' and status = ''10'' '); open; end; if not ADOQueryTemp.IsEmpty then begin application.MessageBox('计划单已完成,无法修改', '提示'); Exit; end; try with ADOQueryCmd do begin Close; sql.Clear; sql.Add(' exec P_Fin_Flow_Judge '); sql.Add(' @FFIDS=' + QuotedStr(Trim(SELF.CDS_1.fieldbyname('FFID').AsString))); Sql.Add(',@DCode=' + quotedstr(Trim(DCode))); Sql.Add(',@DName=' + quotedstr(Trim(DName))); open; end; if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString))); except application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0); Exit; end; try frmPayableInput := TfrmPayableInput.Create(Application); with frmPayableInput do begin FFFID := Trim(SELF.CDS_1.fieldbyname('FFID').AsString); if ShowModal = 1 then begin InitGrid(); end; end; finally frmPayableInput.Free; end; end; procedure TfrmPayableList.OppCoNameKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin InitGrid(); end; end; procedure TfrmPayableList.cxTabControl1Change(Sender: TObject); begin SetStatus(); InitGrid(); end; end.