DISKUSE
Jak omezit vkládání textu do textového pole z kláv... 
04.04.2024 13:55

HCL Domino na NAS QNAP (1)
20.02.2024 10:34

Vložení přílohy do dokumentu MS Word (3)
14.02.2024 20:54

Problěmy s diakritikou. (4)
06.02.2024 17:34

AI pomocnici 
15.01.2024 10:16

Export do pdf souboru (1)
12.01.2024 23:11

Agent přestává fungovat (1)
18.11.2023 06:42

RTF - Computed (2)
19.10.2023 13:00


ŠKOLENÍ


REKLAMA


KOMENTÁŘE
Diskusní skupina: Programování


mastnakPocet hodin mezi dvema datumy bez svatku a vikendu
07.12.2016
14:56:35

ID: 3660.0

mastnak
Chlapi, potrebuju radu. Chci vypocitat pocet hodin mezi dvema datetime polema, ale nepocitat do toho svatky a vikendy. Mam rozdelany nasledujici.
Klasika startDate-endDate/3600
Potom jsem si pomoci tohodle kodu zjistil kolik vikendu bylo v danym rozpeti to prevedu na hodiny a odectu od prvniho cisla.
Dale mam seznam ceskych svatku, tam si ale lamu hlavu, jak zjistit kolik svatku se udalo behem rozsahu se kterym pocitam, tady bych potreboval nakopnout. Potom uz bych zase jen dopocital hodiny a odecet od prvniho cisla.
Co na tuhle konstrukci rikate, nema to nekde diru?

Tady je vzorce na pocet vikendu
pocVikendu := @BusinessDays(vytvoreni;Odeslano;2 : 3 : 4 : 5: 6);
pocVikendu

a tady svatky
DB := "aaa/aaa":"names.nsf";
GRP := "Státní svátky";
ss := @DbLookup("":""; DB; "Holidays"; GRP; 2);
os := @DbLookup("":""; DB; "Holidays"; "Ostatní svátky"; 2);
szn := @Text(ss:os);
test := @ReplaceSubstring(szn;@Word(szn;".";3);@Text(@Year(@Now)));
sw := @Sort(@ToTime(@Unique(test)));
mastnak Update
08.12.2016
12:40:43

ID: 3660.1


Spachal jsem nasledujici, ale pocita to minusovy hodnoty pokud svatek vychazi na vikend. Takze ted koukam, jak bych vypsal datumy vikendu, abych pak udelal jen replace ze vsech dnu. Nejakej tip???

DB := "aaa":"names.nsf";
GRP := "Státní svátky";
ss := @DbLookup("":""; DB; "Holidays"; GRP; 2);
os := @DbLookup("":""; DB; "Holidays"; "Ostatní svátky"; 2);
szn := @Text(ss:os);
test := @ReplaceSubstring(szn;@Word(szn;".";3);@Text(@Year(
@Now)));
sw := @Sort(@ToTime(@Unique(test)));

pocVikendu := @ToNumber(@BusinessDays(vytvoreni;Odeslano;2 : 3 : 4 : 5: 6));

hodinyVikend := pocVikendu * 24;


dnyVse := @Explode( @TextToTime("["+@Text(vytvoreni)+"-"+@Text(Odeslano
)+"]"));


DnyBezSvatku := @Trim(@ReplaceSubstring( @Text(dnyVse) ; @Text(sw) ; "" )) ;

hodPrvniDen := ([00:00:00] - @Time(vytvoreni))/60/60 + 24;

hodDruhyDen := ([00:00:00] - @Time(Odeslano))/60/60 * -(1);

hodinyPracDny := (@ToNumber(@Count(DnyBezSvatku))*24 ) - @ToNumber(hodinyVikend);

celkem :=( hodinyPracDny - (@ToNumber(hodPrvniDen) + @ToNumber(hodDruhyDen)) ) ;

