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

1657 lines
50 KiB
ObjectPascal

unit frmPekarna;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, MemDS,
Vcl.ComCtrls, Vcl.ControlList, Vcl.StdCtrls, Vcl.Mask,
ddPlugin_TLB, RzDTP, Vcl.NumberBox, JvExDBGrids, JvDBGrid;
const
CRLF = #13#10;
tblVyrPozn = '[dbo].[_TabVyroba_PoznamkyVyrobnihoDne]';
tblCCP1 = '[dbo].[_TabVyroba_KontrolyCCP1]'; // kriticky kontrolni bod
tblVzorky = '[dbo].[_TabVyroba_Vzorky]';
tblVzorkyArchiv = '[dbo].[_TabVyroba_VzorkyArchiv]';
tblOdpadPek = '[dbo].[_TabVyroba_OdpadPekarna]';
tblCinnostStr = '[dbo].[_TabVyroba_StrojCinnost]';
tblObjednavky = '[dbo].[_TabVyroba_Objednavky]';
tblObjednavkyPol = '[dbo].[_TabVyroba_Objednavky_Pol]';
stredPekarna = 211;
skladMat = 311;
skladMouka = 211;
type
TformPekarna = class(TForm)
GridPanel1: TGridPanel;
grdPlanDnes: TJvDBGrid;
GridPanel2: TGridPanel;
sgInfo: TStringGrid;
infoTimer: TTimer;
sgCas: TStringGrid;
grdStroje: TJvDBGrid;
Label1: TLabel;
pgCtrlPlan: TPageControl;
shPlanDnes: TTabSheet;
GridPanel3: TGridPanel;
btnVyrobniDenik: TButton;
btnObjednavkaMat: TButton;
btnPolotovar: TButton;
btnZadaniMimoPlan: TButton;
btnPrijemNestandard: TButton;
ledtVyrobniDen: TRzDateTimePicker;
shPlanZitra: TTabSheet;
GridPanel5: TGridPanel;
btnSpravaVzorku: TButton;
btnMicharna: TButton;
btnNahledTisky: TButton;
btnAktualniSarze: TButton;
shRozpracovanePL: TTabSheet;
grdPlanZitra: TDBGrid;
GridPanel6: TGridPanel;
memVyrobniPoznamka: TMemo;
GridPanel4: TGridPanel;
GridPanel7: TGridPanel;
GridPanel8: TGridPanel;
GridPanel9: TGridPanel;
GridPanel10: TGridPanel;
edtVybranyStroj: TLabeledEdit;
edtMistr: TLabeledEdit;
btnKontrolaPeceni: TButton;
btnNovyVzorek: TButton;
btnZahajeniVyrobyPalety: TButton;
Label2: TLabel;
edtAktVyrobek: TEdit;
btnUkonceniVyrobyPalety: TButton;
GridPanel11: TGridPanel;
Label3: TLabel;
Label4: TLabel;
GridPanel12: TGridPanel;
btnOdpadOprava: TButton;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
edtOdpadStroj: TEdit;
edtOdpadMokry: TNumberBox;
edtOdpadSuchy: TNumberBox;
edtOdpadPoznamka: TEdit;
edtOdpadSmena: TEdit;
GridPanel13: TGridPanel;
GridPanel14: TGridPanel;
Label10: TLabel;
Label11: TLabel;
timerPrehled: TTimer;
grdRozpracovane: TJvDBGrid;
GridPanel15: TGridPanel;
Label12: TLabel;
GridPanel16: TGridPanel;
edtVyraditPaletu: TEdit;
btnVyraditPaletuZVyroby: TButton;
edtNazevRozpracVyrobku: TEdit;
edtRozpracZakazka: TEdit;
procedure FormResize(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure infoTimerTimer(Sender: TObject);
procedure sgInfoDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
procedure sgCasDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnPrijemNestandardClick(Sender: TObject);
procedure grdStrojeCellClick(Column: TColumn);
procedure memVyrobniPoznamkaExit(Sender: TObject);
procedure ledtVyrobniDenChange(Sender: TObject);
procedure edtMistrClick(Sender: TObject);
procedure btnKontrolaPeceniClick(Sender: TObject);
procedure btnSpravaVzorkuClick(Sender: TObject);
procedure btnNovyVzorekClick(Sender: TObject);
procedure btnZahajeniVyrobyPaletyClick(Sender: TObject);
procedure btnVyrobniDenikClick(Sender: TObject);
procedure grdStrojeMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure btnZadaniMimoPlanClick(Sender: TObject);
procedure btnAktualniSarzeClick(Sender: TObject);
procedure btnNahledTiskyClick(Sender: TObject);
procedure grdStrojeDblClick(Sender: TObject);
procedure btnObjednavkaMatClick(Sender: TObject);
procedure timerPrehledTimer(Sender: TObject);
procedure edtOdpadMokryExit (Sender: TObject);
procedure edtOdpadSuchyExit (Sender: TObject);
procedure edtOdpadPoznamkaExit (Sender: TObject);
procedure shRozpracovanePLShow (Sender: TObject);
procedure shPlanDnesShow (Sender: TObject);
procedure FormCreate (Sender: TObject);
procedure grdPlanDnesTitleClick (Column: TColumn);
procedure btnPolotovarClick (Sender: TObject);
procedure btnUkonceniVyrobyPaletyClick (Sender: TObject);
procedure grdPlanDnesDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure grdStrojeDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure grdRozpracovaneDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure btnOdpadOpravaClick (Sender: TObject);
procedure grdRozpracovaneDblClick (Sender: TObject);
procedure btnMicharnaClick (Sender: TObject);
procedure grdRozpracovaneCellClick (Column: TColumn);
procedure grdPlanDnesCellClick (Column: TColumn);
procedure grdPlanDnesMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure grdPlanDnesDblClick (Sender: TObject);
private
procedure NactiPoznamkyVyrobnihoDne;
public
Helios: IHelios;
apiMod: boolean;
apiServer: string;
runTimerRozprac: boolean;
end;
implementation
uses System.DateUtils, System.StrUtils,
datMod, helUtils, helTabsBIDs,
frmPrijemNestandard, frmKontrolaCCP1, frmTiskKAStitku, frmZahajeniPalety, frmUkonceniPalety, frmAktSarze,
frmTiskyNahledy, frmPLZakazky, frmVyrobniDenik, frmPredvyroba, frmVyrobaMimoPlan,// frmZahajeniVyrobyPalety,
frmVyberCinnostiStroje, frmZasobaObjednavky, frmOdpady, frmPrehledMicharna, frmSpravaVzorku;
var
formPekarna: TformPekarna;
initOK: Boolean;
oVar1, oVar2: OleVariant;
url: string;
arrStroje: TArray<integer>;
arrGrdStrojeWidths: TArray<Extended>;
clickQry: TStringList;
lastClick, lastClick2: string;
grdStrojeAktRow, grdStrojeAktCol: integer;
prikazPrerusit: boolean;
aktIdStr, aktIdKmen, aktIdPlan, idPrikazPlanDnes, idPrikazRozprac, idPoznamkaVyrbnihoDne: integer;
aRowStroj, aColStroj: integer;
aRowPlanDnes, aColPlanDnes: integer;
usrId, cisZamMistr, idZamMistr: integer;
// TitleOffset: Byte;
Pt: TPoint;
Cell: TGridCoord;
// Column: TColumn;
{$R *.dfm}
function GetDBGridIndexByFieldName (aGrd: TDBGrid; aFld: string): integer;
var i: integer;
begin
result:= -1;
for i:=0 to aGrd.Columns.Count-1 do
if (aGrd.Columns.Items[i].FieldName=aFld) then
result:= i;
end;
procedure InsertClickQuery (compName: string);
begin
if (clickQry.Count>0) then
begin
if (clickQry.Strings[clickQry.Count-1]<>compName) then
begin
if (clickQry.Count>1) then
lastClick2:= clickQry.Strings[clickQry.Count-2]
else
lastClick2:= lastClick;
if (clickQry.Count>2) then
clickQry.Delete(0);
clickQry.Add(compName);
lastClick:= clickQry.Strings[clickQry.Count-1];
end
else
lastClick:= compName;
end
else
begin
clickQry.Add(compName);
lastClick:= compName;
end;
end;
procedure TformPekarna.btnAktualniSarzeClick (Sender: TObject);
var f: TformAktSarze;
begin
// click query
InsertClickQuery ('btnAktualniSarze');
f:= TformAktSarze.Create(nil);
try
f.Helios:= Helios;
f.idKmen:= datMod.aktIdKmen;
f.vyrDen:= ledtVyrobniDen.DateTime;
f.smena:= sgInfo.Cells[3, 1].ToInteger;
f.ShowModal;
finally
f.Free;
end;
end;
procedure TformPekarna.btnKontrolaPeceniClick (Sender: TObject);
var f: TformKontrolaCCP1;
d: TDateTime;
begin
// click query
InsertClickQuery ('btnKontrolaPeceni');
if (edtMistr.Text='') then
begin
Helios.Error(#1'Nejdřív vyberte mistra'#1);
if (edtMistr.CanFocus) then
edtMistr.SetFocus;
end
else
begin
f:= TformKontrolaCCP1.Create (nil);
try
f.vyrobniDen:= ledtVyrobniDen.DateTime;
f.Helios:= Helios;
dm.NactiCCP1 (f);
f.ShowModal;
finally
f.Free;
end;
end;
end;
procedure TformPekarna.btnMicharnaClick (Sender: TObject);
var f: TformPrehledMicharna;
begin
// click query
InsertClickQuery ('btnMicharna');
f:= TFormPrehledMicharna.Create(nil);
try
f.Helios:= Helios;
f.ShowModal;
finally
f.Free;
end;
end;
procedure TformPekarna.btnNahledTiskyClick (Sender: TObject);
var f: TformTiskyNahledy;
begin
// click query
InsertClickQuery ('btnNahledTisky');
f:= TformTiskyNahledy.Create (nil);
try
f.idKmen:= datMod.aktIdKmen;
f.idPrikaz:= datMod.aktIdPrikaz;
f.idPaleta:= datMod.aktIDPaleta;
f.Helios:= Helios;
f.HeliosHandle:= Application.Handle;
f.ShowModal;
finally
f.Free;
end;
end;
procedure TformPekarna.btnNovyVzorekClick (Sender: TObject);
var lSQL, podm: string;
aktArchiv, lastArchiv: string;
i, idArchiv, idVzorek, bid, idF: integer;
begin
// click query
InsertClickQuery ('btnNovyVzorek');
if (edtVybranyStroj.Text='') then
begin
Helios.Error(#1'Nejprve vyberte stroj.'#1);
Exit;
end;
if (aktIdKmen=0) then
begin
Helios.Error(#1'Na vybraném stroji neprobíhá výroba.'#1);
Exit;
end;
i:= 0;
idArchiv:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TOP(1) ID FROM ' + tblVzorkyArchiv + ' WHERE DatUkonceni IS NULL ORDER BY DatPorizeni');
if (idArchiv=0) then
begin
lastArchiv:= helUtils.getHeliosStrVal(Helios, '', 'SELECT TOP(1) Archiv FROM ' + tblVzorkyArchiv + ' WHERE DatUkonceni IS NOT NULL ORDER BY DatUkonceni DESC');
if (lastArchiv='') then
i:= 1
else
i:= StrToInt(RightStr(lastArchiv, 4)) + 1;
aktArchiv:= YearOf(Now).ToString + 'PE' + StringOfChar('0', 4-Length(i.ToString)) + i.ToString;
lSQL:= 'INSERT ' + tblVzorkyArchiv + ' (Archiv) SELECT N' + aktArchiv.QuotedString + CRLF + 'SELECT SCOPE_IDENTITY() AS newid';
try
with Helios.OpenSQL(lSQL) do
idArchiv:= VarToStr(FieldByNameValues('newid')).ToInteger;
except
idArchiv:= 0;
end;
end;
if (idArchiv>0) then
begin
lSQL:= 'INSERT ' + tblVzorky + ' (IDArchiv, IDStroj, IDKmenZbozi, CisloZamMistr) SELECT ' + idArchiv.ToString + ', ' + aktIdStr.ToString + ', ' + aktIdKmen.ToString + ', ' + cisZamMistr.ToString;
lSQL:= lSQL + CRLF + 'SELECT SCOPE_IDENTITY()';
try
idVzorek:= helUtils.getHeliosIntVal(Helios, 0, lSQL);
Helios.Info(#1'Nový vzorek zapsán.'#1);
bid:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_Vyroba_Vzorky''');
idF:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblFormDef + ' WHERE Nazev2=N''PEK-4''');
if (bid>100000) and (idF>0) then
begin
podm:= 'hvw_Vyroba_Vzorky.ID=' + idVzorek.ToString;
Helios.PrintForm3 (bid, idF, podm);
end;
except on E:Exception do
Helios.Info(#1'Chyba zápisu vzorku: '#1 + E.Message);
end;
end;
end;
procedure TformPekarna.btnObjednavkaMatClick (Sender: TObject);
var podm: string;
f: TformZasobaObjednavky;
begin
// click query
InsertClickQuery ('btnObjednavkaMat');
{
podm:= 'TabPohybyZbozi.ID IN (SELECT p.ID FROM ' + tblPZ + ' p INNER JOIN ' + tblDZ + ' d ON (d.ID=p.IDDoklad) WHERE d.IDSklad=N' + skladMat.ToString.QuotedString + ' AND d.DruhPohybuZbo=4';
podm:= podm + ' AND d.PoradoveCislo>0 AND d.RadaDokladu=N''231'' AND d.Realizovano=0)';
Helios.OpenBrowse(bidPZ, podm);
}
helUtils.waitStart(nil, 'Načítají se data...', 1, 255);
f:= TformZasobaObjednavky.Create(nil);
try
f.Helios:= Helios;
f.vyrobniDen:= ledtVyrobniDen.DateTime;
f.ShowModal;
finally
f.Free;
end;
end;
procedure TformPekarna.btnPolotovarClick (Sender: TObject);
var podm, oldSkl: string;
f: TformPredvyroba;
begin
// click query
InsertClickQuery ('btnPolotovar');
f:= TformPredvyroba.Create(nil);
try
f.Helios:= Helios;
f.ShowModal;
finally
f.Free;
end;
{
oldSkl:= Helios.Sklad;
Helios.SetSklad('211');
podm:= 'TabStavSkladu.IDSklad=N''211'' AND TabStavSkladu.IDKmenZbozi IN (SELECT ID FROM ' + tblKZ + ' WHERE Nazev1 LIKE N''%polotovar%'')';
Helios.OpenBrowse2(bidSS, podm, 609);
Helios.SetSklad(oldSkl);
}
end;
procedure TformPekarna.btnPrijemNestandardClick (Sender: TObject);
var f: TformPrijemNestandard;
begin
// click query
InsertClickQuery ('btnPrijemNestandard');
f:= TformPrijemNestandard.Create(nil);
try
f.aktIdStroj:= aktIdStr;
f.Helios:= Helios;
f.ShowModal;
finally
f.Free;
end;
end;
procedure TformPekarna.btnSpravaVzorkuClick (Sender: TObject);
var f: TformSpravaVzorku;
begin
// click query
InsertClickQuery ('btnSpravaVzorku');
f:= TformSpravaVzorku.Create(nil);
try
f.Helios:= Helios;
f.ShowModal;
finally
f.Free;
end;
end;
procedure TformPekarna.btnUkonceniVyrobyPaletyClick (Sender: TObject);
var f: TformUkonceniPalety;
begin
// click query
InsertClickQuery ('btnUkonceniVyrobyPalety');
f:= TformUkonceniPalety.Create(nil);
try
f.Helios:= Helios;
f.prerusit:= prikazPrerusit;
f.denSmena:= ledtVyrobniDen.DateTime.Format('ddmmyyyy') + '/' + sgInfo.Cells[3, 1].Trim;
f.paleta:= dm.vtStroje.FieldByName('fAktPaletList').AsString;
f.sarze:= dm.vtStroje.FieldByName('fSarze').AsString;
f.idStroj:= dm.vtStroje.FieldByName('fIDStroj').AsInteger;
f.idEvEOp:= dm.vtStroje.FieldByName('fIDEvidRozpOper').AsInteger;
f.idVPr:= dm.vtStroje.FieldByName('fIDPrikaz').AsInteger;
f.ShowModal;
finally
f.Free;
end;
dm.NactiStrojeAPraci (self);
end;
procedure TformPekarna.btnVyrobniDenikClick (Sender: TObject);
var f: TformVyrobniDenik;
begin
// click query
InsertClickQuery ('btnVyrobniDenik');
f:= TformVyrobniDenik.Create(nil);
try
f.den:= ledtVyrobniDen.DateTime;
f.Helios:= Helios;
f.ShowModal;
finally
f.Free;
end;
end;
procedure TformPekarna.btnZadaniMimoPlanClick (Sender: TObject);
var f: TformVyrobaMimoPlan;
begin
// click query
InsertClickQuery ('btnZadaniMimoPlan');
if (edtMistr.Text='') then
begin
Helios.Error(#1'Není vybrán Mistr, nelze pokračovat.'#1);
Exit;
end;
datMod.bmIdStroj:= datMod.aktIdStroj;
f:= TformVyrobaMimoPlan.Create (nil);
try
helUtils.waitStart(nil, 'Načítají se data...');
f.Helios:= Helios;
f.ShowModal;
finally
f.Free;
end;
helUtils.waitEnd;
dm.NactiStrojeAPraci (self);
if (datMod.bmIdStroj>0) then
dm.vtStroje.Locate('fIDStroj', VarArrayOf([datMod.bmIdStroj]), [loPartialKey]);
dm.NactiPlanStroje (self, datMod.bmIdStroj);
end;
procedure TformPekarna.btnZahajeniVyrobyPaletyClick (Sender: TObject);
var //f: TformZahajeniVyrobyPalety;
f2: TformZahajeniPalety;
idVPr, pocetPal, d: integer;
lSQL, v, c, msg, a, varJeText: string;
rc, nazev1, strojNazev: string;
startNew, startRozprac: boolean;
vyrTyp: byte;
begin
vyrTyp:= 0;
// "kontrola rozpracovane vyroby"
// "Na stroji xxx je ve výrobě x palet(-a) číslo abc. Pokud na ni chcete pracovat, zadejte z Rozpracovanosti. Pokračovat v zadání nové palety ?"
startNew:= (lastClick='grdPlanDnes') and (lastClick2='grdStroje');
startRozprac:= (lastClick='grdRozpracovane') and (lastClick2='grdStroje');
// click query
InsertClickQuery ('grdZahajeniVyrobyPalety');
c:= grdStroje.DataSource.DataSet.FieldByName('fCinnost').AsString;
if (c<>'Výroba') then
btnZahajeniVyrobyPalety.Enabled:= true;
{
v:= grdStroje.DataSource.DataSet.FieldByName('fVyrobek').AsString;
if (v='') then
Exit;
}
if (edtMistr.Text='') then
begin
Helios.Error(#1'Není vybrán Mistr, nelze pokračovat.'#1);
Exit;
end;
datMod.bmIdStroj:= datMod.aktIdStroj;
idVPr:= 0;
aktIdKmen:= 0;
if (grdStroje.DataSource.DataSet.FieldByName('fIDPrikaz').AsString<>'') then
idVPr:= grdStroje.DataSource.DataSet.FieldByName('fIDPrikaz').AsInteger;
if (idVPr>0) and (c='Výroba') then
begin
pocetPal:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT COUNT(ID) FROM ' + tblPalety + ' WHERE IDPrikaz=' + idVPr.ToString);
varJeText:= 'je';
if (pocetPal>1) then
varJeText:= 'jsou';
msg:= #1'Na stroji ' + grdStroje.DataSource.DataSet.FieldByName('fStroj').AsString + ' je ve výrobě paleta číslo '#1;
msg:= msg + grdStroje.DataSource.DataSet.FieldByName('fAktPaletList').AsString + IfThen(pocetPal>1, ' a další ' + (pocetPal-1).ToString + ' následující', '') + CRLF;
if (pgCtrlPlan.ActivePage=shPlanDnes) then
begin
if (datMod.bmIdPlanDnes>0) and (startNew) then
begin
msg:= msg + 'Chcete její výrobu přerušit s evidencí vyrobených kartonů' + CRLF +' a začít vyrábět ' + #1 + grdPlanDnes.DataSource.DataSet.FieldByName('fRegCis').AsString;
msg:= msg + ' ' + grdPlanDnes.DataSource.DataSet.FieldByName('fVyrobek').AsString + #1 + ' ?';
if (Helios.YesNo(msg, false)) then
begin
Helios.Info('Výroba palety '#1 + grdStroje.DataSource.DataSet.FieldByName('fAktPaletList').AsString + #1' bude přerušena.' + CRLF + 'Při přerušení zadejte počet vyrobených kartonů');
prikazPrerusit:= true;
btnUkonceniVyrobyPaletyClick (Sender);
prikazPrerusit:= false;
msg:= '';
end
else
Exit;
end
else
if (msg<>'') then
begin
Helios.Error(msg);
msg:= '';
edtAktVyrobek.Text:= '';
idVPr:= 0;
Exit;
end;
vyrTyp:= 1;
end
else
begin
msg:= msg + 'Pokud na ni chcete pracovat, zadejte z Rozpracovanosti.' + CRLF + 'Pokračovat v zadání nové palety ?'#1;
if not(Helios.YesNo(msg, false)) then
Exit;
end;
end;
if (idVPr=0) and (c<>'Výroba') and (vyrTyp=0) then
begin
vyrTyp:= 1;
end;
if (vyrTyp=1) and (pgCtrlPlan.ActivePage=shPlanDnes) and (datMod.bmIdPlanDnes>0) then
idVPr:= datMod.bmIdPlanDnes;
// if (grdPlanDnes.DataSource.DataSet.FieldByName('fIDPlan').AsString<>'') then
// idVPr:= grdPlanDnes.DataSource.DataSet.FieldByName('fIDPlan').AsInteger;
if (idVPr>0) then
aktIdKmen:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT IDTabKmen FROM ' + tblPrikaz + ' WHERE ID=' + idVPr.ToString);
d:= 0;
a:= '';
lSQL:= 'SELECT TOP(1) pp.Doklad, pp.Alt FROM ' + tblPrPost + ' pp INNER JOIN ' + tblCPrac + ' p ON (pp.pracoviste=p.Id) INNER JOIN ' + tblCStroju + ' s ON (s.IDPrac=p.ID)';
lSQL:= lSQL + ' WHERE pp.dilec=' + aktIdKmen.ToString + ' AND pp.Typ=1 AND pp.IDOdchylkyDo IS NULL AND pp.IDPrikaz=' + idVPr.ToString + ' AND s.ID=' + datMod.bmIdStroj.ToString;
with Helios.OpenSQL(lSQL) do
if (RecordCount=1) then
begin
d:= VarToStr(FieldByNameValues('Doklad')).ToInteger;
a:= VarToStr(FieldByNameValues('Alt'));
end;
{
if (d=0) then
begin
strojNazev:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev FROM ' + tblCStroju + ' WHERE ID=' + datMod.bmIdStroj.ToString);
with Helios.OpenSQL('SELECT k.RegCis, k.Nazev1 FROM ' + tblPrikaz + ' p INNER JOIN ' + tblKZ + ' k ON (k.ID=p.IdTabKmen) WHERE p.ID=' + idVPr.ToString) do
begin
rc:= VarToStr(FieldByNameValues('RegCis'));
nazev1:= VarToStr(FieldByNameValues('Nazev1'));
end;
Helios.Error('Výroba ' + #1 + nazev1 + ' není určena pro stroj ' + strojNazev + #1);
idVPr:= 0;
end;
}
if (idVPr>0) then
begin
f2:= TformZahajeniPalety.Create(nil);
try
f2.Helios:= Helios;
f2.opakTisky:= false;
f2.f:= self;
f2.idPrikaz:= idVPr;
f2.idStroj:= datMod.bmIdStroj;
f2.ShowModal;
finally
f2.Free;
end;
end;
{
helUtils.waitStart(nil, 'Načítají se data příkazů...');
f:= TformZahajeniVyrobyPalety.Create(nil);
try
f.Helios:= Helios;
f.ShowModal;
finally
f.Free;
end;
}
dm.NactiStrojeAPraci (self);
if (datMod.bmIdStroj>0) then
begin
dm.vtStroje.Locate('fIDStroj', VarArrayOf([datMod.bmIdStroj]), [loPartialKey]);
dm.NactiPlanStroje (self, datMod.bmIdStroj);
end;
if (datMod.bmIdPlanDnes>0) then
dm.vtPlanDnes.Locate('fIDPlan', VarArrayOf([datMod.bmIdPlanDnes]), [loPartialKey]);
end;
procedure TformPekarna.btnOdpadOpravaClick (Sender: TObject);
var f: TformOdpady;
begin
// click query
InsertClickQuery ('btnOdpadOprava');
f:= TformOdpady.Create(nil);
try
f.Helios:= Helios;
f.ShowModal;
finally
f.Free;
end;
end;
procedure TformPekarna.edtMistrClick (Sender: TObject);
var podm: string;
begin
// click query
InsertClickQuery ('edtMistr');
podm:= '';
if (Helios.Prenos(bidCisZam, 'TabCisZam.Cislo', oVar1, podm, 'Vyberte MISTRA', true)) then
begin
cisZamMistr:= VarToStr(oVar1).ToInteger;
datMod.cisZamMistr:= cisZamMistr;
idZamMistr:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblCisZam + ' WHERE Cislo=' + cisZamMistr.ToString);
datMod.idZamMistr:= idZamMistr;
edtMistr.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT PrijmeniJmeno FROM ' + tblCisZam + ' WHERE Cislo=' + cisZamMistr.ToString);
end;
end;
procedure TformPekarna.edtOdpadMokryExit (Sender: TObject);
var lSQL: string;
begin
if (edtOdpadMokry.Modified) or (edtOdpadSuchy.Modified) or (edtOdpadPoznamka.Modified) then
begin
lSQL:= 'DECLARE @d DATETIME=GETDATE(), @s TINYINT' + CRLF + 'SELECT @d=Datum, @s=Smena FROM dbo.ef_GetDatumASmenu(@d)' + CRLF;
lSQL:= lSQL + 'IF NOT EXISTS (SELECT 1 FROM ' + tblOdpadPek + ' WHERE IDStroje=' + aktIdStr.ToString + ' AND Smena=' + edtOdpadSmena.Text + ' AND Datum=@d)' + CRLF;
lSQL:= lSQL + ' INSERT ' + tblOdpadPek + ' (IDStroje, Smena, Datum) SELECT ' + aktIdStr.ToString + ', ' + edtOdpadSmena.Text + ', @d' + CRLF;
lSQL:= lSQL + 'UPDATE ' + tblOdpadPek + ' SET OdpadMokry=' + edtOdpadMokry.Value.ToString.Replace(',', '.') + ', OdpadSuchy=' + edtOdpadSuchy.Value.ToString.Replace(',', '.');
lSQL:= lSQL + ', Poznamka=N' + edtOdpadPoznamka.Text.Trim.QuotedString + ' WHERE IDStroje=' + aktIdStr.ToString + ' AND Smena=' + edtOdpadSmena.Text + ' AND Datum=@d';
Helios.ExecSQL(lSQL);
end;
end;
procedure TformPekarna.edtOdpadPoznamkaExit (Sender: TObject);
begin
edtOdpadMokryExit(Sender);
end;
procedure TformPekarna.edtOdpadSuchyExit (Sender: TObject);
begin
edtOdpadMokryExit(Sender);
end;
procedure TformPekarna.FormClose (Sender: TObject; var Action: TCloseAction);
begin
memVyrobniPoznamkaExit (Sender);
if (Assigned(datMod.dm)) then
begin
if (dm.vtPlanDnes.Active) then
dm.vtPlanDnes.Close;
if (dm.vtPlanZitra.Active) then
dm.vtPlanZitra.Close;
if (dm.vtStroje.Active) then
dm.vtStroje.Close;
if (dm.vtRozpracPL.Active) then
dm.vtRozpracPL.Close;
if (dm.vtVyrobniPozn.Active) then
dm.vtVyrobniPozn.Close;
clickQry.Free;
FreeAndNil (datMod.dm);
end;
end;
procedure TformPekarna.FormCreate (Sender: TObject);
begin
initOK:= false;
clickQry:= TStringList.Create;
end;
procedure TformPekarna.FormResize (Sender: TObject);
var i: integer;
begin
sgInfo.ColWidths[0]:= Trunc(0.2 * sgInfo.Width);
sgInfo.ColWidths[1]:= Trunc(0.2 * sgInfo.Width);
sgInfo.ColWidths[2]:= Trunc(0.37 * sgInfo.Width);
sgInfo.ColWidths[3]:= Trunc(0.23 * sgInfo.Width);
sgCas.ColWidths[0]:= Trunc(0.5 * sgCas.Width);
sgCas.ColWidths[1]:= Trunc(0.5 * sgCas.Width);
// prizpusobeni sirky sloupcu gridu stroju
{
grdStroje.Left:= 20;
grdStroje.Top:= 10;
grdStroje.Width:= grdStroje.Parent.Width - grdStroje.Left;
grdStroje.Options:= grdStroje.Options + [dgColumnResize];
for i:=0 to Length(arrGrdStrojeWidths)-1 do
grdStroje.Columns[i].Width:= Trunc(arrGrdStrojeWidths[i] * grdStroje.Width);
grdStroje.Options:= grdStroje.Options - [dgColumnResize];
grdStroje.Invalidate;
}
end;
procedure TformPekarna.NactiPoznamkyVyrobnihoDne;
var lSQL: string;
begin
idPoznamkaVyrbnihoDne:= 0;
datMod.vyrobniDen:= ledtVyrobniDen.DateTime;
Label1.Caption:= 'Poznámky k výrobnímu dni' + CRLF + DateToStr(ledtVyrobniDen.Date);
memVyrobniPoznamka.Text:= '';
lSQL:= 'SELECT TOP(1) ID FROM ' + tblVyrPozn + ' WHERE VyrobniDen_X=CONVERT(datetime,CONVERT(int,CONVERT(float,CONVERT(datetime,N' + DateTimeToStr(ledtVyrobniDen.DateTime).QuotedString + ',104))))';
with Helios.OpenSQL(lSQL) do
if (RecordCount=1) then
begin
idPoznamkaVyrbnihoDne:= VarToStr(FieldByNameValues('ID')).ToInteger;
memVyrobniPoznamka.Text:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Poznamka FROM ' + tblVyrPozn + ' WHERE ID=' + idPoznamkaVyrbnihoDne.ToString);
end;
end;
{
procedure TformPekarna.NactiPlanStroje;
var lSQL: string;
begin
dm.vtPlanDnes.EmptyDataSet;
if (aktIdStr>0) or (1=1) then
begin
{
lSQL:= 'DECLARE @t1 DATETIME, @t2 DATETIME' + CRLF + 'DROP TABLE IF EXISTS #planDnes' + CRLF;
lSQL:= lSQL + 'CREATE TABLE #planDnes (ID INT IDENTITY(1,1) NOT NULL, startdatetime DATETIME, enddatetime DATETIME, TrvaniMin TINYINT, CisloZakazky NVARCHAR(30), Prikaz NVARCHAR(20)';
lSQL:= lSQL + ', IDPrikaz INT, CisloZbozi NVARCHAR(33), Nazev1 NVARCHAR(100), PRIMARY KEY (ID))' + CRLF;
lSQL:= lSQL + 'DROP TABLE IF EXISTS #planPrikazyDnes' + CRLF + 'CREATE TABLE #planPrikazyDnes (ID INT NOT NULL)' + CRLF;
lSQl:= lSQL + 'INSERT #planPrikazyDnes (ID) SELECT DISTINCT(pp.IDPrikaz) FROM ' + tblPrPost + ' pp WHERE pp.IdOdchylkyDo IS NULL AND pp.IDStroje=' + aktIdStr.ToString + ' GROUP BY pp.IDPrikaz' + CRLF;
lSQL:= lSQL + 'DECLARE @idVPr INT' + CRLF + 'DECLARE p CURSOR LOCAL FOR SELECT ID FROM #planPrikazyDnes' + CRLF;
lSQL:= lSQL + 'OPEN p' + CRLF + 'WHILE (1=1)' + CRLF + ' BEGIN' + CRLF + ' FETCH NEXT FROM p INTO @idVPr' + CRLF + ' IF (@@FETCH_STATUS<>0) BREAK' + CRLF;
lSQL:= lSQL + ' SET @t1 = (SELECT MIN(X.Cas) FROM (SELECT Cas=KPP.CasOd FROM ' + tblAdvKPlan + ' KP INNER JOIN ' + tblKapacPlanPol;
lSQL:= lSQL + ' KPP ON (KPP.IDKapacPlan=KP.ID AND KPP.IDPrikaz=@idVPr) WHERE KP.Aktivni=1 UNION ALL ';
lSQL:= lSQL + 'SELECT Cas=DKP.CCasOd FROM ' + tblAdvKPlan + ' AKP INNER JOIN ' + tblAdvKPlanDavky + ' DKP ON (DKP.IDAdvKapacPlan=AKP.ID AND DKP.IDPrikaz=@idVPr)';
lSQL:= lSQL + ' WHERE AKP.Aktivni=1) X)' + CRLF;
lSQL:= lSQL + ' SET @t1 = (SELECT MAX(X.Cas) FROM (SELECT Cas=KPP.CasDo FROM ' + tblAdvKPlan + ' KP INNER JOIN ' + tblKapacPlanPol;
lSQL:= lSQL + ' KPP ON (KPP.IDKapacPlan=KP.ID AND KPP.IDPrikaz=@idVPr) WHERE KP.Aktivni=1 UNION ALL ';
lSQL:= lSQL + 'SELECT Cas=DKP.CCasDo FROM ' + tblAdvKPlan + ' AKP INNER JOIN ' + tblAdvKPlanDavky + ' DKP ON (DKP.IDAdvKapacPlan=AKP.ID AND DKP.IDPrikaz=@idVPr)';
lSQL:= lSQL + ' WHERE AKP.Aktivni=1) X)' + CRLF;
lSQL:= lSQL + ' INSERT #planDnes (IDPrikaz, startdatetime, enddatetime, CisloZakazky, Prikaz, CisloZbozi, Nazev1) SELECT vp.ID, ISNULL(@t1, vp.Plan_zadani), ISNULL(@t2, vp.Plan_ukonceni)';
lSQL:= lSQL + ', z.CisloZakazky, vp.RadaPrikaz, k.CisloZbozi, k.Nazev1 FROM ' + tblVPr + ' vp INNER JOIN ' + tblPrPost + ' pp ON (pp.IDPrikaz=vp.ID) INNER JOIN ' + tblZak;
lSQL:= lSQL + ' z ON (z.ID=vp.IDZakazka) INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IDTabKmen) WHERE vp.ID=@idVPr AND pp.IDOdchylkyDo IS NULL AND vp.StavPrikazu=30 AND pp.IDStroje=';
lSQL:= lSQL + aktIdStr.ToString + CRLF;
lSQL:= lSQL + ' END' + CRLF + 'CLOSE p' + CRLF + 'DEALLOCATE p' + CRLF;
lSQL:= lSQL + 'SELECT hr.ld AS CasDavky,' + CRLF;
lSQL:= lSQL + ' 60 - case when e.startdatetime > hr.ld then datepart(minute, e.startdatetime) else 0 END' + CRLF;
lSQL:= lSQL + ' + case when e.enddatetime < hr.ud then datepart(minute, e.enddatetime)-60 else 0 END AS allocatedminutes' + CRLF;
lSQL:= lSQL + 'FROM #planDnes AS e' + CRLF;
lSQL:= lSQL + 'CROSS APPLY' + CRLF;
lSQL:= lSQL + '(' + CRLF;
lSQL:= lSQL + ' SELECT' + CRLF;
lSQL:= lSQL + ' dateadd(hour, datepart(hour,e.startdatetime)+t.rn-1, cast(cast(e.startdatetime AS date) AS datetime)) AS ld,' + CRLF;
lSQL:= lSQL + ' dateadd(hour, datepart(hour,e.startdatetime)+t.rn, cast(cast(e.startdatetime AS date) AS datetime)) AS ud,' + CRLF;
lSQL:= lSQL + ' rn' + CRLF;
lSQL:= lSQL + ' FROM' + CRLF;
lSQL:= lSQL + ' (' + CRLF;
lSQL:= lSQL + ' -- a tally, max 100 rows .. max 100 hours duration' + CRLF;
lSQL:= lSQL + ' SELECT top (1+datediff(hour,e.startdatetime,dateadd(minute, -1, e.enddatetime))) row_number() over(order by @@spid) AS rn' + CRLF;
lSQL:= lSQL + ' FROM (values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) AS a(n)' + CRLF;
lSQL:= lSQL + ' CROSS JOIN (values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) AS b(n)' + CRLF;
lSQL:= lSQL + ' ) AS t' + CRLF;
lSQL:= lSQL + ') AS hr;';
}
{
lSQL:= 'SELECT ID FROM ' + tblVPr + ' WHERE StavPrikazu IN (20,30) AND ID NOT IN (SELECT r.IDPrikaz FROM ' + tblRozpracOper + ' h INNER JOIN ' + tblRozpracOperR;
lSQL:= lSQL + ' r ON (r.IDEvidRozpracOper=h.ID) INNER JOIN ' + tblCPrac + ' pr ON (pr.ID=h.IDPracoviste) WHERE h.Stav<30)';
lSQL:= 'SELECT vp.ID, k.ID AS idKZ, k.RegCis, k.Nazev1, dbo.hf_TruncDate(vp.Plan_zadani) AS Plan_zadani, vp.kusy_zad, vp.kusy_zive, vp.kusy_odved,'
+ ' ISNULL(z.CisloZakazky,N'''') AS CisloZakazky FROM ' + tblVPr + ' vp INNER JOIN ' + tblKZ + ' k ON (k.ID=vp.IDTabKmen) LEFT JOIN ' + tblZak
+ ' z ON (z.ID=vp.IDZakazka) WHERE vp.ID IN (' + lSQL + ') ORDER BY vp.Plan_zadani';
with Helios.OpenSQL(lSQL) do
begin
First;
if not(dm.vtPlanDnes.Active) then
dm.vtPlanDnes.Open;
dm.vtPlanDnes.EmptyDataSet;
while not(EOF) do // prikazy co nejsou nastartovane, ale zadane do vyroby
begin
dm.vtPlanDnes.Append;
dm.vtPlanDnes.FieldByName('fIDPlan').AsString:= VarToStr(FieldByNameValues('ID'));
dm.vtPlanDnes.FieldByName('fRegCis').AsString:= VarToStr(FieldByNameValues('RegCis'));
dm.vtPlanDnes.FieldByName('fVyrobek').AsString:= VarToStr(FieldByNameValues('Nazev1'));
dm.vtPlanDnes.FieldByName('fHotovo').AsExtended:= VarToStr(FieldByNameValues('kusy_odved')).ToExtended;
dm.vtPlanDnes.FieldByName('fZakazka').AsString:= VarToStr(FieldByNameValues('CisloZakazky'));
dm.vtPlanDnes.FieldByName('fDatPlanZadani').AsString:= VarToStr(FieldByNameValues('Plan_zadani'));
dm.vtPlanDnes.Post;
Next;
end;
end;
end;
end;
}
procedure TformPekarna.FormShow (Sender: TObject);
var i: integer;
lSQL: string;
begin
grdPlanDnes.Font.Height:= Helios.FontHeight;
grdRozpracovane.Font.Height:= Helios.FontHeight;
grdStroje.Font.Height:= Helios.FontHeight;
pgCtrlPlan.ActivePage:= shPlanDnes;
runTimerRozprac:= true;
sgInfo.Cells[0, 0]:= 'Rok';
sgInfo.Cells[1, 0]:= 'Týden';
sgInfo.Cells[2, 0]:= 'Výrobní den';
sgInfo.Cells[3, 0]:= 'Směna';
sgCas.Cells[0, 0]:= 'Akt. datum';
sgCas.Cells[1, 0]:= 'čas';
ledtVyrobniDen.Date:= Now;
if not(Assigned(datMod.dm)) then
datMod.dm:= Tdm.Create(self);
if (Assigned(dm)) then
begin
dm.Helios:= Helios;
if not(dm.vtPlanDnes.Active) then
dm.vtPlanDnes.Open;
dm.vtPlanDnes.EmptyDataSet;
if not(dm.vtPlanZitra.Active) then
dm.vtPlanZitra.Open;
dm.vtPlanZitra.EmptyDataSet;
if not(dm.vtStroje.Active) then
dm.vtStroje.Open;
dm.vtStroje.EmptyDataSet;
if not(dm.vtRozpracPL.Active) then
dm.vtRozpracPL.Open;
dm.vtRozpracPL.EmptyDataSet;
if not(dm.vtVyrobniPozn.Active) then
dm.vtVyrobniPozn.Open;
dm.vtVyrobniPozn.EmptyDataSet;
end;
initOK:= true;
self.Width:= Trunc(Screen.Monitors[self.Monitor.MonitorNum].WorkareaRect.Width * 0.95);
self.Height:= Trunc(Screen.Monitors[self.Monitor.MonitorNum].WorkareaRect.Height * 0.95);
datMod.compName:= GetEnvironmentVariable('COMPUTERNAME');
// zapis si koeficienty pro sirku sloupcu gridu stroju (pro upravu ve form.resize)
SetLength(arrGrdStrojeWidths, grdStroje.Columns.Count);
for i:=0 to Length(arrGrdStrojeWidths)-1 do
arrGrdStrojeWidths[i]:= grdStroje.Columns.Items[i].Width / grdStroje.Width;
infoTimerTimer (Sender);
dm.NactiDataPaneluStroje (self, arrStroje); // stroje strediska 211
if (dm.vtStroje.RecordCount>0) then
grdStrojeCellClick(grdStroje.Columns.Items[2]);
dm.NactiVyrobniPoznamky (self);
SetWindowLong(btnZahajeniVyrobyPalety.Handle, GWL_STYLE, GetWindowLong((btnZahajeniVyrobyPalety as TWinControl).Handle, GWL_STYLE) or BS_MULTILINE);
SetWindowLong(btnUkonceniVyrobyPalety.Handle, GWL_STYLE, GetWindowLong((btnUkonceniVyrobyPalety as TWinControl).Handle, GWL_STYLE) or BS_MULTILINE);
dm.NactiStrojeAPraci (self);
NactiPoznamkyVyrobnihoDne;
if (dm.vtStroje.RecordCount>0) then
dm.vtStroje.RecNo:= 1;
self.Caption:= 'PEKÁRNA '; // (obr w: ' + self.Width.ToString + '/h: ' + self.Height.ToString + ')';
usrId:= Helios.UserId;
cisZamMistr:= 0;
idZamMistr:= 0;
if (helUtils.sqlExistsTestGeneral(Helios, 'SELECT ID FROM ' + tblCZam + ' WHERE LoginId=N' + Helios.LoginName.QuotedString)) then
idZamMistr:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblCZam + ' WHERE LoginId=N' + Helios.LoginName.QuotedString);
if (idZamMistr=0) and (helUtils.getHeliosIntVal(Helios, 0, 'SELECT COUNT(ID) FROM ' + tblCZam)=1) then
idZamMistr:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TOP(1) ID FROM ' + tblCZam);
if (idZamMistr>0) then
begin
lSQL:= 'SELECT Cislo, PrijmeniJmeno FROM ' + tblCZam + ' WHERE ID=' + idZamMistr.ToString;
with Helios.OpenSQL (lSQL) do
begin
edtMistr.Text:= VarToStr(FieldByNameValues('PrijmeniJmeno'));
cisZamMistr:= VarToStr(FieldByNameValues('Cislo')).ToInteger;
end;
end;
datMod.idZamMistr:= idZamMistr;
datMod.cisZamMistr:= cisZamMistr;
pgCtrlPlan.ActivePage:= shPlanDnes;
datMod.bmIdStroj:= 0;
if (dm.vtStroje.RecordCount>0) then
datMod.bmIdStroj:= dm.vtStroje.FieldByName('fIDStroj').AsInteger;
dm.NactiPlanStroje (self, datMod.bmIdStroj, true); // dnesni plan (tj. davky kapacitniho planu)
end;
procedure TformPekarna.grdPlanDnesCellClick (Column: TColumn);
var c: string;
begin
// click query
InsertClickQuery ('grdPlanDnes');
aktIdPlan:= 0;
if (grdPlanDnes.DataSource.DataSet.RecordCount>0) then
begin
aktIdPlan:= grdPlanDnes.DataSource.DataSet.FieldByName('fIDPlan').AsInteger; // prikaz
datMod.bmIdPlanDnes:= aktIdPlan;
datMod.aktIdKmenPlan:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT IdTabKmen FROM ' + tblPrikaz + ' WHERE ID=' + aktIdPlan.ToString);
c:= 'DECLARE @i INT' + CRLF + 'DELETE FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + aktIdPlan.ToString + ' AND LEFT(VyrCislo,1)=N''0''' + CRLF;
c:= c + 'SET @i = 1 + ISNULL( (SELECT MAX(ID) FROM ' + tblPrikazVC + '), 0)' + CRLF + 'DBCC CHECKIDENT (' + dm.VratNazevTabulky(tblPrikazVC,false) + ', RESEED, @i)';
try
Helios.ExecSQL(c);
except
end;
end;
end;
procedure TformPekarna.grdPlanDnesDblClick (Sender: TObject);
begin
// click query
InsertClickQuery ('grdPlanDnes');
idPrikazPlanDnes:= grdPlanDnes.DataSource.DataSet.FieldByName('fIDPlan').AsInteger;
// Helios.ExecSQL('IF OBJECT_ID(N''tempdb..#tmpAutomatSpusteno'') IS NULL CREATE TABLE #tmpAutomatSpusteno(IDAkce INT NOT NULL)');
// Helios.RunAction2(bidVyrPrik, 'TabPrikaz.ID=' + grdPlanDnes.DataSource.DataSet.FieldByName('fIDPlan').AsString, 'ActionEdit');
end;
procedure TformPekarna.grdPlanDnesDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (not(gdSelected in State)) then
begin
if (Odd(grdPlanDnes.DataSource.DataSet.RecNo)) then
TJvDBGrid(Sender).Canvas.Brush.Color:= clWindow
else
TJvDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0;
end;
if (Column.FieldName='fVyrobek') then
begin
if (gdSelected in State) then
TJvDBGrid(Sender).Canvas.Font.Color:= clBlack;
TJvDBGrid(Sender).Canvas.Brush.Color:= $00D0FEC6;
end;
if (Column.FieldName='fHotovo') then
begin
if (gdSelected in State) then
TJvDBGrid(Sender).Canvas.Font.Color:= clBlack;
TJvDBGrid(Sender).Canvas.Brush.Color:= $00CAFFFF;
end;
TJvDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State);
end;
procedure TformPekarna.grdPlanDnesMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
aRowPlanDnes:= TJvDBGrid(Sender).MouseCoord(X, Y).Y;
aColPlanDnes:= TJvDBGrid(Sender).MouseCoord(X, Y).X;
end;
procedure TformPekarna.grdPlanDnesTitleClick(Column: TColumn);
begin
ShowMessage('col W: ' + Column.Width.ToString);
end;
procedure TformPekarna.grdRozpracovaneCellClick(Column: TColumn);
var vyradit: Boolean;
begin
// click query
InsertClickQuery ('grdRozpracovane');
edtNazevRozpracVyrobku.Text:= dm.vtRozpracPL.FieldByName('fVyrobek').AsString;
edtRozpracZakazka.Text:= dm.vtRozpracPL.FieldByName('fRadaPrikaz').AsString; // VPr
datMod.aktIdKmenRozprac:= dm.vtRozpracPL.FieldByName('fIDPrikaz').AsInteger;
vyradit:= dm.vtRozpracPL.FieldByName('fColR').AsBoolean;
Label12.Visible:= vyradit;
edtVyraditPaletu.Visible:= vyradit;
edtVyraditPaletu.Text:= dm.vtRozpracPL.FieldByName('fAktPaletList').AsString;
btnVyraditPaletuZVyroby.Visible:= vyradit;
end;
procedure TformPekarna.grdRozpracovaneDblClick (Sender: TObject);
begin
// TitleOffset := Ord(dgTitles in grdRozpracovane.Options);
Pt := grdRozpracovane.ScreenToClient(Mouse.CursorPos);
Cell := grdRozpracovane.MouseCoord(Pt.X, Pt.Y);
if (Cell.X = GetDBGridIndexByFieldName(grdRozpracovane, 'fAktPaletList')) then
begin
// PL je ve výrobě, není co převádět
// Nemáme speficikaci pro tento výrobek na stroji 58 ! Nemohu provést převod do výroby !
if (Helios.YesNo('Chcete změnit stroj pro výrobu PL ' + #1 + grdRozpracovane.DataSource.DataSet.FieldByName('fAktPaletList').AsString + #1 + ' ?' ,false)) then
begin
end;
end;
end;
procedure TformPekarna.grdRozpracovaneDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (not(gdSelected in State)) then
begin
if (Odd(grdRozpracovane.DataSource.DataSet.RecNo)) then
TDBGrid(Sender).Canvas.Brush.Color:= clWindow
else
TDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0;
end;
if (Column.FieldName='fAktPaletList') then
begin
TDBGrid(Sender).Canvas.Brush.Color:= $00D0FEC6; // zelena
if (gdSelected in State) then
TDBGrid(Sender).Canvas.Font.Color:= clBlack; // cerne pismo na zelenem pozadi
end;
TDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State);
end;
procedure TformPekarna.grdStrojeCellClick (Column: TColumn);
var lSQL: string;
aktVyrN1, aktVyrCZbo: string;
begin
// click query
InsertClickQuery ('grdStroje');
aktIdStr:= 0;
if (grdStroje.DataSource.DataSet.RecordCount>0) then
begin
lSQL:= Column.FieldName;
aktIdStr:= grdStroje.DataSource.DataSet.FieldByName('fIDStroj').AsInteger;
datMod.aktIdStroj:= aktIdStr;
datMod.bmIdStroj:= aktIdStr;
edtVybranyStroj.Text:= grdStroje.DataSource.DataSet.FieldByName('fStroj').AsString;
edtOdpadStroj.Text:= grdStroje.DataSource.DataSet.FieldByName('fStroj').AsString;
// edtOdpadSmena.Text:= sgCas.Cells[3, 1];
aktVyrCZbo:= grdStroje.DataSource.DataSet.FieldByName('fCisloZbozi').AsString;
aktIdKmen:= grdStroje.DataSource.DataSet.FieldByName('fIDKmen').AsInteger;
datMod.aktIdKmen:= aktIdKmen;
datMod.aktIDPaleta:= grdStroje.DataSource.DataSet.FieldByName('fIDPaleta').AsInteger;
datMod.aktIdPrikaz:= grdStroje.DataSource.DataSet.FieldByName('fIDPrikaz').AsInteger;
datMod.bmIdPrikaz:= datMod.aktIdPrikaz;
datMod.aktZakazka:= grdStroje.DataSource.DataSet.FieldByName('fZakazka').AsString; // vyrobni prikaz (RadaPrikaz)
aktVyrCZbo:= LeftStr(aktVyrCZbo,3) + ' ' + MidStr(aktVyrCZbo, 4, 30);
edtAktVyrobek.Text:= aktVyrCZbo + ' ' + dm.vtStroje.FieldByName('fVyrobek').AsString;
dm.NactiOdpadStroje (self);
if (pgCtrlPlan.ActivePage=shPlanDnes) then
begin
dm.NactiPlanStroje (self, datMod.bmIdStroj);
aktIdPlan:= 0;
datMod.bmIdPlanDnes:= aktIdPlan;
end;
{
if (pgCtrlPlan.ActivePage=shRozpracovanePL) then
dm.NactiRozpracovane (self);
}
end;
end;
procedure TformPekarna.grdStrojeDblClick (Sender: TObject);
var f: TformTiskKAStitku;
fPLZakazky: TformPLZakazky;
fZahPL: TformZahajeniPalety;
fKonecPL: TformUkonceniPalety;
fCinn: TformVyberCinnostiStroje;
s, c, lSQL: string;
begin
// dbl klik nad Cinnosti - zmena (Vyroba, Odstavka, Oprava stroje, Ukonceni zakazky, Zkouska)
// Pt := grdStroje.ScreenToClient(Mouse.CursorPos);
// Cell := grdStroje.MouseCoord(Pt.X, Pt.Y);
// click query
InsertClickQuery ('grdStroje');
if (grdStrojeAktCol=4) then
begin
fZahPL:= TformZahajeniPalety.Create(nil);
try
fZahPL.Helios:= Helios;
fZahPL.idPrikaz:= grdStroje.DataSource.DataSet.FieldByName('fIDPrikaz').AsInteger;
fZahPL.ShowModal;
finally
fZahPL.Free;
end;
end;
s:= Sender.ClassName;
if (grdStrojeAktCol=3) then // colVyrobek
begin
grdStrojeCellClick (grdStroje.Columns.Items[grdStrojeAktCol-1]);
f:= TformTiskKAStitku.Create(nil);
try
try
f.Helios:= Helios;
f.idKmen:= aktIdKmen;
f.ShowModal;
except
end;
finally
f.Free;
end;
end;
if (grdStrojeAktCol=6) then // colZakazka
begin
grdStrojeCellClick (grdStroje.Columns.Items[grdStrojeAktCol-1]);
s:= grdStroje.DataSource.DataSet.FieldByName('fZakazka').AsString;
if (1=0) then
Helios.Error('Nelze identifikovat zakázku.')
else
begin
fPLZakazky:= TformPLZakazky.Create(nil);
try
fPLZakazky.Helios:= Helios;
fPLZakazky.zakazka:= s; // prikaz
fPLZakazky.idKmen:= grdStroje.DataSource.DataSet.FieldByName('fIDKmen').AsInteger;
fPLZakazky.ShowModal;
finally
fPLZakazky.Free;
end;
end;
end;
if (grdStrojeAktCol=7) then // colCinnost
begin
grdStrojeCellClick (grdStroje.Columns.Items[grdStrojeAktCol-1]);
s:= grdStroje.DataSource.DataSet.FieldByName('fZakazka').AsString;
c:= grdStroje.DataSource.DataSet.FieldByName('fCinnost').AsString;
fCinn:= TformVyberCinnostiStroje.Create(nil);
try
fCinn.Helios:= Helios;
fCinn.ShowModal;
if (fCinn.mrVal=10) then
if (fCinn.cinnost<>'') then
begin
if (c='Výroba') then
begin
if (Helios.YesNo('Na stroji probíhá výroba. Pokud budete pokračovat, výroba palety bude ukončena.' + CRLF + 'Chcete pokračovat a zahájit činnost ' + #1+fCinn.cinnost+#1 + ' ?', false)) then
begin
// click query
InsertClickQuery ('btnUkonceniVyrobyPalety');
fKonecPL:= TformUkonceniPalety.Create (nil);
try
fKonecPL.Helios:= Helios;
fKonecPL.prerusit:= prikazPrerusit;
fKonecPL.denSmena:= ledtVyrobniDen.DateTime.Format('ddmmyyyy') + '/' + sgInfo.Cells[3, 1].Trim;
fKonecPL.paleta:= dm.vtStroje.FieldByName('fAktPaletList').AsString;
fKonecPL.sarze:= dm.vtStroje.FieldByName('fSarze').AsString;
fKonecPL.idStroj:= dm.vtStroje.FieldByName('fIDStroj').AsInteger;
fKonecPL.idEvEOp:= dm.vtStroje.FieldByName('fIDEvidRozpOper').AsInteger;
fKonecPL.idVPr:= dm.vtStroje.FieldByName('fIDPrikaz').AsInteger;
fKonecPL.ShowModal;
lSQL:= 'INSERT ' + tblCinnostStr + ' (IDStroje, Smena, Cinnost) SELECT ' + datMod.aktIdStroj.ToString + ', ' + sgInfo.Cells[3, 1] + ', N' + fCinn.cinnost.QuotedString;
Helios.ExecSQL(lSQL);
grdStroje.DataSource.DataSet.Edit;
grdStroje.DataSource.DataSet.FieldByName('fCinnost').AsString:= fCinn.cinnost;
grdStroje.DataSource.DataSet.Post;
finally
fKonecPL.Free;
end;
dm.NactiStrojeAPraci (self);
end;
end;
end
else
begin
lSQL:= 'UPDATE ' + tblCinnostStr + ' SET DatKonec=GETDATE() WHERE ID=(SELECT MAX(ID) FROM ' + tblCinnostStr + ' WHERE IDStroje=' + datMod.aktIdStroj.ToString + ')';
Helios.ExecSQL(lSQL);
grdStroje.DataSource.DataSet.Edit;
grdStroje.DataSource.DataSet.FieldByName('fCinnost').AsString:= fCinn.cinnost;
grdStroje.DataSource.DataSet.Post;
end;
finally
fCinn.Free;
end;
end;
end;
procedure TformPekarna.grdStrojeDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (not(gdSelected in State)) then
begin
if (Odd(grdStroje.DataSource.DataSet.RecNo)) then
TDBGrid(Sender).Canvas.Brush.Color:= clWindow
else
TDBGrid(Sender).Canvas.Brush.Color:= $00E0E0E0;
end;
if (Column.FieldName='fAktPaletList') or (Column.FieldName='fZakazka') or (Column.FieldName='fCinnost') then
begin
if (gdSelected in State) then
TDBGrid(Sender).Canvas.Font.Color:= clBlack;
TDBGrid(Sender).Canvas.Brush.Color:= $00D0FEC6;
end;
TDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State);
end;
procedure TformPekarna.grdStrojeMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
grdStrojeAktRow:= TJvDBGrid(Sender).MouseCoord(X, Y).Y;
grdStrojeAktCol:= TJvDBGrid(Sender).MouseCoord(X, Y).X;
end;
procedure TformPekarna.infoTimerTimer (Sender: TObject);
var h: byte;
begin
sgInfo.Cells[0, 1]:= YearOf(Now).ToString; // rok
sgInfo.Cells[1, 1]:= WeekOfTheYear(Now).ToString; // tyden dle WeekOfTheYear
sgInfo.Cells[2, 1]:= DateToStr(Now); // vyrobni den
h:= HourOf(Now);
if (h<6) or (h>=22) then
sgInfo.Cells[3, 1]:= '3' // smena
else
if (h>=6) and (h<14) then
sgInfo.Cells[3, 1]:= '1'
else
sgInfo.Cells[3, 1]:= '2';
edtOdpadSmena.Text:= sgInfo.Cells[3, 1];
sgCas.Cells[0, 1]:= DateToStr(Now);
sgCas.Cells[1, 1]:= FormatDateTime('hh:nn', Now);
// ledtVyrobniDen.DateTime:= StrToDateTime(sgInfo.Cells[2, 1]);
end;
procedure TformPekarna.ledtVyrobniDenChange (Sender: TObject);
begin
NactiPoznamkyVyrobnihoDne;
end;
procedure TformPekarna.memVyrobniPoznamkaExit (Sender: TObject);
var lSQL: string;
begin
if (memVyrobniPoznamka.Modified) then
begin
memVyrobniPoznamka.Text:= memVyrobniPoznamka.Text.Trim;
if (idPoznamkaVyrbnihoDne>0) then
begin
lSQL:= 'UPDATE ' + tblVyrPozn + ' SET Poznamka=N' + IfThen(memVyrobniPoznamka.Text='', 'ULL', memVyrobniPoznamka.Text.QuotedString) + ' WHERE ID=' + idPoznamkaVyrbnihoDne.ToString;
Helios.ExecSQL(lSQL);
end
else
if (memVyrobniPoznamka.Text<>'') then
begin
lSQL:= 'INSERT ' + tblVyrPozn + ' (Poznamka, VyrobniDen) SELECT N' + memVyrobniPoznamka.Text.QuotedString + ', CONVERT(datetime, N' + DateTimeToStr(ledtVyrobniDen.DateTime).QuotedString;
lSQL:= lSQL + ', 104); SELECT SCOPE_IDENTITY() AS newId';
with Helios.OpenSQL(lSQL) do
if (RecordCount=1) then
idPoznamkaVyrbnihoDne:= VarToStr(FieldByNameValues('newId')).ToInteger;
end;
end;
end;
procedure TformPekarna.sgCasDrawCell (Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
sgInfoDrawCell(Sender, ACol, ARow, Rect, State);
end;
procedure TformPekarna.sgInfoDrawCell (Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var g: TStringGrid;
begin
if (ARow=0) then
begin
g:= Sender as TStringGrid;
g.Canvas.Brush.Color:= $00CAFFFF;
g.Canvas.FillRect (Rect);
DrawText(g.Canvas.Handle, g.Cells[ACol, ARow], Length(g.Cells[ACol, ARow]), Rect, DT_CENTER or DT_VCENTER or DT_SINGLELINE);
end;
end;
procedure TformPekarna.shPlanDnesShow (Sender: TObject);
begin
if (initOK) then
dm.NactiPlanStroje(self, datMod.bmIdStroj);
end;
procedure TformPekarna.shRozpracovanePLShow (Sender: TObject);
begin
datMod.bmIdPlanDnes:= 0;
aktIdPlan:= 0;
if (initOK) then
begin
edtNazevRozpracVyrobku.Text:= '';
edtRozpracZakazka.Text:= '';
dm.NactiRozpracovane (self, datMod.aktIdStroj);
end;
end;
procedure TformPekarna.timerPrehledTimer (Sender: TObject);
var idStrojBak, idPlanDnesBak, idKmenBak: integer;
begin
if (runTimerRozprac) then
begin
idStrojBak:= aktIdStr;
idKmenBak:= aktIdKmen;
idPlanDnesBak:= aktIdPlan;
dm.NactiStrojeAPraci (self);
if (datMod.bmIdStroj>0) then
if (dm.vtStroje.Locate('fIDStroj', VarArrayOf([datMod.bmIdStroj]), [loPartialKey])) then
begin
aktIdStr:= datMod.bmIdStroj;
aktIdKmen:= dm.vtStroje.FieldByName('fIDPrikaz').AsInteger;
datMod.aktIdStroj:= datMod.bmIdStroj;
end;
if (datMod.bmIdPlanDnes>0) then
if (dm.vtPlanDnes.Locate('fIDPlan', VarArrayOf([datMod.bmIdPlanDnes]), [loPartialKey])) then
begin
aktIdPlan:= datMod.bmIdPlanDnes;
end;
if (initOK) then
begin
dm.NactiRozpracovane (self, datMod.aktIdStroj);
dm.NactiPlanStroje (self, datMod.bmIdStroj);
end;
runTimerRozprac:= true;
end;
end;
end.