unit U_ZdyAttachCP; interface uses Windows, Messages, SysUtils, StrUtils, math, Variants, Classes, Graphics, Controls, Forms, ComObj, 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, Menus, cxLookAndFeelPainters, cxButtons, cxContainer, cxImage, cxDBEdit, cxLookAndFeels, cxNavigator, dxSkinsCore, dxSkinsDefaultPainters, dxDateRanges, dxBarBuiltInMenu, IdExplicitTLSClientServerBase, U_BaseList; type FdDy = record inc: integer; //客户端套接字句柄 FDdys: string[32]; //客户端套接字 FdDysName: string[32]; //客户端套接字 end; TfrmZdyAttachCP = class(TfrmBaseList) ToolBar1: TToolBar; TBRafresh: TToolButton; TBDel: TToolButton; TBClose: TToolButton; ADOQueryTemp: TADOQuery; ADOQueryCmd: TADOQuery; Panel1: TPanel; ToolButton2: TToolButton; ADOQueryMain: TADOQuery; ToolButton1: TToolButton; RM1: TRMGridReport; RMDB_Main: TRMDBDataSet; Label3: TLabel; HXCode: TEdit; cxGrid2: TcxGrid; Tv2: TcxGridDBTableView; cxGridLevel1: TcxGridLevel; cxGridPopupMenu2: TcxGridPopupMenu; DS_HZ: TDataSource; CDS_HZ: TClientDataSet; ToolButton3: TToolButton; v2Column6: TcxGridDBColumn; v2Column2: TcxGridDBColumn; v2Column3: TcxGridDBColumn; v2Column5: TcxGridDBColumn; Label1: TLabel; HXName: TEdit; ToolButton4: TToolButton; Label2: TLabel; DEFstr5: TComboBox; v2Column12: TcxGridDBColumn; OpenDialog1: TOpenDialog; ToolButton5: TToolButton; v2Mrate: TcxGridDBColumn; v2Column14: TcxGridDBColumn; v2Column15: TcxGridDBColumn; ToolButton6: TToolButton; Panel2: TPanel; RadioGroup1: TRadioGroup; Label4: TLabel; cxButton1: TcxButton; cxButton2: TcxButton; v2Column16: TcxGridDBColumn; Pan_Image: TPanel; Pic_Image1: TcxDBImage; ADOQueryImage: TADOQuery; DSImage: TDataSource; IdFTP1: TIdFTP; Panel10: TPanel; Image2: TImage; Label5: TLabel; Note: TEdit; v2Column11: TcxGridDBColumn; ToolButton7: TToolButton; v2DEFNote5: TcxGridDBColumn; Panel6: TPanel; Label31: TLabel; LBCPAP: TLabel; BTLP: TButton; BTNP: TButton; TCBNOR: TComboBox; Tv2Column1: TcxGridDBColumn; Tv2Column2: TcxGridDBColumn; Tv2Column3: TcxGridDBColumn; procedure FormDestroy(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure TBCloseClick(Sender: TObject); procedure TBDelClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure TBRafreshClick(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure HXCodeChange(Sender: TObject); procedure ToolButton1Click(Sender: TObject); procedure ToolButton4Click(Sender: TObject); procedure ToolButton3Click(Sender: TObject); procedure ToolButton5Click(Sender: TObject); procedure cxButton2Click(Sender: TObject); procedure cxButton1Click(Sender: TObject); procedure ToolButton6Click(Sender: TObject); procedure Tv2FocusedRecordChanged(Sender: TcxCustomGridTableView; APrevFocusedRecord, AFocusedRecord: TcxCustomGridRecord; ANewItemRecordFocusingChanged: Boolean); procedure Pic_Image1DblClick(Sender: TObject); procedure Image2Click(Sender: TObject); procedure v2Column10PropertiesEditValueChanged(Sender: TObject); procedure v2Column11PropertiesEditValueChanged(Sender: TObject); procedure ToolButton7Click(Sender: TObject); procedure v2DEFNote5PropertiesEditValueChanged(Sender: TObject); procedure TCBNORChange(Sender: TObject); procedure BTNPClick(Sender: TObject); procedure BTLPClick(Sender: TObject); private fFlileFlag: string; { Private declarations } CurrentPage, RecordsNumber: Integer; procedure InitGrid(); procedure InitImage(); procedure LookImage(FileName: string); public fkhType: string; canshu1: string; dFdDy: array[0..20] of FdDy; //客户端连接数组 end; var frmZdyAttachCP: TfrmZdyAttachCP; implementation uses U_DataLink, U_RTFun, U_ZDYHelp, U_ZdyAttInputCP_other; {$R *.dfm} procedure TfrmZdyAttachCP.LookImage(FileName: string); var sFieldName: string; // ff: TADOBlobStream; // FJStream : TMemoryStream; begin sFieldName := leftbstr(ExtractFilePath(Application.ExeName), 1) + ':\图片查看'; if not DirectoryExists(pchar(sFieldName)) then CreateDirectory(pchar(sFieldName), nil); sFieldName := sFieldName + '\' + trim(FileName); try IdFTP1.Host := ReadINIFileStr('SYSTEMSET.INI', 'SERVER', '服务器地址', '127.0.0.1'); IdFTP1.Username := 'three'; IdFTP1.Password := '641010'; IdFTP1.Connect(); except ; end; if IdFTP1.Connected then begin // Panel2.Caption:='正在下载数据,请稍等...'; // Panel2.Visible:=true; // application.ProcessMessages; try IdFTP1.Get(fFlileFlag + '\' + Trim(FileName), sFieldName, true, false); except // Panel2.Visible:=false; Application.MessageBox('客户图样文件不存在', '提示', MB_ICONWARNING); IdFTP1.Quit; Exit; end; end else begin // Panel2.Visible:=false; Application.MessageBox('无法连接文件服务器', '提示', MB_ICONWARNING); IdFTP1.Quit; Exit; end; // Panel2.Visible:=false; if IdFTP1.Connected then IdFTP1.Quit; ShellExecute(Handle, 'open', PChar(sFieldName), '', '', SW_SHOWNORMAL); end; procedure TfrmZdyAttachCP.InitImage(); begin ADOQueryImage.Close; if CDS_HZ.IsEmpty then exit; with ADOQueryImage do begin close; sql.Clear; sql.Add('select * from TP_File A'); sql.Add('where WBID=' + quotedstr(trim(CDS_HZ.fieldbyname('HXID').AsString))); sql.Add('and TFType=' + quotedstr(trim('HX'))); open; end; end; procedure TfrmZdyAttachCP.InitGrid(); var fwhere: string; begin fwhere := SGetFilters(Panel1, 1, 2); if trim(fwhere) <> '' then fwhere := ' where ' + trim(fwhere); try ADOQueryMain.DisableControls; with ADOQueryMain do begin Close; Filtered := False; SQL.Clear; sql.Add(' select AAA.* from ( '); sql.Add(' select AA.* '); sql.Add(' ,DBName=(SUBSTRING(CAST((select distinct '','' +X.DBName from BS_HX_Sub X where X.HXID=AA.HXID for xml path('''') ) AS VARCHAR(100)) , 2, 100)) '); sql.Add(' ,FactoryName=(SUBSTRING(CAST((select distinct '','' +Y.FactoryName from BS_HX_Sub X inner join BS_HX_Factory Y on X.HXSID=Y.HXSID where X.HXID=AA.HXID for xml path('''') ) AS VARCHAR(100)) , 2, 100)) '); sql.Add(' ,GCGY=(SUBSTRING(CAST((select distinct '','' +Y.GCGY from BS_HX_Sub X inner join BS_HX_Factory Y on X.HXSID=Y.HXSID where X.HXID=AA.HXID for xml path('''') ) AS VARCHAR(100)) , 2, 100)) '); sql.Add(' ,JGNote=(SUBSTRING(CAST((select distinct '','' +Y.JGNote from BS_HX_Sub X inner join BS_HX_Factory Y on X.HXSID=Y.HXSID where X.HXID=AA.HXID for xml path('''') ) AS VARCHAR(100)) , 2, 100)) '); sql.Add(' ,Price=(SUBSTRING(CAST((select distinct '','' +cast(Y.Price as varchar(50)) from BS_HX_Sub X inner join BS_HX_Factory Y on X.HXSID=Y.HXSID where X.HXID=AA.HXID for xml path('''') ) AS VARCHAR(100)) , 2, 100)) '); sql.Add(' ,row_number() over(order by AA.HXID desc) as rownumber,COUNT(1) OVER() AS TotalCount '); sql.Add(' from BS_HX_Main AA '); sql.Add(fwhere); sql.Add(' )AAA'); sql.Add(' where rownumber> ' + IntToStr((CurrentPage - 1) * RecordsNumber)); sql.Add(' and rownumber<= ' + IntToStr((CurrentPage) * RecordsNumber)); sql.Add(' order by HXCode'); // ShowMessage(SQL.Text); Open; end; SCreateCDS(ADOQueryMain, CDS_HZ); SInitCDSData(ADOQueryMain, CDS_HZ); LBCPAP.Caption := inttostr(CurrentPage) + '/' + inttostr(ceil(CDS_HZ.FieldByName('TotalCount').AsInteger / RecordsNumber)); finally ADOQueryMain.EnableControls; ToolButton2.Click; end; end; procedure TfrmZdyAttachCP.FormDestroy(Sender: TObject); begin inherited; frmZdyAttachCP := nil; end; procedure TfrmZdyAttachCP.FormClose(Sender: TObject; var Action: TCloseAction); begin inherited; Action := caFree; end; procedure TfrmZdyAttachCP.TBCloseClick(Sender: TObject); begin WriteCxGrid(self.Caption, Tv2, '客户自定义'); Close; end; procedure TfrmZdyAttachCP.TBDelClick(Sender: TObject); begin if CDS_HZ.IsEmpty then Exit; if Application.MessageBox('确定要删除数据吗?', '提示', 32 + 4) <> IDYES then Exit; if Trim(CDS_HZ.fieldbyname('HXID').AsString) <> '' then begin with ADOQueryCmd do begin Close; SQL.Clear; // sql.Add('update BS_HX_Main set Valid=''N'' where HXID=''' + Trim(CDS_HZ.fieldbyname('HXID').AsString) + ''''); sql.Add('delete BS_HX_Main where HXID=''' + Trim(CDS_HZ.fieldbyname('HXID').AsString) + ''''); sql.Add('delete BS_HX_Factory where HXID=''' + Trim(CDS_HZ.fieldbyname('HXID').AsString) + ''''); sql.Add('delete BS_HX_Sub where HXID=''' + Trim(CDS_HZ.fieldbyname('HXID').AsString) + ''''); ExecSQL; end; end; CDS_HZ.Delete; end; procedure TfrmZdyAttachCP.FormShow(Sender: TObject); begin inherited; CurrentPage := 1; RecordsNumber := 500; Pan_image.Left := self.Width - Pan_image.Width - 20; Pan_image.Top := self.Height - Pan_image.Height - 80; fFlileFlag := UserDataFlag + 'HX'; ReadCxGrid(self.Caption, Tv2, '客户自定义'); InitGrid(); end; procedure TfrmZdyAttachCP.TBRafreshClick(Sender: TObject); begin RecordsNumber := StrToInt(TCBNOR.Text); CurrentPage := 1; InitGrid(); end; procedure TfrmZdyAttachCP.ToolButton2Click(Sender: TObject); begin if ADOQueryMain.Active then begin SDofilter(ADOQueryMain, SGetFilters(Panel1, 1, 2)); SCreateCDS(ADOQueryMain, CDS_HZ); SInitCDSData(ADOQueryMain, CDS_HZ); end; end; procedure TfrmZdyAttachCP.HXCodeChange(Sender: TObject); begin ToolButton2.Click; end; procedure TfrmZdyAttachCP.ToolButton1Click(Sender: TObject); begin if ADOQueryMain.IsEmpty then Exit; TcxGridToExcel(self.Caption, cxgrid2); end; procedure TfrmZdyAttachCP.ToolButton4Click(Sender: TObject); begin try frmZdyAttInputCP_other := TfrmZdyAttInputCP_other.Create(Application); with frmZdyAttInputCP_other do begin FFlag := 1; FCYID := Trim(Self.CDS_HZ.fieldbyname('HXID').AsString); fkhType := self.fkhType; fFlileFlag := self.fFlileFlag; canshu1 := self.canshu1; if ShowModal = 1 then begin TBRafresh.Click; end; end; finally frmZdyAttInputCP_other.Free; end; end; procedure TfrmZdyAttachCP.ToolButton3Click(Sender: TObject); begin try frmZdyAttInputCP_other := TfrmZdyAttInputCP_other.Create(Application); with frmZdyAttInputCP_other do begin FFlag := 0; FCYID := ''; fkhType := self.fkhType; fFlileFlag := self.fFlileFlag; canshu1 := self.canshu1; if ShowModal = 1 then begin TBRafresh.Click; end; end; finally frmZdyAttInputCP_other.Free; end; end; procedure TfrmZdyAttachCP.ToolButton5Click(Sender: TObject); var excelApp, WorkBook: Variant; i, j, k, ExcelRowCount: integer; maxId: 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 20 do begin if trim(excelApp.Cells[1, i].value) = '' then break; if trim(excelApp.Cells[1, i].value) = '产品编号' then begin dFdDy[k].inc := i; dFdDy[k].FDdys := 'ZdyCode'; dFdDy[k].FdDysName := '产品编号'; end; if trim(excelApp.Cells[1, i].value) = '产品名称' then begin dFdDy[k].inc := i; dFdDy[k].FDdys := 'ZdyName'; dFdDy[k].FdDysName := '产品名称'; end; if trim(excelApp.Cells[1, i].value) = '中文名称' then begin dFdDy[k].inc := i; dFdDy[k].FDdys := 'defNote3'; dFdDy[k].FdDysName := '中文名称'; end; if trim(excelApp.Cells[1, i].value) = '颜色' then begin dFdDy[k].inc := i; dFdDy[k].FDdys := 'DEFstr3'; dFdDy[k].FdDysName := '颜色'; end; if trim(excelApp.Cells[1, i].value) = '中文颜色' then begin dFdDy[k].inc := i; dFdDy[k].FDdys := 'DEFstr6'; dFdDy[k].FdDysName := '中文颜色'; end; if trim(excelApp.Cells[1, i].value) = '类型' then begin dFdDy[k].inc := i; dFdDy[k].FDdys := 'DEFstr5'; dFdDy[k].FdDysName := '类型'; end; if trim(excelApp.Cells[1, i].value) = '规格' then begin dFdDy[k].inc := i; dFdDy[k].FDdys := 'DEFstr1'; dFdDy[k].FdDysName := '规格'; end; if trim(excelApp.Cells[1, i].value) = '成份' then begin dFdDy[k].inc := i; dFdDy[k].FDdys := 'DEFstr2'; dFdDy[k].FdDysName := '成份'; end; k := k + 1; end; except end; ADOQueryCmd.Connection.BeginTrans; try for i := 2 to ExcelRowCount do begin if GetLSNo(ADOQueryCmd, maxId, 'AT', 'BS_HX_Main', 4, 1) = False then begin ADOQueryCmd.Connection.RollbackTrans; Application.MessageBox('取最大号失败!', '提示', 0); Exit; end; with ADOQueryCmd do begin close; sql.Clear; sql.Add('select * from BS_HX_Main where 1=2'); open; end; ADOQueryCmd.Append; for j := 0 to k - 1 do begin ADOQueryCmd.fieldbyname(dFdDy[j].FDdys).Value := excelApp.Cells[i, dFdDy[j].inc].Value; end; ADOQueryCmd.FieldByName('HXID').Value := Trim(maxId); ADOQueryCmd.FieldByName('zdyCode').Value := Trim(maxId); ADOQueryCmd.FieldByName('khType').Value := Trim(fkhType); ADOQueryCmd.FieldByName('Type').Value := 'CP'; ADOQueryCmd.FieldByName('Filler').Value := Trim(DName); ADOQueryCmd.Post; { with ADOQueryTemp do begin close; sql.Clear; sql.Add('select * from BS_HX_Main where HXID='''+trim(maxId)+''' '); open; end; with ADOQueryCmd do begin Close; SQL.Clear; sql.Add('select * from KH_Zdy where ZdyNo='''+Trim(maxId)+''''); Open; end; with ADOQueryCmd do begin if ADOQueryCmd.IsEmpty then begin Append; end else begin Edit; end; FieldByName('ZdyNo').Value:=Trim(maxId); FieldByName('ZdyName').Value:=Trim(ADOQueryTemp.fieldbyname('ZdyName').AsString); FieldByName('Type').Value:='CP'; FieldByName('MainType').Value:=Trim(ADOQueryTemp.fieldbyname('DEFstr5').AsString); Post; end;} end; WorkBook.Close; excelApp.Quit; excelApp := Unassigned; WorkBook := Unassigned; ADOQueryCmd.Connection.CommitTrans; InitGrid(); except WorkBook.Close; excelApp.Quit; excelApp := Unassigned; WorkBook := Unassigned; ADOQueryCmd.Connection.RollbackTrans; end; end; procedure TfrmZdyAttachCP.cxButton2Click(Sender: TObject); begin Panel2.Visible := false; end; procedure TfrmZdyAttachCP.cxButton1Click(Sender: TObject); var fPrintFile: string; Txt, fImagePath: string; Moudle: THandle; Makebar: TMakebar; Mixtext: TMixtext; begin if CDS_HZ.IsEmpty then exit; try Moudle := LoadLibrary('MakeQRBarcode.dll'); @Makebar := GetProcAddress(Moudle, 'Make'); @Mixtext := GetProcAddress(Moudle, 'MixText'); Txt := Trim(CDS_HZ.fieldbyname('ZDYCODE').AsString); fImagePath := ExtractFilePath(Application.ExeName) + 'image\temp.bmp'; if not DirectoryExists(pchar(ExtractFilePath(Application.ExeName) + 'image')) then CreateDirectory(pchar(ExtractFilePath(Application.ExeName) + 'image'), nil); if FileExists(fImagePath) then DeleteFile(fImagePath); Makebar(pchar(Txt), Length(Txt), 3, 3, 0, PChar(fImagePath), 3); except application.MessageBox('条形码生成失败!', '提示信息', MB_ICONERROR); exit; end; fPrintFile := ExtractFilePath(Application.ExeName) + 'Report\' + trim(RadioGroup1.Items[RadioGroup1.ItemIndex]) + '.rmf'; if FileExists(fPrintFile) then begin RMVariables['QRBARCODE'] := fImagePath; RM1.LoadFromFile(fPrintFile); // Rm2.DefaultCopies:=strtointdef(trim(ComboBox1.Text),1); // RM1.ShowReport; RM1.PrintReport; end else Application.MessageBox(PChar('没有找到文件' + fPrintFile), '提示', 0); end; procedure TfrmZdyAttachCP.ToolButton6Click(Sender: TObject); begin Panel2.Left := (self.Width - Panel2.Width) div 2; Panel2.Top := (self.Height - Panel2.Height) div 2 - 100; Panel2.Visible := true; end; procedure TfrmZdyAttachCP.Tv2FocusedRecordChanged(Sender: TcxCustomGridTableView; APrevFocusedRecord, AFocusedRecord: TcxCustomGridRecord; ANewItemRecordFocusingChanged: Boolean); begin InitImage(); end; procedure TfrmZdyAttachCP.Pic_Image1DblClick(Sender: TObject); begin if TcxDBImage(Sender).Picture.Height = 0 then exit; LookImage(ADOQueryImage.fieldbyname(TcxDBImage(Sender).Hint).asstring); end; procedure TfrmZdyAttachCP.Image2Click(Sender: TObject); begin Pan_Image.Visible := false; end; procedure TfrmZdyAttachCP.v2Column10PropertiesEditValueChanged(Sender: TObject); var mvalue, FFieldName: string; begin mvalue := TcxTextEdit(Sender).EditingText; if Trim(mvalue) = '' then begin mvalue := '0'; end; FFieldName := Trim(Tv2.Controller.FocusedColumn.DataBinding.FilterFieldName); with CDS_HZ do begin Edit; FieldByName(FFieldName).Value := Trim(mvalue); Post; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('UPdate BS_HX_Main '); sql.Add(' Set ' + FFieldName + '=' + Trim(mvalue)); SQL.Add(',Editer=''' + Trim(DName) + ''''); SQL.Add(',Edittime=getdate() '); SQL.Add(' where HXID=''' + Trim(CDS_HZ.fieldbyname('HXID').AsString) + ''''); ExecSQL; end; end; procedure TfrmZdyAttachCP.v2Column11PropertiesEditValueChanged(Sender: TObject); var mvalue, fFieldName: string; begin mvalue := TcxTextEdit(Sender).EditingText; fFieldName := Trim(Tv2.Controller.FocusedColumn.DataBinding.FilterFieldName); with CDS_HZ do begin Edit; FieldByName(fFieldName).Value := Trim(mvalue); Post; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('UPdate BS_HX_Main '); sql.Add(' Set ' + fFieldName + '=''' + Trim(mvalue) + ''' '); SQL.Add(',Editer=''' + Trim(DName) + ''''); SQL.Add(',Edittime=getdate() '); SQL.Add(' where HXID=''' + Trim(CDS_HZ.fieldbyname('HXID').AsString) + ''''); ExecSQL; end; end; procedure TfrmZdyAttachCP.ToolButton7Click(Sender: TObject); begin try frmZdyAttInputCP_other := TfrmZdyAttInputCP_other.Create(Application); with frmZdyAttInputCP_other do begin FFlag := 99; FCYID := Trim(Self.CDS_HZ.fieldbyname('HXID').AsString); fkhType := self.fkhType; fFlileFlag := self.fFlileFlag; canshu1 := self.canshu1; if ShowModal = 1 then begin TBRafresh.Click; end; end; finally frmZdyAttInputCP_other.Free; end; end; procedure TfrmZdyAttachCP.v2DEFNote5PropertiesEditValueChanged(Sender: TObject); var mvalue: string; begin mvalue := TcxTextEdit(Sender).EditingText; with CDS_HZ do begin Edit; FieldByName('DEFNote5').Value := Trim(mvalue); Post; end; self.tv2.Controller.EditingController.ShowEdit(); with ADOQueryCmd do begin Close; sql.Clear; sql.Add(' update BS_HX_Main SET DEFNote5=''' + trim(CDS_HZ.fieldbyName('DEFNote5').AsString) + ''' where HXID=''' + Trim(CDS_HZ.fieldbyname('HXID').AsString) + ''''); ExecSQL; end; end; procedure TfrmZdyAttachCP.TCBNORChange(Sender: TObject); begin RecordsNumber := StrToInt(TCBNOR.Text); CurrentPage := 1; InitGrid(); end; procedure TfrmZdyAttachCP.BTNPClick(Sender: TObject); begin if CurrentPage < CDS_HZ.FieldByName('TotalCount').AsInteger / RecordsNumber then CurrentPage := CurrentPage + 1; InitGrid(); end; procedure TfrmZdyAttachCP.BTLPClick(Sender: TObject); begin if CurrentPage > 1 then CurrentPage := CurrentPage - 1; InitGrid(); end; end.