unit U_DyeFormulaLargeInput; interface uses Windows, Messages, strUtils, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, cxCurrencyEdit, cxTextEdit, cxDropDownEdit, Menus, cxLookAndFeelPainters, StdCtrls, ComCtrls, BtnEdit, Buttons, cxButtons, cxContainer, cxListBox, ExtCtrls, cxGridLevel, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses, cxControls, cxGridCustomView, cxGrid, ToolWin, cxLookAndFeels, cxNavigator, ADODB, DBClient, RM_Common, RM_Class, RM_GridReport, RM_System, RM_Dataset, dxSkinsCore, dxSkinsDefaultPainters, dxDateRanges, cxCustomListBox, U_BaseList, cxButtonEdit, dxBarBuiltInMenu, cxGridCustomPopupMenu, cxGridPopupMenu, cxPC, RM_BarCode, U_BaseInput, System.ImageList, Vcl.ImgList; type TfrmDyeFormulaLargeInput = class(TfrmBaseInput) Panel1: TPanel; Panel3: TPanel; ADOQueryCmd: TADOQuery; ADOQueryTmp: TADOQuery; CDS_SheetDye: TClientDataSet; DS_SheetDye: TDataSource; GPM_1: TcxGridPopupMenu; ToolBar1: TToolBar; ToolButton3: TToolButton; ToolButton4: TToolButton; ToolButton5: TToolButton; ToolButton6: TToolButton; cxGrid1: TcxGrid; TV1: TcxGridDBTableView; TV1Column5: TcxGridDBColumn; TV1DyeCode: TcxGridDBColumn; TV1dyeName: TcxGridDBColumn; TV1dyeStyle: TcxGridDBColumn; TV1curUnitDyeNum: TcxGridDBColumn; TV1pbUnit: TcxGridDBColumn; TV1sumNum: TcxGridDBColumn; TV1sumNum_KG: TcxGridDBColumn; TV1Column1: TcxGridDBColumn; cxGridLevel2: TcxGridLevel; Panel2: TPanel; Panel4: TPanel; GroupBox3: TGroupBox; cxGrid2: TcxGrid; TV2: TcxGridDBTableView; tv1gangNo: TcxGridDBColumn; tv1sheetNo: TcxGridDBColumn; tv1sheetStyle: TcxGridDBColumn; tv1filltime: TcxGridDBColumn; tv1Column4: TcxGridDBColumn; cxGridDBColumn1: TcxGridDBColumn; tv1Column2: TcxGridDBColumn; tv1Column3: TcxGridDBColumn; tv1Column6: TcxGridDBColumn; tv1DeviceNo: TcxGridDBColumn; tv1curNum: TcxGridDBColumn; tv1YB: TcxGridDBColumn; tv1Volume: TcxGridDBColumn; tv1filler: TcxGridDBColumn; tv1beizhu: TcxGridDBColumn; tv1Column8: TcxGridDBColumn; tv1Column9: TcxGridDBColumn; cxGridLevel1: TcxGridLevel; Panel5: TPanel; Label23: TLabel; Label2: TLabel; Label4: TLabel; Label21: TLabel; Label6: TLabel; Label5: TLabel; Label13: TLabel; Label14: TLabel; Label18: TLabel; Label25: TLabel; Label36: TLabel; Label22: TLabel; Label1: TLabel; Label7: TLabel; Label19: TLabel; Label8: TLabel; Label9: TLabel; Label20: TLabel; Note: TMemo; C_Color: TEdit; PCID: TEdit; C_Name: TEdit; CustName: TEdit; C_ColorNo: TEdit; DFLDate: TDateTimePicker; Qty: TEdit; Piece: TEdit; C_ColorDepth: TEdit; BathNo: TEdit; DFLType: TComboBox; ClothWeight: TEdit; BathRatio: TEdit; WaterNum: TEdit; DFLMID: TEdit; ToolButton2: TToolButton; Panel6: TPanel; Panel7: TPanel; ToolBar2: TToolBar; Tsave: TToolButton; ToolButton1: TToolButton; Tclose: TToolButton; edtPCID: TEdit; Label37: TLabel; CDS_2: TClientDataSet; DS_2: TDataSource; GPM_2: TcxGridPopupMenu; procedure FormDestroy(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure tv2curUnitDyeNumPropertiesEditValueChanged(Sender: TObject); procedure tv2sumNumPropertiesEditValueChanged(Sender: TObject); procedure FormShow(Sender: TObject); procedure TcloseClick(Sender: TObject); procedure WaterNumChange(Sender: TObject); procedure ClothWeightExit(Sender: TObject); procedure TsaveClick(Sender: TObject); procedure edtPCIDKeyPress(Sender: TObject; var Key: Char); procedure tv2dyeStylePropertiesEditValueChanged(Sender: TObject); procedure cxButton4Click(Sender: TObject); procedure tv2DyeCodePropertiesEditValueChanged(Sender: TObject); procedure ToolButton3Click(Sender: TObject); procedure ToolButton5Click(Sender: TObject); procedure ToolButton6Click(Sender: TObject); procedure ToolButton4Click(Sender: TObject); procedure TV1pbUnitPropertiesEditValueChanged(Sender: TObject); procedure ToolButton1Click(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure TV2DblClick(Sender: TObject); private procedure formulaDyeCalcAll(); //计算全部配比用量 procedure formulaDyeCalcSingle(); //计算全部配比用量 procedure InitData(); //刷新数据 function SaveData(): Boolean; //保存数据 procedure InitCard(); //扫描流程卡 procedure ClearFormula(); //清除配方 procedure InitOldFormula(); //获取历史配方 { Private declarations } public FDFLMID: string; { Public declarations } end; var frmDyeFormulaLargeInput: TfrmDyeFormulaLargeInput; implementation uses U_DataLink, U_RTFun; {$R *.dfm} procedure TfrmDyeFormulaLargeInput.InitOldFormula(); begin with ADOQueryTmp do begin close; sql.Clear; sql.Add('select top 20 * from Dye_Formula_Large_Main '); sql.Add('where DFLType=''领料'' '); sql.Add('and C_Name=''' + trim(C_Name.Text) + ''' '); sql.Add('and isnull(C_Color,'''')=''' + trim(C_Color.Text) + ''' '); sql.Add('order by DFLDate desc '); open; end; SCreateCDS(ADOQueryTmp, CDS_2); SInitCDSData(ADOQueryTmp, CDS_2); end; procedure TfrmDyeFormulaLargeInput.formulaDyeCalcSingle(); var MClothWeight: double; //* 当前布重 *// MBathRatio: double; //* 当前浴比*// MWaterNum: double; //* 水量*// MDyeRatio: double; //* 配比*// MDyeGQty: double; //* 染料用量*// MDyeUnit: string; begin MClothWeight := strToFloatDef(trim(WaterNum.text), 0); MWaterNum := strtoFloatDef(trim(WaterNum.text), 0); MBathRatio := strToFloatDef(trim(BathRatio.text), 1); if MClothWeight <= 0.0 then exit; with CDS_SheetDye do begin try DisableControls; MDyeRatio := CDS_SheetDye.fieldByName('DyeRatio').AsFloat; MDyeUnit := Trim(CDS_SheetDye.fieldByName('DyeUnit').AsString); if (MDyeUnit = '%') or (MDyeUnit = 'g/l') then begin if MDyeUnit = '%' then MDyeGQty := RoundFloat(MClothWeight * MDyeRatio / 100.0 * 1000, 1) //染料=布匹重量*配方 else if MDyeUnit = 'g/l' then MDyeGQty := RoundFloat(MWaterNum * MDyeRatio, 1); //助剂=水量*配方 with CDS_SheetDye do begin Edit; CDS_SheetDye.fieldByName('DyeGQty').value := MDyeGQty; CDS_SheetDye.fieldByName('DyeKgQty').value := MDyeGQty / 1000; Post; end; end; finally EnableControls; end; end; end; procedure TfrmDyeFormulaLargeInput.formulaDyeCalcAll(); var MClothWeight: double; //* 当前布重 *// MBathRatio: double; //* 当前浴比*// MWaterNum: double; //* 水量*// MDyeRatio: double; //* 配比*// MDyeGQty: double; //* 染料用量*// MDyeUnit: string; begin MClothWeight := strToFloatDef(trim(WaterNum.text), 0); MWaterNum := strtoFloatDef(trim(WaterNum.text), 0); MBathRatio := strToFloatDef(trim(BathRatio.text), 1); if MClothWeight <= 0.0 then exit; with CDS_SheetDye do begin try DisableControls; First; while not Eof do begin MDyeRatio := CDS_SheetDye.fieldByName('DyeRatio').AsFloat; MDyeUnit := Trim(CDS_SheetDye.fieldByName('DyeUnit').AsString); if (MDyeUnit = '%') or (MDyeUnit = 'g/l') then begin if MDyeUnit = '%' then MDyeGQty := RoundFloat(MClothWeight * MDyeRatio / 100.0 * 1000, 1) //染料=布匹重量*配方 else if MDyeUnit = 'g/l' then MDyeGQty := RoundFloat(MWaterNum * MDyeRatio, 1); //助剂=水量*配方 with CDS_SheetDye do begin Edit; CDS_SheetDye.fieldByName('DyeGQty').value := MDyeGQty; CDS_SheetDye.fieldByName('DyeKgQty').value := MDyeGQty / 1000; Post; end; end; Next; end; finally EnableControls; end; end; end; procedure TfrmDyeFormulaLargeInput.ClearFormula(); begin DFLMID.Text := ''; DFLType.ItemIndex := 0; DFLMID.Text := ''; BathNo.Text := ''; PCID.Text := ''; edtPCID.Text := ''; WaterNum.Text := ''; FDFLMID := ''; with CDS_SheetDye do begin try DisableControls; First; while not Eof do begin with CDS_SheetDye do begin Edit; Fieldbyname('DFLMID').Value := ''; Fieldbyname('DFLSID').Value := ''; Post; end; Next; end; finally First; EnableControls; end; end; end; procedure TfrmDyeFormulaLargeInput.edtPCIDKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin if trim(edtPCID.Text) = '' then exit; InitCard(); InitOldFormula(); end; end; function TfrmDyeFormulaLargeInput.SaveData(): Boolean; var MaxMid, MaxSid: string; begin try ADOQueryCmd.Connection.BeginTrans; ////////////////// 保存领料主表 ///////////////// if trim(FDFLMID) = '' then begin if GetLSNo(ADOQuerytmp, MaxMid, 'LP', 'Dye_Formula_Large_Main', 4, 1) = false then raise Exception.Create('取大货编号失败!'); end else MaxMid := FDFLMID; //////////////////////////////////// //主表 with ADOQueryCmd do begin close; sql.Clear; sql.Add('select * from Dye_Formula_Large_Main'); sql.Add('where DFLMID=' + QuotedStr(MaxMid)); open; if Trim(FDFLMID) = '' then begin Append; Fieldbyname('Fillid').Value := Trim(dcode); Fieldbyname('Filler').Value := Trim(DName); end else begin Edit; Fieldbyname('Editid').Value := Trim(dcode); Fieldbyname('Editer').Value := Trim(DName); Fieldbyname('EditTime').Value := SGetServerDateTime(ADOQueryTmp); end; RTSetsavedata(ADOQueryCmd, 'Dye_Formula_Large_Main', panel5, 0); Fieldbyname('DFLMID').Value := trim(MaxMid); Post; end; ////////////////// 保存领料主表 ///////////////// /// ////////////////// 保存配比表 ///////////////// with CDS_SheetDye do begin DisableControls; first; while not eof do begin if (trim(CDS_sheetDye.fieldByName('P_Name').AsString) = '') then begin CDS_SheetDye.Next; Continue; end; if (CDS_sheetDye.fieldByName('DyeRatio').AsFloat <= 0) then begin CDS_SheetDye.Next; Continue; end; if trim(CDS_SheetDye.FieldByName('DFLSID').AsString) = '' then begin if GetLSNo(ADOQuerytmp, MaxSid, 'LS', 'Dye_Formula_Large_Sub', 4, 1) = false then raise Exception.Create('取配比编号失败!'); end else begin MaxSid := trim(CDS_SheetDye.FieldByName('DFLSID').AsString); end; with ADOQueryCmd do begin close; sql.Clear; sql.Add('select * from Dye_Formula_Large_Sub'); sql.Add('where DFLMID=' + quotedStr(MaxMid)); sql.Add('and DFLSID=' + quotedStr(MaxSid)); open; if IsEmpty then begin Append; end else begin Edit; end; RTSetSaveDataCDS(ADOQueryCmd, Tv1, CDS_SheetDye, 'Dye_Formula_Sample_Sub', 0); Fieldbyname('DFLMID').Value := trim(MaxMid); Fieldbyname('DFLSID').Value := trim(MaxSid); Post; end; next; end; EnableControls; end; ADOQueryCmd.Connection.CommitTrans; DFLMID.Text := trim(MaxMid); ////////////////// 保存配比表 ///////////////// Result := true; except Result := false; ADOQueryCmd.Connection.RollbackTrans; application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0); end; end; procedure TfrmDyeFormulaLargeInput.InitCard(); begin with AdoQueryTmp do begin close; sql.Clear; sql.Add('select * '); sql.Add('from Dye_Formula_Large_Main A'); sql.Add('where A.PCID=''' + trim(edtPCID.Text) + ''''); open; end; if AdoQueryTmp.IsEmpty then begin DFLType.ItemIndex := 0; DFLMID.Text := ''; end else begin DFLType.ItemIndex := 1; DFLMID.Text := ''; end; with AdoQueryTmp do begin close; sql.Clear; sql.Add('select * '); sql.Add('from Dye_Plan_Card A'); sql.Add('where Status=''9'' and A.PCID=''' + trim(edtPCID.Text) + ''''); open; if not IsEmpty then begin CustName.Text := fieldbyName('CustName').asstring; C_Name.Text := fieldbyName('C_Name').asstring; C_ColorNo.Text := fieldbyName('C_ColorNo').asstring; C_Color.Text := fieldbyName('C_Color').asstring; Piece.text := fieldbyName('PCPiece').asstring; Qty.text := fieldbyName('PCQty').asstring; PCID.text := fieldbyName('PCID').asstring; FDFLMID := ''; edtPCID.Text := ''; formulaDyeCalcAll(); end else begin DFLType.ItemIndex := 0; DFLMID.Text := ''; BathNo.Text := ''; PCID.Text := ''; edtPCID.Text := ''; WaterNum.Text := ''; FDFLMID := ''; end; end; end; procedure TfrmDyeFormulaLargeInput.InitData(); begin with ADOQueryTmp do begin close; filtered := false; sql.Clear; sql.Add('select A.* '); sql.Add('from Dye_Formula_Large_Main A'); sql.Add('where DFLMID=' + quotedStr(trim(FDFLMID))); open; end; SCSHData(ADOQueryTmp, Panel5, 0); with ADOQueryTmp do begin close; sql.Clear; sql.Add('select * from Dye_Formula_Large_Sub where DFLMID=''' + trim(FDFLMID) + ''' '); open; end; SCreateCDS(ADOQueryTmp, CDS_SheetDye); SInitCDSData(ADOQueryTmp, CDS_SheetDye); end; procedure TfrmDyeFormulaLargeInput.FormDestroy(Sender: TObject); begin inherited; frmDyeFormulaLargeInput := nil; end; procedure TfrmDyeFormulaLargeInput.FormClose(Sender: TObject; var Action: TCloseAction); begin inherited; Action := cafree; end; procedure TfrmDyeFormulaLargeInput.FormCreate(Sender: TObject); begin inherited; DFLDate.DateTime := now(); end; procedure TfrmDyeFormulaLargeInput.tv2curUnitDyeNumPropertiesEditValueChanged(Sender: TObject); var mvalue, FFieldName: string; begin mvalue := TcxTextEdit(Sender).EditingText; FFieldName := Trim(Tv1.Controller.FocusedColumn.DataBinding.FilterFieldName); if Trim(mvalue) = '' then mvalue := '0'; with CDS_SheetDye do begin Edit; FieldByName(FFieldName).Value := mvalue; Post; end; formulaDyeCalcSingle(); TV1.Controller.EditingController.ShowEdit(); end; procedure TfrmDyeFormulaLargeInput.TV2DblClick(Sender: TObject); begin if Trim(FDFLMID) <> '' then Exit; with ADOQueryTmp do begin close; filtered := false; sql.Clear; sql.Add('select A.* '); sql.Add('from Dye_Formula_Large_Main A'); sql.Add('where DFLMID=' + QuotedStr(trim(CDS_2.fieldByName('DFLMID').AsString))); open; end; ClothWeight.Text := trim(CDS_2.fieldByName('ClothWeight').AsString); BathRatio.Text := trim(CDS_2.fieldByName('BathRatio').AsString); WaterNum.Text := trim(CDS_2.fieldByName('WaterNum').AsString); with ADOQueryTmp do begin close; sql.Clear; sql.Add('select * from Dye_Formula_Large_Sub where DFLMID=' + QuotedStr(trim(CDS_2.fieldByName('DFLMID').AsString))); open; end; SCreateCDS(ADOQueryTmp, CDS_SheetDye); SInitCDSData(ADOQueryTmp, CDS_SheetDye); with CDS_SheetDye do begin try DisableControls; First; while not Eof do begin with CDS_SheetDye do begin Edit; Fieldbyname('DFLMID').Value := ''; Fieldbyname('DFLSID').Value := ''; Post; end; Next; end; finally First; EnableControls; end; end; end; procedure TfrmDyeFormulaLargeInput.tv2DyeCodePropertiesEditValueChanged(Sender: TObject); var mvalue: string; begin mvalue := TcxTextEdit(Sender).EditingText; with CDS_SheetDye do begin Edit; FieldByName('P_Code').Value := Trim(mvalue); Post; end; with AdoQueryTmp do begin close; sql.Clear; sql.Add('select * from BS_Product_Info A '); sql.Add('where STKName=''染化料'' and P_Code=' + quotedstr(trim(mvalue))); open; end; with CDS_SheetDye do begin Edit; FieldByName('P_Code').Value := AdoQueryTmp.FieldByName('P_Code').Value; FieldByName('P_Name').Value := AdoQueryTmp.FieldByName('P_Name').Value; FieldByName('P_Spec').Value := AdoQueryTmp.FieldByName('P_Spec').Value; FieldByName('P_Type').Value := AdoQueryTmp.FieldByName('P_Type').Value; FieldByName('DyeUnit').Value := AdoQueryTmp.FieldByName('TakeUnit').Value; Post; end; Self.TV1.Controller.EditingController.ShowEdit(); end; procedure TfrmDyeFormulaLargeInput.tv2dyeStylePropertiesEditValueChanged(Sender: TObject); var mvalue, FFieldName, M, N: string; begin mvalue := TcxTextEdit(Sender).EditingText; FFieldName := Trim(TV1.Controller.FocusedColumn.DataBinding.FilterFieldName); with CDS_SheetDye do begin Edit; FieldByName(FFieldName).Value := mvalue; Post; M := FieldByName('dye_kind_name').AsString; //类型 N := FieldByName('DyeUnit').AsString; //单位 end; if M = '染料' then N := '%' else N := 'g/l'; with CDS_SheetDye do begin Edit; FieldByName('DyeUnit').Value := N; Post; end; TV1.Controller.EditingController.ShowEdit(); end; procedure TfrmDyeFormulaLargeInput.tv2sumNumPropertiesEditValueChanged(Sender: TObject); var mvalue: string; begin mvalue := TcxTextEdit(Sender).EditingText; if Trim(mvalue) = '' then mvalue := '0'; with CDS_SheetDye do begin Edit; FieldByName('DyeGQty').Value := mvalue; FieldByName('DyeKgQty').Value := StrToFloatdef(mvalue, 0) / 1000; Post; end; TV1.Controller.EditingController.ShowEdit(); end; procedure TfrmDyeFormulaLargeInput.FormShow(Sender: TObject); begin inherited; ReadCxGrid(self.Caption + tv1.Name, Tv1, '大货配方'); ReadCxGrid(self.Caption + tv2.Name, Tv2, '大货配方'); InitData(); end; procedure TfrmDyeFormulaLargeInput.TcloseClick(Sender: TObject); begin close; end; procedure TfrmDyeFormulaLargeInput.WaterNumChange(Sender: TObject); begin if strToFloatDef(trim(WaterNum.text), 0) > 0 then BathRatio.text := format('%.3f', [strTofloatDef(trim(WaterNum.Text), 0) / strToFloatDef(trim(WaterNum.text), 0)]); end; procedure TfrmDyeFormulaLargeInput.ClothWeightExit(Sender: TObject); begin if CDS_SheetDye.IsEmpty then exit; formulaDyeCalcAll(); end; procedure TfrmDyeFormulaLargeInput.cxButton4Click(Sender: TObject); begin CDS_SheetDye.Prior; end; procedure TfrmDyeFormulaLargeInput.ToolButton1Click(Sender: TObject); begin if trim(PCID.Text) = '' then begin application.MessageBox('流程卡不能为空!', '提示信息', 0); exit; end; if SaveData() then begin ClearFormula(); end; end; procedure TfrmDyeFormulaLargeInput.ToolButton2Click(Sender: TObject); begin WriteCxGrid(self.Caption + tv1.Name, Tv1, '大货配方'); WriteCxGrid(self.Caption + tv2.Name, Tv2, '大货配方'); end; procedure TfrmDyeFormulaLargeInput.ToolButton3Click(Sender: TObject); var i: Integer; begin for i := 0 to 10 do begin CDS_SheetDye.append; CDS_SheetDye.fieldbyname('SerialNo').Value := CDS_SheetDye.RecordCount + 1; CDS_SheetDye.Post; end; end; procedure TfrmDyeFormulaLargeInput.ToolButton4Click(Sender: TObject); begin if CDS_SheetDye.IsEmpty then exit; with ADOQueryCmd do begin close; sql.Clear; sql.Add('update Dye_Formula_Large_Sub set DelId=' + quotedstr(DCode) + ',Deler=' + quotedstr(DName) + ',Deltime=getdate() where DFLSID=' + quotedstr(trim(CDS_SheetDye.fieldByName('DFLSID').AsString))); sql.Add('insert into Dye_Formula_Large_Sub_Del select * from Dye_Formula_Large_Sub where DFLSID=' + quotedstr(trim(CDS_SheetDye.fieldByName('DFLSID').AsString))); sql.Add('delete Dye_Formula_Large_Sub where DFLSID=' + quotedstr(trim(CDS_SheetDye.fieldByName('DFLSID').AsString))); execsql; end; CDS_SheetDye.Delete; end; procedure TfrmDyeFormulaLargeInput.ToolButton5Click(Sender: TObject); begin with CDS_SheetDye do begin if IsEmpty then Exit; if RecNo >= 1 then begin //Prior; Edit; fieldByName('SerialNo').Value := fieldByName('SerialNo').Value - 1; Post; Prior; Edit; fieldByName('SerialNo').Value := fieldByName('SerialNo').Value + 1; Post; end; Prior; end; end; procedure TfrmDyeFormulaLargeInput.ToolButton6Click(Sender: TObject); begin CDS_SheetDye.IndexFieldNames := 'SerialNo'; with CDS_SheetDye do begin if IsEmpty then Exit; Next; if not Eof then Prior else begin exit; end; if not Eof then begin Edit; fieldByName('SerialNo').Value := fieldByName('SerialNo').Value + 1; Post; Prior; Edit; fieldByName('SerialNo').Value := fieldByName('SerialNo').Value - 1; Post; end; Next; end; end; procedure TfrmDyeFormulaLargeInput.TsaveClick(Sender: TObject); begin if trim(PCID.Text) = '' then begin application.MessageBox('流程卡不能为空!', '提示信息', 0); exit; end; if SaveData() then begin ModalResult := 1; end; end; procedure TfrmDyeFormulaLargeInput.TV1pbUnitPropertiesEditValueChanged(Sender: TObject); var mvalue, FFieldName: string; begin mvalue := TcxTextEdit(Sender).EditingText; FFieldName := Trim(Tv1.Controller.FocusedColumn.DataBinding.FilterFieldName); with CDS_SheetDye do begin Edit; FieldByName(FFieldName).Value := mvalue; Post; end; formulaDyeCalcSingle(); TV1.Controller.EditingController.ShowEdit(); end; end.