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

836 lines
33 KiB
ObjectPascal

unit frmUnit9;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
RzEdit, Vcl.Mask, RzBtnEdt, ddPlugin_TLB, Vcl.ComCtrls,
RzDTP, 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, Data.DB,
FireDAC.Comp.Client;
const
tblEvidNadvyroby = '[dbo].[_TabEvidNadvyroby]';
tblEvidNadvyrVPr = '[dbo].[_TabEvidNadvyrPrikaz]';
druhPrevVydejDP = '450';
druhPrevPrijDP = '250';
sklVyroba = '200';
sklFin = '210';
sklDP = '20000105';
errPlg = #13#10 + '(plgLOVATO.unit9)';
type
TfrmVydejDPrace = class(TForm)
GroupBox1: TGroupBox;
selCisZam: TRzButtonEdit;
selRegCis: TRzButtonEdit;
edtMnoz: TRzNumericEdit;
dsPolos: TDataSource;
dsMat: TDataSource;
vtPolos: TFDMemTable;
vtMat: TFDMemTable;
Label1: TLabel;
lblZamest: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
lblPopis: TLabel;
lblSZ: TLabel;
btnAdd: TButton;
OK: TButton;
btnCancel: TButton;
Label5: TLabel;
dtDatum: TRzDateTimePicker;
vtPolosSkupZbo: TStringField;
vtPolosRegCis: TStringField;
vtPolosPopis: TStringField;
vtPolosMnoz: TFloatField;
vtPolosidKZ: TIntegerField;
vtMatSkupZbo: TStringField;
vtMatRegCis: TStringField;
vtMatPopis: TStringField;
vtMatMnoz: TFloatField;
vtMatidKZ: TIntegerField;
vtMatMnozSkl: TFloatField;
gPolos2: TJvDBGrid;
gMat2: TJvDBGrid;
procedure FormShow (Sender: TObject);
procedure btnAddClick (Sender: TObject);
procedure selRegCisButtonClick (Sender: TObject);
procedure vtPolosAfterPost (DataSet: TDataSet);
procedure selCisZamButtonClick (Sender: TObject);
procedure OKClick (Sender: TObject);
procedure FormClose (Sender: TObject; var Action: TCloseAction);
procedure edtMnozKeyUp (Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormActivate (Sender: TObject);
procedure selCisZamExit (Sender: TObject);
procedure selRegCisExit (Sender: TObject);
procedure gPolos2DblClick (Sender: TObject);
procedure gMat2DrawDataCell (Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
private
procedure VytvorTabulkyAGridy;
procedure NastavFonty;
function VratKZSZ(id: integer): ShortString;
function VratKZNazev1(id: integer): ShortString;
function VratKZRegCis(id: integer): ShortString;
public
Helios: IHelios;
end;
var
frmVydejDPrace: TfrmVydejDPrace;
idKZ, cZam, idZam: integer;
mnoz: Extended;
vOle1,vOle2: OleVariant;
implementation
uses Vcl.Clipbrd, helUtils;
{$R *.dfm}
procedure TfrmVydejDPrace.VytvorTabulkyAGridy;
begin
if not vtPolos.Active then
vtPolos.Open;
vtPolos.EmptyDataset;
if not vtMat.Active then
vtMat.Open;
vtMat.EmptyDataset;
end;
function TfrmVydejDPrace.VratKZRegCis(id: Integer): ShortString;
begin
result:= '';
if (id>0) then
with Helios.OpenSQL('SELECT RegCis FROM ' + tblKZ + ' WHERE id=' + IntToStR(id)) do
if (RecordCount=1) then
result:= VarToStr(FieldValues(0));
end;
function TfrmVydejDPrace.VratKZSZ (id: Integer): ShortString;
begin
result:= '';
if (id>0) then
with Helios.OpenSQL('SELECT SkupZbo FROM ' + tblKZ + ' WHERE id=' + IntToStR(id)) do
if (RecordCount=1) then
result:= VarToStr(FieldValues(0));
end;
function TfrmVydejDPrace.VratKZNazev1 (id: Integer): ShortString;
begin
result:= '';
if (id>0) then
with Helios.OpenSQL('SELECT Nazev1 FROM ' + tblKZ + ' WHERE id=' + IntToStR(id)) do
if (RecordCount=1) then
result:= VarToStr(FieldValues(0));
end;
procedure TfrmVydejDPrace.btnAddClick (Sender: TObject);
var lSQL: WideString;
mn: Extended;
begin
if (vtPolos.RecordCount>0) then
begin
Helios.Error(#1'Na doklad lze uložit jen 1 položku.'#1);
Exit;
end;
if (edtMnoz.Value>0) then
begin
if (idKZ>0) then
begin
mn:= 0;
lSQL:= 'SELECT ISNULL(SUM(kusy_zive),0) FROM ' + tblPrikaz + ' WHERE StavPrikazu IN (30,40,50) AND IDTabKmen=' + IntToStr(idKZ);
with Helios.OpenSQL(lSQL) do
if not(VarIsNull(FieldValues(0))) then
mn:= StrToFloat(VarToStr(FieldValues(0)))
else
mn:= 0;
if (mn<edtMnoz.Value) then
begin
lSQL:= #1'Na Výrobních příkazech není dostatek živých kusů k evidenci,' + CRLF + 'je nutno přidělat nový příkaz na ';
lSQL:= lSQL + FloatToStr(edtMnoz.Value-mn) + ' ks'#1 + CRLF + CRLF + 'Otevřít přehled Výrobních příkazů ?';
if Helios.YesNo(lSQL,false) then
Helios.OpenBrowse(bidVyrPrik,'');
Exit;
end;
vtPolos.Open;
selRegCis.Text:= Trim(selRegCis.Text);
if vtPolos.Locate('idKZ',VarArrayOf([idKZ]),[loCaseInsensitive]) then
begin
vtPolos.Edit;
mnoz:= vtPolos.FieldByName('Mnoz').AsExtended + edtMnoz.Value;
end
else
begin
mnoz:= edtMnoz.Value;
vtPolos.Insert;
vtPolos.FieldByName('SkupZbo').AsString:= lblSZ.Caption;
vtPolos.FieldByName('RegCis').AsString:= selRegCis.Text;
vtPolos.FieldByName('Popis').AsString:= lblPopis.Caption;
vtPolos.FieldByName('idKZ').AsInteger:= idKZ;
end;
vtPolos.FieldByName('Mnoz').AsExtended:= mnoz;
vtPolos.Post;
end;
selRegCis.Text:= '';
lblPopis.Caption:= '';
lblSZ.Caption:= '';
edtMnoz.Value:= 0;
selRegCis.SetFocus;
end
else
Helios.Error(#1'Nelze přidat nulové množství.'#1);
end;
procedure TfrmVydejDPrace.edtMnozKeyUp (Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key=VK_RETURN) then
if (edtMnoz.Value<>0) then
btnAddClick (Sender);
end;
procedure TfrmVydejDPrace.FormActivate (Sender: TObject);
begin
selCisZam.SetFocus;
end;
procedure TfrmVydejDPrace.FormClose (Sender: TObject; var Action: TCloseAction);
begin
if vtMat.Active then
vtMat.Close;
if vtPolos.Active then
vtPolos.Close;
Action:= caFree;
end;
procedure TfrmVydejDPrace.FormShow (Sender: TObject);
begin
Application.Handle := Helios.MainApplicationHandle;
Application.Icon.Handle := Helios.MainApplicationIconHandle;
// cxSetResourceString(@scxGridNoDataInfoText,'<Neexistují data k zobrazení>');
VytvorTabulkyAGridy;
NastavFonty;
idKZ:= 0;
cZam:= 0;
idZam:= 0;
dtDatum.Date:= Now;
end;
procedure TfrmVydejDPrace.OKClick (Sender: TObject);
var locSQL, podm, mn, sklVyd: string;
idNadvyr, idDZshift1, idDZ1, idObd, idSS1, idPZ1, idKJ: integer;
idDZshift2, idDZ2, idSS2, idPZ2: integer;
idx, i: integer;
qry: IHeQuery;
realVyd, realPrij: boolean;
matOK: boolean;
oVar: OleVariant;
begin
dtDatum.Time:= Now;
if (cZam=0) or (selCisZam.Text='') then
Helios.Error(#1'Není vybrán zaměstnanec kterému bude materiál vydán.'#1)
else
begin
if (vtMat.RecordCount>0) then
begin
matOK:= true;
i:= vtMat.RecNo; // vMat.DataController.FocusedRecordIndex;
gMat2.BeginUpdate;
for idx:= 1 to vtMat.RecordCount do
begin
vtMat.RecNo:= idx;
locSQL:= 'SELECT Mnozstvi FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(sklFin);
locSQL:= locSQL + ' AND IdKmenZbozi=' + vtMat.FieldByName('idKZ').AsString;
with Helios.OpenSQL(locSQL) do
begin
if (RecordCount=1) then
begin
mn:= VarToStr(FieldValues(0));
mn:= StringReplace(mn,',','.',[rfReplaceAll]);
if (StrToFloat(mn)<vtMat.FieldByName('Mnoz').AsFloat) then
matOK:= false;
end
else
matOK:= false;
end;
end;
vtMat.RecNo:= i;
gMat2.EndUpdate;
end;
if not(matOK) then
begin
Helios.Error(#1'Některý materiál požadovaný pro nadvýrobu není dostupný.'#1);
Exit;
end;
ReseedTable(Helios,tblDZ);
ReseedTable(Helios,tblPZ);
ReseedTable(Helios,tblEvidNadvyroby);
ReseedTable(Helios,tblEvidNadvyrVPr);
gPolos2.BeginUpdate;
idDZ2:= vtPolos.RecNo;
for idDZ1:=1 to vtPolos.RecordCount do
begin
vtPolos.RecNo:= idDZ1;
mn:= StringReplace(vtPolos.FieldByName('Mnoz').AsString,',','.',[rfReplaceAll]);
locSQL:= 'INSERT ' + tblEvidNadvyroby + ' (CisloZam, IdKmenZbozi, Mnozstvi, DatPorizeni) VALUES (';
locSQL:= locSQL + selCisZam.Text + ',' + vtPolos.FieldByName('IdKZ').AsString + ',';
locSQL:= locSQL + mn + ',CONVERT(datetime,N' + QuotedStr(DateTimeToStr(dtDatum.DateTime)) + ',104) )';
locSQL:= locSQL + CRLF + 'SELECT SCOPE_IDENTITY()';
idNadvyr:= 0;
try
with Helios.OpenSQL(locSQL) do
if not(VarIsNull(FieldValues(0))) then
idNadvyr:= StrToInt(VarToStr(FieldValues(0)));
except on E:Exception do
Helios.Error(#1'Nelze uložit požadovanou evidenci Nadvýroby.'#1 + CRLF + E.Message + CRLF + locSQL);
end;
end;
vtPolos.RecNo:= idDZ2;
gPolos2.EndUpdate;
idDZ1:= 0;
idDZ2:= 0;
idObd:= 0;
locSQL:= 'DECLARE @obd INT,@dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(DateToStr(dtDatum.Date)) + ',104)';
locSQL:= locSQL + 'EXEC @obd=dbo.hp_GetObdobiDleDatumu @dt,0,null,null,0,0' + CRLF + 'SELECT @obd';
with Helios.OpenSQL(locSQL) do
idObd:= StrToInt(VarToStr(FieldValues(0)));
if (idObd>0) AND (vtMat.RecordCount>0) then
begin
// zaloz prevodku/vydejku na 200
{
idDZshift1:= 0; // posunuti cisla brane z nastaveni TabDruhDokZboDef
locSQL:= 'SELECT dzd.PosledniPC FROM ' + tblDDZdef + ' dzd INNER JOIN ' + tblDDZ + ' dz';
locSQL:= locSQL + ' ON (dz.ID=dzd.idDruhDZ) WHERE dzd.IdObdobi=' + IntToStr(idObd);
locSQL:= locSQL + ' AND dz.DruhPohybuZbo=4 AND dz.RadaDokladu=N' + QuotedStr(druhPrevVydejDP);
qry:= Helios.OpenSQL(locSQL);
if qry.RecordCount>0 then
idDZshift1:= StrToInt(VarToStr(qry.FieldValues(0)));
podm:= 'DruhPohybuZbo=4 AND RadaDokladu=N' + QuotedStr(druhPrevVydejDP) + ' AND IDSklad=N' + QuotedStr(sklVyroba);
podm:= podm + ' AND Obdobi=' + IntToStr(idObd);
locSQL:= 'EXEC dbo.hp_NajdiPrvniVolny N' + QuotedStr(tblDZ) + ',N' + QuotedStr('PoradoveCislo');
locSQL:= locSQL + ',' + IntToStr(idDZshift1) + ',99999999,N' + QuotedStr(podm) + ',0,1';
idDZ1:= 0;
qry:= Helios.OpenSQL(locSQL);
if qry.RecordCount>0 then
idDZ1:= StrToInt(VarToStr(qry.FieldValues(0)));
if (idDZ1=0) or (idDZ1=idDZshift1) then
idDZ1:= idDZshift1 + 1;
}
sklVyd:= Trim('210 ');
{
locSQL:= 'TabStrom.Cislo LIKE ''2%'' AND TabStrom.ID NOT IN (SELECT IDStrom FROM dbo.TabStromDef WHERE (Blokovano=1 OR Zakazano=1) AND IdObdobi=' + IntToStr(Helios.Obdobi) + ')';
if Helios.Prenos(4, 'Cislo', oVar, locSQL, 'Materiál vydat ze skladu', true) then
sklVyd:= VarToStr(oVar);
}
locSQL:= 'DECLARE @dt DATETIME,@IDcko INT' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(DateTimeToStr(dtDatum.DateTime)) + ',104)';
locSQL:= locSQL + CRLF + 'EXEC dbo.hp_InsertHlavickyOZ @IDcko OUT,@RadaDokladu=N' + QuotedStr(druhPrevVydejDP);
locSQL:= locSQL + ',@DruhPohybu=4,@CisloOrg=2,@Insert=1,@Sklad=N' + QuotedStr(sklVyd) + ',@PC=null';
locSQL:= locSQL + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @IDcko';
idDZ1:= 0;
with Helios.OpenSQL(locSQL) do
if RecordCount>0 then
idDZ1:= StrToInt(VarToStr(FieldValues(0)));
if (idDZ1>0) then
begin
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=' + IntToStr(Helios.UserId) + ' WHERE id=' + IntToStr(idDZ1));
// polozky prevodky/vydejky
vtMat.First;
while not(vtMat.Eof) do
begin
idSS1:= 0;
with Helios.OpenSQL('SELECT id FROM ' + tblSS + ' WHERE IdSklad=N' + QuotedStr(sklVyd) + ' AND IdKmenZbozi=' + vtMat.FieldByName('idKZ').AsString) do
if RecordCount>0 then
idSS1:= StrToInt(VarToStr(FieldValues(0)));
if (idSS1=0) then
begin
locSQL:= 'DELCARE @idSS INT' + CRLF + 'INSERT ' + tblSS + ' (IDSklad,IDKmenZbozi) VALUES (N' + QuotedStr(sklVyd);
locSQL:= locSQL + ',' + vtMat.FieldByName('idKZ').AsString + ')' + CRLF + 'SELECT SCOPE_IDENTITY()';
with Helios.OpenSQL(locSQL) do
idSS1:= StrToInt(VarToStr(FieldValues(0)));
end;
locSQL:= 'DECLARE @IDcko INT' + CRLF + 'EXEC dbo.hp_InsertPolozkyOZ @IDcko OUT,';
locSQL:= locSQL + '@IDDoklad=' + IntToStr(idDZ1) + ',@DruhPohybu=4,@CisloOrg=2,@IDZboSklad=' + IntToStr(idSS1);
locSQL:= locSQL + ',@PovolitDuplicitu=1,@Mnozstvi=' + StringReplace(vtMat.FieldByName('Mnoz').AsString,'','.',[rfReplaceAll]);
locSQL:= locSQL + ',@Selectem=0,@Mena=N' + QuotedStr('CZK') + ',@Kurz=1,@JednotkaMeny=1,@KurzEuro=1,@SazbaSD=0,@SazbaDPH=0';
locSQL:= locSQL + ',@ZakazanoDPH=0,@VstupniCena=0' + CRLF + 'SELECT @IDcko';
idPZ1:= 0;
with Helios.OpenSQL(locSQL) do
idPZ1:= StrToInt(VarToStr(FieldValues(0)));
vtMat.Next;
end;
if (idDZ1>0) then
begin
Helios.ExecSQL('UPDATE ' + tblEvidNadvyroby + ' SET IdVydejkaMat=' + IntToStR(idDZ1) + ' WHERE id=' + IntToStr(idNadvyr));
try
Helios.ExecSQL('EXEC dbo.ep_DoplnKooperacniCenyVydejky ' + IntToStr(idDZ1));
locSQL:= 'UPDATE ' + tblDZ + ' SET TypPrevodky=N' + QuotedStr(druhPrevPrijDP) + ',IdSkladPrevodu=N' + QuotedStr(sklDP);
locSQL:= locSQL + ',CisloZam=' + IntToStr(cZam) + ',DruhPohybuPrevod=0,BlokovaniEditoru=null WHERE id=' + IntToStr(idDZ1);
Helios.ExecSQL(locSQL);
Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + IntToStr(idDZ1) + ',@AktualizaceSlev=0');
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL WHERE id=' + IntToStr(idDZ1));
except on E:Exception do
begin
Helios.Error(#1'Chyba při nápočtu cen dokladu převodky/výdejky.'#1 + CRLF + E.Message + CRLF + locSQL + errPlg);
idKJ:= helUtils.ZapisDoKJ(Helios,'HEO','','POR','','Plugin plgLOVATO','Chyba při nápočtu cen dokladu převodky/výdejky Nadvýroby');
if idKJ>0 then
Helios.ExecSQL('INSERT ' + tblKJPozn + ' (IDKontJednani,Nazev,Poznamka) VALUES (' + IntToStr(idKJ) + ',N'
+ QuotedStr('Podrobnosti.unit9') + ',N' + QuotedStr(E.Message + CRLF + locSQL) + ')');
idKJ:= 0;
Exit;
end;
end;
podm:= 'DruhPohybuZbo=0 AND RadaDokladu=N' + QuotedStr(druhPrevPrijDP) + ' AND IDSklad=N' + QuotedStr(sklDP);
podm:= podm + ' AND Obdobi=' + IntToStr(idObd);
idDZ2:= helUtils.NajdiPrvniVolny(Helios,tblDZ,'PoradoveCislo','0',druhPrevPrijDP,IntToStr(idObd),podm);
{
idDZshift2:= 0; // posunuti cisla brane z nastaveni TabDruhDokZboDef
locSQL:= 'SELECT dzd.PosledniPC FROM ' + tblDDZdef + ' dzd INNER JOIN ' + tblDDZ + ' dz';
locSQL:= locSQL + ' ON (dz.ID=dzd.idDruhDZ) WHERE dzd.IdObdobi=' + IntToStr(idObd);
locSQL:= locSQL + ' AND dz.DruhPohybuZbo=0 AND dz.RadaDokladu=N' + QuotedStr(druhPrevPrijDP);
qry:= Helios.OpenSQL(locSQL);
if qry.RecordCount>0 then
idDZshift2:= StrToInt(VarToStr(qry.FieldValues(0)));
podm:= 'DruhPohybuZbo=0 AND RadaDokladu=N' + QuotedStr(druhPrevPrijDP) + ' AND IDSklad=N' + QuotedStr(sklDP);
podm:= podm + ' AND Obdobi=' + IntToStr(idObd);
locSQL:= 'EXEC dbo.hp_NajdiPrvniVolny N' + QuotedStr(tblDZ) + ',N' + QuotedStr('PoradoveCislo');
locSQL:= locSQL + ',' + IntToStr(idDZshift2) + ',99999999,N' + QuotedStr(podm) + ',0,1';
idDZ2:= 0;
qry:= Helios.OpenSQL(locSQL);
if qry.RecordCount>0 then
idDZ2:= StrToInt(VarToStr(qry.FieldValues(0)));
if (idDZ2=0) or (idDZ2=idDZshift2) then
idDZ2:= idDZshift2 + 1;
}
{ beg: vypnuti tvorby nasledne prijemky
locSQL:= 'DECLARE @dt DATETIME,@IDcko INT' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(DateTimeToStr(dtDatum.DateTime)) + ',104)';
locSQL:= locSQL + CRLF + 'EXEC dbo.hp_InsertHlavickyOZ @IDcko OUT,@RadaDokladu=N' + QuotedStr(druhPrevPrijDP);
locSQL:= locSQL + ',@DruhPohybu=0,@CisloOrg=0,@Insert=1,@Sklad=N' + QuotedStr(sklDP) + ',@PC=' + IntToStr(idDZ2);
locSQL:= locSQL + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @IDcko';
idDZ2:= 0;
with Helios.OpenSQL(locSQL) do
if (RecordCount>0) then
idDZ2:= StrToInt(VarToStr(FieldValues(0)));
end: vypnuti tvorby nasledne prijemky }
if (1=0) then { vypnuti tvorby nasledne prijemky (idDZ2>0) }
begin
try
locSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL CREATE TABLE #TabTempUziv(Tabulka';
locSQL:= locSQL + ' NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)' + CRLF;
locSQL:= locSQL + 'EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=' + IntToStr(idDZ2) + ',@IDDokladSrc=' + IntToStr(idDZ1);
locSQL:= locSQL + ',@CisloOrgCil=0,@MUcil=null,@KurzCil=1,@JednotkaMenyCil=1,@MenaCil=N' + QuotedStr('CZK');
locSQL:= locSQL + ',@Returnem=1,@KurzEuroCil=0,@CisloZakCil=null,@NOkruhCil=null,@StredNakladCil=null,@StredVynosCil=null';
locSQL:= locSQL + ',@FormaDopravyCil=null,@VozidloCil=null,@ObjednavkaCil=null,@PopisDodavkyCil=N' + QuotedStr('Převod materiálu');
locSQL:= locSQL + ',@NavaznyDobropisCil=null,@ZamestnanecCil=null,@DodFakCil=null,@Nasobek=1,@SlevaCil=0';
Helios.ExecSQL(locSQL);
except on E:Exception do
begin
try
locSQL:= 'FROM ' + tblPZ + ' WHERE IdDoklad=' + IntToStr(idDZ2);
Helios.ExecSQL('DELETE FROM dbo.TabPohybyZboziSD WHERE id IN (SELECT id ' + locSQL + ')');
Helios.ExecSQL('DELETE ' + locSQL);
Helios.ExecSQL('DELETE FROM dbo.TabDokZboDodatek WHERE IDHlavicky=' + IntToStr(idDZ2));
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET NavaznyDoklad=null WHERE id='+ IntToStr(idDZ1));
Helios.ExecSQL('DELETE FROM ' + tblDZ + ' WHERE Id=' + IntToStr(idDZ2));
Helios.Error(#1'Chyba při generování návazného dokladu.'#1 + CRLF + E.Message + errPlg);
idKJ:= ZapisDoKJ(Helios,'HEO','','POR','','Plugin plgLOVATO','Nelze generovat následný doklad Výdejky Nadvýroby');
if (idKJ>0) then
Helios.ExecSQL('INSERT ' + tblKJPozn + ' (IDKontJednani,Nazev,Poznamka) VALUES (' + IntToStr(idKJ) + ',N'
+ QuotedStr('Podrobnosti.unit9') + ',N' + QuotedStr(E.Message + CRLF + locSQL) + ')');
idKJ:= 0;
except on E:Exception do
begin
Helios.Error(#1 + E.Message + #1);
Exit;
end;
end;
Exit;
end;
end;
Helios.ExecSQL('EXEC dbo.ep_DoplnKooperacniCenyVydejky ' + IntToStr(idDZ2));
Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + IntToStr(idDZ2) + ',@AktualizaceSlev=0');
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL WHERE id=' + IntToStr(idDZ2));
realVyd:= false;
// if idDZ2>0 then
// begin
try
locSQL:= 'DECLARE @chyba BIT,@dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(DateTimeToStr(dtDatum.DateTime)) + ',104)' + CRLF;
locSQL:= locSQL + 'EXEC dbo.hp_Realizuj_Vydej @ID=' + IntToStr(idDZ1) + ',@DatumRealizace=@dt,@Uzivatel=' + IntToStr(Helios.UserId) + ',@Hlidat=0,@BylaChyba=@chyba OUT';
locSQL:= locSQL + CRLF + 'SELECT @chyba';
with Helios.OpenSQL(locSQL) do
if not VarIsNull(FieldValues(0)) then
if (LowerCase(VarToStr(FieldValues(0)))='false') then
realVyd:= true;
except on E:Exception do
begin
// Clipboard.AsText:= locSQL;
try
Helios.Error(#1'Nelze realizovat Převodku/výdejku'#1 + CRLF + E.Message + errPlg);
{
idKJ:= helUtils.ZapisDoKJ(Helios,'HEO','','POR','','Plugin plgLOVATO','Nelze realizovat Převodku/výdejku Nadvýroby.');
if idKJ>0 then
Helios.ExecSQL('INSERT INTO ' + tblKJPozn + ' (IDKontJednani,Nazev,Poznamka) VALUES (' + IntToStr(idKJ) + ',N'
+ QuotedStr('Podrobnosti.unit9') + ',N' + QuotedStr(E.Message + CRLF + locSQL) + ')');
}
idKJ:= 0;
except on E:Exception do
begin
Helios.Error(#1 + E.Message + #1);
Exit;
end;
end;
Exit;
end;
end;
// end;
idDZ2:= 0;
realPrij:= false;
if realVyd then
begin
try
locSQL:= 'DECLARE @chyba BIT,@dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(DateTimeToStr(dtDatum.DateTime)) + ',104)' + CRLF;
locSQL:= locSQL + 'EXEC dbo.hp_Realizuj_Prijem @ID=' + IntToStr(idDZ2) + ',@DatumRealizace=@dt,@Uzivatel=' + IntToStr(Helios.UserId) + ',@BylaChyba=@chyba OUT';
locSQL:= locSQL + CRLF + 'SELECT @chyba';
with Helios.OpenSQL(locSQL) do
if not VarIsNull(FieldValues(0)) then
if (LowerCase(VarToStr(FieldValues(0)))='false') then
realPrij:= true;
except on E:Exception do
begin
// ClipBoard.AsText:= locSQL;
Helios.Error(#1'Chyba při realizaci Převodky/příjemky pro Nadvýrobu.'#1 + CRLF + E.Message + CRLF + errPlg);
idKJ:= helUtils.ZapisDoKJ(Helios,'HEO','','POR','','Plugin plgLOVATO','Nelze realizovat příjemku Převodku/příjemku Nadvýroby');
if (idKJ>0) then
Helios.ExecSQL('INSERT ' + tblKJPozn + ' (IDKontJednani,Nazev,Poznamka) VALUES (' + IntToStr(idKJ) + ',N'
+ QuotedStr('Podrobnosti.unit9') + ',N' + QuotedStr(E.Message + CRLF + locSQL) + ')');
idKJ:= 0;
end;
end;
end;
end;
end;
end;
Helios.Refresh(true);
Close;
end;
end;
end;
procedure TfrmVydejDPrace.NastavFonty;
var idx: integer;
HelPars: THeliosParams;
begin
NactiParametryHeliosu(Helios,HelPars);
idx:= 0;
{
while idx<Self.ComponentCount-1 do
begin
if (Self.Components[idx] is TLabel) then
begin
(Self.Components[idx] as TLabel).Font.Name:= HelPars.FontName;
(Self.Components[idx] as TLabel).Font.Size:= HelPars.FontSize;
end;
if (Self.Components[idx] is TButton) then
begin
(Self.Components[idx] as TButton).Font.Name:= HelPars.FontName;
(Self.Components[idx] as TButton).Font.Size:= HelPars.FontSize;
end;
if (Self.Components[idx] is TGroupBox) then
begin
(Self.Components[idx] as TGroupBox).Font.Name:= HelPars.FontName;
(Self.Components[idx] as TGroupBox).Font.Size:= HelPars.FontSize;
end;
if (Self.Components[idx] is TButton) then
begin
(Self.Components[idx] as TButton).Font.Name:= HelPars.FontName;
(Self.Components[idx] as TButton).Font.Size:= HelPars.FontSize;
end;
Inc(idx);
end;
}
end;
procedure TfrmVydejDPrace.selCisZamButtonClick (Sender: TObject);
begin
if Helios.Prenos(bidCisZam,'Cislo',vOle1,'','Vyberte zaměstnance',true) then
begin
cZam:= StrToInt(VarToStr(vOle1));
with Helios.OpenSQL('SELECT id,PrijmeniJmeno FROM ' + tblCZam + ' WHERE Cislo=' + IntToStr(cZam)) do
begin
idZam:= StrToInt(VarToStr(FieldValues(0)));
lblZamest.Caption:= VarToStr(FieldValues(1));
end;
selCisZam.Text:= StringOfChar('0',6-Length(IntToStr(cZam))) + IntToStr(cZam);
end
else
begin
cZam:= 0;
idZam:= 0;
Helios.Error(#1'Nebyl vybrán žádný zaměstnanec.'#1);
end;
end;
procedure TfrmVydejDPrace.selCisZamExit (Sender: TObject);
begin
if selCisZam.Text<>'' then
begin
with Helios.OpenSQL('SELECT id,PrijmeniJmeno,Cislo FROM ' + tblCZam + ' WHERE Cislo=' + selCisZam.Text) do
if RecordCount>0 then
begin
begin
idZam:= StrToInt(VarToStr(FieldValues(0)));
lblZamest.Caption:= VarToStr(FieldValues(1));
cZam:= StrToInt(VarToStr(FieldValues(2)));
end;
selCisZam.Text:= StringOfChar('0',6-Length(IntToStr(cZam))) + IntToStr(cZam);
end;
end;
end;
procedure TfrmVydejDPrace.selRegCisButtonClick (Sender: TObject);
var podm: WideString;
begin
// podm:= 'TabKmenZbozi.SkupZbo IN (SELECT sz.id FROM TabSkupinyZbozi sz INNER JOIN TabSkupinyZbozi_EXT sze ON (sz.id=sze.id)';
// podm:= podm + ' WHERE sze._JeVyroba=1) AND';
{ podm:= podm + ' TabKmenZbozi.id IN (';
podm:= podm + 'SELECT kz.id FROM TabPolKoopObj pko INNER JOIN TabPrikaz p ON (pko.IDPrikaz=p.id)';
podm:= podm + ' INNER JOIN TabKmenZbozi kz ON (p.IDTabKmen=kz.id) WHERE pko.id IN (SELECT po.id FROM TabPolKoopObj po';
podm:= podm + ' WHERE po.IDObjednavky IN (SELECT o.id FROM TabKoopObj o WHERE o.IDOrganizace=(SELECT id FrOM TabCisOrg WHERE CisloOrg=2)';
podm:= podm + ' AND o.Splneno=0 AND o.realizovano=1)) GROUP BY kz.id)';
}
podm:= '';
if Helios.Prenos(100089,'IdTabKmen',vOle1,podm,'Vyberte dílec/polosestavu',true) then
begin
idKZ:= StrToInt(VarToStr(vOle1));
lblSZ.Caption:= VratKZSZ(idKZ);
selRegCis.Text:= VratKZRegCis(idKZ);
lblPopis.Caption:= VratKZNazev1(idKZ);
edtMnoz.SetFocus;
end
else
Helios.Error(#1'Nebyla vybrána žádná karta.'#1);
end;
procedure TfrmVydejDPrace.selRegCisExit (Sender: TObject);
var podm: ShortString;
begin
selRegCis.Text:= Trim(selRegCis.Text);
if (selRegCis.Text='') then
Exit;
with Helios.OpenSQL('SELECT id FROM ' + tblKZ + ' WHERE Dilec=1 AND RegCis LIKE N''%' + selRegCis.Text + '%''') do
begin
if (RecordCount=1) then
idKZ:= StrToInt(VarToStr(FieldValues(0)));
if (RecordCount>1) then
begin
podm:= 'TabKmenZbozi.RegCis LIKE N''%' + selRegCis.Text + '%'' AND TabKmenZbozi.Dilec=1';
if Helios.Prenos(bidKZ,'id',vOle1,podm,'Zboží a služby',True) then
idKZ:= StrToInt(VarToStr(FieldValues(0)));
end;
lblSZ.Caption:= VratKZSZ(idKZ);
lblPopis.Caption:= VratKZNazev1(idKZ);
selRegCis.Text:= VratKZRegCis(idKZ);
end;
end;
procedure TfrmVydejDPrace.gMat2DrawDataCell (Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
var m,s: Extended;
begin
if not(TryStrToFloat(gMat2.DataSource.Dataset.FieldByName('Mnoz').AsString, m)) then
m:= 0;
if not(TryStrToFloat(gMat2.DataSource.DataSet.FieldByName('MnozSkl').AsString, s)) then
s:= 0;
if (s<=m) then
gMat2.Canvas.Brush.Color:= $005D5DFC
else
gMat2.Canvas.Brush.Color:= $0;
end;
procedure TfrmVydejDPrace.gPolos2DblClick (Sender: TObject);
var mn,jc: Extended;
begin
mn:= vtPolos.FieldByName('Mnoz').AsExtended;
jc:= 0;
if FormMnozstviCena('Změna množství',mn,jc,true,false) then
if (mn<>0) then
begin
vtPolos.Edit;
vtPolos.FieldByName('Mnoz').AsExtended:= mn;
vtPolos.Post;
end;
end;
procedure TfrmVydejDPrace.vtPolosAfterPost (DataSet: TDataSet);
var idMat: integer;
mnoz,mnozNiz: Extended;
idKZNiz: integer;
sz,regcis,pop: ShortString;
iRowPolos: integer;
lp: integer;
locSQL: WideString;
rozp: IHeQuery;
begin
iRowPolos:= vtPolos.RecNo;
locSQL:= 'IF OBJECT_ID(' + QuotedStr('tempdb..#MatPozadavky') + ') IS NOT NULL DROP TABLE #MatPozadavky' + CRLF;
locSQL:= locSQL + 'CREATE TABLE #MatPozadavky(ID INT IDENTITY NOT NULL, IdKZMat INT NOT NULL,';
locSQL:= locSQL + 'MnozNizsi NUMERIC(19,6) NOT NULL DEFAULT 0, MnozVyssi NUMERIC(19,6) NOT NULL DEFAULT 0)';
Helios.ExecSQL(locSQL);
{
locSQL:= 'IF OBJECT_ID(' + QuotedStr('tempdb..#TabPrKVazbyGen') + ') IS NOT NULL DROP TABLE #TabPrKVazbyGen' + CRLF;
locSQL:= locSQL + 'CREATE TABLE #TabPrKVazbyGen(ID INT IDENTITY NOT NULL, Generuj BIT NOT NULL DEFAULT 1,';
locSQL:= locSQL + 'PoKorekciDat BIT NOT NULL DEFAULT 0, IDPrKV INT NOT NULL, Doklad INT NOT NULL, IDPrikaz INT NOT NULL,';
locSQL:= locSQL + 'Prednastaveno BIT NOT NULL DEFAULT 1, Sklad NVARCHAR(30) COLLATE database_default NULL,';
locSQL:= locSQL + 'VyrStredisko NVARCHAR(30) COLLATE database_default NULL, IDPracoviste INT NULL,';
locSQL:= locSQL + 'mnoz_zad NUMERIC(19, 6) NOT NULL DEFAULT 0, Mnoz_nepotrebne NUMERIC(19, 6) NOT NULL DEFAULT 0,';
locSQL:= locSQL + 'Mnoz_skut_realizovane NUMERIC(19, 6) NOT NULL DEFAULT 0, Cena_real NUMERIC(19, 6) NOT NULL DEFAULT 0,';
locSQL:= locSQL + 'Mnoz_odv NUMERIC(19, 6) NOT NULL DEFAULT 0, Cena_odv NUMERIC(19, 6) NOT NULL DEFAULT 0,';
locSQL:= locSQL + 'MnozstviMax NUMERIC(19, 6) NULL, MnozstviPoz NUMERIC(19, 6) NOT NULL, PomMnozPoz NUMERIC(19, 6) NOT NULL DEFAULT 0,';
locSQL:= locSQL + 'IDPohZbo INT NULL, priorita INT NOT NULL DEFAULT 0, vyssi INT NOT NULL, nizsi INT NOT NULL,';
locSQL:= locSQL + 'DavkaTPV NUMERIC(19, 6) NOT NULL DEFAULT 1, pozice NVARCHAR(100) COLLATE database_default NULL DEFAULT '''',';
locSQL:= locSQL + 'Operace NCHAR(4) COLLATE database_default NULL DEFAULT '''', FixniMnozstvi NUMERIC(19, 6) NOT NULL DEFAULT 0,';
locSQL:= locSQL + 'mnozstvi NUMERIC(19, 6) NOT NULL DEFAULT 1, ProcZtrat NUMERIC(5, 2) NOT NULL DEFAULT 0,';
locSQL:= locSQL + 'mnozstviSeZtratou NUMERIC(19, 6) NOT NULL DEFAULT 0, Prirez NUMERIC(19, 6) NOT NULL DEFAULT 1,';
locSQL:= locSQL + 'Poznamka NTEXT COLLATE database_default NULL, pom_pomer_A NUMERIC(19, 6) NULL,';
locSQL:= locSQL + 'pom_pomer_B NUMERIC(19, 6) NULL, Dodavatel INT NULL)';
Helios.ExecSQL(locSQL);
}
vtPolos.First;
while not(vtPolos.Eof) do
begin
idKZ:= vtPolos.FieldByName('idKZ').asInteger;
mnoz:= vtPolos.FieldByName('Mnoz').AsFloat;
rozp:= Helios.OpenSQL('SELECT nizsi,Mnozstvi FROM ' + tblKVaz + ' WHERE vyssi=' + IntToStr(idKZ));
if rozp.RecordCount>0 then
begin
rozp.First;
while not(rozp.EOF) do
begin
locSQL:= 'INSERT #MatPozadavky VALUES (' + VarToStr(rozp.FieldValues(0)) + ',';
mnozNiz:= StrToFloat(VarToStr(rozp.FieldValues(1)));
locSQL:= locSQL + StringReplace(FloatToStr(mnozNiz),',','.',[rfReplaceAll]) + ',';
locSQL:= locSQL + StringReplace(FloatToStr(mnoz),',','.',[rfReplaceAll]) + ')';
Helios.ExecSQL(locSQL);
rozp.Next;
end;
end;
vtPolos.Next;
end;
rozp:= Helios.OpenSQL('SELECT * FROM #MatPozadavky');
if rozp.RecordCount>0 then
begin
idMat:= rozp.RecordCount;
if (vtPolos.RecordCount>0) then
vtMat.EmptyDataset;
rozp.First;
vtMat.Open;
while not(rozp.EOF) do
begin
idKZNiz:= StrToInt(VarToStr(rozp.FieldValues(1)));
mnozNiz:= StrToFloat(VarToStr(rozp.FieldValues(2))) * StrToFloat(VarToStr(rozp.FieldValues(3)));
if vtMat.Locate('idKZ',VarArrayOf([idKZNiz]),[loCaseInsensitive]) then
begin
vtMat.Edit;
mnozNiz:= mnozNiz + vtMat.FieldByName('Mnoz').AsExtended;
end
else
begin
vtMat.Insert;
vtMat.FieldByName('idKZ').AsInteger:= idKZNiz;
with Helios.OpenSQL('SELECT SkupZbo,RegCis,Nazev1 FROM ' + tblKZ + ' WHERE id=' + IntToStr(idKZNiz)) do
begin
vtMat.FieldByName('SkupZbo').AsString:= VarToStr(FieldValues(0));
vtMat.FieldByName('RegCis').AsString:= VarToStr(FieldValues(1));
vtMat.FieldByName('Popis').AsString:= VarToStr(FieldValues(2));
end;
end;
vtMat.FieldByName('Mnoz').AsExtended:= mnozNiz;
with Helios.OpenSQL('SELECT Mnozstvi FROM ' + tblSS + ' WHERE IdKmenZbozi=' + IntToStr(idKZNiz) + ' AND IDSklad=N' + QuotedStr(sklFin)) do
if (RecordCount=1) then
vtMat.FieldByName('MnozSkl').AsExtended:= StrToFloat(VarToStr(FieldValues(0)))
else
vtMat.FieldByName('MnozSkl').AsExtended:= 0;
vtMat.Post;
rozp.Next;
end;
end;
Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr('tempdb..#TabPrKVazbyGen') + ') IS NOT NULL DROP TABLE #TabPrKVazbyGen');
vtPolos.RecNo:= iRowPolos;
end;
end.