Использование календаря для определения рабочих дней

igor bl
Дата: 20.09.2005 12:09:48
Возможно ли использовать компьютерный календарь для определения количества рабочих дней в определенный промежуток времени (с опредеелнной даты по определенную)? Или только какие-то свои программные решения делать?
АлексейК
Дата: 20.09.2005 12:19:38
если рабочими днями считать все с понедельника по пятницу
то пара таких решений есть в форуме

если + учет праздников и переносов выходных то сложнее
igor bl
Дата: 20.09.2005 12:29:05
Да, со списком праздников и переносом выходных.
АлексейК
Дата: 20.09.2005 12:34:43
придется свое присать
простейший вариант : цикл от начальной даты до конечной с проверкой
наличия значения в таблице дней исключений not датепарт день недели= 6,7

потом к этому прилипает: периоды исключений (декретный отпуск, периоды увольнения конкретного сотрудника итд)
глупыйглупый
Дата: 20.09.2005 12:45:41
опять я по глупости не панимаю - чаво писать-то, при наличии календарной таблицы?

Select Count(*) 
From wrkCalendar 
Where
  (calendarDate BETWEEN [startDate] AND [lastDate]) AND (IsHoliday=True)
igor bl
Дата: 20.09.2005 12:45:45
Спасибо. Я так и думал.:)
igor bl
Дата: 20.09.2005 12:51:06
глупыйглупый
опять я по глупости не панимаю - чаво писать-то, при наличии календарной таблицы?

Select Count(*) 
From wrkCalendar 
Where
  (calendarDate BETWEEN [startDate] AND [lastDate]) AND (IsHoliday=True)



Не совсем понял, что такое IsHoliday? Есть такой параметр?
глупыйглупый
Дата: 20.09.2005 12:56:21
igor bl
глупыйглупый
опять я по глупости не панимаю - чаво писать-то, при наличии календарной таблицы?

Select Count(*) 
From wrkCalendar 
Where
  (calendarDate BETWEEN [startDate] AND [lastDate]) AND (IsHoliday=True)



Не совсем понял, что такое IsHoliday? Есть такой параметр?

Это поле в таблице. Оно конечно есть. Если есть календарная таблица, которую вы ведете ручками.
Типа "рабочий календарь".
Ну, может, называется подругому.
АлексейК
Дата: 20.09.2005 12:56:51
вот что есть:

Option Explicit
Dim mvarExceptions 'массив праздничных дней из таблицы праздников

Public Function fondwt(datafrom  As Date, datato  As Date)
'фонд рабочего времени за месяц в промежутке которого дата исходя что рабочий день 8ч
call LoadExceptions(datafrom) ' изначально расчитано на месяц - если другие условия - переделать
Dim data1 As Date
For data1 = datafrom To datato
If Not IsException(data1) Then fondwt = fondwt + 8
Next data1

End Function

Function IsException(D) As Boolean
Dim i As Integer
Dim DayWeek As Single
DayWeek = DatePart("w", D, vbUseSystem) 'vbUseSystem 0 Use the NLS API setting.
    
IsException = DayWeek = 6 Or DayWeek = 7
If IsEmpty(mvarExceptions) Then Exit Function
    For i = 0 To UBound(mvarExceptions, 2)
        If D = mvarExceptions(0, i) Then
            IsException = Not IsException
            Exit For
        End If
        If D < mvarExceptions(0, i) Then Exit For 'т.к. Даты в массиве по порядку
        
    Next

End Function

Sub LoadExceptions(D As Variant)
'D - дата внутри месяца, для которого загружается в массив  список праздников - если надо по неопределенному периоду а не по месяцу то убрать условие отбора
   
 On Error Resume Next
   mvarExceptions = CurrentProject.Connection.Execute("SELECT dExcept FROM tblExceptions where month(dExcept) = " & Month(D) & " and year(dExcept) = " & Year(D) & " order by dExcept ").GetRows
 End Sub



зы кусок из последнего календаря на сайте
АлексейК
Дата: 20.09.2005 12:59:24
в таблице хранятся только значения дат исключений из правила сб-вс выходной если исключение на буднем - праздник на выходном рабочий день