unit U_CPSQSMCK; 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, dxSkinsCore, dxSkinBlack, dxSkinBlue, dxSkinBlueprint, dxSkinCaramel, dxSkinCoffee, dxSkinDarkRoom, dxSkinDarkSide, dxSkinDevExpressDarkStyle, dxSkinDevExpressStyle, dxSkinFoggy, dxSkinGlassOceans, dxSkinHighContrast, dxSkiniMaginary, dxSkinLilian, dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin, dxSkinMetropolis, dxSkinMetropolisDark, dxSkinMoneyTwins, dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinOffice2010Black, dxSkinOffice2010Blue, dxSkinOffice2010Silver, dxSkinOffice2013DarkGray, dxSkinOffice2013LightGray, dxSkinOffice2013White, dxSkinPumpkin, dxSkinSeven, dxSkinSevenClassic, dxSkinSharp, dxSkinSharpPlus, dxSkinSilver, dxSkinSpringTime, dxSkinStardust, dxSkinSummer2008, dxSkinTheAsphaltWorld, dxSkinsDefaultPainters, dxSkinValentine, dxSkinVS2010, dxSkinWhiteprint, dxSkinXmas2008Blue, dxSkinscxPCPainter; type TfrmCPSQSMCK = class(TForm) ADOQueryTemp: TADOQuery; ADOQueryCmd: TADOQuery; DS_MainSel: TDataSource; CDS_MainSel: TClientDataSet; cxGridPopupMenu4: TcxGridPopupMenu; cxGrid3: TcxGrid; Tv3: TcxGridDBTableView; cxGridDBColumn4: TcxGridDBColumn; v3Column1: TcxGridDBColumn; cxGridLevel1: TcxGridLevel; v3Column2: TcxGridDBColumn; Panel2: TPanel; Label5: TLabel; Label4: TLabel; CKOrdNo: TEdit; SMID: TEdit; CRTime: TDateTimePicker; Button2: TButton; cxStyleRepository1: TcxStyleRepository; cxStyle1: TcxStyle; Label12: TLabel; CDS_Main: TClientDataSet; Button1: TButton; Label2: TLabel; 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; Button3: TButton; CRType: TEdit; Label1: TLabel; Label6: TLabel; edtIsSMTH: TEdit; 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); 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 frmCPSQSMCK: TfrmCPSQSMCK; implementation uses U_DataLink, U_Fun, MMSystem, U_CPFHSQListSel; //, U_CKProductBCPKCList //var // frmPBKCListSel: TfrmCKProductBCPKCListPB; {$R *.dfm} procedure TfrmCPSQSMCK.SaveCKDataJTMCX(); begin try ADOQueryCmd.Connection.BeginTrans; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('Update FinishedCloth_CR Set CRFlag=''待出库'',CRType=NULL,CRTime=NULL,CRNote=NULL,CKOrdNo=NULL '); sql.Add(' where FinishedCloth_CR.MJID=' + Quotedstr(Trim(FSMStr))); sql.Add(' and CRFlag=''出库'''); sql.Add(' UPdate FinishedCloth_KC Set KCValid=''Y'' '); sql.Add(' where FinishedCloth_KC.MJID=' + Quotedstr(Trim(FSMStr))); sql.Add(' and KCValid=''N'' '); ExecSQL; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('exec P_FinishedCloth_FHSQ ' + 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; FFHPS := FFHPS - 1; except ADOQueryCmd.Connection.RollbackTrans; application.MessageBox('撤销出库失败!', '提示信息', 0); end; end; function TfrmCPSQSMCK.JudgeJTMCX(): Boolean; begin try if Trim(CKOrdNo.Text) = '' then raise Exception.Create('出库单号不能为空'); if CDS_MainSel.IsEmpty then raise Exception.Create('无可撤销的数据'); with ADOQueryTemp do begin Close; sql.Clear; sql.Add(' select A.SQPS,A.FHPS,B.* from FHSQ_Sub A'); sql.Add(' inner join FinishedCloth_CR B on A.MainId=B.MainId'); sql.Add(' where A.FSID=''' + Trim(CKOrdNo.Text) + ''''); sql.Add(' and B.CRFlag=''出库'' and B.MJID=''' + Trim(FSMStr) + ''''); Open; end; if ADOQueryTemp.IsEmpty then begin raise Exception.Create('无可撤销的数据'); end else begin FSubId := ADOQueryTemp.fieldbyname('SubId').AsString; FSQPS := ADOQueryTemp.fieldbyname('SQPS').AsInteger; FFHPS := ADOQueryTemp.fieldbyname('FHPS').AsInteger; end; Result := True; except Result := false; PlaySound(PChar('wav\' + Exception(ExceptObject).Message + '.wav'), 0, SND_FILENAME or SND_ASYNC); end; end; procedure TfrmCPSQSMCK.InitFHPS(); begin with CDS_FHSQ do begin Locate('SubId', FSubId, []); Edit; FieldByName('FHPS').Value := FFHPS; Post; Edit1.Text := IntToStr(FFHPS) end; end; procedure TfrmCPSQSMCK.SaveCK(); var maxno, SMFlag, KYCKFlag: string; FFQty: Integer; begin try ADOQueryCmd.Connection.BeginTrans; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('UPDATE FinishedCloth_CR Set '); sql.add(' CRTime=getdate() '); sql.add(',CRType=' + quotedstr(Trim(CRType.Text))); sql.add(',CRFlag=''出库'' '); sql.add(',CKOrdNo=' + Quotedstr(CKOrdNo.Text)); sql.Add(' where FinishedCloth_CR.MJID=' + Quotedstr(Trim(FSMStr))); sql.Add('and FinishedCloth_CR.CRFlag=''待出库'' '); ExecSQL; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('UPDATE FinishedCloth_KC Set '); sql.add(' KCValid=''N'' '); sql.Add(' where FinishedCloth_KC.MJID=' + Quotedstr(Trim(FSMStr))); ExecSQL; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('exec P_FinishedCloth_FHSQ ' + quotedstr(trim(CKOrdNo.Text))); ExecSQL; end; ADOQueryCmd.Connection.CommitTrans; FFHPS := FFHPS + 1; PlaySound('wav\正确.wav', 0, SND_FILENAME or SND_ASYNC); Exit; except ADOQueryCmd.Connection.RollbackTrans; application.MessageBox('出库失败!', '提示信息', 0); PlaySound('wav\出库失败.wav', 0, SND_FILENAME or SND_ASYNC); end; end; function TfrmCPSQSMCK.CheckCkd(): Boolean; begin try if CKOrdNo.Text = Trim(FSMStr) then raise Exception.Create('重复扫描申请单!.wav'); with ADOQueryTemp do begin Close; sql.Clear; sql.Add('select * from FHSQ_Main A inner join FHSQ_Sub B on A.FSId=B.FSId where A.FSID=''' + Trim(FSMStr) + ''''); Open; end; if ADOQueryTemp.IsEmpty then begin raise Exception.Create('申请单不存在暂停发货.wav'); end else begin SCreateCDS20(ADOQueryTemp, CDS_FHSQ); SInitCDSData20(ADOQueryTemp, CDS_FHSQ); CKOrdNo.Text := Trim(FSMStr); CRType.Text := Trim(CDS_FHSQ.FieldByName('CRType').AsString); InitFHMX(); end; Result := True; except Result := false; // application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0); PlaySound(PChar('wav\' + Exception(ExceptObject).Message + '.wav'), 0, SND_FILENAME or SND_ASYNC); end; end; function TfrmCPSQSMCK.CheckPB(): Boolean; begin try if Trim(CKOrdNo.Text) = '' then raise Exception.Create('未扫描申请单暂停发货'); with ADOQueryTemp do begin Close; sql.Clear; sql.Add(' select A.SQPS,A.FHPS,B.* from FHSQ_Sub A'); sql.Add(' inner join FinishedCloth_Inspect B on A.MainId=B.MainId'); sql.Add(' where A.FSID=''' + Trim(CKOrdNo.Text) + ''''); sql.Add(' and B.MJID=''' + Trim(FSMStr) + ''''); Open; end; if ADOQueryTemp.IsEmpty then begin raise Exception.Create('条码错误暂停发货'); end else begin FSubId := ADOQueryTemp.fieldbyname('SubId').AsString; FSQPS := ADOQueryTemp.fieldbyname('SQPS').AsInteger; FFHPS := ADOQueryTemp.fieldbyname('FHPS').AsInteger; if FSQPS <= FFHPS then begin raise Exception.Create('超出发货上限暂停发货'); end; end; with ADOQueryTemp do begin Close; sql.Clear; sql.Add(' select C.CKOrdNo from FHSQ_Sub A'); sql.Add(' inner join FinishedCloth_Inspect B on A.MainId=B.MainId'); sql.Add(' inner join FinishedCloth_CR C on B.MJID=C.MJID and C.CRFlag=''出库'' '); sql.Add(' where B.MJID=''' + Trim(FSMStr) + ''''); sql.Add(' and A.FSID=''' + Trim(CKOrdNo.Text) + ''''); Open; end; if ADOQueryTemp.IsEmpty = False then begin if Trim(ADOQueryTemp.fieldbyname('CKOrdNo').AsString) = Trim(CKOrdNo.Text) then begin raise Exception.Create('已扫描'); end else begin raise Exception.Create('已出库暂停发货'); end; end; with ADOQueryTemp do begin Close; sql.Clear; sql.Add(' select C.CKOrdNo from FHSQ_Sub A'); sql.Add(' inner join FinishedCloth_Inspect B on A.MainId=B.MainId'); sql.Add(' inner join FinishedCloth_CR C on B.MJID=C.MJID and C.CRFlag=''入库'' '); sql.Add(' where B.MJID=''' + Trim(FSMStr) + ''''); Open; end; if ADOQueryTemp.IsEmpty then begin raise Exception.Create('未入库暂停发货'); end; Result := True; except Result := false; // application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0); PlaySound(PChar('wav\' + Exception(ExceptObject).Message + '.wav'), 0, SND_FILENAME or SND_ASYNC); end; end; procedure TfrmCPSQSMCK.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; procedure TfrmCPSQSMCK.FormDestroy(Sender: TObject); begin frmCPSQSMCK := nil; end; procedure TfrmCPSQSMCK.FormShow(Sender: TObject); begin SMID.SetFocus; ReadCxGrid('扫描出库', Tv3, '坯布仓库'); CRTime.DateTime := SGetServerDate(ADOQueryTemp); end; procedure TfrmCPSQSMCK.InitFHMX(); var MFHPS: integer; begin with ADOQueryTemp do begin Close; sql.Clear; sql.Add('select B.* '); sql.Add(' from FinishedCloth_CR A'); sql.Add(' inner join FinishedCloth_Inspect B on A.MJID=B.MJID'); sql.Add(' where A.CKOrdNO=' + quotedstr(Trim(CKOrdNo.Text))); sql.Add(' and A.MainId=' + quotedstr(Trim(CDS_FHSQ.FieldByName('MainId').AsString))); 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('FHPS').Value := MFHPS; end; end; procedure TfrmCPSQSMCK.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() end else begin if CheckPB() then begin SaveCK(); InitFHPS(); end; end; end else begin if JudgeJTMCX() then //检测卷条码 SaveCKDataJTMCX(); InitFHPS(); end; end; end; procedure TfrmCPSQSMCK.Button2Click(Sender: TObject); begin Close; WriteCxGrid('扫描出库', Tv3, '坯布仓库'); end; procedure TfrmCPSQSMCK.Button1Click(Sender: TObject); var MKey: Char; begin MKey := #13; try frmFHSQListSel := TfrmFHSQListSel.Create(self); with frmFHSQListSel do begin if ShowModal = 1 then begin SMID.Text := Trim(Order_Main.fieldbyname('FSID').AsString); SMIDKeyPress(SMID, MKey); end; end; finally frmFHSQListSel.Free; end; end; procedure TfrmCPSQSMCK.TV2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin InitFHMX(); end; procedure TfrmCPSQSMCK.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 TfrmCPSQSMCK.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; end.