Files
Rootvin-pluginHDCRTN/frmZahajeniPalety.pas
2025-06-10 19:43:13 +02:00

855 lines
31 KiB
ObjectPascal

unit frmZahajeniPalety;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Mask, Vcl.ExtCtrls,
IdHTTP, IdSSLOpenSSL, REST.Json, JsonDataObjects,
ddPlugin_TLB, frmPekarna, frmTiskyNahledy, uPing;
{$I iConsts.inc}
type
TformZahajeniPalety = class(TForm)
Panel1: TPanel;
edtZakazka: TLabeledEdit;
edtPL: TLabeledEdit;
edtSarze: TLabeledEdit;
edtDatVyroby: TLabeledEdit;
edtDatSpotreby: TLabeledEdit;
edtSZ: TLabeledEdit;
edtRegCis: TLabeledEdit;
Panel2: TPanel;
Panel3: TPanel;
edtNazev1: TLabeledEdit;
edtBarvaStitku: TLabeledEdit;
edtTypStitku: TLabeledEdit;
edtVelkostStitku: TLabeledEdit;
edtPocetStitku: TLabeledEdit;
Panel4: TPanel;
btnTiskStitku: TButton;
btnTiskZaloha: TButton;
GroupBox1: TGroupBox;
GridPanel1: TGridPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
pnlSarzeAno: TPanel;
rbTiskSarzeAno: TRadioButton;
pnlSarzeNe: TPanel;
rbTiskSarzeNe: TRadioButton;
pnlSpotrebaAno: TPanel;
rbTiskSpotrebaAno: TRadioButton;
pnlSpotrebaNe: TPanel;
rbTiskSpotrebaNe: TRadioButton;
edtPocetPL: TEdit;
pnlTiskNaObraz: TPanel;
rbTiskNaObraz: TRadioButton;
pnlTiskNaTisk: TPanel;
rbTiskNaTisk: TRadioButton;
edtPocetStitkuMax: TEdit;
lblKANaPal: TLabel;
lblWarnStitekKA: TLabel;
lblWarnStitekPL: TLabel;
procedure FormShow (Sender: TObject);
procedure rbTiskSarzeNeClick (Sender: TObject);
procedure rbTiskSarzeAnoClick (Sender: TObject);
procedure rbTiskSpotrebaAnoClick (Sender: TObject);
procedure rbTiskSpotrebaNeClick (Sender: TObject);
procedure pnlSarzeAnoClick (Sender: TObject);
procedure pnlSarzeNeClick (Sender: TObject);
procedure rbTiskNaObrazClick (Sender: TObject);
procedure rbTiskNaTiskClick (Sender: TObject);
procedure btnTiskStitkuClick (Sender: TObject);
private
function GenerujJSON (idPrikaz, idVyrCis, idEvidROp: integer; mn: Extended): TJSONObject;
procedure BarvyTlacitekDleRB;
procedure NactiUdajePrikazu;
public
Helios: IHelios;
idPrikaz: integer;
idStroj: integer;
idPaleta: integer;
datVyroba: TDateTime;
f: TformPekarna;
f2: TformTiskyNahledy;
opakTisky: boolean;
end;
var
formZahajeniPalety: TformZahajeniPalety;
idKmen: Integer;
cPal, typPal: string;
m1, m2: integer;
mn, mnSum, mn2: integer;
idFormPL, idFormPS, idFormKA: integer;
idFormKL: integer; // Kartonový štítek (Zebra)
implementation
uses System.DateUtils, System.StrUtils, System.Math,
helUtils, helTabsBIDs, datMod;
{$R *.dfm}
function TformZahajeniPalety.GenerujJSON (idPrikaz, idVyrCis, idEvidROp: integer; mn: Extended): TJsonObject;
var lSQL, jsonOut: string;
oMain, oPrikaz, oVyrCislo: TJsonObject;
aVyrCisla, aVydejky, aPrijemky: TJsonArray;
begin
oMain:= TJsonObject.Create;
try
if (idPrikaz>0) then
begin
// prikaz
oPrikaz:= oMain.O['prikaz'];
oPrikaz.I['idEvidROp']:= idEvidROp;
oPrikaz.S['akce']:= 'start';
lSQL:= 'SELECT p.ID, p.Rada, p.Prikaz, ISNULL(zm.Rada,N'''') AS RadaZM, ISNULL(zm.Kod,N'''') AS Kod, p.IDTabKmen, k.CisloZbozi, k.Nazev1, ISNULL(k.MJEvidence,N'''') AS MJ FROM ' + tblPrikaz
+ ' p LEFT JOIN ' + tblZakazModif + ' zm ON (zm.ID=p.IDZakazModif) INNER JOIN ' + tblKZ + ' k ON (k.ID=p.IDTabKmen) WHERE p.ID=' + idPrikaz.ToString;
with Helios.OpenSQL (lSQL) do
begin
oPrikaz.I['id']:= VarToStr(FieldByNameValues('ID')).ToInteger;
oPrikaz.S['rada']:= VarToStr(FieldByNameValues('Rada'));
oPrikaz.I['prikaz']:= VarToStr(FieldByNameValues('Prikaz')).ToInteger;
oPrikaz.I['id_dilce']:= VarToStr(FieldByNameValues('IDTabKmen')).ToInteger;
oPrikaz.S['cislo_zbozi']:= VarToStr(FieldByNameValues('CisloZbozi'));
oPrikaz.S['nazev']:= VarToStr(FieldByNameValues('Nazev1'));
oPrikaz.S['mj']:= VarToStr(FieldByNameValues('MJ'));
oPrikaz.F['mnozstvi']:= mn;
oPrikaz.S['modif_rada']:= VarToStr(FieldByNameValues('RadaZM'));
oPrikaz.S['modif_kod']:= VarToStr(FieldByNameValues('Kod'));
oPrikaz.D['caszahajeni']:= Now;
oPrikaz.Values['casukonceni']:= Null;
end;
if (idVyrCis>0) then
begin
lSQL:= 'SELECT VyrCislo, Popis, Mnozstvi, DatExpirace FROM ' + tblPrikazVC + ' WHERE ID=' + idVyrCis.ToString;
with Helios.OpenSQL (lSQL) do
begin
aVyrCisla:= oPrikaz.A['vyrobni_cisla'];
First;
while not(EOF) do
begin
oVyrCislo:= aVyrCisla.AddObject;
oVyrCislo.S['paletovy_list']:= VarToStr(FieldByNameValues('VyrCislo'));
oVyrCislo.S['sarze']:= VarToStr(FieldByNameValues('Popis')); // sarze
oVyrCislo.F['mnozstvi']:= VarToStr(FieldByNameValues('Mnozstvi')).ToDouble;
if not(VarIsNull(FieldByNameValues('DatExpirace'))) then
oVyrCislo.D['dat_expirace']:= StrToDateTime(VarToStr(FieldByNameValues('DatExpirace')))
else
oVyrCislo.Values['dat_expirace']:= Null;
Next;
end;
end;
end;
aVydejky:= oMain.A['vydejky'];
aPrijemky:= oMain.A['prijemky'];
end;
jsonOut:= oMain.ToJSON (false);
finally
if (oPrikaz<>nil) then
FreeAndNil (oPrikaz);
// if (aVyrCisla<>nil) then
// FreeAndNil (aVyrCisla);
end;
oMain:= TJsonObject.Create;
oMain.FromUtf8JSON(jsonOut);
result:= oMain;
end;
procedure TformZahajeniPalety.NactiUdajePrikazu;
var lSQL: string;
zarukaTyp: integer;
zarukaNum: extended;
d: TDateTime;
begin
idKmen:= 0;
if (idPrikaz>0) then
begin
lSQL:= 'SELECT vp.RadaPrikaz, k.SkupZbo, k.RegCis, k.Nazev1, vp.IdTabKmen FROM ' + tblVPr + ' vp INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IdTabKmen) WHERE vp.ID=' + idPrikaz.ToString;
with Helios.OpenSQL(lSQL) do
begin
edtSZ.Text:= VarToStr(FieldByNameValues('SkupZbo'));
edtRegCis.Text:= VarToStr(FieldByNameValues('RegCis'));
edtNazev1.Text:= VarToStr(FieldByNameValues('Nazev1'));
edtZakazka.Text:= VarToStr(FieldByNameValues('RadaPrikaz'));
idKmen:= VarToStr(FieldByNameValues('IdTabKmen')).ToInteger;
end;
end;
edtPocetStitkuMax.Text:= helUtils.getHeliosStrVal (Helios, '0', 'SELECT COUNT(ID) FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + idPrikaz.ToString);
{
lSQL:= 'DECLARE @d DATETIME=GETDATE(); SELECT Datum FROM dbo.ef_GetDatumASmenu (@d)';
with Helios.OpenSQL(lSQL) do
edtDatVyroby.Text:=
edtSmena.Text:= VarToStr(FieldByNameValues('Smena'));
}
edtDatVyroby.Text:= FormatDateTime('dd.mm.yyyy', Now);
zarukaNum:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT ZarukaVystup FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString);
zarukaTyp:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TypZarukaVystup FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString); // 0-Den, 1-Mesic, 2-Rok
d:= Now;
if (zarukaTyp=0) then
d:= IncDay(Now, Floor(zarukaNum));
if (zarukaTyp=1) then
d:= IncMonth(Now, Floor(zarukaNum));
if (zarukaTyp=2) then
d:= IncYear(Now, Floor(zarukaNum));
d:= EndOfTheMonth(d);
edtDatSpotreby.Text:= FormatDateTime('dd.mm.yyyy', d);
end;
procedure TformZahajeniPalety.pnlSarzeAnoClick (Sender: TObject);
begin
rbTiskSarzeAno.Checked:= not rbTiskSarzeAno.Checked;
rbTiskSarzeNe.Checked:= not rbTiskSarzeNe.Checked;
end;
procedure TformZahajeniPalety.pnlSarzeNeClick (Sender: TObject);
begin
rbTiskSarzeAno.Checked:= not rbTiskSarzeAno.Checked;
rbTiskSarzeNe.Checked:= not rbTiskSarzeNe.Checked;
end;
procedure TformZahajeniPalety.BarvyTlacitekDleRB;
begin
if (rbTiskSarzeAno.Checked) then
begin
pnlSarzeAno.Color:= clMoneyGreen;
rbTiskSarzeAno.Color:= clMoneyGreen;
end
else
begin
pnlSarzeAno.Color:= clBtnFace;
rbTiskSarzeAno.Color:= clBtnFace;
end;
if (rbTiskSarzeNe.Checked) then
begin
pnlSarzeNe.Color:= $005B5BFF;
rbTiskSarzeNe.Color:= $005B5BFF;
end
else
begin
pnlSarzeNe.Color:= clBtnFace;
rbTiskSarzeNe.Color:= clBtnFace;
end;
if (rbTiskSpotrebaAno.Checked) then
begin
pnlSpotrebaAno.Color:= clMoneyGreen;
rbTiskSpotrebaAno.Color:= clMoneyGreen;
end
else
begin
pnlSpotrebaAno.Color:= clBtnFace;
rbTiskSpotrebaAno.Color:= clBtnFace;
end;
if (rbTiskSpotrebaNe.Checked) then
begin
pnlSpotrebaNe.Color:= $005B5BFF;
rbTiskSpotrebaNe.Color:= $005B5BFF;
end
else
begin
pnlSpotrebaNe.Color:= clBtnFace;
rbTiskSpotrebaNe.Color:= clBtnFace;
end;
if (rbTiskNaObraz.Checked) then
begin
pnlTiskNaObraz.Color:= clMoneyGreen;
rbTiskNaObraz.Color:= clMoneyGreen;
end
else
begin
pnlTiskNaObraz.Color:= clBtnFace;
rbTiskNaObraz.Color:= clBtnFace;
end;
if (rbTiskNaTisk.Checked) then
begin
pnlTiskNaTisk.Color:= $005B5BFF;
rbTiskNaTisk.Color:= $005B5BFF;
end
else
begin
pnlTiskNaTisk.Color:= clBtnFace;
rbTiskNaTisk.Color:= clBtnFace;
end;
end;
procedure TformZahajeniPalety.rbTiskNaObrazClick (Sender: TObject);
begin
if (rbTiskNaObraz.Checked) then
rbTiskNaTisk.Checked:= false;
BarvyTlacitekDleRB;
end;
procedure TformZahajeniPalety.rbTiskNaTiskClick (Sender: TObject);
begin
if (rbTiskNaTisk.Checked) then
rbTiskNaObraz.Checked:= false;
BarvyTlacitekDleRB;
end;
procedure TformZahajeniPalety.rbTiskSarzeAnoClick (Sender: TObject);
begin
if (rbTiskSarzeAno.Checked) then
rbTiskSarzeNe.Checked:= false;
BarvyTlacitekDleRB;
end;
procedure TformZahajeniPalety.rbTiskSarzeNeClick (Sender: TObject);
begin
if (rbTiskSarzeNe.Checked) then
rbTiskSarzeAno.Checked:= false;
BarvyTlacitekDleRB;
end;
procedure TformZahajeniPalety.rbTiskSpotrebaAnoClick (Sender: TObject);
begin
if (rbTiskSpotrebaAno.Checked) then
rbTiskSpotrebaNe.Checked:= false;
BarvyTlacitekDleRB;
end;
procedure TformZahajeniPalety.rbTiskSpotrebaNeClick (Sender: TObject);
begin
if (rbTiskSpotrebaNe.Checked) then
rbTiskSpotrebaAno.Checked:= false;
BarvyTlacitekDleRB;
end;
procedure TformZahajeniPalety.btnTiskStitkuClick (Sender: TObject);
var lSQL, podm, a, errMsg, rc, nazev1, nazevOp, strojNazev, sarze: string;
n1, n2, n3: integer;
bidPL, bidKA, idF, idFormNastav: integer;
d: integer;
operace: TArray<TOperace>;
jsemPeceni: boolean;
jsemBaleni: boolean;
mjDilce, szDilce: string;
ksVKA: integer;
mnozPec, mnozBal, mnoz, sumaMnoz, koefPec: extended;
iPing: integer;
// cPal, typPal: string;
i, ii, i2, ii2, id, idx, idVCPrikaz, idPalety, idEROp: integer;
pl: Int64;
mnSum: integer;
sl: TStringList;
canCont: boolean;
lHTTP: TIdHTTP;
ssl: TIdSSLIOHandlerSocketOpenSSL;
lParamList, respStream: TStringStream;
resp, resp2: string;
joOut, joIn, itemsObj: TJSONObject;
begin
// Tento výrobek nemá štítek, vytisknu pouze paletový
if not(TryStrToInt64(edtPL.Text, pl)) then
pl:= 0;
if (pl=0) then
begin
Helios.Error(#1'Nelze identifikovat číslo palety'#1);
Exit;
end;
sarze:= edtSarze.Text.Trim;
canCont:= true;
lSQL:= 'DROP TABLE IF EXISTS #AppPekarnaTisk' + CRLF;
lSQL:= lSQL + 'CREATE TABLE #AppPekarnaTisk (Typ TINYINT NOT NULL, PocetKopii SMALLINT NOT NULL DEFAULT 1, TiskSarze BIT NOT NULL DEFAULT 0, TiskDatExpirace BIT NOT NULL DEFAULT 0 )';
Helios.ExecSQL (lSQL);
if not(TryStrToInt(edtPocetStitku.Text.Trim, n1)) then
n1:= 0; // pocet kartonovych stitku
if not(TryStrToInt(edtPocetPL.Text.Trim, n2)) then
n2:= 0; // pocetPalet
if not(TryStrToInt(edtPocetStitkuMax.Text.Trim, n3)) then
n3:= 0; // pocet kartonovych stitku max
ksVKA:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT dbo.ef_Kmen_VratPocetKsVKartonu (' + idKmen.ToString + ')');
if (n1<=0) or (n2=0) then
Helios.Error(#1'Musíte zadat počet kartonových štítků a paletových listů'#1)
else
begin
{
lSQL:= 'IF OBJECT_ID(N''dbo.ep_Vyroba_GenerujPalety'', N''P'') IS NOT NULL EXEC dbo.ep_Vyroba_GenerujPalety @idPrikaz=' + idPrikaz.ToString;
lSQL:= lSQL + ', @pocetStitku=' + n1.ToString + ', @pocetPaletListu=' + n2.ToString + ', @paletaStart=N' + edtPL.Text.Trim.QuotedString;
lSQL:= lSQL + ', @sarze=N' + edtSarze.Text.Trim.QuotedString;
}
if not(opakTisky) then
begin
lSQL:= 'INSERT #AppPekarnaTisk (Typ, PocetKopii, TiskSarze, TiskDatExpirace)'
+ ' SELECT 1, ' + n2.ToString + ', ' + Abs(rbTiskSarzeAno.Checked.ToInteger).ToString + ', ' + Abs(rbTiskSpotrebaAno.Checked.ToInteger).ToString;
Helios.ExecSQL (lSQL);
try
lSQL:= 'UPDATE ' + tblPrikazVC + ' SET Popis=N' + sarze.QuotedString + ' WHERE Popis=N'''' AND IDPrikaz=' + idPrikaz.ToString + ' AND VyrCislo=N' + pl.ToString.QuotedString;
Helios.ExecSQL (lSQL);
lSQL:= 'UPDATE ' + tblPrikazVC + ' SET DatExpirace=CONVERT(datetime, N' + edtDatSpotreby.Text.QuotedString;
lSQL:= lSQL + ',104) WHERE DatExpirace IS NULL AND Popis=N' + sarze.QuotedString + ' AND IDPrikaz=' + idPrikaz.ToString + ' AND VyrCislo=N' + pl.ToString.QuotedString;
Helios.ExecSQL (lSQL);
lSQL:= 'DECLARE @i INT' + CRLF + 'SET @i=ISNULL( (SELECT ID FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + idPrikaz.ToString + ' AND VyrCislo=N' + pl.ToString.QuotedString;
lSQL:= lSQL + ' AND Popis=N' + sarze.QuotedString + '), 0)' + CRLF;
lSQL:= lSQL + 'IF (@i=0)' + CRLF + ' BEGIN' + CRLF + ' INSERT ' + tblPrikazVC + ' (IDPrikaz, VyrCislo, Popis, DatExpirace, Mnozstvi) SELECT ' + idPrikaz.ToString;
lSQL:= lSQL + ', N' + pl.ToString.QuotedString + ', N' + sarze.QuotedString + ', CONVERT(datetime, N' + edtDatSpotreby.Text.QuotedString;
lSQL:= lSQL + ',104), ' + m1.ToString.Replace(',', '.') + CRLF + ' SET @i=SCOPE_IDENTITY()' + CRLF + ' END' + CRLF + 'SELECT @i';
idVCPrikaz:= helUtils.getHeliosIntVal(Helios, 0, lSQL);
lSQL:= 'DECLARE @i INT' + CRLF;
lSQL:= lSQL + 'SET @i=ISNULL( (SELECT 1 FROM ' + tblPalety + ' WHERE IDPrikaz=' + idPrikaz.ToString + ' AND CisloPalety=N' + pl.ToString.QuotedString;
lSQL:= lSQL + ' AND Sarze=N' + sarze.QuotedString + ' AND Typ=' + typPal + '), 0)' + CRLF;
lSQL:= lSQL + 'IF (@i=0)' + CRLF + ' BEGIN' + CRLF;
lSQL:= lSQL + ' INSERT ' + tblPalety + ' (CisloPalety, IDPrikaz, IDStroj, Typ, Sarze, KusuVKA, Mnozstvi, IDVyrCisPrikaz, IDKmen, DatExpirace) SELECT N' + pl.ToString.QuotedString;
lSQL:= lSQL + ', ' + idPrikaz.ToString + ', ' + idStroj.ToString + ', ' + typPal + ', N' + sarze.QuotedString + ', ' + m1.ToString.Replace(',', '.') + ', ' + m1.ToString.Replace(',', '.');
lSQL:= lSQL + ' ,' + idVCPrikaz.ToString + ', ' + idKmen.ToString + ', CONVERT(datetime, N' + edtDatSpotreby.Text.QuotedString + ', 104)' + CRLF + ' SET @i=SCOPE_IDENTITY()' + CRLF + ' END' + CRLF;
lSQL:= lSQL + CRLF + 'SELECT @i';
idPalety:= helUtils.getHeliosIntVal (Helios, 0, lSQL);
if (f<>nil) and (idPalety>0) then
begin
try
f.grdStroje.DataSource.DataSet.Edit;
f.grdStroje.DataSource.DataSet.FieldByName('fIDPaleta').AsInteger:= idPalety;
f.grdStroje.DataSource.DataSet.Post;
except
f.grdStroje.DataSource.DataSet.Cancel;
end;
end;
// Helios.ExecSQL(lSQL);
except on E:Exception do
begin
Helios.Error (#1'Chyba založení palety ' + pl.ToString + #1 + CRLF + E.Message);
canCont:= false;
end;
end;
end;
if (opakTisky) and (idPaleta>0) then
idPalety:= idPaleta;
lSQL:= 'UPDATE ' + tblPalety + ' SET TiskDatExpirace=' + IfThen(rbTiskSpotrebaAno.Checked, '1', '0') + ', TiskSarze=' + IfThen(rbTiskSarzeAno.Checked, '1', '0')
+ ' WHERE ID=' + idPalety.ToString;
Helios.ExecSQL (lSQL);
if (canCont) and not(opakTisky) then // jen pokud neni opakovany tisk (z Nahledu tisku)
begin
// zapis do evidence rozpracovanych operaci
idEROp:= 0;
mnozPec:= 0;
mnozBal:= 0;
koefPec:= 0;
// nejdriv najdi koeficient pro dilec 702 - 1000ks, tj. ber to od posledni operace
lSQL:= 'SELECT pp.Doklad, pp.Alt, k.SkupZbo, k.MJEvidence, pp.Nazev, pp.Kusy_zad FROM ' + tblPrPost + ' pp INNER JOIN ' + tblCPrac + ' p ON (pp.pracoviste=p.Id) INNER JOIN ' + tblCStroju;
lSQL:= lSQL + ' s ON (s.IDPrac=p.ID) INNER JOIN ' + tblKZ + 'k ON (k.ID=pp.dilec)';
lSQL:= lSQL + ' WHERE pp.IDPrikaz=' + idPrikaz.ToString + ' AND pp.Priorita=0 AND pp.IDOdchylkyDo IS NULL AND s.ID=' + idStroj.ToString;
lSQL:= lSQL + ' ORDER BY pp.Odvadeci DESC, pp.Doklad DESC';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
First;
while not(EOF) do
begin
nazevOp:= VarToStr(FieldByNameValues('Nazev'));
jsemPeceni:= false;
if (nazevOp.ToLower='pečení') then
begin
jsemPeceni:= true;
mnozPec:= VarToStr(FieldByNameValues('Kusy_zad')).ToExtended;
end;
jsemBaleni:= false;
if (nazevOp.ToLower='balení') then
begin
jsemBaleni:= true;
mnozBal:= VarToStr(FieldByNameValues('Kusy_zad')).ToExtended;
end;
if (mnozBal>0) and (mnozPec>0) then
koefPec:= (mnozBal/mnozPec);
Next;
end;
end;
lSQL:= 'SELECT pp.Doklad, pp.Alt, k.SkupZbo, k.MJEvidence, pp.Nazev, pp.Kusy_zad FROM ' + tblPrPost + ' pp INNER JOIN ' + tblCPrac + ' p ON (pp.pracoviste=p.Id) INNER JOIN ' + tblCStroju;
lSQL:= lSQL + ' s ON (s.IDPrac=p.ID) INNER JOIN ' + tblKZ + 'k ON (k.ID=pp.dilec)';
lSQL:= lSQL + ' WHERE pp.IDPrikaz=' + idPrikaz.ToString + ' AND pp.Priorita=0 AND pp.IDOdchylkyDo IS NULL AND s.ID=' + idStroj.ToString;
lSQL:= lSQL + ' ORDER BY pp.Odvadeci, pp.Doklad';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
idEROp:= 0;
First;
while not(EOF) do
begin
szDilce:= VarToStr(FieldByNameValues('SkupZbo'));
mjDilce:= VarToStr(FieldByNameValues('MJEvidence'));
{
nazevOp:= VarToStr(FieldByNameValues('Nazev'));
jsemPeceni:= false;
if (nazevOp.ToLower='pečení') then
begin
jsemPeceni:= true;
mnozPec:= VarToStr(FieldByNameValues('Kusy_zad')).ToExtended;
end;
jsemBaleni:= false;
if (nazevOp.ToLower='balení') then
begin
jsemBaleni:= true;
mnozBal:= VarToStr(FieldByNameValues('Kusy_zad')).ToExtended;
end;
if (mnozBal>0) and (mnozPec>0) then
koefPec:= (mnozBal/mnozPec);
}
if (idEROp=0) then
begin
lSQL:= 'DECLARE @i INT' + CRLF + 'EXEC @i=dbo.ep_Vyroba_InsertEvidRozpracOper @IDZamestnance=' + datMod.idZamMistr.ToString + ', @IDStroje=' + datMod.aktIdStroj.ToString + 'SELECT @i';
idEROp:= helUtils.getHeliosIntVal (Helios, 0, lSQL);
end;
d:= VarToStr(FieldByNameValues('Doklad')).ToInteger;
a:= VarToStr(FieldByNameValues('Alt'));
lSQL:= 'DECLARE @i INT' + CRLF + 'EXEC @i=dbo.ep_Vyroba_InsertEvidRozpracOperPol @IdEvidRozpOper=' + idEROp.ToString + ', @IdPrikaz=' + idPrikaz.ToString + ', @doklPrPost=' + d.ToString;
lSQL:= lSQL + ', @altPrPost=N' + a.QuotedString + ', @cisloPL=N' + pl.ToString.QuotedString + ', @sarze=N' + sarze.QuotedString;
if (mjDilce.ToLower='ka') then
lSQL:= lSQL + IfThen(n1>0, ', @mnozOdv=' + n1.ToString, '');
if (mjDilce.ToLower='1000ks') and (koefPec<>0) then
lSQL:= lSQL + IfThen(n1>0, ', @mnozOdv=' + (helUtils.RoundToEX(n1/koefPec, -3)).ToString.Replace(',', '.'), '');
lSQL:= lSQL + ', @IdVyrCis=' + idVCPrikaz.ToString;
Helios.ExecSQL(lSQL);
// lSQL:= 'UPDATE ' + tblPalety + ' SET DatZahajeni=GETDATE() WHERE IDPrikaz=' + idPrikaz.ToString + ' AND Sarze=N' + edtSarze.Text.QuotedString + ' AND CisloPalety=N' + edtPL.Text.QuotedString;
lSQL:= 'UPDATE ' + tblPalety + ' SET DatZahajeni=GETDATE() WHERE ID=' + idPalety.ToString;
Helios.ExecSQL(lSQL);
Next;
end;
end;
// posli JSON o vyrobene palete
try
resp:= GenerujJSON (idPrikaz, idVCPrikaz, idEROp, n1).ToJSON (true).Replace(#10,'').Replace(#9,'').Replace('''','');
if (resp<>'') and (idPalety>0) and (datMod.phServer<>'') then
begin
resp:= TJson.JsonEncode(resp);
lSQL:= 'UPDATE ' + tblPalety + ' SET JSONDataStart=N' + resp.QuotedString + ' WHERE ID=' + idPalety.ToString;
Helios.ExecSQL(lSQL);
try
lParamList:= TStringStream.Create('');
lParamList.WriteString (resp);
respStream:= TStringStream.Create('');
iPing:= uPing.Ping (datMod.phServer, resp);
// if (iPing=0) then
// begin
// http klient je stejny
lHTTP:= TIdHTTP.Create;
if (datMod.phServer.Contains('https')) then
begin
ssl:= TIdSSLIOHandlerSocketOpenSSL.Create(nil);
ssl.SSLOptions.Method:= sslvTLSv1_2;
ssl.SSLOptions.Mode:= sslmUnassigned;
lHTTP.IOHandler:= ssl;
end;
lHTTP.HTTPOptions:= [hoKeepOrigProtocol, hoForceEncodeParams, hoNoProtocolErrorException, hoWantProtocolErrorContent];
lHTTP.Request.ContentType := 'application/ld+json';
lHTTP.Request.Accept := 'application/ld+json, text/javascript, */*; q=0.01';
resp:= '';
lHTTP.Post (datMod.phServer + IfThen(datMod.phServer.EndsWith('/'), '', '/') + 'prikaz', lParamList, respStream);
resp:= respStream.DataString.Replace('\/', '/');
Helios.ExecSQL('UPDATE ' + tblPalety + ' SET JSONStartResp=N' + resp.QuotedString + ' WHERE ID=' + idPalety.ToString);
// end;
finally
respStream.Free;
lParamList.Free;
if (ssl<>nil) then
ssl.Free;
lHTTP.Free;
end;
end;
except
end;
end; // jen pokud neni opakovany tisk (z Nahledu tisku)
if (canCont) then
begin
bidPL:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_Vyroba_Palety''');
// idF:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblFormDef + ' WHERE Nazev2=N''PEK-2''');
if (bidPL>100000) then
begin
if (idFormKA>0) then // Kartonový štítek (Zebra)
begin
lSQL:= 'SELECT TOP(1) ID FROM ' + tblTiskDef + ' WHERE FormDefID=' + idFormKA.ToString + ' AND LoginName IS NULL ORDER BY Prednastaveno DESC';
idFormNastav:= helUtils.getHeliosIntVal (Helios, 0, lSQL);
if (idFormNastav=0) then
begin
lSQL:= 'INSERT ' + tblTiskDef + ' (FormDefID, Nazev, Prednastaveno, Implicitni, LevyOkraj, HorniOkraj, TiskFronta) SELECT ' + idFormKA.ToString
+ ', N''Tisk Zebra'', 1, 0, 0, 0, N''Zebra''' + CRLF + 'SELECT SCOPE_IDENTITY()';
idFormNastav:= helUtils.getHeliosIntVal (Helios, 0, lSQL);
end;
Helios.ExecSQL('UPDATE ' + tblTiskDef + ' SET PocetKopii=' + n1.ToString + ' WHERE ID=' + idFormNastav.ToString);
if (rbTiskNaObraz.Checked) then
begin
if (idFormNastav>0) then
Helios.ExecSQL ('UPDATE ' + tblTiskDef + ' SET ZobrazNahled=1 WHERE ID=' + idFormNastav.ToString);
// Helios.RunAction2 (bid, podm, 'ActionPrint');
end
else
begin
if (idFormNastav>0) then
Helios.ExecSQL ('UPDATE ' + tblTiskDef + ' SET ZobrazNahled=0 WHERE ID=' + idFormNastav.ToString);
end;
podm:= 'hvw_Vyroba_Palety.CisloPalety=N' + pl.ToString.QuotedString;
// for i:=1 to n1 do
Helios.PrintForm3 (bidPL, idFormKA, podm);
end;
// paletovy list
if (bidPL>100000) and (idFormPL>0) then
begin
podm:= 'hvw_Vyroba_Palety.CisloPalety=N' + pl.ToString.QuotedString;
if (rbTiskNaObraz.Checked) and (1=0) then
// Helios.RunAction2 (bid, podm, 'ActionPrint')
else
for i:=1 to n2 do
Helios.PrintForm3 (bidPL, idFormPL, podm); // paletovy list
end;
end;
end;
end;
if not(opakTisky) then
dm.NactiStrojeAPraci (f);
Close;
end;
procedure TformZahajeniPalety.FormShow (Sender: TObject);
var lSQL, dat : string;
mx: integer;
begin
if (datVyroba=0) then
datVyroba:= Now;
SetWindowLong(btnTiskStitku.Handle, GWL_STYLE, GetWindowLong((btnTiskStitku as TWinControl).Handle, GWL_STYLE) or BS_MULTILINE);
NactiUdajePrikazu;
if (idKmen=0) and (idPrikaz>0) then
idKmen:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT IDTabKmen FROM ' + tblPrikaz + ' WHERE ID=' + idPrikaz.ToString);
if (datMod.sqlLang='czech') then
edtSarze.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT dbo.ef_Vyroba_VratCisloSarze (NULL, 1, 1)') // datum, typ 1=cz/2=gb, iso
else
edtSarze.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT dbo.ef_Vyroba_VratCisloSarze (NULL, 1, 0)'); // datum, typ 1=cz/2=gb, iso
lblKANaPal.Caption:= '';
m1:= 0;
lSQL:= 'SELECT 1 FROM ' + tblMJZbo + ' WHERE KodMJ1=N''KA'' AND KodMJ2=N''Pal'' AND IDKmenZbozi=' + idKmen.ToString;
if (helUtils.sqlExistsTestGeneral(Helios, lSQL)) then
begin
m1:= helUtils.getHeliosIntVal(Helios, 0, lSQL.Replace('T 1 F', 'T PocetHlavni F'));
lblKANaPal.Caption:= '(KA/pal)';
end;
edtPocetStitku.Text:= m1.ToString;
edtPocetStitkuMax.Text:= m1.ToString;
edtPocetPL.Text:= '2'; // tiskne se jeden nebo dva paletove listy
idFormKA:= 0; // Kartonový štítek (Zebra)
idFormPS:= 0;
idFormPL:= 0;
lSQL:= 'SELECT * FROM ' + tblKZe + ' WHERE ID=' + idKmen.ToString;
with Helios.OpenSQL(lSQL) do
if (RecordCount=1) then
begin
First;
if not(TryStrToInt(VarToStr(FieldByNameValues('_KL')), idFormKA)) then
idFormKA:= 0;
if not(TryStrToInt(VarToStr(FieldByNameValues('_PalStitek')), idFormPS)) then
idFormPS:= 0;
if not(TryStrToInt(VarToStr(FieldByNameValues('_PLKK')), idFormPL)) then
idFormPL:= 0;
end;
lblWarnStitekKA.Visible:= (idFormKA=0);
lblWarnStitekPL.Visible:= (idFormPL=0);
edtBarvaStitku.Text:= '';
edtTypStitku.Text:= '';
edtVelkostStitku.Text:= '';
with Helios.OpenSQL ('SELECT * FROM ' + tblKZe + ' WHERE ID=' + idKmen.ToString) do
begin
edtBarvaStitku.Text:= VarToStr(FieldByNameValues('_ASOL_BarvaStitku'));
// edtTypStitku.Text:= VarToStr(FieldByNameValues('_ASOL_BarvaStitku'));
edtVelkostStitku.Text:= VarToStr(FieldByNameValues('_RozmerStitku'));
end;
{
lSQL:= 'SELECT ke._KL FROM ' + tblVPr + ' vp INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IdTabKmen) INNER JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID) WHERE vp.ID=' + idPrikaz.ToString;
idFormKA:= helUtils.getHeliosIntVal (Helios, 0, lSQL);
lblWarnStitekKA.Visible:= (idFormKA=0);
lSQL:= 'SELECT ke._PalStitek FROM ' + tblVPr + ' vp INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IdTabKmen) INNER JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID) WHERE vp.ID=' + idPrikaz.ToString;
idFormPS:= helUtils.getHeliosIntVal (Helios, 0, lSQL);
lSQL:= 'SELECT ke._PLKK FROM ' + tblVPr + ' vp INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IdTabKmen) INNER JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID) WHERE vp.ID=' + idPrikaz.ToString;
idFormPL:= helUtils.getHeliosIntVal (Helios, 0, lSQL);
lblWarnStitekPL.Visible:= (idFormPL=0);
}
// typ palety je nove jen jeden, neurcuje se dle kmene !!!
{
lSQL:= 'SELECT ID FROM ' + tblPrikazVC + ' WHERE LEFT(VyrCislo,1)<>N''0'' AND IDPrikaz=' + idPrikaz.ToString + ' AND (Mnozstvi-Odvedeno-Zmetky)>0';
lSQL:= lSQL + ' AND ID NOT IN (SELECT IDVyrCisPrikaz FROM ' + tblPalety + ' WHERE IDPrikaz=' + idPrikaz.ToString + ' AND DatUkonceni IS NULL)';
if (helUtils.SQLGetRowCount(Helios, lSQL)>0) then
begin
lSQL:= 'SELECT TOP(1) VyrCislo, Popis, (Mnozstvi-Odvedeno-Zmetky) AS Zbytek FROM ' + tblPrikazVC + ' WHERE LEFT(VyrCislo,1)<>N''0'' AND IDPrikaz=' + idPrikaz.ToString;
lSQL:= lSQL + ' AND (Mnozstvi-Odvedeno-Zmetky)>0 ORDER BY VyrCislo';
with Helios.OpenSQL(lSQL) do
if (RecordCount=1) then
begin
cPal:= VarToStr(FieldByNameValues('VyrCislo'));
edtSarze.Text:= VarToStr(FieldByNameValues('Popis'));
edtPocetStitku.Text:= VarToStr(FieldByNameValues('Zbytek'));
edtPocetStitkuMax.Text:= VarToStr(FieldByNameValues('Zbytek'));
end;
end
else
cPal:= helUtils.getHeliosStrVal(Helios, '', 'SELECT dbo.ef_Vyroba_VratNovyPaletovyList (3,NULL,NULL,' + idKmen.ToString + ')'); // je zadane ID kmene -> najdi podle typu kmene
}
// typ palety je nove jen jeden, neurcuje se dle kmene !!!
cPal:= '';
if not(opakTisky) then
begin
lSQL:= 'SELECT COUNT(ID) FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + idPrikaz.ToString + ' AND (Mnozstvi-Odvedeno-Zmetky)>0'
+ ' AND ID NOT IN (SELECT r.IDVyrCis FROM ' + tblRozpracOperR + ' r INNER JOIN ' + tblRozpracOper + ' h ON (h.ID=r.IDEvidRozpracOper) WHERE r.IDVyrCis IS NOT NULL)';
mx:= helUtils.getHeliosIntVal (Helios, 0, lSQL);
if (mx>0) then
begin
lSQL:= lSQL.Replace('COUNT(ID) ', 'TOP(1) VyrCislo ') + ' ORDER BY VyrCislo';
cPal:= helUtils.getHeliosStrVal (Helios, '', lSQL);
end;
if (cPal='') then
cPal:= helUtils.getHeliosStrVal(Helios, '', 'SELECT dbo.ef_Vyroba_VratNovyPaletovyList (3,NULL,NULL,NULL)');
end
else
if (idPaleta>0) then // pri opakovanem tisku znam ID z dbo._TabVyroba_Palety
begin
with Helios.OpenSQL ('SELECT * FROM ' + tblPalety + ' WHERE ID=' + idPaleta.ToString + ' AND IDPrikaz=' + idPrikaz.ToString) do
begin
if (RecordCount=1) then
begin
cPal:= VarToStr(FieldByNameValues('CisloPalety'));
edtSarze.Text:= VarToStr(FieldByNameValues('Sarze'));
dat:= VarToStr(FieldByNameValues('DatZahajeni'));
if (dat.IndexOf(' ')>-1) then
dat:= LeftStr(dat, dat.IndexOf(' ')).Trim;
edtDatVyroby.Text:= dat;
edtDatSpotreby.Text:= VarToStr(FieldByNameValues('DatExpirace'));
end;
end;
end;
edtPL.Text:= cPal;
typPal:= '0';
if (StartsText('5', cPal)) then
typPal:= '1';
if (StartsText('6', cPal)) then
typPal:= '2';
if (StartsText('7', cPal)) then
typPal:= '3';
if (StartsText('8', cPal)) then
typPal:= '4';
if (edtPocetPL.CanFocus) then
edtPocetPL.SetFocus;
end;
end.