@If(
@Date(Odeslano) = @Date(vytvoreni);
(Odeslano-vytvoreni)/3600;
celkem
)
VZ Vyřadit ze seznamu svátky o víkendech?
09.12.2016
10:29:22

ID: 3660.2


Co třeba vzít seznam všech svátků a na ně použít @Weekday. Když to bude 1 nebo 7, tak ten konkrétní datum svátku vychází na neděli anebo sobotu a tak by se měl z toho seznamu svátků vyřadit.

Na to by byla možná ideální funkce @Transform, tedy něco jako @Transform(sw; "swday"; @If(@Weekday(swday) = 1 :7; @Nothing; swday), ale to @Nothing dělalo problémy v seznamech, které byly typu datetime. Padalo na nějaké chybě, že seznam neobsahuje hodnotu typu datetime nebo něco takového, takže místo @Nothing byle lepší nějaký nereálný datum, např.[1.1.1900], který se pak v dalším zpracování přeskakoval. Nebo by to šlo možná obejít nějakou konverzí na text a zase zpět na datum/čas. Tzn. možná udělat takové vyřazení víkendových svátků už v szn ještě před naplněním proměnné test.
mastnak re
09.12.2016
10:53:56

ID: 3660.3


Castecne jsem to vyresil takhle
pocVikendu := @ToNumber(@BusinessDays(vytvoreni;Odeslano;2 : 3 : 4 : 5: 6; sw));

Ale to me vynecha vikend, pokud nekdo treba z domu neco vyresil i o svatku o vikendu. No musim to jeste znova cely promyslet. Ale diky za tim s tim Weekday jsem to uz taky zvazoval.
mastnak re
16.12.2016
12:03:55

ID: 3660.4


Potreboval bych zase radu.
Mam tenhle kod, kterej posune datum vytvoreni na dalsi pracovni den. Ted si lamu hlavu jak udelat to same, pokud mam seznam svatku, aby se datum posunul na prvni pracovni den. Nema nekdo napad?

REM { pokud je zapsano o vikendu , nastavi vytvoreni na dalsi pracovni den };
@If(
@Weekday(vytvoreni) = 7;
dvytv := @ToTime("[" + @Text(@Day(@Adjust(vytvoreni;0;0;2;0;0;0))) +"." + @Text(@Month(@Adjust(vytvoreni;0;0;2;0;0;0))) + "." + @Text(@Year(@Adjust(vytvoreni;0;0;2;0;0;0))) + " 00:00:00" +"]");
@Weekday(vytvoreni) = 1;
dvytv := @ToTime("[" + @Text(@Day(@Adjust(vytvoreni;0;0;1;0;0;0))) +"." + @Text(@Month(@Adjust(vytvoreni;0;0;1;0;0;0))) + "." + @Text(@Year(@Adjust(vytvoreni;0;0;1;0;0;0))) + " 00:00:00" +"]");
REM { pokud je zapsano o vikendu , nastavi vytvoreni na dalsi pracovni den };
mastnak Snad final
17.12.2016
21:34:20

ID: 3660.5


Dela to snad uz to co se po me chtelo, svatky a vikendy to posune na nejblizsi pracovni den. Mam nekolik verzi, ze se pouzijou puvodni casy pokud se zapsalo o vikendu nebo svatku, ze se nastavi cas na 00:00 nebo 07:00.

REM { seznam svatku };
DB := "aaa/bbb":"names.nsf";
GRP := "Státní svátky";
ss := @DbLookup("":""; DB; "Holidays"; GRP; 2);
os := @DbLookup("":""; DB; "Holidays"; "Ostatní svátky"; 2);
szn := @Text(ss:os);
test := @ReplaceSubstring(szn;@Word(szn;".";3);@Text(@Year(
@Now)));
sw := @Sort(@ToTime(@Unique(test)));
holidays:=@Text(@Exp
lode(sw));

REM { pokud je zapsano o vikendu nastavi vytvoreni na dalsi pracovni den 07:00 };
@If(
@Weekday(@Date(vytvoreni)) = 7;
dvytv := @TextToTime("[" + @Text(@Day(@Adjust(vytvoreni;0;0;2;0;0;0))) +"." + @Text(@Month(@Adjust(vytvoreni;0;0;2;0;0;0))) + "." + @Text(@Year(@Adjust(vytvoreni;0;0;2;0;0;0))) + " 07:00:00:00" +"]");
@Weekday(vytvoreni) = 1;
dvytv := @TextToTime("[" + @Text(@Day(@Adjust(vytvoreni;0;0;1;0;0;0))) +"." + @Text(@Month(@Adjust(vytvoreni;0;0;1;0;0;0))) + "." + @Text(@Year(@Adjust(vytvoreni;0;0;1;0;0;0))) + " 07:00:00:00" +"]");
dvytv := vytvoreni);

REM { pokud je zapsano o svatku, nastavi vytvoreni na dalsi pracovni };
@If(
@IsNotMember(@Text(@Date(dvytv));@Text(sw))
;
dvytv := dvytv ;
@Do(
Count:= 0;
noofdays:=0;
@While(0 >=noofdays;
noofdays:=@BusinessDays (dvytv;@Adjust (dvytv;0;0;count;0;0;0);1:7;@Transform(holidays; "x";@TextToTime(x)
));
Count := Count+ 1);
adjusteddate:=@Adjust (dvytv;0;0;count -1;0;0;0);
dvytv := adjusteddate
) );

REM { pokud je ukonceno o vikendu nastavi ukonceni na dalsi pracovni den cas zustava };
@If(
@Weekday(Odeslano) = 7;
dodesl := @Adjust(Odeslano;0;0;2;0;0;0);
@Weekday(Odeslano) = 1;
dodesl := @Adjust(Odeslano;0;0;1;0;0;0);
dodesl := Odeslano);

@If(
@IsNotMember(@Text(@Date(dodesl));
@Text(sw));
dodesl := dodesl ;
@Do(
Count:= 0;
noofdays:=0;
@While(0 >=noofdays;
noofdays:=@BusinessDays (dodesl;@Adjust (dodesl;0;0;count;0;0;0);1:7;@Transform(holidays; "x";@TextToTime(x)
));
Count := Count+ 1);
adjusteddate:=@Adjust (dodesl;0;0;count -1;0;0;0);
dodesl := adjusteddate
) );

REM { naplneni promennych };
startDate := @Date(dvytv);
endDate := @Date(dodesl);

startTime := @Time(dvytv);
endTime := @Time(dodesl);

@If(
startDate = endDate;
@Do(
hodPrvniAposledniDen := @Round( (endTime - startTime)/3600 ; 0,01) ;
hist := "Hodiny zapsano a vyreseno stejny den : " + @Text(hodPrvniAposledniDen);
FIELD seznam := seznam : hist
);

@Do(

pocVikendu := @ToNumber(@BusinessDays(startDate;endDate;2 : 3 : 4 : 5: 6));
pocPracDniBezSvatku := @ToNumber(@BusinessDays(startDate;endDate;1 : 7;sw));
hodinyVikend := pocVikendu * 24;
hodPrvniDen := ([23:59:59] - startTime)/3600;
hodDruhyDen := (endTime - [00:00:00] )/3600 ;
hodinyPracDny := (pocPracDniBezSvatku*24 ) - @ToNumber(hodinyVikend);
celkem :=@Round( ( @ToNumber(hodinyPracDny) + ( hodPrvniDen + hodDruhyDen)) ; 0,01);

hist := "Hodiny za vsechny dny ne stejny den : " + @Text(celkem);
FIELD seznam := seznam : hist)

)

Přidejte názor
Autor:
Profese:
E-mail: i
URL:
Phone:
Předmět:
Obsah příspěvku (i):

Kolikátý je den v měsíci ? (číslovkou bez tečky)