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; 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.