unit U_DyeTechnicsinput; 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, cxLookAndFeels, cxLookAndFeelPainters, cxNavigator, dxBarBuiltInMenu, Menus, U_BaseList, dxSkinsCore, dxSkinsDefaultPainters, U_BaseInput, dxDateRanges, dxScrollbarAnnotations, System.ImageList, Vcl.ImgList; type TfrmDyeTechnicsinput = class(TfrmBaseinput) ADOQueryTemp: TADOQuery; ADOQueryCmd: TADOQuery; ADOQueryMain: TADOQuery; GPM_2: TcxGridPopupMenu; DS_2: TDataSource; CDS_2: TClientDataSet; DS_1: TDataSource; CDS_1: TClientDataSet; ADOQuery1: TADOQuery; GPM_1: TcxGridPopupMenu; PM_1: TPopupMenu; N2: TMenuItem; cxSplitter1: TcxSplitter; Panel2: TPanel; cxGrid2: TcxGrid; Tv2: TcxGridDBTableView; Tv2PSType: TcxGridDBColumn; Tv2PSNote: TcxGridDBColumn; cxGridLevel1: TcxGridLevel; Panel1: TPanel; Panel3: TPanel; cxGrid1: TcxGrid; TV1: TcxGridDBTableView; VC_PSNO: TcxGridDBColumn; cxGridDBColumn1: TcxGridDBColumn; cxGridLevel2: TcxGridLevel; ToolBar1: TToolBar; TBRafresh: TToolButton; TBClose: TToolButton; Label5: TLabel; PSName: TEdit; ToolButton2: TToolButton; btnSave: TToolButton; Panel4: TPanel; Label2: TLabel; Label3: TLabel; DTMName: TEdit; DTMNo: TEdit; TV1PSName: TcxGridDBColumn; Tv3: TcxGridDBTableView; cxGrid3Level1: TcxGridLevel; cxGrid3: TcxGrid; TbDelete: TToolButton; Tv3PSID: TcxGridDBColumn; Tv3Column2: TcxGridDBColumn; CDS_3: TClientDataSet; DS_3: TDataSource; procedure FormDestroy(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure TBCloseClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure TBRafreshClick(Sender: TObject); procedure cxTabControl1Change(Sender: TObject); procedure v2Column4PropertiesEditValueChanged(Sender: TObject); procedure v2Column2PropertiesEditValueChanged(Sender: TObject); procedure FormCreate(Sender: TObject); procedure N2Click(Sender: TObject); procedure Tv2FocusedRecordChanged(Sender: TcxCustomGridTableView; APrevFocusedRecord, AFocusedRecord: TcxCustomGridRecord; ANewItemRecordFocusingChanged: Boolean); procedure ToolButton2Click(Sender: TObject); procedure Tv2DblClick(Sender: TObject); procedure btnSaveClick(Sender: TObject); procedure cxGridDBColumn1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure TbDeleteClick(Sender: TObject); procedure Tv3DblClick(Sender: TObject); procedure PSNameKeyPress(Sender: TObject; var Key: Char); private { Private declarations } procedure InitGrid(); procedure InitGlide(); procedure SetXH(); function SaveData(): boolean; procedure CheckData(); procedure InitGridSub(); public FDTMID, PState: string; { Public declarations } RKFlag, FCYID, fmanage: string; end; var frmDyeTechnicsinput: TfrmDyeTechnicsinput; implementation uses U_DataLink, U_RTFun, U_ZDYHelp, U_DyeProcessSel, U_DyeProcessDefin; {$R *.dfm} procedure TfrmDyeTechnicsinput.SetXH(); var i: Integer; begin with CDS_1 do begin First; i := 1; while not Eof do begin with CDS_1 do begin Edit; FieldByName('XHNoTemp').Value := i; Post; end; i := i + 1; Next; end; end; with CDS_1 do begin CDS_1.IndexFieldNames := ''; First; i := 1; while not Eof do begin with CDS_1 do begin Edit; FieldByName('PSNO').Value := FieldByName('XHNoTemp').AsInteger; Post; end; i := i + 1; Next; end; CDS_1.IndexFieldNames := 'PSNO'; end; end; procedure TfrmDyeTechnicsinput.InitGlide(); begin with ADOQueryTemp do begin Close; SQL.Clear; sql.Add(' select * FROM Dye_Technics_Main where DTMID=' + quotedstr(FDTMID)); Open; end; SCSHData(ADOQueryTemp, Panel4, 2); with ADOQueryTemp do begin Close; SQL.Clear; sql.Add(' select A.*,B.* FROM Dye_Technics_Sub A inner join Dye_Process B on A.PSId=B.PSId '); sql.Add(' Where A.DTMID=''' + FDTMID + ''''); SQL.Add(' ORDER BY A.PSNO'); Open; end; SCreateCDS(ADOQueryTemp, CDS_1); SInitCDSData(ADOQueryTemp, CDS_1); CheckData(); end; procedure TfrmDyeTechnicsinput.CheckData(); begin if PState = '复制' then begin CDS_1.First; while not CDS_1.Eof do begin CDS_1.Edit; CDS_1.FieldByName('PSName').Value := ''; CDS_1.Post; CDS_1.Next; end; FDTMID := ''; end; end; function TfrmDyeTechnicsinput.SaveData(): boolean; var DTMPSlist, maxno: string; begin result := false; ADOQueryCmd.Connection.BeginTrans; try if Trim(FDTMID) = '' then begin if GetLSNo(ADOQueryCmd, maxno, 'GY', 'Dye_Technics_Main', 3, 1) = False then raise Exception.Create('取最大号失败!'); end else begin maxno := FDTMID; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('delete Dye_Technics_Sub where DTMID=' + quotedstr(trim(maxno))); execsql; end; DTMPSlist := ''; with CDS_1 do begin First; while not Eof do begin with ADOQueryCmd do begin Close; sql.Clear; sql.Add('SELECT * FROM Dye_Technics_Sub WHERE 1=2'); Open; end; with ADOQueryCmd do begin Append; FieldByName('PSNO').Value := Trim(CDS_1.fieldbyname('PSNO').AsString); FieldByName('DTMID').Value := Trim(maxno); FieldByName('PSId').Value := Trim(CDS_1.fieldbyname('PSId').AsString); Post; end; if DTMPSlist = '' then begin DTMPSlist := Trim(CDS_1.fieldbyname('PSNO').AsString) + '.' + Trim(CDS_1.fieldbyname('PSName').AsString); end else begin DTMPSlist := DTMPSlist + '→' + Trim(CDS_1.fieldbyname('PSNO').AsString) + '.' + Trim(CDS_1.fieldbyname('PSName').AsString); end; Next; end; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('select * from Dye_Technics_Main where DTMID =' + quotedstr(Trim(maxno))); Open; end; with ADOQueryCmd do begin if ADOQueryCmd.IsEmpty then begin Append; FieldByName('Filler').Value := Trim(DName); FieldByName('DTMID').Value := Trim(maxno); end else begin Edit; FieldByName('Editer').Value := Trim(DName); FieldByName('Edittime').Value := SGetServerDateTime(ADOQueryTemp); end; RTSetsavedata(ADOQueryCmd, 'Dye_Technics_Main', Panel4, 2); FieldByName('DTMPSlist').Value := Trim(DTMPSlist); Post; end; ADOQueryCmd.Connection.CommitTrans; result := true; except ADOQueryCmd.Connection.RollbackTrans; application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0); result := false; end; end; procedure TfrmDyeTechnicsinput.InitGrid(); begin try ADOQueryMain.DisableControls; with ADOQueryMain do begin // Filtered := False; Close; SQL.Clear; sql.Add(' select *,PSXH=0 from Dye_Technics '); Open; end; // SDofilter(ADOQueryMain, SGetFilters(Panel1, 1, 2)); SCreateCDS(ADOQueryMain, CDS_2); SInitCDSData(ADOQueryMain, CDS_2); finally ADOQueryMain.EnableControls; end; end; procedure TfrmDyeTechnicsinput.InitGridSub(); begin if CDS_2.IsEmpty then Exit; try ADOQueryTemp.DisableControls; with ADOQueryTemp do begin Close; SQL.Clear; sql.Add(' select * from Dye_Process where PSType = ' + QuotedStr(Trim(CDS_2.FieldByName('PSType').ASSTRING))); Open; end; SDofilter(ADOQueryTemp, SGetFilters(Panel1, 1, 2)); SCreateCDS(ADOQueryTemp, CDS_3); SInitCDSData(ADOQueryTemp, CDS_3); finally ADOQueryTemp.EnableControls; end; end; procedure TfrmDyeTechnicsinput.FormDestroy(Sender: TObject); begin inherited; frmDyeTechnicsinput := nil; end; procedure TfrmDyeTechnicsinput.FormClose(Sender: TObject; var Action: TCloseAction); begin inherited; Action := caFree; end; procedure TfrmDyeTechnicsinput.TBCloseClick(Sender: TObject); begin Close; end; procedure TfrmDyeTechnicsinput.FormShow(Sender: TObject); begin inherited; ReadCxGrid(trim(self.Caption) + 'Tv1', Tv1, '工艺管理'); ReadCxGrid(trim(self.Caption) + 'Tv2', Tv2, '工艺管理'); InitGrid(); InitGlide(); InitGridSub(); end; procedure TfrmDyeTechnicsinput.TBRafreshClick(Sender: TObject); begin InitGrid(); end; procedure TfrmDyeTechnicsinput.TbDeleteClick(Sender: TObject); begin if CDS_1.IsEmpty then Exit; if Trim(CDS_1.fieldbyname('PSId').AsString) <> '' then begin if Application.MessageBox('确定要删除数据吗?', '提示', 32 + 4) <> IDYES then Exit; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('delete Dye_Process where PSId=''' + Trim(CDS_1.fieldbyname('PSId').AsString) + ''''); ExecSQL; end; end; CDS_1.Delete; SetXH(); end; procedure TfrmDyeTechnicsinput.ToolButton2Click(Sender: TObject); begin ReadCxGrid(trim(self.Caption) + 'Tv1', Tv1, '工艺管理'); ReadCxGrid(trim(self.Caption) + 'Tv2', Tv2, '工艺管理'); end; procedure TfrmDyeTechnicsinput.cxGridDBColumn1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); begin try frmDyeProcessDefin := TfrmDyeProcessDefin.Create(Application); with frmDyeProcessDefin do begin FPSType := self.CDS_1.FieldByName('PSType').Value; if (PState = '新增') and (Self.CDS_1.FieldByName('PSID').Value = '') then begin FPSID := ''; BtnInt := 0;////新增 end else if PState = '修改' then begin FPSID := Self.CDS_1.FieldByName('PSID').Value; BtnInt := 1;///修改 end else if (PState = '复制') then begin FPSID := Self.CDS_1.FieldByName('PSID').Value; BtnInt := 2;///复制 end else begin FPSID := Self.CDS_1.FieldByName('PSID').Value; BtnInt := 0;//新增回改 end; if ShowModal = 1 then begin TBRafresh.Click; with self.CDS_1 do begin Edit; FieldByName('PSID').Value := frmDyeProcessDefin.FPSID; FieldByName('PSName').Value := frmDyeProcessDefin.PSName.Text; Post; end; end; end; finally frmDyeProcessDefin.Free; end; end; procedure TfrmDyeTechnicsinput.cxTabControl1Change(Sender: TObject); begin InitGrid(); end; procedure TfrmDyeTechnicsinput.v2Column4PropertiesEditValueChanged(Sender: TObject); var mvalue: string; begin mvalue := TcxTextEdit(Sender).EditingText; if Trim(mvalue) = '' then mvalue := ''; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('select * from Dye_Technics_Main where DTMNo =' + quotedstr(Trim(mvalue))); Open; end; if ADOQueryCmd.IsEmpty = false then begin application.MessageBox('已存在工艺编号', '提示'); CDS_2.Edit; CDS_2.FieldByName('DTMNo').AsString := ''; exit; end; with CDS_2 do begin Edit; FieldByName('DTMNo').Value := Trim(mvalue); //Post; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('update Dye_Technics_Main set DTMNo=''' + trim(mvalue) + ''' '); sql.Add(',Editer=''' + trim(DName) + ''''); sql.Add(',Edittime=getdate()'); sql.add(' where DTMID=''' + trim(CDS_2.fieldbyname('DTMID').AsString) + ''''); ExecSQL; end; end; procedure TfrmDyeTechnicsinput.btnSaveClick(Sender: TObject); begin if trim(DTMNo.Text) = '' then begin application.MessageBox('工艺编号不能为空', '提示'); Exit; end; if trim(DTMName.Text) = '' then begin application.MessageBox('工艺名称不能为空', '提示'); Exit; end; if CDS_1.Locate('PSName', '', []) or CDS_1.Locate('PSName', null, []) then begin Application.MessageBox('请完善工序名称!', '提示信息', MB_OK); Exit; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('select * from Dye_Technics_Main where DTMNo=''' + Trim(DTMNo.Text) + ''''); sql.Add(' and DTMID <> ''' + Trim(FDTMID) + ''''); Open; end; if ADOQueryCmd.RecordCount > 0 then raise Exception.Create('工艺编号重复!'); with ADOQueryCmd do begin Close; sql.Clear; sql.Add('select * from Dye_Technics_Main where DTMName=''' + Trim(DTMName.Text) + ''''); sql.Add(' and DTMID <> ''' + Trim(FDTMID) + ''''); Open; end; if ADOQueryCmd.RecordCount > 0 then raise Exception.Create('工艺名称重复!'); if SaveData() then begin Application.MessageBox('保存成功!', '提示', 0); end; end; procedure TfrmDyeTechnicsinput.v2Column2PropertiesEditValueChanged(Sender: TObject); var mvalue: string; begin mvalue := TcxTextEdit(Sender).EditingText; if Trim(mvalue) = '' then mvalue := ''; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('select * from Dye_Technics_Main where DTMName =' + quotedstr(Trim(mvalue))); Open; end; if ADOQueryCmd.IsEmpty = false then begin application.MessageBox('已存在工艺名称', '提示'); CDS_2.Edit; CDS_2.FieldByName('DTMName').AsString := ''; exit; end; with CDS_2 do begin Edit; FieldByName('DTMName').Value := Trim(mvalue); //Post; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('update Dye_Technics_Main set DTMName=''' + trim(mvalue) + ''' '); sql.Add(',Editer=''' + trim(DName) + ''''); sql.Add(',Edittime=getdate()'); sql.add(' where DTMID=''' + trim(CDS_2.fieldbyname('DTMID').AsString) + ''''); ExecSQL; end; end; procedure TfrmDyeTechnicsinput.Tv2DblClick(Sender: TObject); begin with CDS_1 do begin Append; FieldByName('PSNO').Value := CDS_1.RecordCount + 1; FieldByName('PSType').Value := CDS_2.fieldbyname('PSType').AsString; FieldByName('PSId').Value := ''; post; end; end; procedure TfrmDyeTechnicsinput.Tv2FocusedRecordChanged(Sender: TcxCustomGridTableView; APrevFocusedRecord, AFocusedRecord: TcxCustomGridRecord; ANewItemRecordFocusingChanged: Boolean); begin InitGridSub(); end; procedure TfrmDyeTechnicsinput.Tv3DblClick(Sender: TObject); begin with CDS_1 do begin Append; FieldByName('PSNO').Value := CDS_1.RecordCount + 1; FieldByName('PSType').Value := CDS_2.fieldbyname('PSType').AsString; FieldByName('PSId').Value := CDS_3.fieldbyname('PSID').AsString; post; end; end; procedure TfrmDyeTechnicsinput.FormCreate(Sender: TObject); begin inherited; fmanage := Trim(DParameters1); end; procedure TfrmDyeTechnicsinput.N2Click(Sender: TObject); var i: Integer; DTMPSlist: string; begin if Application.MessageBox('确定要删除数据吗?', '提示', 32 + 4) <> IDYES then Exit; CDS_1.Delete; SetXH(); end; procedure TfrmDyeTechnicsinput.PSNameKeyPress(Sender: TObject; var Key: Char); begin if ADOQueryMain.Active then begin SDofilter(ADOQueryTemp, SGetFilters(Panel1, 1, 2)); SCreateCDS(ADOQueryTemp, CDS_3); SInitCDSData(ADOQueryTemp, CDS_3); end; end; end.