unit frmReklamaceMat; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.Buttons, FireDAC.Comp.Client, Vcl.StdCtrls, ddPlugin_TLB, Vcl.Menus, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Comp.DataSet, Vcl.Grids, Vcl.DBGrids, JvExDBGrids, JvDBGrid; const sklady: TArray = ['20000101','20000101001','20000104','20000104001','20000106','20000106001','200','20000001001','20000107','20000107001']; nazvy: TArray = ['VDST','VDST REKL.','Pikl','Pikl REKL.','PCO','PCO REKL.','LOVATO V','DEMONTÁŽ','CHD','CHD REKL.']; type TformReklamaceMat = class(TForm) tblMat: TFDMemTable; tblCil: TFDMemTable; dsMat: TDataSource; dsCil: TDataSource; mIdSS: TIntegerField; mNazev: TStringField; mMnoz: TFloatField; mSZ: TStringField; mRegCis: TStringField; cIdSSOld: TIntegerField; cIdSSNew: TIntegerField; cSZ: TStringField; cRegCis: TStringField; cNazev: TStringField; cMnoz: TFloatField; cIdSklad: TStringField; cSklad: TStringField; cMnozPresun: TFloatField; btnOK: TButton; btnStorno: TButton; pmCil: TPopupMenu; pmDelCil: TMenuItem; Label1: TLabel; Label2: TLabel; tblCilcMnozIT: TFloatField; gridMat: TJvDBGrid; gridCil: TJvDBGrid; procedure FormShow(Sender: TObject); procedure btnStornoClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure pmDelCilClick(Sender: TObject); procedure btnOKClick(Sender: TObject); procedure gridMatDblClick(Sender: TObject); procedure gridCilDblClick(Sender: TObject); private procedure ImportStavuSkladu; safecall; public Helios: IHelios; end; var formDemontazMat: TformReklamaceMat; oVar1: OleVariant; vydejky: array[0..7] of integer; implementation uses System.StrUtils, helUtils; {$R *.dfm} procedure TformReklamaceMat.ImportStavuSkladu; var lSQL: string; begin lSQL:= 'SELECT ss.Id,kz.SkupZbo,kz.RegCis,kz.Nazev1,ss.Mnozstvi FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ; lSQL:= lSQL + ' kz ON (kz.Id=ss.IdKmenZbozi) WHERE ss.Mnozstvi>0 AND ss.IDSklad=N' + QuotedStr(Helios.Sklad); lSQL:= lSQL + ' AND kz.Blokovano=0 AND kz.SkupZbo=N' + QuotedStr('MAT'); lSQL:= lSQL + ' ORDER BY kz.SkupZbo,kz.RegCis'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin if not(tblMat.Active) then tblMat.Open; tblMat.DisableControls; First; while not(EOF) do begin tblMat.Append; tblMat.FieldByName('mIdSS').AsString:= VarToStr(FieldValues(0)); tblMat.FieldByName('mSZ').AsString:= VarToStr(FieldValues(1)); tblMat.FieldByName('mRegCis').AsString:= VarToStr(FieldValues(2)); tblMat.FieldByName('mNazev').AsString:= VarToStr(FieldValues(3)); tblMat.FieldByName('mMnoz').AsFloat:= StrToFloat(VarToStr(FieldValues(4))); tblMat.Post; Next; end; tblMat.First; tblMat.EnableControls; end; end; procedure TformReklamaceMat.pmDelCilClick(Sender: TObject); begin if Helios.YesNo('Opravdu smazat položku ?',false) then begin tblMat.Append; tblMat.FieldByName('mIdSS').AsInteger:= tblCil.FieldByName('cIdSSOld').AsInteger; tblMat.FieldByName('mSZ').AsString:= tblCil.FieldByName('cSZ').AsString; tblMat.FieldByName('mRegCis').AsString:= tblCil.FieldByName('cRegCis').AsString; tblMat.FieldByName('mNazev').AsString:= tblCil.FieldByName('cNazev').AsString; tblMat.FieldByName('mMnoz').AsFloat:= tblCil.FieldByName('cMnoz').AsFloat; tblMat.Post; tblCil.Delete; gridMat.LockDrawing; tblMat.IndexFieldNames:= 'mSZ;mRegCis'; tblmat.Refresh; gridMat.UnlockDrawing; end; end; procedure TformReklamaceMat.btnOKClick(Sender: TObject); var lSQL: string; begin if (tblCil.RecordCount>0) then begin tblCil.DisableControls; lSQL:= 'IF OBJECT_ID(N' + QuotedStr('dbo._TabReklamaceMat') + ') IS NOT NULL DROP TABLE dbo._TabReklamaceMat' + CRLF; lSQL:= lSQL + 'CREATE TABLE dbo._TabReklamaceMat (IdSSOld INT NOT NULL,IdSSNew INT,SkupZbo NVARCHAR(3),'; lSQL:= lSQL + 'RegCis NVARCHAR(30),Nazev1 NVARCHAR(100),Mnozstvi NUMERIC(19,6), Sklad NVARCHAR(30),'; lSQL:= lSQL + 'IdSklad NVARCHAR(20), MnozPrev NUMERIC(19,6), MnozIT NUMERIC(19,6))'; Helios.ExecSQL(lSQL); tblCil.First; while not(tblCil.Eof) do begin lSQL:= 'INSERT dbo._TabReklamaceMat (IdSSOld,SkupZbo,RegCis,Nazev1,Mnozstvi,Sklad,IdSklad,MnozPrev,MnozIT) VALUES ('; lSQL:= lSQL + tblCil.FieldByName('cIdSSOld').AsString + ',N' + QuotedStr(tblCil.FieldByName('cSZ').AsString); lSQL:= lSQL + ',N' + QuotedStr(tblCil.FieldByName('cRegCis').AsString) + ',N' + QuotedStr(tblCil.FieldByName('cNazev').AsString); lSQL:= lSQL + ',' + StringReplace(tblCil.FieldByName('cMnoz').AsString,',','.',[rfReplaceAll]); lSQL:= lSQL + ',N' + QuotedStr(tblCil.FieldByName('cSklad').AsString) + ',N'; lSQL:= lSQL + QuotedStr(IfThen(tblCil.FieldByName('cSklad').AsString='DEMONTÁŽ', '20000001001', tblCil.FieldByName('cIdSklad').AsString)); lSQL:= lSQL + ',' + IfThen(tblCil.FieldByName('cMnozPresun').AsString='','0',StringReplace(tblCil.FieldByName('cMnozPresun').AsString,',','.',[rfReplaceAll])); lSQL:= lSQL + ',' + IfThen(tblCil.FieldByName('cMnozIT').AsString='','0',StringReplace(tblCil.FieldByName('cMnozIT').AsString,',','.',[rfReplaceAll])); lSQL:= lSQL + ')'; try Helios.ExecSQL(lSQL); except end; tblCil.Next; end; tblCil.EnableControls; Helios.ExecSQL('INSERT #TabExtKom(Poznamka) EXEC dbo.ep_ReklamaceMatDilce'); end; Close; end; procedure TformReklamaceMat.btnStornoClick(Sender: TObject); begin Close; end; procedure TformReklamaceMat.FormClose(Sender: TObject; var Action: TCloseAction); begin if (tblMat.Active) then tblMat.Close; if (tblCil.Active) then tblCil.Close; Action:= caFree; end; procedure TformReklamaceMat.FormShow(Sender: TObject); begin ImportStavuSkladu; end; procedure TformReklamaceMat.gridCilDblClick (Sender: TObject); var podm: string; iR, iC: integer; skl, strMn, sql, cisSkl: string; jc, mn, mnOld, mnSkl, mnIT: Extended; clCol, clRow: integer; fldName: string; begin clCol:= gridCil.MouseCoord (Mouse.CursorPos.X - gridCil.ClientOrigin.X, Mouse.CursorPos.Y - gridCil.ClientOrigin.Y).X; clRow:= gridCil.MouseCoord (Mouse.CursorPos.X - gridCil.ClientOrigin.X, Mouse.CursorPos.Y - gridCil.ClientOrigin.Y).X; if (clRow>0) and (clCol>0) and (tblCil.RecordCount>0) then begin fldName:= gridCil.Columns[clCol].FieldName; case helUtils.StringToCaseSelect(fldName, ['cSklad', 'cMnozPresun', 'cMnozIT']) of 0: begin // cilovy sklad skl:= ''; cisSkl:= ''; podm:= 'TabStrom.Cislo IN (N' + QuotedStr('200') + ',N' + QuotedStr('20000101') + ',N' + QuotedStr('20000101001'); podm:= podm + ',N' + QuotedStr('20000104') + ',N' + QuotedStr('20000104001') + ',N' + QuotedStr('20000106'); podm:= podm + ',N' + QuotedStr('20000106001') + ',N' + QuotedStr('20000001001') + ')'; if Helios.Prenos(bidStrom,'Cislo',oVar1,podm,'Vyberte cílový sklad',true) then cisSkl:= VarToStr(oVar1); case sStrIndex(cisSkl,sklady) of 0: skl:= nazvy[0]; 1: skl:= nazvy[1]; 2: skl:= nazvy[2]; 3: skl:= nazvy[3]; 4: skl:= nazvy[4]; 5: skl:= nazvy[5]; 6: skl:= nazvy[6]; 7: skl:= nazvy[7]; end; if (skl='') then skl:= nazvy[7]; tblCil.Edit; tblCil.FieldByName('cSklad').AsString:= skl; tblCil.FieldByName('cIdSklad').AsString:= cisSkl; tblCil.Post; end; 1: begin jc:= 0; mnOld:= tblCil.FieldByName('cMnoz').AsExtended; mn:= 0; mnSkl:= 0; mnIT:= 0; if not(VarIsNull(tblCil.FieldByName('cMnozPresun').AsVariant)) then mnSkl:= tblCil.FieldByName('cMnozPresun').AsExtended; if not(VarIsNull(tblCil.FieldByName('cMnozIT').AsVariant)) then mnIT:= tblCil.FieldByName('cMnozIT').AsExtended; if (mnSkl>0) then mn:= mnSkl; if (FormMnozstviCena('Množství na vybraný sklad',mn,jc,false,false)) then begin if (mn>=0) then begin if (mn<=mnOld) then begin tblCil.DisableControls; tblCil.Edit; if (mn=0) then tblCil.FieldByName('cMnozPresun').AsString:= '' else tblCil.FieldByName('cMnozPresun').AsExtended:= mn; tblCil.Post; tblCil.EnableControls; end else Helios.Error(#1'Nelze zadat množství vyšší než demontované.'#1); end; end; end; 2: begin jc:= 0; mnOld:= tblCil.FieldByName('cMnoz').AsExtended; mn:= 0; mnSkl:= 0; mnIT:= 0; if not(VarIsNull(tblCil.FieldByName('cMnozPresun').AsVariant)) then mnSkl:= tblCil.FieldByName('cMnozPresun').AsExtended; if not(VarIsNull(tblCil.FieldByName('cMnozIT').AsVariant)) then mnIT:= tblCil.FieldByName('cMnozIT').AsExtended; if (mnIT>0) then mn:= mnIT; if (FormMnozstviCena('Množství na výdejku IT',mn,jc,false,false)) then begin if (mn>=0) then begin if (mn+mnSkl<=mnOld) then begin tblCil.DisableControls; tblCil.Edit; if (mn=0) then tblCil.FieldByName('cMnozIT').AsString:= '' else tblCil.FieldByName('cMnozIT').AsExtended:= mn; tblCil.Post; tblCil.EnableControls; end else Helios.Error(#1'Nelze zadat množství vyšší než demontované.'#1); end; end; end; end; end; end; procedure TformReklamaceMat.gridMatDblClick (Sender: TObject); begin if not(tblMat.Active) then tblMat.Open; if (tblMat.RecordCount>0) then begin if not(tblCil.Active) then tblCil.Open; tblCil.Append; tblCil.FieldByName('cIdSSOld').AsString:= tblMat.FieldByName('mIdSS').AsString; tblCil.FieldByName('cSZ').AsString:= tblMat.FieldByName('mSZ').AsString; tblCil.FieldByName('cRegCis').AsString:= tblMat.FieldByName('mRegCis').AsString; tblCil.FieldByName('cNazev').AsString:= tblMat.FieldByName('mNazev').AsString; tblCil.FieldByName('cMnoz').AsFloat:= tblMat.FieldByName('mMnoz').AsFloat; if (tblMat.FieldByName('mSZ').AsString='MAT') then tblCil.FieldByName('cSklad').AsString:= 'DEMONTÁŽ'; tblCil.Post; tblMat.Delete; end; end; end.