unit U_CraftInfo; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxGraphics, cxCustomData, cxStyles, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, ADODB, DBClient, ComCtrls, ToolWin, StdCtrls, ExtCtrls, Menus, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGrid, cxGridCustomPopupMenu, cxGridPopupMenu, cxNavigator, dxDateRanges, dxBarBuiltInMenu, cxCheckBox, dxScrollbarAnnotations, U_BaseList, cxLookAndFeels, cxLookAndFeelPainters, dxSkinsCore, dxSkinsDefaultPainters, dxSkinWXI; type TfrmCraftInfo = class(TfrmBaseList) ToolBar1: TToolBar; TBRafresh: TToolButton; TBAdd: TToolButton; TBEdit: TToolButton; TBDel: TToolButton; TBExport: TToolButton; ToolButton2: TToolButton; TBClose: TToolButton; Panel1: TPanel; Label1: TLabel; Label2: TLabel; CR_Code: TEdit; CR_Name: TEdit; GPM_1: TcxGridPopupMenu; cxGrid1: TcxGrid; Tv1: TcxGridDBTableView; Tv1SSel: TcxGridDBColumn; Tv1CR_Code: TcxGridDBColumn; Tv1CR_Name: TcxGridDBColumn; Tv1C_Width: TcxGridDBColumn; Tv1C_GramWeight: TcxGridDBColumn; Tv1C_Color: TcxGridDBColumn; Tv1C_YarnQty: TcxGridDBColumn; Tv1head_count: TcxGridDBColumn; Tv1strip_width: TcxGridDBColumn; Tv1C_MachLatitudeDensity: TcxGridDBColumn; Tv1row_count_top: TcxGridDBColumn; Tv1displace: TcxGridDBColumn; Tv1reed_width: TcxGridDBColumn; Tv1C_ReedNo: TcxGridDBColumn; Tv1ends_per_dent: TcxGridDBColumn; Tv1selvage_yarn: TcxGridDBColumn; Tv1yardage: TcxGridDBColumn; Tv1FILLER: TcxGridDBColumn; Tv1FILLTIME: TcxGridDBColumn; cxGrid1Level1: TcxGridLevel; DS_1: TDataSource; ADOQueryMain: TADOQuery; CDS_1: TClientDataSet; ADOQueryTemp: TADOQuery; ADOQueryCmd: TADOQuery; PM_1: TPopupMenu; N1: TMenuItem; N2: TMenuItem; TbPrint: TToolButton; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure FormShow(Sender: TObject); procedure TBRafreshClick(Sender: TObject); procedure TBAddClick(Sender: TObject); procedure TBEditClick(Sender: TObject); procedure TBDelClick(Sender: TObject); procedure TBExportClick(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure TBCloseClick(Sender: TObject); procedure CRCodeKeyPress(Sender: TObject; var Key: Char); procedure N1Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure TbPrintClick(Sender: TObject); private { Private declarations } procedure InitGrid(); public { Public declarations } end; var frmCraftInfo: TfrmCraftInfo; implementation uses U_DataLink, U_RTFun, U_CraftInfoInput,U_LabelPrint; {$R *.dfm} procedure TfrmCraftInfo.InitGrid(); var fwhere, Pwhere: string; begin Panel1.Refresh; fwhere := ''; Pwhere := SGetFilters(Panel1, 1, 2); if trim(Pwhere) <> '' then fwhere := ' where ' + trim(Pwhere); try ADOQueryMain.DisableControls; with ADOQueryMain do begin Close; Filtered := False; sql.Clear; sql.Add('select A.* from BS_Craft_Info A' + fwhere + ' order by CR_Code'); Open; end; SDofilter(ADOQueryMain, SGetFilters(Panel1, 1, 2)); SCreateCDS(ADOQueryMain, CDS_1); SInitCDSData(ADOQueryMain, CDS_1); TV1.DataController.Filter.Clear; finally ADOQueryMain.EnableControls; TV1.DataController.Filter.Clear; end; end; procedure TfrmCraftInfo.FormClose(Sender: TObject; var Action: TCloseAction); begin inherited; Action := caFree; end; procedure TfrmCraftInfo.FormDestroy(Sender: TObject); begin inherited; frmCraftInfo := nil; end; procedure TfrmCraftInfo.FormShow(Sender: TObject); begin inherited; ReadCxGrid(self.Caption + 'TV1', Tv1, '工艺管理'); InitGrid(); end; procedure TfrmCraftInfo.TBRafreshClick(Sender: TObject); begin InitGrid(); end; procedure TfrmCraftInfo.TBAddClick(Sender: TObject); begin try frmCraftInfoInput := TfrmCraftInfoInput.Create(Application); with frmCraftInfoInput do begin FCRID := ''; if ShowModal = 1 then begin Self.InitGrid(); end; end; finally frmCraftInfoInput.Free; end; end; procedure TfrmCraftInfo.TBEditClick(Sender: TObject); begin if CDS_1.IsEmpty then Exit; try frmCraftInfoInput := TfrmCraftInfoInput.Create(Application); with frmCraftInfoInput do begin FCRID := Trim(Self.CDS_1.fieldbyname('CRID').AsString); if ShowModal = 1 then begin Self.InitGrid(); end; end; finally frmCraftInfoInput.Free; end; end; procedure TfrmCraftInfo.TBDelClick(Sender: TObject); var MRefCodes: string; MConRefCodes: string; begin if CDS_1.IsEmpty then Exit; if not CDS_1.Locate('SSel', True, []) then begin Application.MessageBox('没有选择数据!', '提示', 0); Exit; end; if Application.MessageBox('确定要删除数据吗?', '提示', 32 + 4) <> IDYES then Exit; //先整体检查:勾选中任一工艺被产品或合同明细引用则全部阻止(避免删一半) MRefCodes := ''; MConRefCodes := ''; CDS_1.DisableControls; try CDS_1.First; while not CDS_1.Eof do begin if CDS_1.fieldbyname('SSel').AsBoolean then begin with ADOQueryTemp do begin Close; SQL.Clear; SQL.Add('select count(*) as AA from BS_Cloth_Info where CRID=' + QuotedStr(Trim(CDS_1.fieldbyname('CRID').AsString))); Open; end; if ADOQueryTemp.FieldByName('AA').AsInteger > 0 then begin if MRefCodes <> '' then MRefCodes := MRefCodes + ','; MRefCodes := MRefCodes + Trim(CDS_1.fieldbyname('CR_Code').AsString); end; //合同明细占用检查 with ADOQueryTemp do begin Close; SQL.Clear; SQL.Add('select count(*) as AA from BS_Contract_Sub where CRID=' + QuotedStr(Trim(CDS_1.fieldbyname('CRID').AsString))); Open; end; if ADOQueryTemp.FieldByName('AA').AsInteger > 0 then begin if MConRefCodes <> '' then MConRefCodes := MConRefCodes + ','; MConRefCodes := MConRefCodes + Trim(CDS_1.fieldbyname('CR_Code').AsString); end; end; CDS_1.Next; end; CDS_1.Locate('SSel', True, []); finally CDS_1.EnableControls; end; if MRefCodes <> '' then begin Application.MessageBox(PChar('工艺 ' + MRefCodes + ' 已被产品使用,不能删除!请先解除产品的工艺绑定。'), '提示', 0); Exit; end; if MConRefCodes <> '' then begin Application.MessageBox(PChar('工艺 ' + MConRefCodes + ' 已被合同明细使用,不能删除!请先在合同中改选其他工艺。'), '提示', 0); Exit; end; try ADOQueryCmd.Connection.BeginTrans; //与产品删除一致:循环删除勾选行(主表+配比子表+纹版图子表) while CDS_1.Locate('SSel', true, []) do begin if Trim(CDS_1.fieldbyname('CRID').AsString) <> '' then begin //先备份到工艺删除表(备份表与主表结构完全一致,select * 免列清单,主表加字段无需改代码) with ADOQueryCmd do begin Close; SQL.Clear; SQL.Add('insert into BS_Craft_Info_Del select * from BS_Craft_Info where CRID=' + QuotedStr(Trim(CDS_1.fieldbyname('CRID').AsString))); ExecSQL; end; with ADOQueryCmd do begin Close; SQL.Clear; SQL.Add('delete BS_Craft_Yarn where CRID=' + QuotedStr(Trim(CDS_1.fieldbyname('CRID').AsString))); ExecSQL; end; with ADOQueryCmd do begin Close; SQL.Clear; SQL.Add('delete BS_Craft_Info_WB where CRID=' + QuotedStr(Trim(CDS_1.fieldbyname('CRID').AsString))); ExecSQL; end; with ADOQueryCmd do begin Close; SQL.Clear; SQL.Add('delete BS_Craft_Info where CRID=' + QuotedStr(Trim(CDS_1.fieldbyname('CRID').AsString))); ExecSQL; end; with ADOQueryCmd do begin Close; SQL.Clear; 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(CDS_1.fieldbyname('CRID').AsString))); SQL.Add(',' + QuotedStr(Trim('成功'))); SQL.Add(')'); ExecSQL; end; end; CDS_1.Delete; end; ADOQueryCmd.Connection.CommitTrans; Application.MessageBox('删除成功!', '提示信息'); except ADOQueryCmd.Connection.RollbackTrans; Application.MessageBox('删除失败!', '提示信息', 0); end; end; procedure TfrmCraftInfo.N1Click(Sender: TObject); begin SelOKNoFiler(Tv1, True); end; procedure TfrmCraftInfo.N2Click(Sender: TObject); begin SelOKNoFiler(Tv1, False); end; procedure TfrmCraftInfo.TBExportClick(Sender: TObject); begin if CDS_1.IsEmpty then Exit; TcxGridToExcel(self.Caption, cxGrid1); end; procedure TfrmCraftInfo.TbPrintClick(Sender: TObject); begin try frmLabelPrint := TfrmLabelPrint.Create(Application); with frmLabelPrint do begin FLMType := 'CraftInfoPrint'; FFiltration1 := CDS_1.fieldbyname('CRID').AsString; if ShowModal = 1 then begin // Self.InitGrid(); end; end; finally frmLabelPrint.Free; end; end; procedure TfrmCraftInfo.ToolButton2Click(Sender: TObject); begin WriteCxGrid(self.Caption + 'TV1', Tv1, '工艺管理'); end; procedure TfrmCraftInfo.TBCloseClick(Sender: TObject); begin Close; end; procedure TfrmCraftInfo.CRCodeKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then InitGrid(); end; end.