Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.01;
Скачать: CL | DM;

Вниз

Сколько рабочих дней в месяце   Найти похожие ветки 

 
Лесник ©   (2003-04-13 15:39) [0]

Привет всем не обьясните ли бедному леснику каким образом можно узнать сколько в выбранном месяце рабочих дней (например при пятидневной рабочей неделе), программно конечно а то на календаре я сам умею посчитать


 
Sectey ©   (2003-04-13 15:44) [1]

Берешь календарь выполняешь подсчет рабочих дреней в месяце, при этом записываешь все операции выполняемые для подсчета, а потом учишь компьютер делать эти операции за тебя.
Примерно так.


 
Anatoly Podgoretsky ©   (2003-04-13 15:45) [2]

Составляешь свой календарь, дальше дело техники.
Свой ключевое слово.


 
Лесник ©   (2003-04-13 22:38) [3]

поробовал написать и вот что у меня получилось:

function Workday(d:TDate;c: byte = 5):Integer;
//c=5 если пятидневная рабочая неделя,
//если шестидневная - другое число
var f,l,wday:integer;
Year,Month,Day:Word;
s:TDate;
begin
DecodeDate(d,Year,Month,Day);
l:=DaysInMonth(d);
f:=1; wday:=1;
if c=5 then begin
repeat
s:=EncodeDate(Year,Month,f);
case DayOfWeek(s) of
1..5: wday:=wday+1;
end;
f:=f+1;
until
f=l;
end else begin
repeat
s:=EncodeDate(Year,Month,f);
case DayOfWeek(s) of
1..6: wday:=wday+1;
end;
f:=f+1;
until
f=l;
end;
result:=wday;
end;

вроде работает но вот в некоторых месяцах делет ошибку.
а использование следующим образом:

Label1.Caption:=IntToStr(Workday(fsDateTimePicker1.Date,5));

может у кого есть менее громозкий код, поделитесь.


 
sniknik ©   (2003-04-14 00:06) [4]

function WorkDay(Dat: TDateTime; N: Integer): Integer;
var Month: integer;
begin
result:= 0;
Dat:= StartOfTheMonth(Dat);
Month:= MonthOf(Dat);
while MonthOf(Dat) = Month do begin
if DayOfTheWeek(Dat) <= N then Inc(result);
Dat:= IncDay(Dat, 1);
end;
end;

(DayOfWeek is not compliant with the ISO 8601 standard - что бы это не значило :о)) поэтому у тебя не сходится, иногда)


 
nikkie ©   (2003-04-14 00:14) [5]

а как же Новый Год, День защитника отечества, 8 марта, День победы и прочие НЕрабочие дни? эту процедуру надо писать с учетом национальной специфики :)


 
sniknik ©   (2003-04-14 00:26) [6]

nikkie © (14.04.03 00:14)
кстати таки да. :о))
но это сильно усложнит код, вплоть до невозможности написания, исходя из количества "праздников" и его непредсказуемости(количества).


 
DiamondShark ©   (2003-04-14 10:48) [7]

А посчитать на пальцах двенадцать чисел и записать в таблицу?


 
Sergey13 ©   (2003-04-14 11:06) [8]

2DiamondShark © (14.04.03 10:48)
>А посчитать на пальцах двенадцать чисел и записать в таблицу?
Ну, для лесника логичнее посоветовать делать зарубки на дереве. 8-)
2Лесник © (13.04.03 15:39)
В любом случае нужна хранимая структура для твоего календаря. При создании забей туда все что нужно, потом пользуйся сколько влезет. На лету считать календарь наверное и неудобно и нерационально.


 
Anatoly Podgoretsky ©   (2003-04-14 11:26) [9]

С учетом национальных праздников и непредсказуемости переноса рабочик и праздничных дней, только свой календарь таблица. При создании календаря можно помочь оператру проставив предварительно предполпгаемые выходные.


 
Лесник ©   (2003-04-14 21:00) [10]

>Ну, для лесника логичнее посоветовать делать зарубки на дереве. 8-)
А если создать таблицу в БД или использовать текстовой или ini файл в который вписать (вручную или предусмотреть в программе) число и номер месяца например 1 1;23 2;8 3... и так далее, после вызова функции проверять записи соответствующего месяца, и в теле while добавить :
if (DayOfTheWeek(Dat) <= N) OR (DayOfTheWeek(Dat) <> X)then Inc(result);
где Х число


 
Sergey Masloff   (2003-04-14 21:20) [11]

>С учетом национальных праздников и непредсказуемости переноса >рабочик и праздничных дней
В России, по крайней мере, календарь рабочего времени на год вперед утверждает чуть ли не Дума (или правительство) и в ноябре-декабре во всех отделах кадров он (утвержденный) уже есть. Потом его следует завести в БД и год отдыхать и расслабляться - ;-)


 
Sergey13 ©   (2003-04-15 09:26) [12]

2Sergey Masloff (14.04.03 21:20)
Не совсем так, ИМХО. Возможно правительство и утверждает график для госучереждений, но он тоже основан на законе (не помню каком).
Существуют праздники, которые официально являются нерабочими днями. Если они приходятся на выходные, то выходной сдвигается(переносится). Куда переносить - на пятницу или на понедельник - решает каждое предприятие самостоятельно (т.е. перенос может не совпадать с "правительственным"). Кроме того фирма сама может изменить график - например гулять между 1 и 7 января, а потом работать за эти дни в удобное для фирмы время. Характер производства (напр. непрерывный цикл пр-ва) тоже может накладывать свой отпечаток на календарь.

>Потом его следует завести в БД и год отдыхать и расслабляться - ;-)
Обычно да, но в нашем непредсказуемом гос-ве иногда его нужно править и в течении года. 8-(



Страницы: 1 вся ветка

Текущий архив: 2003.05.01;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
3-421
Alex_t
2003-04-11 19:50
2003.05.01
проверка корректности данных в таблице


14-680
Delphinium
2003-04-16 08:33
2003.05.01
Обновление под Delphi 5


1-527
DeMoN-777
2003-04-20 14:23
2003.05.01
Эффект


3-469
rex
2003-04-14 14:43
2003.05.01
Как легко и просто организовать поиск ?


7-798
c@n
2003-03-05 13:10
2003.05.01
Хочу часы в икрушках, а то заигрываюсь :)