unit frmPlan; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, JvExDBGrids, JvDBGrid, JvStringGrid, Vcl.ExtCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, JvExGrids, ddPlugin_TLB, Vcl.StdCtrls, Vcl.NumberBox, Vcl.Buttons, RzDBGrid, JvExStdCtrls, JvCheckBox, JvExButtons, JvBitBtn, Vcl.Mask; type TformPlan = class(TForm) pnl1: TGridPanel; grdKalendar: TJvDBGrid; grdRozpis: TJvDBGrid; grd2: TGridPanel; sgCas: TJvStringGrid; pnl2: TGridPanel; pnl3: TGridPanel; Label1: TLabel; Label2: TLabel; NumberBox1: TNumberBox; Label3: TLabel; nHodPlanZacatek: TNumberBox; Label4: TLabel; Label5: TLabel; edtVyrobniZakazka: TEdit; edtUdrzba: TEdit; grd7: TGridPanel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label12: TLabel; lblOznaceni: TLabel; edtVyrobaKs: TNumberBox; edtVyrobaKA: TNumberBox; edtVyrobaPal: TNumberBox; edtKsZaHod: TNumberBox; edtHodUdrzba: TNumberBox; Label13: TLabel; edtMJZakazka: TEdit; btnPridatZakazku: TBitBtn; btnUdrzba: TBitBtn; grd4: TGridPanel; grd5: TGridPanel; grd9: TGridPanel; grd6: TGridPanel; btnKontrolaVyrobene: TBitBtn; Label14: TLabel; edtVyrobekCislo: TEdit; edtVyrobekNazev: TEdit; edtRozpisKsVKA: TNumberBox; edtRozpisKAnaPal: TNumberBox; Label15: TLabel; Label16: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; Label20: TLabel; Label21: TLabel; Label22: TLabel; lblRozpisCelkemKs: TLabel; edtZakazka: TEdit; lblRozpisPalet: TLabel; lblRozpisMJ: TLabel; chbU: TJvCheckBox; chbF: TJvCheckBox; chbT: TJvCheckBox; chbPL: TJvCheckBox; GridPanel1: TGridPanel; GridPanel3: TGridPanel; btnZrusitZakazku: TJvBitBtn; btnRezervacePL: TJvBitBtn; btnFixovatZakazku: TJvBitBtn; edtCisloZakNaPL: TLabeledEdit; Label11: TLabel; edtRozpisPalet1: TNumberBox; edtRozpisPalet2: TNumberBox; btnKonec: TButton; procedure FormShow (Sender: TObject); procedure sgCasDrawCell (Sender: TObject; ACol, ARow: LongInt; Rect: TRect; State: TGridDrawState); procedure sgCasSelectCell (Sender: TObject; ACol, ARow: LongInt; var CanSelect: Boolean); procedure grdRozpisDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); procedure grdKalendarTitleClick (Column: TColumn); procedure grdRozpisTitleClick (Column: TColumn); procedure FormResize (Sender: TObject); procedure grdKalendarDrawColumnTitle (Sender: TObject; ACanvas: TCanvas; ARect: TRect; AColumn: TColumn; var ASortMarker: TJvDBGridBitmap; IsDown: Boolean; var Offset: Integer; var DefaultDrawText, DefaultDrawSortMarker: Boolean); procedure grdKalendarDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); procedure edtVyrobniZakazkaDblClick (Sender: TObject); procedure grdRozpisCellClick (Column: TColumn); procedure btnPridatZakazkuClick (Sender: TObject); procedure edtUdrzbaDblClick (Sender: TObject); procedure btnUdrzbaClick (Sender: TObject); procedure grdKalendarCellClick (Column: TColumn); procedure FormClose (Sender: TObject; var Action: TCloseAction); procedure FormDestroy (Sender: TObject); procedure btnRezervacePLClick (Sender: TObject); procedure sgCasDblClick (Sender: TObject); procedure grdRozpisMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure btnFixovatZakazkuClick(Sender: TObject); procedure btnZrusitZakazkuClick(Sender: TObject); procedure edtZakazkaDblClick(Sender: TObject); procedure btnKonecClick(Sender: TObject); procedure grdRozpisDblClick(Sender: TObject); procedure btnKontrolaVyrobeneClick(Sender: TObject); private function TestPrikazuPredZrusenimZakazky (idPrikaz: integer): boolean; procedure ResizeGrids; procedure NulujUdajeVyrobku; procedure NactiDataGridu; public Helios: IHelios; procedure RozpadPrikazuNaDavkyKP (datum: string=''; hodinaOd: integer=-1; arrID: TArray=nil); end; implementation uses System.DateUtils, System.StrUtils, System.Math, frmKmen, frmZavady, frmVyrobniTyden, frmPlanPaletListy, uUtils, datMod2, helUtils; {$R *.dfm} var formPlan: TformPlan; g1ColWidthKoefs, g2ColWidthKoefs: TArray; idKmenProPlan, idZakModif, idStroj, ksZaHod: integer; idPrPUdrzba: integer; idAdVKP, selIdDavka, selIdVPr, selIdPlan: integer; rozpisAktDatum: string; rozpisAktCasOd: integer; kalendarAktStroj: integer; kalendarKodStroj: string; pressedAlt, pressedShift: boolean; procedure TformPlan.ResizeGrids; var i, i2: integer; begin for i:=0 to grdKalendar.Columns.Count-1 do for i2:=0 to Length(g1ColWidthKoefs)-1 do if SameText(grdKalendar.Columns.Items[i].FieldName, g1ColWidthKoefs[i2].fieldName) then grdKalendar.Columns.Items[i].Width:= Trunc(grdKalendar.Width * g1ColWidthKoefs[i2].widthKoef); for i:=0 to grdRozpis.Columns.Count-1 do for i2:=0 to Length(g2ColWidthKoefs)-1 do if SameText(grdRozpis.Columns.Items[i].FieldName, g2ColWidthKoefs[i2].fieldName) then grdRozpis.Columns.Items[i].Width:= Trunc(grdRozpis.Width * g2ColWidthKoefs[i2].widthKoef); end; function TformPlan.TestPrikazuPredZrusenimZakazky (idPrikaz: Integer): Boolean; begin result:= true; // lze zrusit if (helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblPMZ + ' WHERE IDPrikaz=' + idPrikaz.ToString)) then result:= false; if (result) then if (helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblDZ + ' WHERE IDPrikaz=' + idPrikaz.ToString)) then result:= false; if (result) then if (helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblPZ + ' WHERE IDPrikaz=' + idPrikaz.ToString)) then result:= false; end; procedure TformPlan.NulujUdajeVyrobku; begin edtVyrobniZakazka.Text:= ''; lblOznaceni.Caption:= ''; edtVyrobaKs.ValueInt:= 0; edtVyrobaKA.ValueInt:= 0; edtVyrobaPal.ValueInt:= 0; edtKsZaHod.ValueInt:= 0; edtMJZakazka.Text:= ''; nHodPlanZacatek.Value:= 0; idKmenProPlan:= 0; end; procedure TformPlan.RozpadPrikazuNaDavkyKP (datum: string=''; hodinaOd: integer=-1; arrID: TArray=nil); var lSQL: string; i: integer; begin if (idAdVKP>0) then begin helUtils.ReseedTable (Helios, tblAdvKPlanDavky); lSQL:= 'DROP TABLE IF EXISTS #TabPrikazyProKapacPlan' + CRLF + 'CREATE TABLE #TabPrikazyProKapacPlan (ID INT NOT NULL, JeUdrzba BIT NOT NULL DEFAULT 0' + ', DatStart DATETIME, PocetHodin NUMERIC(19,6) NOT NULL DEFAULT 0, IDPrPostup INT)' + CRLF; for i:=0 to Length(arrID)-1 do if (arrID[i]>0) then lSQL:= lSQL + 'INSERT #TabPrikazyProKapacPlan (ID) SELECT ' + arrID[i].ToString + CRLF; lSQL:= lSQL + 'DECLARE @dt DATETIME, @casStart TINYINT' + CRLF; if (datum<>'') then lSQL:= lSQL + 'SET @dt = CONVERT(datetime, N' + datum.QuotedString + ', 104)' + CRLF; if (hodinaOd>=0) then lSQL:= lSQL + 'SET @casStart=' + hodinaOd.ToString + CRLF; lSQL:= lSQL + 'IF OBJECT_ID(N''dbo.ep_Vyroba_AdvPlan_ZapisDavkyPrikazu'', N''P'') IS NOT NULL' + CRLF + ' EXEC dbo.ep_Vyroba_AdvPlan_ZapisDavkyPrikazu'; lSQL:= lSQL + ' @datumStart=@dt, @casOd=@casStart'; Helios.ExecSQL (lSQL); end; end; procedure TformPlan.btnFixovatZakazkuClick (Sender: TObject); var lSQL, lSQL2, idcka: string; jeUdrzba: boolean; idLoc: integer; begin lSQL:= 'SELECT 1 FROM ' + tblVPr + ' vp INNER JOIN ' + tblPrikazRada +' vpr ON (vpr.Rada=vp.Rada) WHERE vpr.nazev LIKE N''%údržb%'' AND vp.ID=' + selIdVPr.ToString; jeUdrzba:= helUtils.sqlExistsTestGeneral(Helios, lSQL); lSQL:= ''; lSQL2:= ''; idLoc:= 0; if (selIdDavka>0) then idLoc:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT _VazbaPlgPlan FROM ' + tblAdvKPlanDavky_E + ' WHERE ID=' + selIdDavka.ToString); if (selIdVPr>0) and (idAdVKP>0) then begin lSQL:= 'UPDATE ' + tblAdvKPlanDavky + ' SET Zamek=0 WHERE IDAdvKapacPlan=' + idAdVKP.ToString + ' AND IDPrikaz=' + selIdVPr.ToString; if (idLoc>0) then lSQL:= lSQL + ' AND ID IN (SELECT ID FROM ' + tblAdvKPlanDavky_E + ' WHERE _VazbaPlgPlan=' + idLoc.ToString + ')'; lSQL2:= 'SELECT ID FROM ' + tblAdvKPlanDavky + ' WHERE IDAdvKapacPlan=' + idAdVKP.ToString + ' AND IDPrikaz=' + selIdVPr.ToString; if (idLoc>0) then lSQL2:= lSQL2 + ' AND ID IN (SELECT ID FROM ' + tblAdvKPlanDavky_E + ' WHERE _VazbaPlgPlan=' + idLoc.ToString + ')'; end; if (jeUdrzba) and (lSQL<>'') then begin if (chbF.Checked) then begin if Helios.YesNo('Zrušit fixaci ?', false) then begin Helios.ExecSQL (lSQL); lSQL:= 'UPDATE ' + tblAdvKPlanDavky_E + ' SET _DatumFixace=NULL WHERE ID IN (' + lSQL2 + ')'; Helios.ExecSQL (lSQL); chbF.Checked:= false; end; end else begin lSQL:= lSQL.Replace('Zamek=0', 'Zamek=1'); Helios.ExecSQL (lSQL); lSQL:= 'UPDATE ' + tblAdvKPlanDavky_E + ' SET _DatumFixace=GETDATE() WHERE ID IN (' + lSQL2 + ')'; Helios.ExecSQL (lSQL); chbF.Checked:= true; end; end else begin if (edtVyrobekCislo.Text<>'') and (lSQL<>'') then begin if (chbF.Checked) then begin if Helios.YesNo('Zrušit fixaci ?', false) then begin Helios.ExecSQL (lSQL); lSQL:= 'UPDATE ' + tblAdvKPlanDavky_E + ' SET _DatumFixace=NULL WHERE ID IN (' + lSQL2 + ')'; Helios.ExecSQL (lSQL); chbF.Checked:= false; end; end else begin lSQL:= lSQL.Replace('Zamek=0', 'Zamek=1'); Helios.ExecSQL (lSQL); lSQL:= 'UPDATE ' + tblAdvKPlanDavky_E + ' SET _DatumFixace=GETDATE() WHERE ID IN (' + lSQL2 + ')'; Helios.ExecSQL (lSQL); chbF.Checked:= true; end; end; end; end; procedure TformPlan.btnKonecClick(Sender: TObject); begin Close; end; procedure TformPlan.btnKontrolaVyrobeneClick(Sender: TObject); begin if (kalendarAktStroj>0) and (grdKalendar.DataSource.DataSet.RecordCount>0) then grdKalendarCellClick (grdKalendar.Columns.Items [uUtils.GetFirstVisibleColIndex(grdKalendar)]); end; procedure TformPlan.btnPridatZakazkuClick (Sender: TObject); var lSQL, kodStroje, planKonec, sz, rc, nazevDilce, radaVPr, prikazVPr, szV, szF, kodModif1, kodModif2: string; errMsg: string; i, idZakModifTemp: integer; idZMDleKodu, idPlan, idPrikaz, idDilce, idZakModif, idKmenPr, idPrikazVyssi, idPrikazFinal: integer; arrIdVPr: TArray; canCont, delPrikaz: boolean; begin if (idKmenProPlan>0) then begin if ((edtVyrobaKs.ValueInt=0) and (edtVyrobaKA.ValueInt=0) and (edtVyrobaPal.ValueInt=0)) or (edtKsZaHod.ValueInt=0) or (lblOznaceni.Caption.Trim='') then Helios.Error(#1'Chybí některý ze základních parametrů (počet ks/počet KA/počet PAL/hodnota ks/hod), nemůžu pokračovat.'#1) else begin idZMDleKodu:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT ID FROM ' + tblZakazModif + ' WHERE Kod=N' + kalendarKodStroj.QuotedString); lSQL:= 'SELECT 1 FROM ' + tblZakazModifDilce + ' WHERE IDKmenZbozi=' + idKmenProPlan.ToString + ' AND IDZakazModif=' + idZMDleKodu.ToString; if not(helUtils.sqlExistsTestGeneral (Helios, lSQL)) then Helios.Error(#1'Na tento výrobek a stroj není zavedena norma. Nelze uložit do plánu.'#1) else begin helUtils.waitStart (btnPridatZakazku.GetParentComponent, 'Zápis plánu a generování příkazů...'); lSQL:= 'DECLARE @eMsg NVARCHAR(500)=N'''', @idPlan INT=0, @datPlanKonec DATETIME=NULL' + CRLF + 'IF OBJECT_ID(''dbo.ep_Vyroba_ZapisDoPlanu'', ''P'') IS NOT NULL EXEC @idPlan=dbo.ep_Vyroba_ZapisDoPlanu @dilec=' + idKmenProPlan.ToString + ', @idZakazModif=' + idZMDleKodu.ToString + ', @datum=N' + rozpisAktDatum.QuotedString + ', @hodinaOd=' + rozpisAktCasOd.ToString + ', @pocetKs=' + edtVyrobaKs.Value.ToString.Replace(',','.') + ', @pocetKA=' + edtVyrobaKA.Value.ToString.Replace(',','.') + ', @pocetPal=' + edtVyrobaPal.Value.ToString.Replace(',','.') + ', @datumPlanKonec=@datPlanKonec OUT, @errMsg=@eMsg OUT' + CRLF + 'SELECT @eMsg AS ErrMsg, @idPlan AS IDPlan, @datPlanKonec AS DatumPlanKonec'; try try with Helios.OpenSQL (lSQL) do begin idPlan:= VarToStr(FieldByNameValues('IDPlan')).ToInteger; planKonec:= VarToStr(FieldByNameValues('DatumPlanKonec')); if (VarToStr(FieldByNameValues('ErrMsg'))<>'') then Helios.Error(#1 + VarToStr(FieldByNameValues('ErrMsg')) + #1) else begin helUtils.ReseedTable (Helios, tblVPr); helUtils.ReseedTable (Helios, tblPrPost); helUtils.ReseedTable (Helios, tblPrKVaz); lSQL:= 'DROP TABLE IF EXISTS #TabPomSeznamVyrPlanuProZaplanovani' + CRLF + 'DROP TABLE IF EXISTS #TabGenVyrPrikazy' + CRLF + 'CREATE TABLE #TabPomSeznamVyrPlanuProZaplanovani (ID INT NOT NULL)' + CRLF + 'CREATE TABLE #TabGenVyrPrikazy (ID INT NOT NULL)' + CRLF + 'INSERT #TabPomSeznamVyrPlanuProZaplanovani (ID) SELECT ' + idPlan.ToString + CRLF + 'EXEC dbo.hp_VyrPlan_ZaplanujSeznam @RadaVyrPrikazu=NULL, @GenPlanovaneVyroby=0, @G_PovolitRespektovaniMnozSS=0' + CRLF + 'SELECT ID FROM #TabGenVyrPrikazy ORDER BY ID DESC'; with Helios.OpenSQL (lSQL) do begin idPrikazFinal:= 0; First; kodModif1:= ''; SetLength (arrIdVPr, RecordCount); i:= 0; while not(EOF) do begin canCont:= true; delPrikaz:= false; idPrikaz:= VarToStr(FieldByNameValues('ID')).ToInteger; if (idPrikazFinal=0) and (helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblVPr + ' WHERE ID=' + idPrikaz.ToString + ' AND UrovenVnoreni=0')) then idPrikazFinal:= idPrikaz; if (kodModif1='') then begin lSQL:= 'SELECT TOP(1) ISNULL(zm.Kod, N'''') AS KodZakModif FROM ' + tblVPr + ' vp LEFT JOIN ' + tblZakazModif + ' zm ON (zm.ID=vp.IDZakazModif) WHERE vp.ID=' + idPrikaz.ToString + ' AND vp.UrovenVnoreni=0'; kodModif1:= helUtils.getHeliosStrVal (Helios, '', lSQL); end; idZakModif:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT IDZakazModif FROM ' + tblVPr + ' WHERE ID=' + idPrikaz.ToString); if (idZakModif>0) then begin kodModif2:= helUtils.getHeliosStrVal (Helios, '', 'SELECT Kod FROM ' + tblZakazModif + ' WHERE ID=' + idZakModif.ToString); // pokud nejsou stejne modifikace, prikaz smaz if (kodModif1<>kodModif2) then delPrikaz:= true; end; // smaz prikazy, ktere nesly zadat do vyroby, typicky nemaji v TPV kusovnik nebo operace idDilce:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT IDTabKmen FROM ' + tblVPr + ' WHERE ID=' + idPrikaz.ToString); lSQL:= 'SELECT 1 FROM ' + tblPostup + ' WHERE dilec=' + idDilce.ToString + IfThen(idZakModif>0, ' AND ZmenaDo IS NULL AND IDZakazModif=' + idZakModif.ToString, ''); if not(helUtils.sqlExistsTestGeneral(Helios,lSQL)) then delPrikaz:= true; lSQL:= 'SELECT 1 FROM ' + tblKVaz + ' WHERE vyssi=' + idDilce.ToString + IfThen(idZakModif>0, ' AND ZmenaDo IS NULL AND IDZakazModif=' + idZakModif.ToString, ''); if not(helUtils.sqlExistsTestGeneral(Helios,lSQL)) then delPrikaz:= true; // mam prikaz smazat ? if (delPrikaz) then begin try try canCont:= false; Helios.ExecSQL('EXEC dbo.hp_TabPrikaz_TriggerBeforeDelete @ID=' + idPrikaz.ToString + ', @PouzeTestPredZrusenimStavuZadano=0'); Helios.ExecSQL('DELETE FROM ' + tblVPr + ' WHERE ID=' + idPrikaz.ToString); except on E:Exception do errMsg:= E.Message; end finally end; end; if (canCont) then begin lSQL:= 'SELECT k.SkupZbo, k.ID AS IDKmen, ISNULL(p.IDPrikazVyssi,0) AS IDPrikazVyssi, ISNULL(kv.SkupZbo,N'''') AS SZv, p.IDPrikazRidici, kf.SkupZbo AS SZFin' + ' FROM ' + tblVPr + ' p INNER JOIN ' + tblKZ + ' k ON (k.ID=p.IDTabKmen) INNER JOIN ' + tblVPr + ' pf ON (pf.ID=p.IDPrikazRidici)' + ' INNER JOIN ' + tblKZ + ' kf ON (kf.ID=pf.IDTabKmen) LEFT JOIN ' + tblVPr + ' pv ON (pv.ID=p.IDPrikazVyssi)' + ' LEFT JOIN ' + tblKZ + ' kv ON (kv.ID=pv.IDTabKmen) WHERE p.ID=' + idPrikaz.ToString; with Helios.OpenSQL (lSQL) do begin sz:= VarToStr(FieldByNameValues('SkupZbo')); szV:= VarToStr(FieldByNameValues('SZv')); szF:= VarToStr(FieldByNameValues('SZFin')); idKmenPr:= VarToStr(FieldByNameValues('IDKmen')).ToInteger; idPrikazVyssi:= VarToStr(FieldByNameValues('IDPrikazVyssi')).ToInteger; idPrikazFinal:= VarToStr(FieldByNameValues('IDPrikazRidici')).ToInteger; end; { lSQL:= 'SELECT 1 FROM ' + tblZakazModifDilce + ' WHERE IDKmenZbozi=' + idKmenPr.ToString; if not(helUtils.sqlExistsTestGeneral(Helios, lSQL + ' AND IDZakazModif=' + idZakModif.ToString)) then if (1=helUtils.SQLGetRowCount(Helios, lSQL.Replace(' 1 ', ' ID '))) then begin idZakModifTemp:= helUtils.getHeliosIntVal (Helios, 0, lSQL.Replace(' 1 ', ' IDZakazModif ')); if (idZakModifTemp>0) then Helios.ExecSQL('UPDATE ' + tblVPr + ' SET IDZakazModif=' + idZakModifTemp.ToString + ' WHERE ID=' + idPrikaz.ToString); end; } try lSQL:= 'DECLARE @iChyba INT' + CRLF + 'EXEC @iChyba=dbo.hp_ZadaniPrikazuDoVyroby @IDPrikaz=' + idPrikaz.ToString; Helios.ExecSQL (lSQL); except on E:Exception do begin radaVPr:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Rada FROM ' + tblVPr + ' WHERE ID=' + idPrikaz.ToString); prikazVPr:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Prikaz FROM ' + tblVPr + ' WHERE ID=' + idPrikaz.ToString); rc:= helUtils.getHeliosStrVal(Helios, '', 'SELECT RegCis FROM ' + tblKZ+ ' WHERE ID=' + idKmenPr.ToString); nazevDilce:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev1 FROM ' + tblKZ+ ' WHERE ID=' + idKmenPr.ToString); Helios.Error('Chyba: ' + E.Message + CRLF + '(příkaz ' + radaVPr + '/' + prikazVPr + ', dílec ' + sz + ' ' + rc + ' / ' + nazevDilce + ' )'); end; end; // do pole dej jen prikaz finalu if (idKmenPr=idKmenProPlan) then begin arrIdVPr[i]:= idPrikaz; if (helUtils.SQLObjectExists (Helios, tblVPrE)) then begin lSQL:= 'IF NOT EXISTS (SELECT 1 FROM ' + tblVPrE + ' WHERE ID=' + idPrikaz.ToString + ') INSERT ' + tblVPrE + ' (ID) SELECT ' + idPrikaz.ToString; Helios.ExecSQL (lSQL); Helios.ExecSQL ('UPDATE ' + tblVPrE + ' SET _PlanUkonceni=CONVERT(datetime, N' + planKonec.QuotedString + ', 104) WHERE ID=' + idPrikaz.ToString); lSQL:= 'UPDATE ' + tblVPrE + ' SET _PlanZahajeni=CONVERT(datetime, N' + (rozpisAktDatum + ' ' + rozpisAktCasOd.ToString + ':00:00').QuotedString + ', 104) WHERE ID=' + idPrikaz.ToString; Helios.ExecSQL (lSQL); end; Inc(i); end; end; Next; end; end; if (edtKsZaHod.ValueInt>0) and (Length(arrIdVPr)>0) then begin helUtils.ReseedTable (Helios, tblAdvKPlanDavky); RozpadPrikazuNaDavkyKP (rozpisAktDatum, rozpisAktCasOd, arrIdVPr); end; end; end; except on E:Exception do Helios.Error('Chyba: ' + E.Message); end; finally end; helUtils.waitEnd; end; NactiDataGridu; grdKalendar.DataSource.DataSet.DisableControls; if (grdKalendar.DataSource.DataSet.Locate('colIDStroj', VarArrayOf([kalendarAktStroj]), [loPartialKey])) then begin grdKalendar.Refresh; grdKalendarCellClick (grdKalendar.Columns.Items [uUtils.GetFirstVisibleColIndex(grdKalendar)]); end; grdKalendar.DataSource.DataSet.EnableControls; // NulujUdajeVyrobku; // dm2.NactiDavkyPlanu (self, kalendarAktStroj); end; end; end; procedure TformPlan.btnRezervacePLClick (Sender: TObject); var lSQL, radaVPr, sk, mj, noveVC: string; idKZ: integer; i: integer; mnozVPr, mnozPal, pocVC, koef: extended; begin i:= 0; if (selIdVPr>0) then begin sk:= ''; mj:= ''; idKZ:= 0; mnozVPr:= 0; mnozPal:= 0; edtCisloZakNaPL.Text:= edtCisloZakNaPL.Text.Trim; lSQL:= 'SELECT p.Rada, p.kusy_zad, k.SkupZbo, k.MJEvidence, p.IdTabKmen FROM ' + tblVPr + ' p INNER JOIN ' + tblKZ + ' k ON (k.ID=p.IdTabKmen) WHERE p.ID=' + selIdVPr.ToString; with Helios.OpenSQL (lSQL) do if (RecordCount=1) then begin mj:= VarToStr(FieldByNameValues('MJEvidence')); mnozVPr:= FieldByNameValues('kusy_zad'); sk:= VarToStr(FieldByNameValues('SkupZbo')); idKZ:= VarToStr(FieldByNameValues('IdTabKmen')).ToInteger; end; mj:= mj.ToLower; if (mj='pal') then mnozPal:= mnozVPr; koef:= 0; if (mj='ka') then koef:= dm2.VratPrepocetMJ (idKZ, mj, 'Pal', 'PocetHlavni'); if (koef<>0) then mnozPal:= System.Math.Floor(mnozVPr/koef); pocVC:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT COUNT(ID) FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + selIdVPr.ToString); if (pocVC'') then begin lSQL:= 'IF NOT EXISTS(SELECT 1 FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + selIdVPr.ToString + ' AND VyrCislo=N' + noveVC.QuotedString + ')' + ' INSERT ' + tblPrikazVC + ' (IDPrikaz, VyrCislo, Popis, Mnozstvi) SELECT ' + selIdVPr.ToString + ', N' + noveVC.QuotedString + ', N' + edtCisloZakNaPL.Text.QuotedString + ', ' + edtRozpisKAnaPal.Value.ToString.Replace(',','.'); Helios.ExecSQL (lSQL); end; end; end; end; chbPL.Checked:= (i>0); end; procedure TformPlan.btnUdrzbaClick (Sender: TObject); var lSQL: string; aktStr: integer; begin if (idPrPUdrzba>0) then begin if (edtHodUdrzba.ValueInt=0) and (edtUdrzba.Text.Trim='') then Helios.Error (#1'Chybí některý ze základních parametrů, nemůžu pokračovat.'#1) else begin lSQL:= 'DROP TABLE IF EXISTS #TabPrikazyProKapacPlan' + CRLF + 'CREATE TABLE #TabPrikazyProKapacPlan (ID INT NOT NULL, JeUdrzba BIT NOT NULL DEFAULT 0' + ', DatStart DATETIME, PocetHodin NUMERIC(19,6) NOT NULL DEFAULT 0, IDPrPostup INT)' + CRLF + 'INSERT #TabPrikazyProKapacPlan (ID, JeUdrzba, PocetHodin, IDPrPostup) SELECT 0, 1, ' + edtHodUdrzba.ValueInt.ToString + ', ' + idPrPUdrzba.ToString + CRLF; lSQL:= lSQL + 'DECLARE @dt DATETIME, @casStart TINYINT' + CRLF; if (rozpisAktDatum<>'') then lSQL:= lSQL + 'SET @dt = CONVERT(datetime, N' + rozpisAktDatum.QuotedString + ', 104)' + CRLF; if (rozpisAktCasOd>=0) then lSQL:= lSQL + 'SET @casStart=' + rozpisAktCasOd.ToString + CRLF; lSQL:= lSQL + 'IF OBJECT_ID(N''dbo.ep_Vyroba_AdvPlan_ZapisDavkyPrikazu'', N''P'') IS NOT NULL' + CRLF + ' EXEC dbo.ep_Vyroba_AdvPlan_ZapisDavkyPrikazu'; lSQL:= lSQL + ' @datumStart=@dt, @casOd=@casStart'; try Helios.ExecSQL (lSQL); except end; aktStr:= kalendarAktStroj; grdKalendar.DataSource.DataSet.DisableControls; NactiDataGridu; if (grdKalendar.DataSource.DataSet.RecordCount>0) then if (grdKalendar.DataSource.DataSet.Locate('colIDStroj', VarArrayOf([aktStr]), [])) then grdKalendarCellClick (grdKalendar.Columns.Items [uUtils.GetFirstVisibleColIndex(grdKalendar)]); grdKalendar.DataSource.DataSet.EnableControls; end; idPrPUdrzba:= 0; selIdDavka:= 0; selIdPlan:= 0; selIdVPr:= 0; end; end; procedure TformPlan.btnZrusitZakazkuClick (Sender: TObject); var lSQL, lSQL2, errMsg: string; idLoc, aktStr: integer; jeUdrzba: boolean; begin lSQL:= 'SELECT 1 FROM ' + tblVPr + ' vp INNER JOIN ' + tblPrikazRada +' vpr ON (vpr.Rada=vp.Rada) WHERE vpr.nazev LIKE N''%údržb%'' AND vp.ID=' + selIdVPr.ToString; jeUdrzba:= helUtils.sqlExistsTestGeneral(Helios, lSQL); idLoc:= 0; if (selIdDavka>0) then idLoc:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT _VazbaPlgPlan FROM ' + tblAdvKPlanDavky_E + ' WHERE ID=' + selIdDavka.ToString); if (jeUdrzba) then begin if (chbF.Checked) then Helios.Error(#1'Fixovaná ůdržba nelze zrušit'#1) else begin if Helios.YesNo('Opravdu zrušit údržbu ?', false) then begin lSQL:= 'DECLARE @em NVARCHAR(500)=N''''' + CRLF + 'IF OBJECT_ID(N''dbo.ep_Vyroba_ZrusZakazkuPlanuDleFinPrikazu'', N''P'') IS NOT NULL' + ' EXEC dbo.ep_Vyroba_ZrusZakazkuPlanuDleFinPrikazu @idAdvKP=' + idAdVKP.ToString + ', @idVPrFin=' + selIdVPr.ToString + ', @idStroj=' + kalendarAktStroj.ToString + ', @jeUdrzba=1, @idSadaDavek=' + IfThen(idLoc=0, 'NULL', idLoc.ToString) + ', @errorMsg=@em OUT' + CRLF + 'SELECT @em AS ErrMsg'; try with Helios.OpenSQL (lSQL) do begin First; errMsg:= VarToStr(FieldByNameValues('ErrMsg')); end; // Helios.ExecSQL('DELETE FROM ' + tblPlan + ' WHERE ID=' + selIdPlan.ToString); except on E:Exception do errMsg:= 'CHYBA: ' + E.Message; end; end; end; end else begin if (chbF.Checked) then Helios.Error(#1'Fixovaná zakázka nelze zrušit'#1) else begin if not(TestPrikazuPredZrusenimZakazky(selIdVPr)) then Helios.Error(#1'Zakázka nelze zrušit, příkaz už byl použitý (odveden materiál/evidována práce...)'#1) else begin if (edtVyrobekCislo.Text<>'') and (selIdVPr>0) and (idAdVKP>0) then if Helios.YesNo('Opravdu zrušit zakázku ?', false) then begin lSQL:= 'DECLARE @em NVARCHAR(500)=N''''' + CRLF + 'IF OBJECT_ID(N''dbo.ep_Vyroba_ZrusZakazkuPlanuDleFinPrikazu'', N''P'') IS NOT NULL' + ' EXEC dbo.ep_Vyroba_ZrusZakazkuPlanuDleFinPrikazu @idAdvKP=' + idAdVKP.ToString + ', @idVPrFin=' + selIdVPr.ToString + ', @idStroj=' + kalendarAktStroj.ToString + ', @idSadaDavek=' + IfThen(idLoc=0, 'NULL', idLoc.ToString) + ', @errorMsg=@em OUT' + CRLF + 'SELECT @em AS ErrMsg'; try with Helios.OpenSQL (lSQL) do begin First; errMsg:= VarToStr(FieldByNameValues('ErrMsg')); end; // Helios.ExecSQL('DELETE FROM ' + tblPlan + ' WHERE ID=' + selIdPlan.ToString); except on E:Exception do errMsg:= 'CHYBA: ' + E.Message; end; end; end; end; end; helUtils.ReseedTable (Helios, tblAdvKPlanDavky); helUtils.ReseedTable (Helios, tblPrKVaz); helUtils.ReseedTable (Helios, tblPrPost); helUtils.ReseedTable (Helios, tblVPr); helUtils.ReseedTable (Helios, tblPlan); aktStr:= kalendarAktStroj; NactiDataGridu; if (grdKalendar.DataSource.DataSet.RecordCount>0) then if (grdKalendar.DataSource.DataSet.Locate('colIDStroj', VarArrayOf([aktStr]), [])) then grdKalendarCellClick (grdKalendar.Columns.Items[ uUtils.GetFirstVisibleColIndex (grdKalendar)]); end; procedure TformPlan.edtUdrzbaDblClick (Sender: TObject); var f: TformZavady; begin f:= TformZavady.Create (nil); try f.Helios:= Helios; f.kodModif:= kalendarKodStroj; helUtils.waitStart (nil, 'Načítám data...'); f.ShowModal; if (f.retVal=10) then begin idPrPUdrzba:= f.idPrP; edtUdrzba.Text:= f.Nazev; edtVyrobniZakazka.Text:= ''; edtVyrobaKs.Value:= 0; edtVyrobaKA.Value:= 0; edtVyrobaPal.Value:= 0; edtKsZaHod.Value:= 0; idKmenProPlan:= 0; idZakModif:= 0; lblOznaceni.Caption:= ''; edtMJZakazka.Text:= ''; if (edtHodUdrzba.CanFocus) then edtHodUdrzba.SetFocus; end; finally f.Free; end; end; procedure TformPlan.edtVyrobniZakazkaDblClick (Sender: TObject); var f: TformKmen; lSQL, kodZakModif, operace: string; idPostup: integer; begin idKmenProPlan:= 0; f:= TformKmen.Create (nil); try f.Helios:= Helios; f.filtrKodStroj:= kalendarKodStroj; helUtils.waitStart (nil, 'Načítám data...'); f.ShowModal; if (f.retVal=10) then begin edtUdrzba.Text:= ''; idPrPUdrzba:= 0; edtHodUdrzba.Value:= 0; idKmenProPlan:= f.idKmen; with Helios.OpenSQL ('SELECT SkupZbo,RegCis,Nazev1,MJEvidence FROM ' + tblKZ + ' WHERE ID=' + idKmenProPlan.ToString) do begin edtVyrobniZakazka.Text:= VarToStr(FieldByNameValues('Nazev1')).Trim; lblOznaceni.Caption:= VarToStr(FieldByNameValues('SkupZbo')).Trim + ' ' + VarToStr(FieldByNameValues('RegCis')).Trim; edtMJZakazka.Text:= VarToStr(FieldByNameValues('MJEvidence')); end; idZakModif:= f.idZakModif; kodZakModif:= helUtils.getHeliosStrVal (Helios, '', 'SELECT Kod FROM ' + tblZakazModif + ' WHERE ID=' + idZakModif.ToString); ksZaHod:= 0; idStroj:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT ID FROM ' + tblCStroju + ' WHERE Blokovano=0 AND Kod=N' + kodZakModif.QuotedString); if (idStroj>0) then ksZaHod:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT ISNULL(_KapacitaKsZaHod,0) AS KsZaHod FROM ' + tblCStrojuE + ' WHERE ID=' + idStroj.ToString); operace:= ''; if (kalendarKodStroj.IndexOf('COKO-K')>=0) then operace:= 'Máčení'; if (kalendarKodStroj.IndexOf('COKO-T')>=0) then operace:= 'Polévání'; idPostup:= 0; if (operace<>'') then begin lSQL:= 'SELECT ID FROM ' + tblPostup + ' WHERE IDZakazModif=' + idZakModif.ToString + ' AND Dilec=' + idKmenProPlan.ToString + ' AND ZmenaDo IS NULL AND typ<2 AND nazev=N' + operace.QuotedString; idPostup:= helUtils.getHeliosIntVal (Helios, 0, lSQL); end; if (idPostup>0) then ksZaHod:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT ISNULL(_RychlostOperKsHod,0) AS KsZaHod FROM ' + tblPostupE + ' WHERE ID=' + idPostup.ToString); if (kalendarKodStroj.IndexOf('PRO1')>=0) or (kalendarKodStroj.IndexOf('PRO2')>=0) or (kalendarKodStroj.IndexOf('WJ')>=0) or (kalendarKodStroj.IndexOf('EWA65')>=0) then if (helUtils.SQLColumnExists (Helios, tblZakazModifE, '_TypModifikace')) then if (helUtils.getHeliosStrVal(Helios, '', 'SELECT ISNULL(_TypModifikace, N'''') AS Typ FROM ' + tblZakazModifE + ' WHERE ID=' + idZakModif.ToString)='PECENI') then begin end; edtKsZaHod.ValueInt:= ksZaHod; edtVyrobaKs.ValueInt:= 0; edtVyrobaKA.ValueInt:= 0; edtVyrobaPal.ValueInt:= 0; if (edtVyrobaPal.CanFocus) then edtVyrobaPal.SetFocus; end; finally f.Free; end; end; procedure TformPlan.edtZakazkaDblClick (Sender: TObject); begin grdRozpisDblClick (Sender); { if (edtZakazka.Text='') then Helios.Error(#1'Vyberte zakázku k zobrazení přirazených paletových listů'#1) else begin end; } end; procedure TformPlan.FormClose (Sender: TObject; var Action: TCloseAction); begin Helios.ExecSQL ('DROP TABLE IF EXISTS #TabPrikazyProKapacPlan'); Action:= TCloseAction.caFree; end; procedure TformPlan.FormResize (Sender: TObject); begin grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colStroj')].Width:= Trunc(grdKalendar.Width * 0.38); grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colNe')].Width:= Trunc(grdKalendar.Width * 0.078); grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colPo')].Width:= Trunc(grdKalendar.Width * 0.078); grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colUt')].Width:= Trunc(grdKalendar.Width * 0.078); grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colSt')].Width:= Trunc(grdKalendar.Width * 0.078); grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colCt')].Width:= Trunc(grdKalendar.Width * 0.078); grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colPa')].Width:= Trunc(grdKalendar.Width * 0.078); grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colSo')].Width:= Trunc(grdKalendar.Width * 0.078); grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colDatum')].Width:= Trunc(grdRozpis.Width * 0.12); grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colHodOd')].Width:= Trunc(grdRozpis.Width * 0.037); grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colHodDo')].Width:= Trunc(grdRozpis.Width * 0.037); grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colSkupZbo')].Width:= Trunc(grdRozpis.Width * 0.05); grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colRegCis')].Width:= Trunc(grdRozpis.Width * 0.12); grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colNazev')].Width:= Trunc(grdRozpis.Width * 0.30); grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colPrikaz')].Width:= Trunc(grdRozpis.Width * 0.11); grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colMnoz')].Width:= Trunc(grdRozpis.Width * 0.07); grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colMnozHotovo')].Width:= Trunc(grdRozpis.Width * 0.08); end; procedure TformPlan.FormShow (Sender: TObject); var i, i2, gWidth: integer; d, h: string; pomHandle: THandle; begin // vytvor data modul if not(Assigned(datMod2.dm2)) then datMod2.dm2:= Tdm2.Create(self); pomHandle:= THandle(Helios.MainApplicationHandle); if (pomHandle<>Application.Handle) then Application.Handle:= pomHandle; pomHandle:= THandle(Helios.MainApplicationIconHandle); if (pomHandle<>Application.Icon.Handle) then Application.Icon.Handle:= pomHandle; with Application.DefaultFont do begin Name:= Helios.Font; Height:= Helios.FontHeight; Charset:= Helios.Charset; Screen.MenuFont.Charset:= Charset; Screen.MenuFont.Name:= Name; Screen.MenuFont.Height:= Height; end; SetWindowLong(btnKontrolaVyrobene.Handle, GWL_STYLE, GetWindowLong((btnKontrolaVyrobene as TWinControl).Handle, GWL_STYLE) or BS_MULTILINE); idAdvKP:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT ID FROM ' + tblAdvKPlan + ' WHERE Kod=N''99'''); datMod2.idAdvKPl:= idAdvKP; datMod2.bidPalety:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT DPBID FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_Vyroba_Palety'''); if not(dm2.vtKalendar.Active) then dm2.vtKalendar.Open; if not(dm2.vtRozpis.Active) then dm2.vtRozpis.Open; if not(dm2.vtKmen.Active) then dm2.vtKmen.Open; if not(dm2.vtZavady.Active) then dm2.vtZavady.Open; // uloz koeficienty pro sirku sloupcu gridu grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colIDStroj') ].Visible:= false; grdKalendar.Columns.Items[ uUtils.FindColIndexByColName (grdKalendar, 'colKodStroj') ].Visible:= false; SetLength (g1ColWidthKoefs, uUtils.GetVisibleColsCount (grdKalendar) ); gWidth:= uUtils.ColWidthSum (grdKalendar, true); i2:= 0; for i:=0 to grdKalendar.Columns.Count-1 do begin if (grdKalendar.Columns.Items[i].Visible) then begin g1ColWidthKoefs[i2].fieldName:= grdKalendar.Columns.Items[i].FieldName; g1ColWidthKoefs[i2].widthKoef:= grdKalendar.Columns.Items[i].Width / gWidth; Inc (i2); end; end; grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colID') ].Visible:= false; grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colIdPrikaz') ].Visible:= false; grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colIdKmen') ].Visible:= false; grdRozpis.Columns.Items[ uUtils.FindColIndexByColName (grdRozpis, 'colJeUdrzba') ].Visible:= false; SetLength (g2ColWidthKoefs, uUtils.GetVisibleColsCount (grdRozpis) ); gWidth:= uUtils.ColWidthSum (grdRozpis, true); i2:= 0; for i:=0 to grdRozpis.Columns.Count-1 do begin if (grdRozpis.Columns.Items[i].Visible) then begin g2ColWidthKoefs[i2].fieldName:= grdRozpis.Columns.Items[i].FieldName; g2ColWidthKoefs[i2].widthKoef:= grdRozpis.Columns.Items[i].Width / gWidth; Inc (i2); end; end; // ResizeGrids; // resize gridy podle koeficientu sgCas.Alignment:= taCenter; sgCas.ColAlignments[0]:= taCenter; sgCas.Cells[0,0]:= 'Rok'; sgCas.Cells[0,1]:= YearOf(Now).ToString; sgCas.ColAlignments[1]:= taCenter; sgCas.Cells[1,0]:= 'Týden'; sgCas.Cells[1,1]:= WeekOfTheYear(Now).ToString; sgCas.ColAlignments[2]:= taCenter; sgCas.Cells[2,0]:= 'Od'; sgCas.Cells[2,1]:= FormatDateTime('dd.mm.yyyy', IncDay(StartOfTheWeek(Now), -1)); sgCas.ColAlignments[3]:= taCenter; sgCas.Cells[3,0]:= 'Do'; sgCas.Cells[3,1]:= FormatDateTime('dd.mm.yyyy', IncDay(EndOfTheWeek(Now), -1)); selIdVPr:= 0; NactiDataGridu; end; procedure TformPlan.NactiDataGridu; var d: string; begin NulujUdajeVyrobku; if (Assigned(datMod2.dm2)) then begin dm2.Helios:= Helios; if (dm2.vtKalendar<>nil) then if (dm2.vtKalendar.Active) then dm2.vtKalendar.Open; Screen.Cursor:= crHourGlass; grdKalendar.DataSource.DataSet.DisableControls; grdKalendar.LockDrawing; dm2.NactiKalendar (self, 0); // idStroj grdKalendar.DataSource.DataSet.First; grdKalendar.UnlockDrawing; grdKalendar.DataSource.DataSet.EnableControls; grdKalendarCellClick (grdKalendar.Columns.Items[ uUtils.GetFirstVisibleColIndex (grdKalendar)]); dm2.GenerujRozpis (0); if (dm2.vtRozpis<>nil) then if (dm2.vtRozpis.Active) then dm2.vtRozpis.Open; grdRozpis.LockDrawing; dm2.NactiRozpis (self); d:= FormatDateTime('dd.mm.yyyy', Now); // h:= FormatDateTime('hh', Now); grdRozpis.DataSource.DataSet.Locate ('colDatum;colHodOd', VarArrayOf([d, 0]), [loCaseInsensitive]); grdRozpis.UnlockDrawing; Screen.Cursor:= crDefault; end; end; procedure TformPlan.grdKalendarCellClick (Column: TColumn); begin kalendarAktStroj:= dm2.vtKalendar.FieldByName('colIDStroj').AsInteger; kalendarKodStroj:= dm2.vtKalendar.FieldByName('colKodStroj').AsString; if (dm2.vtRozpis.Active) then begin Screen.Cursor:= crHourGlass; grdRozpis.LockDrawing; dm2.VymazRozpis (self); dm2.NactiDavkyPlanu (self, kalendarAktStroj); grdRozpis.UnlockDrawing; Screen.Cursor:= crDefault; end; selIdVPr:= 0; selIdDavka:= 0; selIdPlan:= 0; idPrPUdrzba:= 0; // polozky na detailu rozpisu edtZakazka.Text:= ''; edtVyrobekCislo.Text:= ''; edtVyrobekNazev.Text:= ''; lblRozpisCelkemKs.Caption:= ''; lblRozpisPalet.Caption:= ''; lblRozpisMJ.Caption:= ''; edtCisloZakNaPL.Text:= ''; chbPL.Checked:= false; chbT.Checked:= false; chbF.Checked:= false; chbU.Checked:= false; end; procedure TformPlan.grdKalendarDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if (gdSelected in State) then grdKalendar.Canvas.Font.Color:= clBlack; if (Assigned(Column.Field) and not(SameText(Column.FieldName, 'colStroj'))) then begin if (Column.Field.AsInteger=0) then grdKalendar.Canvas.Brush.Color:= $00C6FECF; // RGB CFFEC6 - svetle zelena if (Column.Field.AsInteger>0) and (Column.Field.AsInteger<=23) then grdKalendar.Canvas.Brush.Color:= $0085FCF4; // RGB F4FC85 - svetle zluta if (Column.Field.AsInteger=24) then grdKalendar.Canvas.Brush.Color:= $00BEC2FD; // RGB FDC2BE - divna cervena end; grdKalendar.DefaultDrawColumnCell (Rect, DataCol, Column, State); end; procedure TformPlan.grdKalendarDrawColumnTitle (Sender: TObject; ACanvas: TCanvas; ARect: TRect; AColumn: TColumn; var ASortMarker: TJvDBGridBitmap; IsDown: Boolean; var Offset: Integer; var DefaultDrawText, DefaultDrawSortMarker: Boolean); begin ACanvas.Brush.Color:= $00B8C4C8; // RGB C8C4B8 - seda DefaultDrawText:= true; DefaultDrawSortMarker:= true; end; procedure TformPlan.grdKalendarTitleClick (Column: TColumn); begin Helios.Info (Column.FieldName + ' >> koef. ' + (Column.Width/grdKalendar.Width).ToString ); end; procedure TformPlan.grdRozpisCellClick (Column: TColumn); var lSQL, mjEvid, radaPrikaz, podm: string; idKZ, aStrojBak, jeUdrzba, idLoc: integer; mnozKs, ksNaPal: Extended; oVar: OleVariant; arrID: TArray; begin rozpisAktCasOd:= dm2.vtRozpis.FieldByName('colHodOd').AsInteger; nHodPlanZacatek.ValueInt:= rozpisAktCasOd; rozpisAktDatum:= dm2.vtRozpis.FieldByName('colDatum').AsString; if (idAdVKP=0) and (datMod2.idAdvKPl>0) then idAdVKP:= datMod2.idAdvKPl; jeUdrzba:= dm2.vtRozpis.FieldByName('colJeUdrzba').AsInteger; selIdPlan:= dm2.vtRozpis.FieldByName('colIDPlan').AsInteger; selIdVPr:= dm2.vtRozpis.FieldByName('colIdPrikaz').AsInteger; selIdDavka:= dm2.vtRozpis.FieldByName('colID').AsInteger; idLoc:= 0; if (selIdDavka>0) then idLoc:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT _VazbaPlgPlan FROM ' + tblAdvKPlanDavky_E + ' WHERE ID=' + selIdDavka.ToString); btnKontrolaVyrobene.Enabled:= (jeUdrzba=0); btnRezervacePL.Enabled:= btnKontrolaVyrobene.Enabled; edtCisloZakNaPL.Enabled:= btnKontrolaVyrobene.Enabled; btnZrusitZakazku.Caption:= 'Zrušit zakázku'; btnFixovatZakazku.Caption:= 'Fixovat zakázku'; if (jeUdrzba=0) then begin chbPL.Checked:= helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + selIdVPr.ToString); lSQL:= 'SELECT 1 FROM ' + tblAdvKPlanDavky + ' WHERE Zamek=1 AND IDAdvKapacPlan=' + idAdVKP.ToString + ' AND IDPrikaz=' + selIdVPr.ToString; if (idLoc>0) then lSQL:= lSQL + ' AND ID IN (SELECT ID FROM ' + tblAdvKPlanDavky_E + ' WHERE _VazbaPlgPlan=' + idLoc.ToString + ')'; chbF.Checked:= helUtils.sqlExistsTestGeneral (Helios, lSQL); btnKontrolaVyrobene.Enabled:= (selIdVPr>0); btnRezervacePL.Enabled:= btnKontrolaVyrobene.Enabled; edtCisloZakNaPL.Enabled:= btnKontrolaVyrobene.Enabled; btnZrusitZakazku.Enabled:= btnKontrolaVyrobene.Enabled; btnFixovatZakazku.Enabled:= btnKontrolaVyrobene.Enabled; edtZakazka.Enabled:= btnKontrolaVyrobene.Enabled; if (chbPL.Checked) then begin btnRezervacePL.Enabled:= false; btnRezervacePL.Enabled:= false; end; end; if (jeUdrzba=1) then begin edtZakazka.Enabled:= false; btnZrusitZakazku.Enabled:= true; btnFixovatZakazku.Enabled:= btnZrusitZakazku.Enabled; btnZrusitZakazku.Caption:= 'Zrušit údržbu'; btnFixovatZakazku.Caption:= 'Fixovat údržbu'; edtVyrobekCislo.Text:= ''; edtVyrobekNazev.Text:= dm2.vtRozpis.FieldByName('colNazev').AsString; // edtZakazka.Text:= dm2.vtRozpis.FieldByName('colPrikaz').AsString; edtZakazka.Text:= ''; lblRozpisCelkemKs.Caption:= ''; lblRozpisPalet.Caption:= ''; edtRozpisPalet1.Value:= 0; edtRozpisKsVKA.Value:= 0; edtRozpisKAnaPal.Value:= 0; chbPL.Checked:= false; chbT.Checked:= false; chbU.Checked:= false; lSQL:= 'SELECT 1 FROM ' + tblAdvKPlanDavky + ' WHERE Zamek=1 AND IDAdvKapacPlan=' + idAdVKP.ToString + ' AND IDPrikaz=' + selIdVPr.ToString; if (idLoc>0) then lSQL:= lSQL + ' AND ID IN (SELECT ID FROM ' + tblAdvKPlanDavky_E + ' WHERE _VazbaPlgPlan=' + idLoc.ToString + ')'; chbF.Checked:= helUtils.sqlExistsTestGeneral (Helios, lSQL); end else begin // jeUdrzba=0 idKZ:= dm2.vtRozpis.FieldByName('colIdKmen').AsInteger; mjEvid:= helUtils.getHeliosStrVal (Helios, '', 'SELECT MJEvidence FROM ' + tblKZ + ' WHERE ID=' + idKZ.ToString); edtVyrobekCislo.Text:= dm2.vtRozpis.FieldByName('colSkupZbo').AsString + ' ' + dm2.vtRozpis.FieldByName('colRegCis').AsString; edtVyrobekNazev.Text:= dm2.vtRozpis.FieldByName('colNazev').AsString; edtRozpisKsVKA.Value:= 0; edtRozpisKAnaPal.Value:= 0; if (System.SysUtils.SameText(mjEvid, 'ka')) then begin edtRozpisKsVKA.Value:= dm2.VratPrepocetMJ (idKZ, 'KA', 'ks', 'PocetOdvozene'); edtRozpisKAnaPal.Value:= dm2.VratPrepocetMJ (idKZ, 'KA', 'pal', 'PocetHlavni'); end; edtZakazka.Text:= dm2.vtRozpis.FieldByName('colPrikaz').AsString; selIdVPr:= dm2.vtRozpis.FieldByName('colIdPrikaz').AsInteger; radaPrikaz:= helUtils.getHeliosStrVal (Helios, '', 'SELECT RadaPrikaz FROM ' + tblPrikaz + ' WHERE ID=' + selIdVPr.ToString); lSQL:= 'SELECT SUM(de._MnozstviKs) FROM ' + tblAdvKPlanDavky + ' d INNER JOIN ' + tblAdvKPlanDavky_E + ' de ON (de.ID=d.ID) WHERE d.IDPrikaz=' + selIdVPr.ToString + ' AND d.IdAdvKapacPlan=' + idAdVKP.ToString; mnozKs:= helUtils.getHeliosFloatVal (Helios, 0, lSQL); lblRozpisCelkemKs.Caption:= mnozKs.ToString; edtRozpisPalet1.Value:= 0; lblRozpisPalet.Caption:= ''; ksNaPal:= edtRozpisKsVKA.Value * edtRozpisKAnaPal.Value; if (ksNaPal<>0) then begin lblRozpisPalet.Caption:= (mnozKs/ksNaPal).ToString; edtRozpisPalet1.Value:= (mnozKs/ksNaPal); end; chbT.Checked:= false; chbU.Checked:= false; chbPL.Checked:= helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + selIdVPr.ToString); // chbF.Checked:= helUtils.sqlExistsTestGeneral (Helios, 'SELECT 1 FROM ' + tblAdvKPlanDavky + ' WHERE Zamek=1 AND IDAdvKapacPlan=' + idAdVKP.ToString + ' AND IDPrikaz=' + selIdVPr.ToString); lSQL:= 'SELECT 1 FROM ' + tblAdvKPlanDavky + ' WHERE Zamek=1 AND IDAdvKapacPlan=' + idAdVKP.ToString + ' AND IDPrikaz=' + selIdVPr.ToString; if (idLoc>0) then lSQL:= lSQL + ' AND ID IN (SELECT ID FROM ' + tblAdvKPlanDavky_E + ' WHERE _VazbaPlgPlan=' + idLoc.ToString + ')'; chbF.Checked:= helUtils.sqlExistsTestGeneral (Helios, lSQL); if (pressedAlt) and (pressedShift) then begin aStrojBak:= kalendarAktStroj; podm:= 'TabPrikaz.StavPrikazu=30 AND TabPrikaz.IDZakazModif=(SELECT ID FROM ' + tblZakazModif + ' WHERE Kod=N' + kalendarKodStroj.QuotedString + ')'; podm:= podm + ' AND TabPrikaz.IDTabKmen NOT IN (SELECT ID FROM ' + tblKZ + ' WHERE SkupZbo=N''701'' OR Sluzba=1)'; podm:= podm + ' AND TabPrikaz.ID NOT IN (SELECT IDPrikaz FROM ' + tblAdvKPlanDavky + ' WHERE IDStroje=' + kalendarAktStroj.ToString + ')'; podm:= podm + ' AND TabPrikaz.Rada NOT IN (SELECT Rada FROM ' + tblPrikazRada + ' WHERE nazev LIKE N''%údržb%'')'; if (Helios.Prenos (bidVyrPrik, 'TabPrikaz.ID', oVar, podm, 'Vyberte příkaz', false)) then begin selIdVPr:= oVar; SetLength(arrID, 1); arrID[0]:= selIdVPr; RozpadPrikazuNaDavkyKP (rozpisAktDatum, rozpisAktCasOd, arrID); NactiDataGridu; grdKalendar.DataSource.DataSet.Locate('colIDStroj', VarArrayOf ([aStrojBak]), []); Screen.Cursor:= crHourGlass; grdRozpis.LockDrawing; dm2.VymazRozpis (self); kalendarAktStroj:= aStrojBak; dm2.NactiDavkyPlanu (self, kalendarAktStroj); grdRozpis.UnlockDrawing; Screen.Cursor:= crDefault; end; end; end; // jeUdrzba=0 end; procedure TformPlan.grdRozpisDblClick (Sender: TObject); var f: TformPlanPaletListy; begin edtVyrobekCislo.Text:= edtVyrobekCislo.Text.Trim; if (edtVyrobekCislo.Text<>'') then begin f:= TformPlanPaletListy.Create(self); try f.Helios:= Helios; f.cisloZbo:= edtVyrobekCislo.Text; f.cisloPrikazu:= edtZakazka.Text; f.nazev:= edtVyrobekNazev.Text; f.idPrikaz:= grdRozpis.DataSource.DataSet.FieldByName('colIDPrikaz').AsInteger; f.ksVKA:= edtRozpisKsVKA.ValueInt; f.KAnaPal:= edtRozpisKAnaPal.ValueInt; f.ShowModal; finally FreeAndNil (f); end; end; end; procedure TformPlan.grdRozpisDrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if (not(gdSelected in State)) then TJvDBGrid(Sender).Canvas.Brush.Color:= $00E0E4E5; // RGB E5E4E0 if (Column.FieldName='colMnozHotovo') then begin if (gdSelected in State) then TJvDBGrid(Sender).Canvas.Font.Color:= clBlack; TJvDBGrid(Sender).Canvas.Brush.Color:= $00C7FCF9; // RGB F9FCC7 end; TJvDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State); end; procedure TformPlan.grdRozpisMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin pressedShift:= (Shift * [ssShift, ssAlt, ssCtrl] = [ssShift]); pressedAlt:= (Shift * [ssShift, ssAlt, ssCtrl] = [ssAlt]); if (Shift * [ssShift, ssAlt, ssCtrl] = [ssShift] + [ssAlt]) then begin pressedShift:= true; pressedAlt:= true; end; end; procedure TformPlan.grdRozpisTitleClick (Column: TColumn); begin Helios.Info (Column.FieldName + ' >> koef. ' + (Column.Width/grdRozpis.Width).ToString ); end; procedure TformPlan.sgCasDblClick (Sender: TObject); var f: TformVyberTydne; begin if (sgCas.Col=1) and (sgCas.Row=1) then begin f:= TformVyberTydne.Create (nil); try if (sgCas.Cells[0,1]<>'') then f.rok:= sgCas.Cells[0,1].ToInteger; if (sgCas.Cells[1,1]<>'') then f.tyden:= sgCas.Cells[1,1].ToInteger; f.retVal:= 0; f.ShowModal; if (f.retVal=10) then begin sgCas.Cells[0,1]:= f.rok.ToString; sgCas.Cells[1,1]:= f.tyden.ToString; sgCas.Cells[2,1]:= f.datOd; sgCas.Cells[3,1]:= f.datDo; sgCas.Invalidate; NactiDataGridu; end; finally f.Free; end; end; end; procedure TformPlan.sgCasDrawCell (Sender: TObject; ACol, ARow: LongInt; Rect: TRect; State: TGridDrawState); var mamBarvu: boolean; s: string; TextFormat: TTextFormatFlags; tW, tH, x, y: Integer; begin mamBarvu:= false; with Sender as TJvStringGrid do begin s:= Cells[ACol, ARow]; tW:= Canvas.TextWidth (s); tH:= Canvas.TextHeight (s); x:= Rect.Left + (Rect.Width - tW) div 2; y:= Rect.Top + (Rect.Height - tH) div 2; Canvas.Brush.Color := Color; // Set to grid background color Canvas.FillRect(Rect); if (ARow=0) then begin Canvas.Brush.Color:= $00B8C4C8; // Set your desired color - RGB C8C4B8 - seda mamBarvu:= true; end else if (ACol=1) then begin Canvas.Brush.Color:= $C6FECF; // Set your desired color here mamBarvu:= true; end else begin Canvas.Brush.Color:= $E5E4DF; mamBarvu:= true; end; if (mamBarvu) then begin Canvas.FillRect(Rect); // Fill the cell background (clear cell) Canvas.TextOut(x, y, s); // Draw the cell text end; DefaultDrawCell (ACol, ARow, Rect, State); // Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]); end; end; procedure TformPlan.sgCasSelectCell (Sender: TObject; ACol, ARow: LongInt; var CanSelect: Boolean); begin CanSelect:= ((ACol=1) and (ARow=1)); end; procedure TformPlan.FormDestroy (Sender: TObject); begin if (datMod2.dm2<>nil) then FreeAndNil (datMod2.dm2); end; end.