Текущий архив: 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