Files
LOVATO-plugin/frmReklamaceMat.pas
2026-04-07 18:23:56 +02:00

328 lines
11 KiB
ObjectPascal
Raw Permalink Blame History

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<string> = ['20000101','20000101001','20000104','20000104001','20000106','20000106001','200','20000001001','20000107','20000107001'];
nazvy: TArray<string> = ['VDST','VDST REKL.','Pikl','Pikl REKL.','PCO','PCO REKL.','LOVATO V','DEMONT<4E><54>','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<6C>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<4E><54>', '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<6F> 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<6E>stv<74> na vybran<61> 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<6E>stv<74> vy<76><79><EFBFBD> ne<6E> demontovan<61>.'#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<6E>stv<74> 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<6E>stv<74> vy<76><79><EFBFBD> ne<6E> demontovan<61>.'#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<4E><54>';
tblCil.Post;
tblMat.Delete;
end;
end;
end.