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; arrGrdStrojeWidths: TArray; 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.