unit U_LSSQSMCK; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, StdCtrls, ExtCtrls, ADODB, DBClient, cxGridCustomPopupMenu, cxGridPopupMenu, cxGridLevel, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses, cxControls, cxGridCustomView, cxGrid, MovePanel, cxCheckBox, Menus, ComCtrls, BtnEdit, ShellAPI, cxTextEdit, cxLookAndFeels, cxLookAndFeelPainters, cxNavigator; type TfrmLSSQSMCK = class(TForm) ADOQueryTemp: TADOQuery; ADOQueryCmd: TADOQuery; DS_MainSel: TDataSource; CDS_MainSel: TClientDataSet; cxGridPopupMenu4: TcxGridPopupMenu; cxGrid3: TcxGrid; Tv3: TcxGridDBTableView; v3Column1: TcxGridDBColumn; cxGridLevel1: TcxGridLevel; v3Column2: TcxGridDBColumn; Panel2: TPanel; Label4: TLabel; CKOrdNo: TEdit; SMID: TEdit; CRTime: TDateTimePicker; cxStyleRepository1: TcxStyleRepository; cxStyle1: TcxStyle; Label12: TLabel; CDS_Main: TClientDataSet; Label3: TLabel; Edit1: TEdit; cxGrid1: TcxGrid; TV2: TcxGridDBTableView; cxGridDBColumn2: TcxGridDBColumn; cxGridDBColumn3: TcxGridDBColumn; cxGridDBColumn5: TcxGridDBColumn; cxGridDBColumn6: TcxGridDBColumn; cxGridLevel2: TcxGridLevel; V2Column1: TcxGridDBColumn; DS_FHSQ: TDataSource; CDS_FHSQ: TClientDataSet; cxGridPopupMenu1: TcxGridPopupMenu; CRType: TEdit; Label1: TLabel; Label6: TLabel; edtIsSMTH: TEdit; V2Column2: TcxGridDBColumn; V2Column3: TcxGridDBColumn; V2Column4: TcxGridDBColumn; Panel1: TPanel; Button1: TButton; Button3: TButton; Button2: TButton; Label2: TLabel; Label7: TLabel; Button4: TButton; v3Column3: TcxGridDBColumn; TV2Column1: TcxGridDBColumn; cxStyleRepository2: TcxStyleRepository; cxStyle2: TcxStyle; Button5: TButton; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure FormShow(Sender: TObject); procedure SMIDKeyPress(Sender: TObject; var Key: Char); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure TV2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Button3Click(Sender: TObject); procedure edtIsSMTHClick(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private { Private declarations } FSMStr, JXFlag, FSubId: string; FFHPS, FSQPS: integer; procedure InitFHMX(); function CheckCkd(): Boolean; function CheckPB(): Boolean; function JudgeJTMCX(): Boolean; procedure SaveCKDataJTMCX(); procedure SaveCK(); procedure InitFHPS(); public { Public declarations } end; var frmLSSQSMCK: TfrmLSSQSMCK; implementation uses U_DataLink, U_Fun, MMSystem, U_LSFHSQListSel; //var // frmPBKCListSel: TfrmCKProductBCPKCListPB; LS {$R *.dfm} procedure TfrmLSSQSMCK.SaveCKDataJTMCX(); begin try ADOQueryCmd.Connection.BeginTrans; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('Update CK_YT_CR Set CRFlag=''待出库'',CRType=NULL,CRTime=NULL,CRNote=NULL,CKNo=NULL '); sql.Add(' where CK_YT_CR.JYID=' + Quotedstr(Trim(FSMStr))); sql.Add(' and CRFlag=''出库'''); sql.Add(' UPdate CK_YT_KC Set Valid=''Y'' '); sql.Add(' where CK_YT_KC.JYID=' + Quotedstr(Trim(FSMStr))); sql.Add(' and Valid=''N'' '); ExecSQL; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('exec P_FHSQYT_UP_QTY ' + quotedstr(trim(CKOrdNo.Text))); 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('')); sql.Add(',' + quotedstr(trim('加弹丝出库扫描撤销'))); sql.Add(',' + quotedstr('条码:' + trim(FSMStr) + ' 出库单号:' + trim(CKOrdNo.Text))); sql.Add(',' + quotedstr(trim('成功'))); sql.Add(')'); ExecSQL; end; ADOQueryCmd.Connection.CommitTrans; PlaySound('wav\撤销成功.wav', 0, SND_FILENAME or SND_ASYNC); FFHPS := FFHPS - 1; InitFHMX(); except ADOQueryCmd.Connection.RollbackTrans; application.MessageBox('撤销出库失败!', '提示信息', 0); end; end; function TfrmLSSQSMCK.JudgeJTMCX(): Boolean; begin try Result:=False; if Trim(CKOrdNo.Text) = '' then begin JXFlag:=''; PlaySound('wav\出库单号不能为空.wav', 0, SND_FILENAME or SND_ASYNC); Application.MessageBox('出库单号不能为空','出库单号不能为空',0); Exit; end; if CDS_MainSel.IsEmpty then begin JXFlag:=''; PlaySound('wav\无可撤销的数据.wav', 0, SND_FILENAME or SND_ASYNC); Application.MessageBox('无可撤销的数据','出库单号不能为空',0); Exit; end; with ADOQueryTemp do begin Close; sql.Clear; sql.Add(' select A.SQPiQty,A.FHPiQty,A.FHSubId,B.* from SQ_FHYT_Sub A'); sql.Add(' inner join CK_YT_CR B on A.FactoryName=B.FactoryName'); sql.Add(' and A.Y_CodeName=B.Y_CodeName and A.Y_Spec=B.Y_Spec'); sql.Add(' and A.BatchNo=B.BatchNo and A.ZGColor=B.ZGColor'); sql.Add(' and A.Y_CodeNameCP=B.Y_CodeNameCP and A.Y_Type=B.Y_Type'); sql.Add(' where A.FHMainID=''' + Trim(CKOrdNo.Text) + ''''); sql.Add(' and B.CRFlag=''出库'' and B.JYID=''' + Trim(FSMStr) + ''''); Open; end; if ADOQueryTemp.IsEmpty then begin JXFlag:=''; PlaySound('wav\无可撤销的数据.wav', 0, SND_FILENAME or SND_ASYNC); Application.MessageBox('无可撤销的数据','出库单号不能为空',0); Exit; end else begin FSubId := ADOQueryTemp.fieldbyname('FHSubId').AsString; FSQPS := ADOQueryTemp.fieldbyname('SQPiQty').AsInteger; FFHPS := ADOQueryTemp.fieldbyname('FHPiQty').AsInteger; end; Result := True; except Result := false; end; end; procedure TfrmLSSQSMCK.InitFHPS(); begin with CDS_FHSQ do begin Locate('FHSubId', FSubId, []); Edit; FieldByName('FHPiQty').Value := FFHPS; Post; Edit1.Text := IntToStr(FFHPS) end; end; procedure TfrmLSSQSMCK.SaveCK(); var maxno, SMFlag, KYCKFlag: string; FFQty: Integer; begin try ADOQueryCmd.Connection.BeginTrans; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('UPDATE CK_YT_CR Set '); sql.add(' CRTime=getdate() '); sql.add(',CRType=' + quotedstr(Trim(CRType.Text))); sql.add(',CRFlag=''出库'' '); sql.add(',CKNo=' + Quotedstr(CKOrdNo.Text)); sql.Add(' where CK_YT_CR.JYID=' + Quotedstr(Trim(FSMStr))); sql.Add('and CK_YT_CR.CRFlag=''待出库'' '); ExecSQL; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('UPDATE CK_YT_KC Set '); sql.add(' Valid=''N'' '); sql.Add(' where CK_YT_KC.JYID=' + Quotedstr(Trim(FSMStr))); ExecSQL; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('exec P_FHSQYT_UP_QTY ' + quotedstr(trim(CKOrdNo.Text))); ExecSQL; end; ADOQueryCmd.Connection.CommitTrans; FFHPS := FFHPS + 1; InitFHMX(); PlaySound('wav\正确.wav', 0, SND_FILENAME or SND_ASYNC); Exit; except ADOQueryCmd.Connection.RollbackTrans; PlaySound('wav\出库失败.wav', 0, SND_FILENAME or SND_ASYNC); application.MessageBox('出库失败!', '提示信息', 0); end; end; function TfrmLSSQSMCK.CheckCkd(): Boolean; begin try Result:=False; JXFlag:='JX'; if CKOrdNo.Text = Trim(FSMStr) then begin PlaySound('wav\申请单已存在.wav', 0, SND_FILENAME or SND_ASYNC); Exit; end; with ADOQueryTemp do begin Close; sql.Clear; sql.Add('select * from SQ_FHYT_Main A inner join SQ_FHYT_Sub B on A.FHMainId=B.FHMainId where A.FHMainId=''' + Trim(FSMStr) + ''''); Open; end; if ADOQueryTemp.IsEmpty then begin JXFlag:=''; PlaySound('wav\申请单不存在暂停发货.wav', 0, SND_FILENAME or SND_ASYNC); Application.MessageBox('申请单不存在暂停发货','提示',0); Exit; end else begin SCreateCDS20(ADOQueryTemp, CDS_FHSQ); SInitCDSData20(ADOQueryTemp, CDS_FHSQ); CKOrdNo.Text := Trim(FSMStr); CRType.Text := Trim(CDS_FHSQ.FieldByName('SQType').AsString); InitFHMX(); end; Result := True; except Result := false; end; end; function TfrmLSSQSMCK.CheckPB(): Boolean; begin try JXFlag:='JX'; if Trim(CKOrdNo.Text) = '' then begin JXFlag:=''; PlaySound('wav\未选单不能扫描出库.wav', 0, SND_FILENAME or SND_ASYNC); Application.MessageBox('未选单不能扫描出库','提示',0); Exit; end; with ADOQueryTemp do begin Close; sql.Clear; sql.Add('select * from SQ_FHYT_Main where FHMainID='''+Trim(CKOrdNo.Text)+''''); sql.Add(' and EndFlag=1 '); Open; end; if ADOQueryTemp.IsEmpty=False then begin JXFlag:=''; PlaySound('wav\已结束暂停发货.wav', 0, SND_FILENAME or SND_ASYNC); Application.MessageBox('已结束,暂停发货','提示',0); Exit; end; with ADOQueryTemp do begin Close; sql.Clear; sql.Add(' select A.SQPiQty,A.FHPiQty,A.FHSubid,B.* from SQ_FHYT_Sub A'); sql.Add(' inner join JY_YT B on A.FactoryName=B.FactoryName'); sql.Add(' and A.Y_CodeName=B.Y_CodeName and A.Y_Spec=B.Y_Spec'); sql.Add(' and A.BatchNo=B.BatchNo and A.ZGColor=B.ZGColor'); sql.Add(' and A.Y_CodeNameCP=B.Y_CodeNameCP and A.Y_Type=B.Y_Type'); sql.Add(' where A.FHMainID=''' + Trim(CKOrdNo.Text) + ''''); sql.Add(' and B.JYID=''' + Trim(FSMStr) + ''''); Open; end; if ADOQueryTemp.IsEmpty then begin JXFlag:=''; PlaySound('wav\条码错误暂停发货.wav', 0, SND_FILENAME or SND_ASYNC); Application.MessageBox('条码错误暂停发货','提示',0); Exit; end else begin FSubId := ADOQueryTemp.fieldbyname('FHSubId').AsString; FSQPS := ADOQueryTemp.fieldbyname('SQPiQty').AsInteger; FFHPS := ADOQueryTemp.fieldbyname('FHPiQty').AsInteger; if FSQPS <= FFHPS then begin JXFlag:=''; PlaySound('wav\超出发货上限暂停发货.wav', 0, SND_FILENAME or SND_ASYNC); Application.MessageBox('超出发货上限暂停发货','提示',0); Exit; end; end; with ADOQueryTemp do begin Close; sql.Clear; sql.Add(' select A.SQPiQty,A.FHPiQty,A.FHSubid,B.* from SQ_FHYT_Sub A'); sql.Add(' inner join JY_YT B on A.FactoryName=B.FactoryName'); sql.Add(' and A.Y_CodeName=B.Y_CodeName and A.Y_Spec=B.Y_Spec'); sql.Add(' and A.BatchNo=B.BatchNo and A.ZGColor=B.ZGColor'); sql.Add(' and A.Y_CodeNameCP=B.Y_CodeNameCP and A.Y_Type=B.Y_Type'); sql.Add(' where A.FHMainID=''' + Trim(CKOrdNo.Text) + ''''); sql.Add(' and B.JYID=''' + Trim(FSMStr) + ''''); sql.Add(' and ((B.JYNW>=20 and B.JYNW<=45 and B.ZGKS=6) or B.ChuLiFlag=1)'); Open; end; if ADOQueryTemp.IsEmpty then begin JXFlag:=''; PlaySound('wav\数据异常暂停发货.wav', 0, SND_FILENAME or SND_ASYNC); Application.MessageBox('数据异常暂停发货','提示',0); Exit; end; with ADOQueryTemp do begin Close; sql.Clear; sql.Add(' select C.CKNo from SQ_FHYT_Sub A'); sql.Add(' inner join JY_YT B on A.FactoryName=B.FactoryName'); sql.Add(' and A.Y_CodeName=B.Y_CodeName and A.Y_Spec=B.Y_Spec'); sql.Add(' and A.BatchNo=B.BatchNo and A.ZGColor=B.ZGColor'); sql.Add(' and A.Y_CodeNameCP=B.Y_CodeNameCP and A.Y_Type=B.Y_Type'); sql.Add(' inner join CK_YT_CR C on B.JYID=C.JYID and C.CRFlag=''出库'' '); sql.Add(' where B.JYID=''' + Trim(FSMStr) + ''''); sql.Add(' and A.FHMainId=''' + Trim(CKOrdNo.Text) + ''''); Open; end; if ADOQueryTemp.IsEmpty = False then begin if Trim(ADOQueryTemp.fieldbyname('CKNo').AsString) = Trim(CKOrdNo.Text) then begin JXFlag:=''; PlaySound('wav\已扫描.wav', 0, SND_FILENAME or SND_ASYNC); Exit; end else begin JXFlag:=''; PlaySound('wav\已出库暂停发货.wav', 0, SND_FILENAME or SND_ASYNC); Application.MessageBox('已出库暂停发货','提示',0); Exit; end; end; Result := True; except Result := false; end; end; procedure TfrmLSSQSMCK.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; procedure TfrmLSSQSMCK.FormDestroy(Sender: TObject); begin frmLSSQSMCK := nil; end; procedure TfrmLSSQSMCK.FormShow(Sender: TObject); begin SMID.SetFocus; //ReadCxGrid('扫描出库', Tv3, '坯布仓库'); CRTime.DateTime := SGetServerDate(ADOQueryTemp); end; procedure TfrmLSSQSMCK.InitFHMX(); var MFHPS: integer; begin if CDS_FHSQ.IsEmpty then Exit; with ADOQueryTemp do begin Close; sql.Clear; sql.Add('select A.* '); sql.Add(' from CK_YT_CR A'); sql.Add(' where A.CKNO=' + quotedstr(Trim(CKOrdNo.Text))); Open; end; SCreateCDS20(ADOQueryTemp, CDS_MainSel); SInitCDSData20(ADOQueryTemp, CDS_MainSel); if CDS_MainSel.IsEmpty = False then MFHPS := Tv3.DataController.Summary.FooterSummaryValues[0] else MFHPS := 0; Edit1.Text := IntToStr(MFHPS); with CDS_FHSQ do begin Edit; FieldByName('FHPiQty').Value := MFHPS; end; end; procedure TfrmLSSQSMCK.SMIDKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin FSMStr := Trim(SMID.Text); SMID.Text := ''; if edtIsSMTH.Text = '' then begin if Copy(FSMStr, 1, 2) = 'FC' then begin CheckCkd(); if JXFlag<>'JX' then begin Exit; end; end else begin if CheckPB() then begin if JXFlag<>'JX' then Exit; SaveCK(); InitFHPS(); end; end; end else begin if JudgeJTMCX() then //检测卷条码 begin SaveCKDataJTMCX(); InitFHPS(); end; end; end; end; procedure TfrmLSSQSMCK.Button2Click(Sender: TObject); begin Close; WriteCxGrid('扫描出库', Tv3, '坯布仓库'); end; procedure TfrmLSSQSMCK.Button1Click(Sender: TObject); var MKey: Char; begin MKey := #13; try frmLSFHSQListSel := TfrmLSFHSQListSel.Create(Application); with frmLSFHSQListSel do begin FSQType:='销售出库'; if ShowModal = 1 then begin SMID.Text := Trim(Order_Main.fieldbyname('FHMainId').AsString); SMIDKeyPress(SMID, MKey); end; end; finally frmLSFHSQListSel.Free; end; end; procedure TfrmLSSQSMCK.TV2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin InitFHMX(); end; procedure TfrmLSSQSMCK.Button3Click(Sender: TObject); var MKey: Char; begin // MKey := #13; // if TRIM(SELF.CKOrdNo.Text) = '' then // EXIT; // try // frmPBKCListSel := TfrmCKProductBCPKCListPB.Create(self); // with frmPBKCListSel do // begin // // if ShowModal = 1 then // begin // while frmPBKCListSel.CDS_Main.Locate('SSel', true, []) do // begin // self.SMID.Text := Trim(frmPBKCListSel.CDS_Main.fieldbyname('MJID').AsString); // self.SMIDKeyPress(SMID, MKey); // frmPBKCListSel.CDS_Main.Delete; // sleep(500); // end; // end; // end; // finally // frmPBKCListSel.Free; // end; end; procedure TfrmLSSQSMCK.edtIsSMTHClick(Sender: TObject); begin SMID.SetFocus; if edtIsSMTH.Text = '√' then begin edtIsSMTH.Text := ''; end else begin if Application.MessageBox('确定要扫描退货吗?', '提示', 32 + 4) = IDYES then edtIsSMTH.Text := '√'; end; end; procedure TfrmLSSQSMCK.Button4Click(Sender: TObject); var MKey: Char; begin MKey := #13; try frmLSFHSQListSel := TfrmLSFHSQListSel.Create(Application); with frmLSFHSQListSel do begin FSQType:='本厂出库'; if ShowModal = 1 then begin SMID.Text := Trim(Order_Main.fieldbyname('FHMainId').AsString); SMIDKeyPress(SMID, MKey); end; end; finally frmLSFHSQListSel.Free; end; end; procedure TfrmLSSQSMCK.Button5Click(Sender: TObject); var MKey: Char; begin MKey := #13; try frmLSFHSQListSel := TfrmLSFHSQListSel.Create(Application); with frmLSFHSQListSel do begin FSQType:='损耗出库'; if ShowModal = 1 then begin SMID.Text := Trim(Order_Main.fieldbyname('FHMainId').AsString); SMIDKeyPress(SMID, MKey); end; end; finally frmLSFHSQListSel.Free; end; end; end.