Files
Rootvin-pluginHDCRTN/_plgPlan/datMod2.pas
2025-05-21 21:06:33 +02:00

822 lines
30 KiB
ObjectPascal
Raw Blame History

unit datMod2;
interface
uses
System.SysUtils, System.Classes,
ddPlugin_TLB, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error,
FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, Data.DB, FireDAC.Comp.DataSet,
FireDAC.Comp.Client,
frmPlan, frmRamcovyPlan, Vcl.BaseImageCollection, Vcl.ImageCollection, System.ImageList, Vcl.ImgList,
Vcl.VirtualImageList, Vcl.Controls;
{$I iConsts.inc}
type
TGridColWidthKoefs = record
fieldName: string;
widthKoef: Extended;
end;
TDavkaPrikazOdv = record
cislo: integer;
idPrikaz: integer;
idDavka: integer;
mnozOdvPrikaz: extended;
mnozZapsane: Extended;
mnozOdvPredchozi: extended;
end;
Tdm2 = class(TDataModule)
vtRozpis: TFDMemTable;
dsRozpis: TDataSource;
dsKalendar: TDataSource;
vtKalendar: TFDMemTable;
vtRozpiscolDatum: TDateField;
vtRozpiscolID: TIntegerField;
vtRozpiscolHodOd: TSmallintField;
vtRozpiscolHodDo: TSmallintField;
vtRozpiscolSkupZbo: TStringField;
vtRozpiscolRegCis: TStringField;
vtRozpiscolNazev: TStringField;
vtRozpiscolPrikaz: TStringField;
vtRozpiscolMnoz: TSmallintField;
vtRozpiscolMnozHotovo: TSmallintField;
vtKalendarcolIDStroj: TIntegerField;
vtKalendarcolStroj: TStringField;
vtKalendarcolNe: TSmallintField;
vtKalendarcolPo: TSmallintField;
vtKalendarcolUt: TSmallintField;
vtKalendarcolSt: TSmallintField;
vtKalendarcolCt: TSmallintField;
vtKalendarcolPa: TSmallintField;
vtKalendarcolSo: TSmallintField;
vtKalendarcolKodStroj: TStringField;
dsKmen: TDataSource;
vtKmen: TFDMemTable;
vtKmencolID: TIntegerField;
vtKmencolSZ: TStringField;
vtKmencolRegCis: TStringField;
vtKmencolNazev1: TStringField;
vtKmencolMJEvid: TStringField;
vtKmencolDilec: TBooleanField;
vtKmencolMaterial: TBooleanField;
vtKmencolSluzba: TBooleanField;
vtKmencolSKP: TStringField;
imgCol: TImageCollection;
imgList: TVirtualImageList;
ImageList1: TImageList;
vtKmenIDZaklad: TIntegerField;
vtKmencolZaklad: TStringField;
vtKmencolIDStroj: TIntegerField;
vtKmencolStroj: TStringField;
vtKmencolKSvKA: TIntegerField;
vtKmencolKAnaPAL: TIntegerField;
vtKmencolKSnaPAL: TIntegerField;
vtKmencolIDZakModif: TIntegerField;
dsZavady: TDataSource;
vtZavady: TFDMemTable;
vtZavadycolID: TIntegerField;
vtZavadycolKod: TStringField;
vtZavadycolTyp: TIntegerField;
vtZavadycolNazev: TStringField;
vtRozpiscolIDDavkaAdvPlan: TIntegerField;
vtRozpiscolIdKmen: TIntegerField;
vtRozpiscolIdPrikaz: TIntegerField;
vtVyrobniTyden: TFDMemTable;
dsVyrobniTyden: TDataSource;
vtVyrobniTydencolTyden: TIntegerField;
vtVyrobniTydencolDatumOd: TDateField;
vtVyrobniTydencolDatumDo: TDateField;
vtVyrobniTydencolRok: TIntegerField;
dsRamcovyPlan: TDataSource;
vtRamcovyPlan: TFDMemTable;
vtRamcovyPlanID: TIntegerField;
vtRamcovyPlanIDKmen: TIntegerField;
vtRamcovyPlanSZ: TStringField;
vtRamcovyPlanRegCis: TStringField;
vtRamcovyPlanNazev1: TStringField;
vtRamcovyPlanMJ: TStringField;
vtRamcovyPlanKs: TIntegerField;
vtRamcovyPlanKA: TIntegerField;
vtRamcovyPlanCisloOrg: TIntegerField;
vtRamcovyPlanM01: TIntegerField;
vtRamcovyPlanM02: TIntegerField;
vtRamcovyPlanM03: TIntegerField;
vtRamcovyPlanM04: TIntegerField;
vtRamcovyPlanM05: TIntegerField;
vtRamcovyPlanM06: TIntegerField;
vtRamcovyPlanM07: TIntegerField;
vtRamcovyPlanM08: TIntegerField;
vtRamcovyPlanM09: TIntegerField;
vtRamcovyPlanM10: TIntegerField;
vtRamcovyPlanM11: TIntegerField;
vtRamcovyPlanM12: TIntegerField;
vtRamcovyPlanSumace: TIntegerField;
vtRamcovyPlanVyroba: TIntegerField;
vtRamcovyPlanZbyva: TIntegerField;
vtRamcovyPlanSklRoo: TIntegerField;
vtRamcovyPlanSklTvin: TIntegerField;
vtRamcovyPlanSklAlter: TIntegerField;
vtRamcovyPlanSklMimoPlan: TBooleanField;
dsRPlanAlter: TDataSource;
vtRPlanAlter: TFDMemTable;
vtRPlanAlterID: TIntegerField;
vtRPlanAlterKalibr: TStringField;
vtRPlanAlterDelkaJm: TFloatField;
vtRPlanAlterStroj: TStringField;
vtRPlanAlterIDStroj: TIntegerField;
dsPlanPL: TDataSource;
vtPlanPL: TFDMemTable;
vtPlanPLIDVCPrikaz: TIntegerField;
vtPlanPLCisloPL: TStringField;
vtPlanPLDatVyrobaZadano: TDateTimeField;
vtPlanPLDatVyrobaStart: TDateTimeField;
vtPlanPLDatExpedice: TDateTimeField;
vtPlanPLKAnaPal: TFloatField;
vtPlanPLKusu: TIntegerField;
vtPlanPLIDPrikaz: TIntegerField;
vtPlanPLDatExpirace: TDateTimeField;
vtRozpiscolIDPlan: TIntegerField;
vtPlanPLCisloExtZak: TStringField;
vtRozpiscolJeUdrzba: TSmallintField;
vtZavadycolIDPrikaz: TIntegerField;
procedure DataModuleCreate (Sender: TObject);
procedure vtKmenCalcFields(DataSet: TDataSet);
private
public
Helios: IHelios;
function VratPrepocetMJ (idKmen: integer; hlavniMJ, odvozenaMJ: string; sloupec: string='PocetOdvozene'): Extended;
procedure VymazRozpis (f: TformPlan); safecall;
procedure NactiRozpis (f: TformPlan; prazdny: boolean=false); safecall;
procedure NactiDavkyPlanu (f: TformPlan; idStroj: Integer=0); safecall;
procedure GenerujRozpis (odData: TDateTime; pocetDnu: integer=14); safecall;
procedure NactiKalendar (f: TformPlan; idStroj: integer=0); safecall;
procedure NactiKmenZbozi (podm: string=''); safecall;
procedure NactiUdrzbu (kodModif: string=''; podm: string=''); safecall;
procedure NactiVyrobniTydny (rok: integer);
procedure PlanPalListyNactiSarzePrikazu (idPrikaz, ksVKA: integer; var externiZak: string);
end;
var
dm2: Tdm2;
dmCreated, apiMod: boolean;
apiServer, phServer, url, sqlLang: string;
idAdvKPl, bidPalety: integer;
implementation
{%CLASSGROUP 'Vcl.Controls.TControl'}
uses System.Variants, System.StrUtils, Winapi.Windows, System.DateUtils,
helTabsBIDs, helUtils;
{$R *.dfm}
procedure Tdm2.DataModuleCreate (Sender: TObject);
begin
dmCreated:= true;
end;
function Tdm2.VratPrepocetMJ (idKmen: integer; hlavniMJ, odvozenaMJ: string; sloupec: string='PocetOdvozene'): Extended;
var lSQL: string;
begin
result:= 0;
sloupec:= sqlSanitize (sloupec);
lSQL:= 'SELECT ' + sloupec + ' FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKmen.ToString + ' AND LOWER(KodMJ1)=N' + hlavniMJ.ToLower.QuotedString
+ ' AND LOWER(KodMJ2)=N' + odvozenaMJ.ToLower.QuotedString;
try
result:= helUtils.getHeliosFloatVal (Helios, 0, lSQL);
finally
end;
end;
procedure Tdm2.NactiUdrzbu (kodModif: string=''; podm: string='');
var lSQL, kod: string;
idPrPost: Integer;
begin
if not(vtZavady.Active) then
vtZavady.Open;
// lehka sanitizace SQL
podm:= podm.Replace(';', '').Replace('--','');
lSQL:= 'SELECT TOP(1) pp.ID, pp.Nazev, pp.IDPrikaz, pp.operace FROM ' + tblPrPost + ' pp INNER JOIN ' + tblVPr + ' vp ON (vp.ID=pp.IDPrikaz AND pp.IDOdchylkyDo IS NULL AND pp.priorita=0)'
+ ' INNER JOIN ' + tblZakazModif + ' m ON (m.ID=vp.IDZakazModif) INNER JOIN ' + tblPrikazRada + ' vpr ON (vpr.Rada=vp.Rada) WHERE pp.Typ=0 AND vp.StavPrikazu=30 AND m.Kod=N'
+ kodModif.QuotedString + ' AND vpr.nazev LIKE N''%<25>dr<64>b%''';
{ lSQL:= 'SELECT ID, Kod, Nazev, Typ FROM ' + tblCZavad;
if (podm<>'') then
lSQL:= lSQL + ' WHERE ' + podm;
}
lSQL:= lSQL + ' ORDER BY pp.Nazev';
try
with Helios.OpenSQL (lSQL) do
begin
First;
while not(EOF) do
begin
vtZavady.Append;
idPrPost:= VarToStr(FieldByNameValues('ID')).ToInteger;
vtZavady.FieldByName('colID').AsInteger:= idPrPost;
vtZavady.FieldByName('colNazev').AsString:= VarToStr(FieldByNameValues('Nazev'));
vtZavady.FieldByName('colIDPrikaz').AsInteger:= VarToStr(FieldByNameValues('IDPrikaz')).ToInteger;
vtZavady.FieldByName('colKod').AsString:= VarToStr(FieldByNameValues('operace')).Trim;
// vtZavady.FieldByName('colTyp').AsInteger:= VarToStr(FieldByNameValues('Typ')).ToInteger;
vtZavady.Post;
Next;
end;
end;
finally
end;
end;
procedure Tdm2.NactiKmenZbozi (podm: string='');
var lSQL, mjEvid: string;
idKZ, idZakazModif, idZakazModifDilce: Integer;
begin
if not(vtKmen.Active) then
vtKmen.Open;
// lehka sanitizace SQL
podm:= podm.Replace(';', '').Replace('--','');
lSQL:= 'SELECT k.ID, k.SkupZbo, k.RegCis, k.Nazev1, k.SKP, k.MJEvidence, k.Material, k.Dilec, k.Sluzba, zm.Nazev AS NazevModif, zmd.ID AS IdZMD, zm.ID AS IdZM'
+ ', ISNULL( (SELECT TOP(1) kN.Nazev1 FROM ' + tblKVaz + ' v INNER JOIN ' + tblKZ + ' kN ON (kN.ID=v.nizsi) WHERE v.vyssi=k.ID'
+ ' AND v.ZmenaDo IS NULL AND v.IDZakazModif=zm.ID AND kN.SkupZbo=N''702''), N'''') AS Zaklad'
+ ' FROM ' + tblZakazModifDilce + ' zmd INNER JOIN ' + tblZakazModif + ' zm ON (zm.ID=zmd.IDZakazModif) INNER JOIN ' + tblKZ
+ ' k ON (k.ID=zmd.IDKmenZbozi)';
if (podm<>'') then
lSQL:= lSQL + ' WHERE ' + podm;
lSQL:= lSQL + ' ORDER BY k.SkupZbo, k.RegCis, zm.Nazev';
try
with Helios.OpenSQL (lSQL) do
begin
First;
while not(EOF) do
begin
vtKmen.Append;
idKZ:= VarToStr(FieldByNameValues('ID')).ToInteger;
vtKmen.FieldByName('colID').AsInteger:= idKZ;
vtKmen.FieldByName('colSZ').AsString:= VarToStr(FieldByNameValues('SkupZbo'));
vtKmen.FieldByName('colRegCis').AsString:= VarToStr(FieldByNameValues('RegCis'));
vtKmen.FieldByName('colNazev1').AsString:= VarToStr(FieldByNameValues('Nazev1'));
vtKmen.FieldByName('colSKP').AsString:= VarToStr(FieldByNameValues('SKP'));
mjEvid:= VarToStr(FieldByNameValues('MJEvidence'));
vtKmen.FieldByName('colMJEvid').AsString:= mjEvid;
vtKmen.FieldByName('colMaterial').AsBoolean:= FieldByNameValues('Material');
vtKmen.FieldByName('colDilec').AsString:= FieldByNameValues('Dilec'); // TrueBoolStrs
vtKmen.FieldByName('colSluzba').AsBoolean:= FieldByNameValues('Sluzba');
vtKmen.FieldByName('colZaklad').AsString:= VarToStr(FieldByNameValues('Zaklad'));
if (mjEvid='KA') then
begin
lSQL:= 'SELECT PocetOdvozene FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKZ.ToString + ' AND KodMJ1=N''KA'' AND KodMJ2=N''ks''';
vtKmen.FieldByName('colKSvKA').AsInteger:= helUtils.getHeliosIntVal (Helios, 0, lSQL);
lSQL:= 'SELECT PocetHlavni FROM ' + tblMJZbo + ' WHERE IDKmenZbozi=' + idKZ.ToString + ' AND KodMJ1=N''KA'' AND KodMJ2=N''Pal''';
vtKmen.FieldByName('colKAnaPAL').AsInteger:= helUtils.getHeliosIntVal (Helios, 0, lSQL);
end;
vtKmen.FieldByName('colIDZakModifDilce').AsInteger:= VarToStr(FieldByNameValues('IdZMD')).ToInteger;
vtKmen.FieldByName('colIDZakModif').AsInteger:= VarToStr(FieldByNameValues('IdZM')).ToInteger;
vtKmen.FieldByName('colZakModif').AsString:= VarToStr(FieldByNameValues('NazevModif'));
vtKmen.Post;
Next;
end;
end;
finally
end;
end;
procedure Tdm2.NactiKalendar (f: TformPlan; idStroj: Integer=0);
var lSQL: string;
dStart, dAkt, dNedele, dTesty, dNow, d1: TDateTime;
datumNe, datumTesty: string;
dAktD, dAktM, dAktR, dTestD, dTestM, dTestR: integer;
i, cnt, cntNe, cntPo, cntUt, cntSt, cntCt, cntPa, cntSo: integer;
begin
if not(vtKalendar.Active) then
vtKalendar.Open;
vtKalendar.EmptyDataSet;
idAdvKPl:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT TOP(1) ID FROM ' + tblAdvKPlan + ' WHERE Kod=N''99''');
dNedele:= 0;
dNow:= Now;
d1:= dNow;
if (f.sgCas.Cells[2,1]<>'') then // datumOd
begin
d1:= StrToDateTime(f.sgCas.Cells[2,1]);
dNedele:= d1;
end;
dStart:= StartOfTheWeek (d1);
if (dNow=d1) and (dNedele=0) then
dNedele:= IncDay (dStart, -1);
dAkt:= d1;
dAktD:= DayOf (dAkt);
dAktM:= MonthOf (dAkt);
dAktR:= YearOf (dAkt);
lSQL:= 'SELECT cs.ID, cs.Kod, cs.Nazev FROM ' + tblCStroju + ' cs LEFT JOIN ' + tblCStrojuE + ' cse ON (cse.ID=cs.ID) WHERE cs.Blokovano=0';
lSQL:= lSQL + IfThen(idStroj>0, ' AND cs.ID=' + idStroj.ToString, '') + ' AND ISNULL(cse._Planovani,0)=1 ORDER BY cs.Nazev';
try
with Helios.OpenSQL (lSQL) do
begin
First;
while not(EOF) do
begin
dTesty:= dNedele;
vtKalendar.Append;
idStroj:= VarToStr(FieldByNameValues('ID')).ToInteger;
vtKalendar.FieldByName('colIDStroj').AsInteger:= idStroj;
vtKalendar.FieldByName('colKodStroj').AsString:= VarToStr(FieldByNameValues('Kod'));
vtKalendar.FieldByName('colStroj').AsString:= VarToStr(FieldByNameValues('Nazev'));
for i:=0 to 6 do
begin
// datumTesty:= FormatDateTime ('dd.MM.yyyy', dTesty);
dTestD:= DayOf (dTesty);
dTestM:= MonthOf (dTesty);
dTestR:= YearOf (dTesty);
lSQL:= 'SELECT COUNT(d.ID) FROM ' + tblAdvKPlanDavky + ' d INNER JOIN ' + tblVPr + ' p ON (p.ID=d.IDPrikaz) WHERE d.IdAdvKapacPlan=' + idAdvKPl.ToString
+ IfThen(idStroj=0, '', ' AND d.IDStroje=' + idStroj.ToString) + ' AND p.StavPrikazu IN (30,40) AND d.CasOd_D=' + dTestD.ToString
+ ' AND d.CasOd_M=' + dTestM.ToString + ' AND d.CasOd_Y=' + dTestR.ToString;
cnt:= helUtils.getHeliosIntVal (Helios, 0, lSQL);
case i of
0: begin vtKalendar.FieldByName('colNe').AsInteger:= cnt; cntNe:= cnt; end;
1: begin vtKalendar.FieldByName('colPo').AsInteger:= cnt; cntPo:= cnt; end;
2: begin vtKalendar.FieldByName('colUt').AsInteger:= cnt; cntUt:= cnt; end;
3: begin vtKalendar.FieldByName('colSt').AsInteger:= cnt; cntSt:= cnt; end;
4: begin vtKalendar.FieldByName('colCt').AsInteger:= cnt; cntCt:= cnt; end;
5: begin vtKalendar.FieldByName('colPa').AsInteger:= cnt; cntPa:= cnt; end;
6: begin vtKalendar.FieldByName('colSo').AsInteger:= cnt; cntSo:= cnt; end;
end;
dTesty:= IncDay (dTesty, 1);
end;
vtKalendar.Post;
Next;
end;
end;
finally
end;
end;
procedure Tdm2.VymazRozpis (f: TformPlan);
var i: integer;
d: string;
h: integer;
begin
if not(vtRozpis.Active) then
vtRozpis.Open;
d:= FormatDateTime ('dd.MM.yyyy', Now);
h:= HourOf(Now);
vtRozpis.DisableControls;
vtRozpis.First;
while not(vtRozpis.Eof) do
begin
vtRozpis.Edit;
vtRozpis.FieldByName('colID').AsInteger:= 0;
vtRozpis.FieldByName('colIDDavkaAdvPlan').AsInteger:= 0;
vtRozpis.FieldByName('colPrikaz').AsString:= '';
vtRozpis.FieldByName('colSkupZbo').AsString:= '';
vtRozpis.FieldByName('colRegCis').AsString:= '';
vtRozpis.FieldByName('colNazev').AsString:= '';
vtRozpis.FieldByName('colMnoz').AsInteger:= 0;
vtRozpis.Post;
vtRozpis.Next;
end;
vtRozpis.EnableControls;
vtRozpis.Locate ('colDatum;colHodOd', VarArrayOf ([d, h]), []);
end;
procedure Tdm2.NactiDavkyPlanu (f: TformPlan; idStroj: Integer = 0);
var lSQL: string;
datum, hodiny, radaPrikaz, prikaz, mj, sz, regCis, nazev1, altPrP, nazevOper: string;
prvniDatum, prvniHod: string;
colID, idVPr, idKmen, idVPrOld, casOd, doklPrP, doklPrPOld, jeUdrzba: integer;
cislo, iTemp: integer;
mnoz, kusyCisteVPr, mnozOdv, mnozProZapis, mnozZapsane, ksVKA: extended;
fnd: boolean;
d, d2: TDateTime;
aDavkaVPrOdv: TArray<TDavkaPrikazOdv>;
function SumaZapsanehoMnozstviPred (a: TArray<TDavkaPrikazOdv>; idPrikaz: integer; predCislem: integer=0): extended;
var i, c: integer;
begin
result:= 0;
for i:=0 to Length(a)-1 do
begin
if (a[i].idPrikaz=idPrikaz) then
if (a[i].cislo<predCislem) then
result:= result + a[i].mnozZapsane;
end;
end;
begin
idVPrOld:= 0;
doklPrPOld:= 0;
mnozZapsane:= 0;
iTemp:= 0;
d:= 0;
if (f.sgCas.Cells[2,1]<>'') then
d:= StrToDate(f.sgCas.Cells[2,1]);
GenerujRozpis (d, 7);
vtRozpis.EmptyDataSet;
prvniDatum:= '';
prvniHod:= '';
lSQL:= 'SELECT MIN(da.CasOd) FROM ' + tblAdvKPlanDavky + ' da INNER JOIN ' + tblAdvKPlan + ' kp ON (kp.ID=da.IDAdvKapacPlan) INNER JOIN '
+ tblVPr + ' vp ON (vp.ID=da.IDPrikaz) WHERE kp.Kod=N''99'' AND da.IDStroje=' + idStroj.ToString + ' AND vp.StavPrikazu IN (30,40)';
if (f.sgCas.Cells[2,1]<>'') then
lSQL:= lSQL + ' AND dbo.hf_TruncDate(da.CasOd)>=dbo.hf_TruncDate(CONVERT(datetime, N' + f.sgCas.Cells[2,1].QuotedString + ',104))';
if (f.sgCas.Cells[3,1]<>'') then
lSQL:= lSQL + ' AND dbo.hf_TruncDate(da.CasOd)<=dbo.hf_TruncDate(CONVERT(datetime, N' + f.sgCas.Cells[3,1].QuotedString + ',104))';
datum:= helUtils.getHeliosDateTimeVal (Helios, 0, lSQL).ToString;
if (datum<>'30.12.1899') then
begin
if (datum.IndexOf(' ')>-1) then
begin
prvniDatum:= LeftStr(datum, datum.IndexOf(' '));
prvniHod:= MidStr(datum, datum.IndexOf(' ')+1, 255);
if (prvniHod.IndexOf(':')>-1) then
prvniHod:= LeftStr(prvniHod, prvniHod.IndexOf(':')).Trim;
end
else
begin
prvniDatum:= datum;
prvniHod:= '0';
end;
if (datum.IndexOf(' ')>-1) then
datum:= LeftStr(datum, datum.IndexOf(' '));
GenerujRozpis (StrToDateTime(datum), 7);
vtRozpis.IndexFieldNames:= 'colDatum;colHodOd';
vtRozpis.Refresh;
NactiRozpis (f);
vtRozpis.Refresh;
end;
lSQL:= 'SELECT da.ID, da.CasOd, da.CasDo, ISNULL(dae._MnozstviKs,0) AS MnozstviKs, vp.RadaPrikaz, vp.Prikaz, vp.ID AS IDPrikaz, k.ID AS IDKmen'
+ ', k.SkupZbo, k.RegCis, k.Nazev1, ISNULL(vp.IDPlan,0) AS IDPlan, da.DokladPrPostup, da.AltPrPostup'
+ ', CONVERT(int, CASE WHEN vpr.nazev LIKE N''%<25>dr<64>b%'' THEN 1 ELSE 0 END) AS JeUdrzba'
+ ' FROM ' + tblAdvKPlanDavky + ' da LEFT JOIN ' + tblAdvKPlanDavky_E
+ ' dae ON (dae.ID=da.ID) INNER JOIN ' + tblAdvKPlan + ' kp ON (kp.ID=da.IDAdvKapacPlan) INNER JOIN ' + tblVPr + ' vp ON (vp.ID=da.IDPrikaz) INNER JOIN '
+ tblPrikazRada + ' vpr ON (vpr.Rada=vp.Rada) INNER JOIN '
+ tblKZ + ' k ON (k.ID=vp.IDTabKmen) WHERE kp.Kod=N''99'' AND da.IDStroje=' + idStroj.ToString + ' AND vp.StavPrikazu IN (30,40)';
if (f.sgCas.Cells[2,1]<>'') then
lSQL:= lSQL + ' AND dbo.hf_TruncDate(da.CasOd)>=dbo.hf_TruncDate(CONVERT(datetime, N' + f.sgCas.Cells[2,1].QuotedString + ',104))';
if (f.sgCas.Cells[3,1]<>'') then
lSQL:= lSQL + ' AND dbo.hf_TruncDate(da.CasOd)<=dbo.hf_TruncDate(CONVERT(datetime, N' + f.sgCas.Cells[3,1].QuotedString + ',104))';
lSQL:= lSQL + ' ORDER BY da.CasOd';
with Helios.OpenSQL (lSQL) do
begin
First;
while not(EOF) do
begin
colID:= FieldByNameValues('ID');
datum:= VarToStr(FieldByNameValues('CasOd'));
idVPr:= VarToStr(FieldByNameValues('IDPrikaz')).ToInteger;
doklPrP:= VarToStr(FieldByNameValues('DokladPrPostup')).ToInteger;
altPrP:= VarToStr(FieldByNameValues('AltPrPostup'));
lSQL:= 'SELECT TOP(1) nazev FROM ' + tblPrPost + ' WHERE IDPrikaz=' + idVpr.ToString + ' AND Doklad=' + doklPrP.ToString + ' AND Alt=N' + altPrP.QuotedString
+ ' AND IDOdchylkyDo IS NULL AND Priorita=0';
nazevOper:= helUtils.getHeliosStrVal(Helios, '', lSQL);
Inc(cislo);
if (idVPr<>idVPrOld) then
begin
cislo:= 1;
idKmen:= helUtils.getHeliosIntVal (Helios, 0, 'SELECT IDTabKmen FROM ' + tblVPr + ' WHERE ID=' + idVPr.ToString);
mj:= helUtils.getHeliosStrVal (Helios, '', 'SELECT MJEvidence FROM ' + tblKZ + ' WHERE ID=' + idKmen.ToString);
ksVKA:= helUtils.getHeliosFloatVal (Helios, 0, 'SELECT dbo.ef_Kmen_VratPocetKsVKartonu (' + idKmen.ToString + ')');
kusyCisteVPr:= helUtils.getHeliosFloatVal (Helios, 0, 'SELECT kusy_ciste FROM ' + tblVPr + ' WHERE ID=' + idVPr.ToString);
lSQL:= 'SELECT SUM(kusy_odv+kusy_zmet_opr+kusy_zmet_neopr) FROM ' + tblPMZ + ' WHERE IDPrikaz=' + idVPr.ToString + ' AND DokladPrPostup=' + doklPrP.ToString;
mnozOdv:= helUtils.getHeliosFloatVal (Helios, 0, lSQL);
if (mj.ToUpper='KA') then
begin
kusyCisteVPr:= kusyCisteVPr * ksVKA;
mnozOdv:= mnozOdv * ksVKA;
end;
idVPrOld:= idVPr;
end;
// idVPrOld:= idVPr;
{
mnoz:= FieldByNameValues('MnzstviKs');
radaPrikaz:= FieldByNameValues('RadaPrikaz');
prikaz:= FieldByNameValues('Prikaz');
regCis:= FieldByNameValues('RegCis');
nazev1:= FieldByNameValues('Nazev1');
}
if (datum<>'') then
begin
if (datum.IndexOf(' ')=-1) then
datum:= datum + ' 00:00:00';
if (datum.IndexOf(' ')>-1) then
begin
hodiny:= MidStr(datum, datum.IndexOf(' ')+1, 255).Trim;
casOd:= LeftStr(hodiny, hodiny.IndexOf(':')).ToInteger;
datum:= LeftStr(datum, datum.IndexOf(' '));
mnozProZapis:= VarToStr(FieldByNameValues('MnozstviKs')).ToExtended;
SetLength (aDavkaVPrOdv, iTemp+1);
aDavkaVPrOdv[iTemp].idPrikaz:= idVPr;
aDavkaVPrOdv[iTemp].cislo:= cislo;
aDavkaVPrOdv[iTemp].idDavka:= colID;
fnd:= vtRozpis.Locate ('colIDDavkaAdvPlan', VarArrayOf ([colID]), []); // colID / colDatum / colHodOd
if not(fnd) then
begin
fnd:= vtRozpis.Locate ('colDatum;colHodOd', VarArrayOf ([datum, casOd]), []);
if (fnd) then
begin
vtRozpis.Edit;
vtRozpis.FieldByName('colID').AsInteger:= colID;
vtRozpis.FieldByName('colIDDavkaAdvPlan').AsInteger:= colID;
vtRozpis.FieldByName('colIdKmen').AsString:= VarToStr (FieldByNameValues('IDKmen'));
vtRozpis.FieldByName('colPrikaz').AsString:= VarToStr (FieldByNameValues('RadaPrikaz'));
vtRozpis.FieldByName('colIdPrikaz').AsString:= VarToStr (FieldByNameValues('IDPrikaz'));
vtRozpis.FieldByName('colSkupZbo').AsString:= VarToStr (FieldByNameValues('SkupZbo'));
vtRozpis.FieldByName('colRegCis').AsString:= VarToStr (FieldByNameValues('RegCis'));
vtRozpis.FieldByName('colNazev').AsString:= VarToStr (FieldByNameValues('Nazev1'));
vtRozpis.FieldByName('colMnoz').AsExtended:= mnozProZapis;
vtRozpis.FieldByName('colIDPlan').AsInteger:= VarToStr (FieldByNameValues('IDPlan')).ToInteger;
jeUdrzba:= VarToStr(FieldByNameValues('JeUdrzba')).ToInteger;
vtRozpis.FieldByName('colJeUdrzba').AsInteger:= jeUdrzba;
if (jeUdrzba=1) then
vtRozpis.FieldByName('colNazev').AsString:= nazevOper;
if (mnozOdv>0) then
begin
mnozZapsane:= SumaZapsanehoMnozstviPred (aDavkaVPrOdv, idVPr, cislo);
mnozOdv:= mnozOdv - mnozZapsane;
if (mnozOdv>mnozProZapis) then
begin
vtRozpis.FieldByName('colMnozHotovo').AsExtended:= mnozProZapis;
aDavkaVPrOdv[iTemp].cislo:= cislo;
aDavkaVPrOdv[iTemp].idPrikaz:= idVPr;
aDavkaVPrOdv[iTemp].mnozZapsane:= mnozProZapis;
end
else
begin
vtRozpis.FieldByName('colMnozHotovo').AsExtended:= mnozOdv;
aDavkaVPrOdv[iTemp].cislo:= cislo;
aDavkaVPrOdv[iTemp].idPrikaz:= idVPr;
aDavkaVPrOdv[iTemp].mnozZapsane:= mnozOdv;
mnozOdv:= 0;
end;
Inc (iTemp);
end;
vtRozpis.Post;
end;
end;
end;
end;
Next;
end;
end;
if (vtRozpis.RecordCount=0) then
NactiRozpis (f, true);
vtRozpis.Locate ('colDatum;colHodOd', VarArrayOf ([FormatDateTime ('dd.MM.yyyy', d), HourOf(d)]), []);
if (prvniDatum<>'') and (prvniHod<>'') then
vtRozpis.Locate('colDatum;colHodOd', VarArrayOf ([prvniDatum, prvniHod]), []);
end;
procedure Tdm2.NactiVyrobniTydny (rok: integer);
var i: integer;
d: TDateTime;
den1ledna: byte;
begin
den1ledna:= DayOfWeek(EncodeDate(rok, 1, 1));
if not(vtVyrobniTyden.Active) then
vtVyrobniTyden.Open;
for i:=1 to WeeksInAYear(rok) do
begin
vtVyrobniTyden.Append;
vtVyrobniTyden.FieldByName('colRok').AsInteger:= rok;
vtVyrobniTyden.FieldByName('colTyden').AsInteger:= i;
d:= IncDay(StartOfAWeek (rok, i, 1), -1);
vtVyrobniTyden.FieldByName('colDatumOd').AsDateTime:= d;
vtVyrobniTyden.FieldByName('colDatumDo').AsDateTime:= IncDay(d, 6);
vtVyrobniTyden.Post;
end;
end;
procedure Tdm2.NactiRozpis (f: TformPlan; prazdny: boolean=false);
var lSQL, where, datum: string;
hDo, casOd: integer;
fnd: boolean;
begin
if not(vtRozpis.Active) then
vtRozpis.Open;
// lSQL:= 'SELECT Datum FROM ' + tblPlanRozpad + ' WHERE Datum>=DATEADD(day, -2, dbo.hf_TruncDate(GETDATE())) ORDER BY Datum';
where:= '';
lSQL:= 'SELECT Datum, CasOd FROM ' + tblPlanRozpad;
if not(prazdny) then
begin
where:= 'Datum>=dbo.hf_TruncDate( ISNULL( (SELECT MIN(d.CasOd) FROM ' + tblAdvKPlanDavky + ' d INNER JOIN ' + tblVPr;
where:= where + ' p ON (p.ID=d.IDPrikaz) WHERE p.StavPrikazu IN (30,40) AND d.IdAdvKapacPlan=' + idAdvKPl.ToString + '), DATEADD(day, -2, dbo.hf_TruncDate(GETDATE()))) )';
end;
if (f.sgCas.Cells[2,1]<>'') then
where:= where + IfThen(where<>'', ' AND ', '') + 'dbo.hf_TruncDate(Datum)>=dbo.hf_TruncDate(CONVERT(datetime, N' + f.sgCas.Cells[2,1].QuotedString + ',104))';
if (f.sgCas.Cells[3,1]<>'') then
where:= where + IfThen(where<>'', ' AND ', '') + 'dbo.hf_TruncDate(Datum)<=dbo.hf_TruncDate(CONVERT(datetime, N' + f.sgCas.Cells[3,1].QuotedString + ',104))';
if (where<>'') then
lSQL:= lSQL + ' WHERE ' + where;
lSQL:= lSQL + ' ORDER BY Datum, CasOd';
try
with Helios.OpenSQL (lSQL) do
begin
First;
while not(EOF) do
begin
datum:= VarToStr(FieldByNameValues('Datum'));
if (datum.IndexOf(' ')>-1) then
datum:= LeftStr(datum, datum.IndexOf(' '));
casOd:= VarToStr(FieldByNameValues('CasOd')).ToInteger;
fnd:= vtRozpis.Locate ('colDatum;colHodOd', VarArrayOf ([datum, casOd]), []);
if not(fnd) then
begin
vtRozpis.Append;
vtRozpis.FieldByName('colDatum').AsString:= datum; // FormatDateTime('dd.mm.yyyy', FieldByNameValues('Datum'));
vtRozpis.FieldByName('colHodOd').AsInteger:= casOd; // FormatDateTime('h', FieldByNameValues('Datum'));
// hDo:= vtRozpis.FieldByName('colHodOd').AsInteger + 1;
hDo:= casOd + 1;
// if (hDo>=24) then hDo:= 0;
vtRozpis.FieldByName('colHodDo').AsInteger:= hDo;
vtRozpis.Post;
end;
Next;
end;
end;
finally
end;
end;
procedure Tdm2.vtKmenCalcFields (DataSet: TDataSet);
var ksVKar, karNaPal: integer;
begin
ksVKar:= 0;
if not (DataSet.FieldByName('colKSvKA').IsNull) then
ksVKar:= DataSet.FieldByName('colKSvKA').AsInteger;
karNaPal:= 0;
if not (DataSet.FieldByName('colKAnaPAL').IsNull) then
karNaPal:= DataSet.FieldByName('colKAnaPAL').AsInteger;
DataSet.FieldByName('colKSnaPAL').AsInteger:= ksVKar * karNaPal;
end;
procedure Tdm2.GenerujRozpis (odData: TDateTime; pocetDnu: integer=14);
var lSQL, d: string;
c: integer;
begin
if (pocetDnu<0) or (pocetDnu>14) then
pocetDnu:= 14;
if (helUtils.SQLObjectExists (Helios, 'dbo.ef_Vyroba_GenerujRozpadCasu'))
and (helUtils.SQLObjectExists (Helios, tblPlanRozpad)) then
begin
// rozpad na 14 dnu dopredu, po 60 minutach
lSQL:= 'DECLARE @d DATETIME=NULL' + CRLF + 'DROP TABLE IF EXISTS #Tab' + CRLF + 'CREATE TABLE #Tab (Datum DATETIME)' + CRLF
+ IfThen(odData>0, 'SET @d = CONVERT(datetime, N' + FormatDateTime ('dd.mm.yyyy', odData).QuotedString + ', 104)', '') + CRLF
+ 'INSERT #Tab (Datum) SELECT * FROM dbo.ef_Vyroba_GenerujRozpadCasu (@d, ' + pocetDnu.ToString + ', 60)' + CRLF
+ 'SELECT CAST(Datum AS DATETIME) AS Datum FROM #Tab ORDER BY Datum';
try
with Helios.OpenSQL (lSQL) do
if (RecordCount>0) then
begin
First;
while not(EOF) do
begin
d:= VarToStr(FieldByNameValues('Datum'));
if not(d.Contains('00:00')) then
d:= d + ' 00:00:00';
c:= MidStr(d, d.IndexOf(' ')+1, 20).Length;
if (c=8) then
d:= d.Replace(' ', ' 0');
lSQL:= 'IF NOT EXISTS (SELECT 1 FROM ' + tblPlanRozpad + ' WHERE Datum=CONVERT(datetime, N' + d.QuotedString + ', 104) )' + CRLF
+ 'INSERT ' + tblPlanRozpad + ' (Datum) SELECT CONVERT(datetime, N' + d.QuotedString + ', 104)';
Helios.ExecSQL (lSQL);
Next;
end;
end;
finally
end;
end;
end;
procedure Tdm2.PlanPalListyNactiSarzePrikazu (idPrikaz, ksVKA: Integer; var externiZak: string);
var lSQL: string;
idVC: integer;
begin
if not(vtPlanPL.Active) then
vtPlanPL.Open;
vtPlanPL.EmptyDataSet;
lSQL:= 'SELECT ID, VyrCislo, Popis, DatExpirace, Mnozstvi FROM ' + tblPrikazVC + ' WHERE IDPrikaz=' + idPrikaz.ToString + ' ORDER BY VyrCislo';
try
with Helios.OpenSQL (lSQL) do
if (RecordCount>0) then
begin
First;
while not(EOF) do
begin
vtPlanPL.Append;
vtPlanPL.FieldByName('idPrikaz').AsInteger:= idPrikaz;
idVC:= VarToStr(FieldByNameValues('ID')).ToInteger;
vtPlanPL.FieldByName('IDVCPrikaz').AsInteger:= idVC;
vtPlanPL.FieldByName('CisloPL').AsString:= VarToStr(FieldByNameValues('VyrCislo'));
vtPlanPL.FieldByName('KAnaPal').AsInteger:= VarToStr(FieldByNameValues('Mnozstvi')).ToInteger;
vtPlanPL.FieldByName('kusu').AsInteger:= vtPlanPL.FieldByName('KAnaPal').AsInteger * ksVKA;
vtPlanPL.FieldByName('DatExpirace').AsString:= VarToStr(FieldByNameValues('DatExpirace'));
externiZak:= VarToStr(FieldByNameValues('Popis'));
with Helios.OpenSQL('SELECT DatZahajeni FROM ' + tblPalety + ' WHERE IDVyrCisPrikaz=' + idVC.ToString) do
if (RecordCount=1) then
begin
vtPlanPL.FieldByName('DatVyrobaZadano').AsString:= VarToStr(FieldByNameValues('DatZahajeni'));
end;
vtPlanPL.Post;
Next;
end;
end;
finally
end;
end;
end.