unit U_TatInspEdit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, cxTextEdit, DBClient, ADODB, cxGridLevel, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses, cxControls, cxGridCustomView, cxGrid, StdCtrls, ExtCtrls, ComCtrls, ToolWin, cxButtonEdit, cxLookAndFeels, cxLookAndFeelPainters, cxNavigator, dxSkinsCore, dxSkinsDefaultPainters, dxDateRanges, dxSkinWXI, dxScrollbarAnnotations; type TfrmTatInspEdit = class(TForm) ToolBar1: TToolBar; ToolButton2: TToolButton; TBClose: TToolButton; Panel1: TPanel; Label1: TLabel; CIID: TEdit; ADOTmp: TADOQuery; ADOQueryMain: TADOQuery; ADOCmd: TADOQuery; DataSource1: TDataSource; Order_MJ: TClientDataSet; ToolButton1: TToolButton; ToolButton3: TToolButton; Label2: TLabel; GrossWeight: TEdit; Label4: TLabel; Label6: TLabel; Meter: TEdit; RadioGroup1: TRadioGroup; Ma: TLabel; Label7: TLabel; MJQty1: TEdit; Label5: TLabel; Label10: TLabel; Label12: TLabel; Label14: TLabel; NetWeight: TEdit; PieceNo: TEdit; Label15: TLabel; Label11: TLabel; Yardage: TEdit; Label16: TLabel; Label17: TLabel; CalcMeter: TEdit; CodeTableLen: TEdit; ToolButton4: TToolButton; cxGrid1: TcxGrid; TV1: TcxGridDBTableView; cxGridDBColumn2: TcxGridDBColumn; cxGridDBColumn3: TcxGridDBColumn; cxGridDBColumn4: TcxGridDBColumn; cxGridDBColumn5: TcxGridDBColumn; cxGridDBColumn6: TcxGridDBColumn; cxGridDBColumn7: TcxGridDBColumn; cxGridDBColumn8: TcxGridDBColumn; cxGridDBColumn9: TcxGridDBColumn; cxGridLevel3: TcxGridLevel; TV1Column1: TcxGridDBColumn; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure tv2CDWZPropertiesEditValueChanged(Sender: TObject); procedure ToolButton1Click(Sender: TObject); procedure ToolButton3Click(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure TBCloseClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure ToolButton4Click(Sender: TObject); procedure cxGridDBColumn3PropertiesEditValueChanged(Sender: TObject); procedure TV1Column1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure NetWeightChange(Sender: TObject); private { Private declarations } FGramW: Double; FAddW: Double; //加载时的加重快照,保存时从界面毛净重中扣回 FAddL: Double; //加载时的加长快照,保存时从界面米数中扣回 FSyncing: Boolean; //加载赋值时防止OnChange重入 function SaveData(): Boolean; procedure GetJYXK(FJYIP: string); procedure UpdateCalcMeter(); public { Public declarations } end; var frmTatInspEdit: TfrmTatInspEdit; implementation uses U_RTFun, U_ZDYHelp, U_DataLink; {$R *.dfm} procedure TfrmTatInspEdit.GetJYXK(FJYIP: string); begin with ADOTmp do begin Close; sql.Clear; SQL.Add('select A.* from Tat_Cloth_Inspect A '); sql.Add(' where A.CIID=''' + Trim(FJYIP) + ''''); Open; end; if ADOTmp.IsEmpty then begin CIID.Text := ''; Label2.Caption := ''; Label2.Visible := False; Application.MessageBox('条码错误!', '提示', 0); Exit; end; PieceNo.Text := Trim(ADOTmp.fieldbyname('PieceNo').AsString); //gram weight snapshot first, NetWeight OnChange recalcs CalcMeter with it FGramW := StrToFloatdef(Trim(ADOTmp.fieldbyname('C_GramWeight').AsString), 0); //加重快照:界面显示含加重的毛净重,保存时再扣回,保证数据库基础字段口径不变 FAddW := StrToFloatdef(Trim(ADOTmp.fieldbyname('add_weight').AsString), 0); //加长快照:界面米数含加长显示,保存时再扣回,与检验页 Meter+add_length 口径一致 FAddL := StrToFloatdef(Trim(ADOTmp.fieldbyname('add_length').AsString), 0); FSyncing := True; try GrossWeight.Text := FormatFloat('0.##', StrToFloatdef(Trim(ADOTmp.fieldbyname('GrossWeight').AsString), 0) + FAddW); NetWeight.Text := FormatFloat('0.##', StrToFloatdef(Trim(ADOTmp.fieldbyname('NetWeight').AsString), 0) + FAddW); //毛重框已隐藏:毛重与净重保持一致,净重为唯一录入位 GrossWeight.Text := NetWeight.Text; Meter.Text := FormatFloat('0.##', StrToFloatdef(Trim(ADOTmp.fieldbyname('Meter').AsString), 0) + FAddL); Yardage.Text := Trim(ADOTmp.fieldbyname('Yardage').AsString); finally FSyncing := False; end; UpdateCalcMeter(); CodeTableLen.Text := Trim(ADOTmp.fieldbyname('code_table_length').AsString); RadioGroup1.ItemIndex := RadioGroup1.Items.IndexOf(Trim(ADOTmp.fieldbyname('Grade').AsString)); if RadioGroup1.ItemIndex < 0 then begin if Trim(ADOTmp.fieldbyname('Grade').AsString) = '正品' then RadioGroup1.ItemIndex := 0 else if Trim(ADOTmp.fieldbyname('Grade').AsString) = '次品' then RadioGroup1.ItemIndex := 2; end; with ADOTmp do begin Close; sql.Clear; SQL.Add('select * from Tat_Cloth_Inspect_Flaw A where A.CIID=''' + Trim(CIID.Text) + ''''); Open; end; Label2.Caption := Trim(CIID.Text); Label2.Visible := True; CIID.Text := ''; SCreateCDS(ADOTmp, Order_MJ); SInitCDSData(ADOTmp, Order_MJ); end; procedure TfrmTatInspEdit.cxGridDBColumn3PropertiesEditValueChanged(Sender: TObject); var mvalue, CIFbeg, CIFEnd: string; FFReal: Double; begin mvalue := TcxTextEdit(Sender).EditingText; with Order_MJ do begin Edit; FieldByName('CIFEnd').Value := mvalue; Post; end; CIFbeg := Trim(Order_MJ.fieldbyname('CIFbeg').AsString); CIFEnd := Trim(Order_MJ.fieldbyname('CIFEnd').AsString); if (Trim(CIFbeg) <> '') and (Trim(CIFEnd) <> '') then begin if TryStrToFloat(CIFbeg, FFReal) and TryStrToFloat(CIFEnd, FFReal) then begin if StrToFloat(CIFEnd) < StrToFloat(CIFbeg) then begin Application.MessageBox('终止位置小于起始位置!', '提示', 0); Exit; end; with Order_MJ do begin Edit; FieldByName('CIFQty').Value := StrToFloat(CIFEnd) - StrToFloat(CIFbeg); Post; end; end else begin Application.MessageBox('非法数字!', '提示', 0); Exit; end; end; end; procedure TfrmTatInspEdit.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; procedure TfrmTatInspEdit.FormDestroy(Sender: TObject); begin frmTatInspEdit := nil; end; procedure TfrmTatInspEdit.tv2CDWZPropertiesEditValueChanged(Sender: TObject); var mvalue, CIFbeg, CIFEnd: string; FFReal: Double; begin mvalue := TcxTextEdit(Sender).EditingText; with Order_MJ do begin Edit; FieldByName('CIFbeg').Value := mvalue; Post; end; CIFbeg := Trim(Order_MJ.fieldbyname('CIFbeg').AsString); CIFEnd := Trim(Order_MJ.fieldbyname('CIFEnd').AsString); if (Trim(CIFbeg) <> '') and (Trim(CIFEnd) <> '') then begin if TryStrToFloat(CIFbeg, FFReal) and TryStrToFloat(CIFEnd, FFReal) then begin if StrToFloat(CIFEnd) < StrToFloat(CIFbeg) then begin Application.MessageBox('终止位置小于起始位置!', '提示', 0); Exit; end; with Order_MJ do begin Edit; FieldByName('CIFQty').Value := StrToFloat(CIFEnd) - StrToFloat(CIFbeg); Post; end; end else begin Application.MessageBox('非法数字!', '提示', 0); Exit; end; end; end; procedure TfrmTatInspEdit.ToolButton1Click(Sender: TObject); begin if Trim(Label2.Caption) = '' then Exit; Order_MJ.Append; Order_MJ.Post; end; procedure TfrmTatInspEdit.ToolButton3Click(Sender: TObject); begin if Trim(Label2.Caption) = '' then Exit; if Order_MJ.IsEmpty then Exit; if Trim(Order_MJ.fieldbyname('CIFID').AsString) <> '' then begin if Application.MessageBox('确定要删除数据吗?', '提示', 32 + 4) <> IDYES then Exit; with ADOCmd do begin Close; sql.Clear; sql.Add('delete Tat_Cloth_Inspect_Flaw where CIFID=''' + Trim(Order_MJ.fieldbyname('CIFID').AsString) + ''''); ExecSQL; end; end; Order_MJ.Delete; end; procedure TfrmTatInspEdit.ToolButton4Click(Sender: TObject); begin WriteCxGrid(trim(Self.Caption), Tv1, '印染检验管理'); end; procedure TfrmTatInspEdit.TV1Column1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); begin try frmZDYHelp := TfrmZDYHelp.Create(Application); with frmZDYHelp do begin flag := 'WFBCD'; flagname := '疵点'; if ShowModal = 1 then begin Self.Order_MJ.Edit; Self.Order_MJ.FieldByName('CIFName').value := Trim(ClientDataSet1.fieldbyname('ZdyName').AsString); end; end; finally frmZDYHelp.Free; end; end; function TfrmTatInspEdit.SaveData(): Boolean; var maxno: string; begin try ADOCmd.Connection.BeginTrans; ///保存疵点表 with Order_MJ do begin First; while not Eof do begin if trim(Order_MJ.FieldByName('CIFName').AsString) = '' then raise Exception.Create(pchar('疵点名称不能为空!')); if Trim(Order_MJ.fieldbyname('CIFID').AsString) = '' then begin if GetLSNo(ADOTmp, maxno, 'JC', 'Tat_Cloth_Inspect_Flaw', 5, 1) = False then raise Exception.Create(pchar('取子流水号失败!')); end else begin maxno := Trim(Order_MJ.fieldbyname('CIFID').AsString); end; with ADOCmd do begin Close; SQL.Clear; sql.Add(' select * from Tat_Cloth_Inspect_Flaw '); sql.Add(' where CIFID=''' + Trim(maxno) + ''' '); Open; end; with ADOCmd do begin if Trim(Order_MJ.fieldbyname('CIFID').AsString) = '' then Append else Edit; FieldByName('CIID').Value := Trim(Label2.Caption); FieldByName('CIFID').Value := Trim(maxno); RTSetSaveDataCDS(ADOCmd, Tv1, Order_MJ, 'Tat_Cloth_Inspect_Flaw', 0); Post; end; Order_MJ.Edit; Order_MJ.FieldByName('CIFID').Value := Trim(maxno); Order_MJ.FieldByName('CIID').Value := Trim(Label2.Caption); Next; end; end; with ADOCmd do begin Close; sql.Clear; sql.Add(' UPdate Tat_Cloth_Inspect Set '); sql.Add(' PieceNo=''' + Trim(PieceNo.Text) + ''' '); sql.Add(',GrossWeight=' + FloatToStr(Strtofloatdef(GrossWeight.Text, 0) - FAddW)); sql.Add(',NetWeight=' + FloatToStr(Strtofloatdef(NetWeight.Text, 0) - FAddW)); sql.Add(',Meter=' + FloatToStr(Strtofloatdef(Meter.Text, 0) - FAddL)); sql.Add(',Yardage=' + FloatToStr(Strtofloatdef(Yardage.Text, 0))); sql.Add(',code_table_length=' + FloatToStr(Strtofloatdef(CodeTableLen.Text, 0))); if RadioGroup1.ItemIndex < 0 then raise Exception.Create(pchar('请选择等级!')); sql.Add(',Grade=' + QuotedStr(Trim(RadioGroup1.Items[RadioGroup1.ItemIndex]))); sql.Add(' where CIID=''' + Trim(Label2.Caption) + ''''); ExecSQL; end; ////////////////// 更新卷号疵点信息 ////////////////// with ADOCmd do begin Close; sql.Clear; sql.Add('exec P_Tat_Insp_Up @CIID=''' + Trim(Label2.Caption) + ''''); sql.Add(',@InspType=' + QuotedStr('单卷修改')); execsql; end; ////////////////// 更新卷号疵点信息 ////////////////// /// ////////////////// 出入库及库存 ////////////////// with ADOCmd do begin Close; sql.Clear; sql.Add('exec P_Tat_Insp_In_Stk @CIID=''' + Trim(Label2.Caption) + ''''); execsql; end; ////////////////// 出入库及库存 ////////////////// /// ////////////////// 更新进度 ////////////////// with ADOCmd do begin Close; sql.Clear; sql.Add('insert into Tat_Need_Up(UOperation,UType,UDataId) values(''检验'',''检验编辑'',' + quotedstr(Trim(Label2.Caption)) + ') '); execsql; end; ////////////////// 更新进度 ////////////////// /// with ADOCmd 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('检验信息管理')); sql.Add(',' + quotedstr('修改检验数据')); sql.Add(',' + quotedstr(Trim(Label2.Caption) + ' 米:' + Trim(Meter.Text) + ' 净重:' + Trim(NetWeight.Text))); sql.Add(',' + quotedstr('成功')); sql.Add(')'); ExecSQL; end; ADOCmd.Connection.CommitTrans; Result := True; except Result := False; ADOCmd.Connection.RollbackTrans; application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0); end; end; procedure TfrmTatInspEdit.UpdateCalcMeter(); var MNetW: Double; begin //CalcMeter = (净重含加重) / 克重,四舍五入保留1位小数,不按0.05/0.5规则进位 //(与检验页 CalcInputLenByWeightKZ 的 InputLen = RoundFloat((净重+加重)/克重,1) 一致) if Trim(NetWeight.Text) = '' then Exit; MNetW := StrToFloatdef(Trim(NetWeight.Text), 0); if FGramW > 0 then CalcMeter.Text := FormatFloat('0.#', RoundFloat(MNetW / FGramW, 1)) else CalcMeter.Text := ''; end; procedure TfrmTatInspEdit.NetWeightChange(Sender: TObject); begin //毛重框已隐藏:净重为唯一录入位,毛重与净重保持一致(毛重无OnChange,赋值不会递归) if FSyncing then Exit; GrossWeight.Text := NetWeight.Text; UpdateCalcMeter(); end; procedure TfrmTatInspEdit.ToolButton2Click(Sender: TObject); begin if Trim(Label2.Caption) = '' then Exit; if SaveData() then begin Application.MessageBox('保存成功!', '提示', 0); Exit; end; end; procedure TfrmTatInspEdit.TBCloseClick(Sender: TObject); begin Close; end; procedure TfrmTatInspEdit.FormShow(Sender: TObject); begin ReadCxGrid(trim(Self.Caption), Tv1, '印染检验管理'); if CIID.Text <> '' then begin GetJYXK(CIID.Text); end; end; end.