unit U_KnitClothDROutEdit; 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, RM_Common, RM_Class, RM_GridReport, RM_System, RM_Dataset, RM_e_Xls, cxLookAndFeels, cxLookAndFeelPainters, dxSkinsCore, dxSkinsDefaultPainters, cxNavigator, dxDateRanges, dxBarBuiltInMenu, U_BaseList; type TfrmKnitClothDROutEdit = class(TfrmBaseList) ADOQueryTemp: TADOQuery; ADOQueryCmd: TADOQuery; DS_MainSel: TDataSource; CDS_MainSel: TClientDataSet; GPM_1: TcxGridPopupMenu; Panel2: TPanel; Label5: TLabel; Label4: TLabel; Label9: TLabel; edtScan: TEdit; CRTime: TDateTimePicker; ToCoName: TEdit; Button2: TButton; cxStyleRepository1: TcxStyleRepository; cxStyle1: TcxStyle; Label12: TLabel; CDS_Main: TClientDataSet; CRType: TEdit; Button1: TButton; RMXLSExport1: TRMXLSExport; RMDBMX: TRMDBDataSet; RM1: TRMGridReport; CDS_JuanPRT: TClientDataSet; Label10: TLabel; edtIsSMTH: TEdit; btn1: TButton; ds1: TClientDataSet; ds2: TDataSource; Panel1: TPanel; cxGrid3: TcxGrid; Tv3: TcxGridDBTableView; VC_MJXH: TcxGridDBColumn; v3Column2: TcxGridDBColumn; cxGridLevel1: TcxGridLevel; cxGrid1: TcxGrid; TV4: TcxGridDBTableView; cCXCOLOR: TcxGridDBColumn; VC_SQQTY: TcxGridDBColumn; cCXFHPS: TcxGridDBColumn; cxGridLevel2: TcxGridLevel; TV4Column1: TcxGridDBColumn; Tv3Column1: TcxGridDBColumn; TV4Column2: TcxGridDBColumn; TV4Column3: TcxGridDBColumn; OutNo: TEdit; GPM_2: TcxGridPopupMenu; Tv3Column4: TcxGridDBColumn; TV4Column4: TcxGridDBColumn; Tv3Column2: TcxGridDBColumn; Tv3Column3: TcxGridDBColumn; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure FormShow(Sender: TObject); procedure edtScanKeyPress(Sender: TObject; var Key: Char); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure edtIsSMTHClick(Sender: TObject); procedure btn1Click(Sender: TObject); procedure TV4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } FCKNO, FSMStr, JXFlag, CZZT, fcuowu: string; procedure InitCKGrid(); procedure InitSQGrid(); procedure PlayWav(MWav: string); function JudgeSQD(): Boolean; function SaveCKJTM(MStkIds: string): Boolean;//保存出库 procedure SaveCKJTMCX(); //撤销出库 public { Public declarations } end; var frmKnitClothDROutEdit: TfrmKnitClothDROutEdit; implementation uses U_DataLink, U_RTFun, MMSystem, U_KnitDRSel; procedure TfrmKnitClothDROutEdit.PlayWav(MWav: string); begin if FileExists(PChar(ExtractFilePath(Application.ExeName) + 'wav\' + MWav + '.wav')) then PlaySound(PChar(ExtractFilePath(Application.ExeName) + 'wav\' + MWav + '.wav'), 0, SND_ASYNC); end; procedure TfrmKnitClothDROutEdit.SaveCKJTMCX(); begin try if Trim(OutNo.Text) = '' then raise Exception.Create('出库单号不能为空!'); if CDS_MainSel.IsEmpty then raise Exception.Create('无可撤销的数据!'); try ADOQueryCmd.Connection.BeginTrans; with ADOQueryCmd do begin Close; Sql.Clear; sql.Add('insert into Finance_Need_Up(UType,UDataId) values(''贸易成品出库'',' + quotedstr(OutNo.Text) + ') '); Sql.Add('exec P_Knit_Cloth_ReOut '); Sql.Add(' @StkIds=' + quotedstr(trim(FSMStr))); Sql.Add(',@IOIDS=' + quotedstr(trim(''))); Open; end; if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then begin raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString))); end; ADOQueryCmd.Connection.CommitTrans; PlayWav('正确'); except ADOQueryCmd.Connection.RollbackTrans; raise Exception.Create(PChar(Exception(ExceptObject).Message)); end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('exec P_Knit_Cloth_DR @OutNo=' + Quotedstr(Trim(OutNo.Text))); Open; end; if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then begin raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString))); end; except application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0); // PlayWav('发货错误'); end; end; procedure TfrmKnitClothDROutEdit.TV4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited; InitCKGrid(); end; function TfrmKnitClothDROutEdit.SaveCKJTM(MStkIds: string): Boolean; begin try if Trim(OutNo.Text) = '' then begin PlayWav('出库单号不能为空'); raise Exception.Create('出库单号不能为空!'); end; with ADOQueryTemp do begin Close; sql.Clear; sql.Add(' select * from Knit_Plan_Card '); sql.Add(' where PCID=''' + Trim(MStkIds) + ''''); Open; end; if ADOQueryTemp.IsEmpty then begin edtScan.text := ''; PlayWav('布票号不存在'); raise Exception.Create('布票号不存在'); end; if Trim(ADOQueryTemp.fieldbyname('status').AsString) = '-1' then begin edtScan.text := ''; PlayWav('布票已删除'); raise Exception.Create('布票已删除'); end; with ADOQueryTemp do begin Close; sql.Clear; sql.Add(' select A.*,B.* from Knit_Cloth_Inspect B inner join Knit_Plan_Sub A on A.SubID =B.SubID '); sql.Add(' where B.CIID=''' + Trim(MStkIds) + ''''); // showmessage(sql.text); Open; end; if ADOQueryTemp.IsEmpty then begin edtScan.text := ''; PlayWav('未检验'); raise Exception.Create('未检验'); end; if Trim(ADOQueryTemp.fieldbyname('CIIOFlag').AsString) = '未入库' then begin edtScan.text := ''; PlayWav('未入库'); raise Exception.Create('未入库'); end; if Trim(ADOQueryTemp.fieldbyname('CIIOFlag').AsString) = '已出库' then begin edtScan.text := ''; PlayWav('已出库'); raise Exception.Create('已出库'); end; with ADOQueryTemp do begin Close; sql.Clear; sql.Add(' select * from Knit_Cloth_DR_Sub A INNER JOIN Knit_Cloth_Stock B on A.C_Code = B.C_Code and A.QtyUnit=B.LenUnit '); sql.Add(' where B.StkExists=1 and B.CIID=''' + Trim(MStkIds) + ''''); sql.Add(' and A.DRMID=''' + Trim(OutNo.Text) + ''''); // showmessage(sql.text); Open; end; if ADOQueryTemp.IsEmpty then begin edtScan.text := ''; PlayWav('产品不一致'); raise Exception.Create('产品不一致'); end; if ADOQueryTemp.fieldbyname('DlyPiece').asfloat >= ADOQueryTemp.fieldbyname('Piece').asfloat then begin edtScan.text := ''; PlayWav('超过发货上限'); raise Exception.Create('超过发货上限'); end; try ADOQueryCmd.Connection.BeginTrans; with ADOQueryCmd do begin Close; Sql.Clear; sql.Add('insert into Finance_Need_Up(UType,UDataId) values(''坯布扫描出库'',' + quotedstr(OutNo.Text) + ') '); Sql.Add('exec P_Knit_Cloth_Out '); Sql.Add(' @StkIds=' + quotedstr(trim(MStkIds))); Sql.Add(',@IOTime=' + Quotedstr(FormatDateTime('yyyy-MM-dd', CRTime.DateTime))); Sql.Add(',@IOType=' + Quotedstr(crtype.Text)); Sql.Add(',@IONO=' + Quotedstr(OutNo.Text)); Sql.Add(',@FillID=' + Quotedstr(DCode)); Sql.Add(',@Filler=' + Quotedstr(DName)); Open; end; if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then begin edtScan.text := ''; raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString))); end; ADOQueryCmd.Connection.CommitTrans; except ADOQueryCmd.Connection.RollbackTrans; raise Exception.Create(PChar(Exception(ExceptObject).Message)); end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('exec P_Knit_Cloth_DR @OutNos=' + Quotedstr(Trim(OutNo.Text))); open; end; if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then begin raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString))); end; PlayWav('正确'); Result := True; except Result := False; application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0); // PlayWav('发货错误'); end; end; {$R *.dfm} function TfrmKnitClothDROutEdit.JudgeSQD(): Boolean; begin Result := false; try with ADOQueryTemp do begin Close; sql.Clear; sql.Add('select * from Knit_Cloth_DR_Main A inner join Knit_Cloth_DR_Sub B on A.DRMID=B.DRMID where A.DRMID=''' + Trim(FSMStr) + ''''); Open; end; if ADOQueryTemp.IsEmpty then raise Exception.Create('申请单不存在暂停发货!'); if Trim(OutNo.Text) <> '' then begin FCKNO := Trim(OutNo.Text); end; OutNo.Text := Trim(FSMStr); if FSMStr <> FCKNO then begin InitCKGrid(); InitSQGrid(); end; Result := True; except Result := false; application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0); // PlaySound('未扫描申请单暂停发货.wav', 0, SND_FILENAME or SND_ASYNC); end; end; procedure TfrmKnitClothDROutEdit.FormClose(Sender: TObject; var Action: TCloseAction); begin inherited; Action := caFree; end; procedure TfrmKnitClothDROutEdit.FormDestroy(Sender: TObject); begin inherited; frmKnitClothDROutEdit := nil; end; procedure TfrmKnitClothDROutEdit.FormShow(Sender: TObject); begin inherited; edtScan.SetFocus; ReadCxGrid('扫描出库Tv4', Tv4, '发货申请'); ReadCxGrid('扫描出库Tv3', Tv3, '发货申请'); CRTime.DateTime := SGetServerDate(ADOQueryTemp); end; procedure TfrmKnitClothDROutEdit.edtScanKeyPress(Sender: TObject; var Key: Char); var maxno, SMFlag, KYCKFlag, FMainId, ff: string; FFQty: Integer; begin if Key = #13 then begin FSMStr := TRIM(edtScan.Text); if Copy(FSMStr, 1, 2) = 'DM' then begin if not JudgeSQD() then exit; end else begin if Trim(edtIsSMTH.Text) = '' then begin if SaveCKJTM(FSMStr) then begin PlayWav('正确'); end else exit; end else begin SaveCKJTMCX(); end; InitSQGrid(); InitCKGrid(); end; edtScan.Text := ''; end; end; procedure TfrmKnitClothDROutEdit.Button2Click(Sender: TObject); begin WriteCxGrid('扫描出库Tv4', Tv4, '发货申请'); WriteCxGrid('扫描出库Tv3', Tv3, '发货申请'); Close; end; procedure TfrmKnitClothDROutEdit.Button1Click(Sender: TObject); var MKey: Char; begin MKey := #13; try frmKnitDRSel := TfrmKnitDRSel.Create(self); with frmKnitDRSel do begin if ShowModal = 1 then begin edtScan.Text := Trim(Order_Main.fieldbyname('DRMID').AsString); edtScanKeyPress(edtScan, MKey); end; end; finally frmKnitDRSel.Free; end; end; procedure TfrmKnitClothDROutEdit.edtIsSMTHClick(Sender: TObject); begin if Trim(edtIsSMTH.Text) = '' then edtIsSMTH.Text := '√' else edtIsSMTH.Text := ''; end; procedure TfrmKnitClothDROutEdit.btn1Click(Sender: TObject); var MKey: Char; begin MKey := #13; CZZT := '选择库存'; fcuowu := '1'; // try // frmCKProductCPKCListSel := TfrmCKProductCPKCListSel.Create(Application); // with frmCKProductCPKCListSel do // begin //// CustomerNoName.text := trim(Self.KHName.text); // if ShowModal = 1 then // begin // with frmCKProductCPKCListSel.CDS_Main do // begin // First; // while not Eof do // begin // if Fieldbyname('ssel').AsBoolean then // begin // // Self.edtScan.Text := Trim(Fieldbyname('JYID').AsString); // edtScanKeyPress(Self.edtScan, MKey); // if fcuowu = '错误' then // begin // Break; // end; // Sleep(200); // end; // Next; // end; // end; // end; // end; // finally // frmCKProductCPKCListSel.Free; // end; InitCKGrid(); end; procedure TfrmKnitClothDROutEdit.InitSQGrid(); begin if OutNo.Text <> '' then begin with ADOQueryTemp do begin Close; sql.Clear; sql.Add('SELECT * FROM Knit_Cloth_DR_Sub B'); sql.Add('inner join Knit_Cloth_DR_Main A ON A.DRMID=B.DRMID '); sql.Add('WHERE B.DRMID=''' + Trim(OutNo.Text) + ''''); Open; end; SCreateCDS(ADOQueryTemp, DS1); SInitCDSData(ADOQueryTemp, DS1); crtype.Text := Trim(ADOQueryTemp.FieldByName('OutType').AsString); ToCoName.Text := Trim(ADOQueryTemp.FieldByName('ToCoName').AsString); end; end; procedure TfrmKnitClothDROutEdit.InitCKGrid(); begin if OutNo.Text <> '' then begin with ADOQueryTemp do begin Close; sql.Clear; sql.Add(' select * '); sql.Add(' from Knit_Cloth_Stock A inner join Knit_Cloth_IO B on A.STKID=B.StkId '); sql.Add(' where B.IONO=''' + Trim(OutNo.Text) + ''''); sql.Add(' order by Filltime desc '); Open; end; SCreateCDS(ADOQueryTemp, CDS_MainSel); SInitCDSData(ADOQueryTemp, CDS_MainSel); end; end; end.