unit U_InvoiceJX; 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, cxDropDownEdit, cxPC, RM_e_Xls, Menus, cxLookAndFeels, cxLookAndFeelPainters, cxNavigator, dxBarBuiltInMenu, dxSkinsCore, dxSkinsDefaultPainters, dxDateRanges, U_BaseList, ComObj; type FdDy = record inc: integer; //客户端套接字句柄 FDdys: string[32]; //客户端套接字 FdDysName: string[32]; //客户端套接字 end; TfrmInvoiceJX = class(TfrmBaseList) ToolBar1: TToolBar; TBRafresh: TToolButton; TBClose: TToolButton; ADOQueryTemp: TADOQuery; ADOQueryCmd: TADOQuery; Panel1: TPanel; ToolButton2: TToolButton; P_CodeName: TEdit; ADOQueryMain: TADOQuery; ToolButton1: TToolButton; RM1: TRMGridReport; RMDB_Main: TRMDBDataSet; Label3: TLabel; IVNo: TEdit; cxGrid1: TcxGrid; Tv1: TcxGridDBTableView; cxGridLevel1: TcxGridLevel; Label2: TLabel; Label6: TLabel; begdate: TDateTimePicker; Enddate: TDateTimePicker; cxGridPopupMenu2: TcxGridPopupMenu; DS_Invoice: TDataSource; CDS_Invoice: TClientDataSet; TADD: TToolButton; TUPDATE: TToolButton; TBDEL: TToolButton; v1InvoiceNo: TcxGridDBColumn; v1InvoiceType: TcxGridDBColumn; v1InvoiceDate: TcxGridDBColumn; v1FactoryName: TcxGridDBColumn; v1note: TcxGridDBColumn; P_Spec: TEdit; Label5: TLabel; FactoryName: TEdit; TCHK: TToolButton; TNOCHK: TToolButton; cxTabControl1: TcxTabControl; TSel: TToolButton; v1Column1: TcxGridDBColumn; v1Column2: TcxGridDBColumn; RMXLSExport1: TRMXLSExport; PopupMenu1: TPopupMenu; N1: TMenuItem; N2: TMenuItem; ToolButton4: TToolButton; v1Column3: TcxGridDBColumn; ADOQueryPrint: TADOQuery; Label7: TLabel; KPFactoryName: TEdit; Label8: TLabel; Label9: TLabel; Label1: TLabel; SYRName: TEdit; v1Column8: TcxGridDBColumn; v1Column9: TcxGridDBColumn; v1Column10: TcxGridDBColumn; v1Column11: TcxGridDBColumn; v1Column12: TcxGridDBColumn; v1Column13: TcxGridDBColumn; v1Column14: TcxGridDBColumn; v1Column15: TcxGridDBColumn; v1Column17: TcxGridDBColumn; v1Column18: TcxGridDBColumn; v1Column19: TcxGridDBColumn; Tv1Column1: TcxGridDBColumn; VC_TSNOTE: TcxGridDBColumn; chkTS: TCheckBox; ToolButton3: TToolButton; ToolButton5: TToolButton; Tv1Column2: TcxGridDBColumn; Tv1Column3: TcxGridDBColumn; Tv1Column4: TcxGridDBColumn; ToolButton6: TToolButton; Tv1Column5: TcxGridDBColumn; Tv1Column6: TcxGridDBColumn; Tv1Column7: TcxGridDBColumn; Tv1Column8: TcxGridDBColumn; Tv1Column9: TcxGridDBColumn; Tv1Column10: TcxGridDBColumn; Tv1Column11: TcxGridDBColumn; Tv1Column12: TcxGridDBColumn; ToolButton7: TToolButton; OpenDialog1: TOpenDialog; Panel2: TPanel; procedure FormDestroy(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure TBCloseClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure TBRafreshClick(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure ToolButton1Click(Sender: TObject); procedure IVNoChange(Sender: TObject); procedure TADDClick(Sender: TObject); procedure TUPDATEClick(Sender: TObject); procedure TBDELClick(Sender: TObject); procedure cxTabControl1Change(Sender: TObject); procedure TCHKClick(Sender: TObject); procedure TNOCHKClick(Sender: TObject); procedure TSelClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure N1Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure ToolButton4Click(Sender: TObject); procedure Tv1CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); procedure chkTSClick(Sender: TObject); procedure ToolButton3Click(Sender: TObject); procedure ToolButton5Click(Sender: TObject); procedure ToolButton6Click(Sender: TObject); procedure ToolButton7Click(Sender: TObject); private { Private declarations } procedure InitGrid(); procedure SetStatus(); public canshu1, canshu2, FZKType: string; dFdDy: array[0..20] of FdDy; //客户端连接数组 { Public declarations } end; //var // frmInvoiceJX: TfrmInvoiceJX; implementation uses U_DataLink, U_RTFun, U_ZDYHelp, U_InvoiceJXInPut, U_JXFPHx, U_JXFPHXList, U_FjList10; {$R *.dfm} procedure TfrmInvoiceJX.SetStatus(); begin tchk.Visible := false; tnochk.Visible := false; TUPDATE.Visible := false; tbdel.Visible := false; if trim(DParameters1) <> '高权限' then begin case cxTabControl1.TabIndex of 0: begin TUPDATE.Visible := true; tbdel.Visible := true; TCHK.Visible := true; end; 1: begin tnochk.Visible := true; end; 2: begin end; end; end else begin case cxTabControl1.TabIndex of 0: begin tchk.Visible := true; TUPDATE.Visible := true; tbdel.Visible := true; TCHK.Visible := true; end; 1: begin tnochk.Visible := true; end; 2: begin end; end; end; end; procedure TfrmInvoiceJX.InitGrid(); begin try with ADOQueryMain do begin Close; SQL.Clear; sql.Add(' select A.* ,WFPhxNum=taxMoney-ISNULL(FPhxNum,0) '); SQL.Add(',isfj=CAST((CASE WHEN (SELECT COUNT(*) FROM TP_FILE D WHERE D.WBID=A.ivNo )>0 THEN 1 ELSE 0 END )AS BIT)'); SQL.Add(' ,B.TSNOTE '); sql.Add(' from CW_Invoice A left join SalesContract_Main B on A.ConNo =B.ConNo '); sql.add(' where A.IVDate>=''' + formatdatetime('yyyy-MM-dd', begdate.datetime) + ''' '); sql.Add(' and A.IVDate<''' + formatdateTime('yyyy-MM-dd', enddate.DateTime + 1) + ''' '); sql.Add(' and IVFlag=''进项'' '); // sql.Add(' and ZKType= ' + quotedstr(Trim(FZKType))); if cxTabControl1.TabIndex = 0 then sql.add(' and isnull(A.Chkstatus,''0'')=''0'''); if cxTabControl1.TabIndex = 1 then sql.add(' and A.Chkstatus=''1'''); if chkTS.Checked then begin sql.Add(' and ISNULL(B.TSNOTE,'''')<>'''' '); end; Open; // ShowMessage(SQL.Text); end; SCreateCDS(ADOQueryMain, CDS_Invoice); SInitCDSData(ADOQueryMain, CDS_Invoice); finally end; end; procedure TfrmInvoiceJX.FormDestroy(Sender: TObject); begin inherited; // frmInvoiceJX := nil; end; procedure TfrmInvoiceJX.FormClose(Sender: TObject; var Action: TCloseAction); begin inherited; Action := caFree; end; procedure TfrmInvoiceJX.TBCloseClick(Sender: TObject); begin WriteCxGrid('发票管理', Tv1, '财务管理'); Close; end; procedure TfrmInvoiceJX.FormShow(Sender: TObject); begin inherited; ReadCxGrid('发票管理', Tv1, '财务管理'); Enddate.DateTime := SGetServerDate(ADOQueryTemp); begdate.DateTime := Enddate.DateTime - 30; SetStatus(); InitGrid(); end; procedure TfrmInvoiceJX.TBRafreshClick(Sender: TObject); begin begdate.SetFocus; InitGrid(); end; procedure TfrmInvoiceJX.ToolButton2Click(Sender: TObject); begin if ADOQueryMain.Active then begin SDofilter(ADOQueryMain, SGetFilters(Panel1, 1, 2)); SCreateCDS(ADOQueryMain, CDS_Invoice); SInitCDSData(ADOQueryMain, CDS_Invoice); end; end; procedure TfrmInvoiceJX.ToolButton3Click(Sender: TObject); begin if CDS_Invoice.IsEmpty then exit; frmJXFPHx := TfrmJXFPHx.create(self); with frmJXFPHx do begin fkeyNo := CDS_Invoice.fieldbyname('IVId').AsString; ffactoryNO := CDS_Invoice.fieldbyname('factoryNo').AsString; if showmodal = 1 then begin end; free; end; end; procedure TfrmInvoiceJX.ToolButton1Click(Sender: TObject); begin if ADOQueryMain.IsEmpty then Exit; TcxGridToExcel(self.Caption, cxgrid1); end; procedure TfrmInvoiceJX.IVNoChange(Sender: TObject); begin ToolButton2.Click; end; procedure TfrmInvoiceJX.TADDClick(Sender: TObject); begin frmInvoiceJXInPut := TfrmInvoiceJXInPut.Create(self); with frmInvoiceJXInPut do begin FIVNo := ''; FZKType := Self.FZKType; if showmodal = 1 then begin initGrid(); end; free; end; end; procedure TfrmInvoiceJX.TUPDATEClick(Sender: TObject); begin frmInvoiceJXInPut := TfrmInvoiceJXInPut.Create(self); with frmInvoiceJXInPut do begin IvNo.Enabled := False; FIVNo := trim(Self.CDS_Invoice.fieldbyname('IVNo').asstring); FZKType := Self.FZKType; if showmodal = 1 then begin Self.initGrid(); end; free; end; end; procedure TfrmInvoiceJX.TBDELClick(Sender: TObject); begin if CDS_Invoice.IsEmpty then exit; if application.MessageBox('确定要删除发票吗?', '提示', 1) = 2 then exit; try ADOQueryCmd.Connection.BeginTrans; with ADOQueryCmd do begin close; sql.Clear; sql.add('delete from CW_Invoice where IVNo=''' + trim(CDS_Invoice.fieldbyname('ivNo').asstring) + ''' '); sql.Add('insert into SY_SysLog(operor,opertime,Model,acction,opevent,result) values( '); sql.Add(' ' + quotedstr(trim(DName))); sql.Add(',getdate() '); sql.Add(',' + quotedstr(trim(self.Caption))); sql.Add(',' + quotedstr(trim('进项发票删除'))); sql.Add(',' + quotedstr(trim('发票号:' + trim(CDS_Invoice.FieldByName('ivNo').AsString)))); sql.Add(',' + quotedstr(trim('成功'))); sql.Add(')'); execsql; end; ADOQueryCmd.Connection.CommitTrans; CDS_Invoice.Delete; except ADOQueryCmd.Connection.RollbackTrans; end; end; procedure TfrmInvoiceJX.cxTabControl1Change(Sender: TObject); begin SetStatus(); initGrid(); end; procedure TfrmInvoiceJX.TCHKClick(Sender: TObject); begin if CDS_Invoice.IsEmpty then exit; try with ADOQueryCmd do begin close; sql.Clear; sql.add('update CW_Invoice set Chker=''' + trim(DName) + ''',Chktime=getdate(),chkstatus=''1'' '); sql.add('where IVNo=''' + trim(CDS_Invoice.fieldbyname('ivNo').asstring) + ''' '); sql.add('EXEC P_CW_SC_FP @DataID=''' + trim(CDS_Invoice.fieldbyname('ivNo').asstring) + ''' '); execsql; end; application.MessageBox('审核成功', '提示'); CDS_Invoice.delete; except ; application.MessageBox('审核失败', '提示'); end; end; procedure TfrmInvoiceJX.TNOCHKClick(Sender: TObject); begin if CDS_Invoice.IsEmpty then exit; try with ADOQueryCmd do begin close; sql.Clear; sql.add('update CW_Invoice set Chker=null,Chktime=null,chkstatus=''0'' '); sql.add('where IVNo=''' + trim(CDS_Invoice.fieldbyname('iVNo').asstring) + ''' '); sql.add('EXEC P_CW_SC_FP @DataID=''' + trim(CDS_Invoice.fieldbyname('ivNo').asstring) + ''' '); execsql; end; application.MessageBox('撤销成功', '提示'); CDS_Invoice.delete; except application.MessageBox('撤销失败', '提示'); end; end; procedure TfrmInvoiceJX.TSelClick(Sender: TObject); begin frmInvoiceJXInPut := TfrmInvoiceJXInPut.Create(self); with frmInvoiceJXInPut do begin TSave.Visible := False; ToolButton1.Visible := False; ToolButton2.Visible := False; FIvNo := trim(Self.CDS_Invoice.fieldbyname('IVNo').asstring); if showmodal = 1 then begin end; end; end; procedure TfrmInvoiceJX.FormCreate(Sender: TObject); begin inherited; canshu1 := trim(DParameters1); end; procedure TfrmInvoiceJX.N1Click(Sender: TObject); begin CDS_Invoice.DisableControls; while CDS_Invoice.Locate('SSel', False, []) do begin CDS_Invoice.Edit; CDS_Invoice.FieldByName('SSel').Value := True; CDS_Invoice.Post; end; CDS_Invoice.EnableControls end; procedure TfrmInvoiceJX.N2Click(Sender: TObject); begin CDS_Invoice.DisableControls; while CDS_Invoice.Locate('SSel', False, []) do begin CDS_Invoice.Edit; CDS_Invoice.FieldByName('SSel').Value := True; CDS_Invoice.Post; end; CDS_Invoice.EnableControls end; procedure TfrmInvoiceJX.ToolButton4Click(Sender: TObject); var fPrintFile: string; Porderno, LBName, SYRName: string; i, j: Integer; OrderKg: Double; begin if CDS_Invoice.IsEmpty then Exit; if CDS_Invoice.Locate('SSel', True, []) = False then begin Application.MessageBox('没有选择数据', '提示', 0); Exit; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('delete TBSubID where DName=''' + Trim(DCode) + ''''); ExecSQL; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('SELECT * FROM TBSubID where 1=2 '); open; end; CDS_Invoice.DisableControls; try ADOQueryCmd.Connection.BeginTrans; with CDS_Invoice do begin First; while not Eof do begin if Fieldbyname('Ssel').AsBoolean then begin ADOQueryCmd.append; ADOQueryCmd.fieldbyname('SubId').Value := Trim(CDS_Invoice.fieldbyname('InvoiceNo').AsString); ADOQueryCmd.fieldbyname('Dname').Value := Trim(DCode); ADOQueryCmd.post; end; Next; end; end; ADOQueryCmd.Connection.CommitTrans; except ADOQueryCmd.Connection.RollbackTrans; end; CDS_Invoice.EnableControls; with ADOQueryPrint do begin Close; sql.Clear; sql.Add('exec P_View_FPTJ ' + quotedstr(Trim(DCode))); Open; end; ExportFtErpFile('进项发票列表.rmf', ADOQueryTemp); fPrintFile := ExtractFilePath(Application.ExeName) + 'Report\进项发票列表.rmf'; if FileExists(fPrintFile) then begin RM1.LoadFromFile(fPrintFile); // RMVariables['SYRName']:=Trim(SYRName); RM1.ShowReport; end else begin Application.MessageBox(PChar('没有找Report\进项发票列表.rmf'), '提示', 0); end; end; procedure TfrmInvoiceJX.ToolButton5Click(Sender: TObject); begin frmJXFPHXList := TfrmJXFPHXList.create(self); with frmJXFPHXList do begin FromId.text := Self.CDS_Invoice.fieldbyname('IVID').AsString; if showmodal = 1 then begin end; free; end; end; procedure TfrmInvoiceJX.ToolButton6Click(Sender: TObject); begin inherited; if CDS_Invoice.IsEmpty then Exit; try frmFjList10 := TfrmFjList10.Create(Application); with frmFjList10 do begin // PState:=1; // if Trim(canshu1)<>'高权限' then cxButton1.Visible:=false; fkeyNO := Trim(Self.CDS_Invoice.fieldbyname('IVNo').AsString); fType := '进项发票'; if ShowModal = 1 then begin end; end; finally frmFjList10.Free; end; end; procedure TfrmInvoiceJX.ToolButton7Click(Sender: TObject); var excelApp, WorkBook: Variant; i, j, k, LX, ExcelRowCount: integer; maxId, FCPID, FCPName, MAXNO, t1, t2, t3, MBZType: string; begin try excelApp := CreateOleObject('Excel.Application'); openDialog1.Filter := '*.CSV;*.xls'; if opendialog1.Execute then begin WorkBook := excelApp.WorkBooks.Open(OpenDialog1.FileName); end else exit; excelApp.Visible := false; ExcelRowCount := WorkBook.WorkSheets[1].UsedRange.Rows.Count; except application.MessageBox('加载EXCEL错误!', '错误信息', MB_ICONERROR); exit; end; try k := 0; for i := 1 to 50 do begin if trim(excelApp.Cells[1, i].value) = '' then continue; //遍历界面绑定界面中显示的字段和名称 for j := 0 to Tv1.ColumnCount - 1 do begin if trim(excelApp.Cells[1, i].value) = trim(Tv1.Columns[j].Caption) then begin dFdDy[k].inc := i; dFdDy[k].FDdys := trim(Tv1.Columns[j].DataBinding.FieldName); dFdDy[k].FdDysName := trim(Tv1.Columns[j].Caption); end; end; k := k + 1; end; except application.MessageBox('加载数组错误!', '错误信息', MB_ICONERROR); exit; end; ADOQueryCmd.Connection.BeginTrans; panel2.Visible := true; try for i := 2 to ExcelRowCount do begin with ADOQueryCmd do begin close; sql.Clear; sql.Add('select * from CW_Invoice where 1=2'); open; end; with ADOQueryCmd do begin ADOQueryCmd.Append; if GetLSNo(ADOQueryTemp, MAXNO, 'IJDR', 'CW_Invoice', 4, 1) = False then begin Application.MessageBox('取最大号失败!', '提示', 0); Exit; end; fieldbyname('IVID').Value := MAXNO; fieldbyname('IVFlag').Value := '进项'; end; for j := 0 to k - 1 do begin if (trim(dFdDy[j].FDdys) <> '') then begin ADOQueryCmd.fieldbyname(dFdDy[j].FDdys).Value := excelApp.Cells[i, dFdDy[j].inc].Value; end; end; ADOQueryCmd.Post; end; WorkBook.Close; excelApp.Quit; excelApp := Unassigned; WorkBook := Unassigned; ADOQueryCmd.Connection.CommitTrans; application.MessageBox('导入成功!', '提示信息'); panel2.Visible := false; InitGrid(); except WorkBook.Close; excelApp.Quit; excelApp := Unassigned; WorkBook := Unassigned; ADOQueryCmd.Connection.RollbackTrans; application.MessageBox('保存数据错误!', '错误信息', MB_ICONERROR); panel2.Visible := false; exit; end; end; procedure TfrmInvoiceJX.Tv1CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); begin if AViewInfo.GridRecord.Values[VC_TSNOTE.Index] <> null then begin ACanvas.Brush.Color := StrToIntDef(AViewInfo.GridRecord.Values[VC_TSNOTE.Index], $FFFFFF); end; end; procedure TfrmInvoiceJX.chkTSClick(Sender: TObject); begin InitGrid(); end; end.