Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.05.01;
Скачать: [xml.tar.bz2];

Вниз

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

 
Лесник   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
1-527
DeMoN-777
2003-04-20 14:23
2003.05.01
Эффект


1-638
Alex-21
2003-04-18 21:15
2003.05.01
Панель задач


7-806
Caezar
2003-03-04 23:33
2003.05.01
Работа со сканерами штрих-кодов...


7-819
Snap
2003-03-11 12:48
2003.05.01
Как засунут свои код в другои процесс?


14-708
paranoid
2003-04-12 20:10
2003.05.01
Помогите! Очень срочно! как отловить все, что пользователь вводит





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский