Сокращенный рабочий день по пятницам - дорабатываем календари рабочего времени

7 4

Выдержка из справки:

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

Данные этого справочника используются при обработке маршрутов задач для вычисления сроков выполнения заданий и сроков последующего выполнения блоков «Ожидание» и «Мониторинг» с относительными сроками выполнения. Также может использоваться для расчета относительных сроков в прикладной разработке.

Чтобы заполнить календарь, требуется ввести время начала рабочего дня, и время окончания.

После автоматического заполнения календарь выглядит вот так:

С понедельника по пятницу мы работаем 9 часов (не учитывая времени обеденного перерыва), суббота и воскресенье - выходные дни.

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

Однако, следует обратить внимание на то, что на многих предприятиях пятница является сокращенным рабочим днем. Если не учитывать этот момент, то логика работы бизнес-процессов, жестко регламентированных по срокам исполнения заданий, может быть нарушена.

Таким образом, требуется учитывать в календарях рабочего времени график работы предприятия по пятницам. "Стоковая" разработка этого не позволяет, календарь приходится корректировать вручную.

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

Немного допилим действие "Заполнить дни" в типе справочника "КРВ" и вуаля:

Получаем заполненный календарь с учетом сокращенных пятниц:

Также обратите внимание,  цитирую справку:

Начало дня. Время начала рабочего дня, задается в часах. Например, если рабочий день начинается в 10 часов 30 минут, то в поле нужно ввести 10.5;

Окончание дня. Время окончания рабочего дня, задается в часах. Например, если рабочий день заканчивается в 19 часов 15 минут, то в поле нужно ввести 19.25;

Модификация справочника для версии 4.7, но думаю что он не менялся с 4.5 до 4.9

Код действия "FillAllDays", измененные участки выделены полужирным шрифтом

!DataSet = !Sender.Form.View.Component.DataSet
!YearRequisite = !DataSet.Requisites('ISBIntNumber')
if !YearRequisite.IsNull
  Exit(LoadString("ISB_CWT_ERROR_MSG_10"; "ISBSYSDEV"))
endif  
!Year = !YearRequisite.AsInteger
if (!Year < 1753) or (!Year > 9999) 
  Exit(LoadString("ISB_CWT_ERROR_MSG_1"; "ISBSYSDEV"))
endif

!InputDialogResult = InputDialog(LoadString("ISB_CWT_STRING_1"; "ISBSYSDEV")&'|Окончание по пятницам*';
  '9.00|18.00|18.00'; "Число:2|Число:2|Число:2";
  LoadString("ISB_CWT_STRING_2"; "ISBSYSDEV");;)
!StartTime = SubString(!InputDialogResult; '|'; 1)
!FinishTime = SubString(!InputDialogResult; '|'; 2)
!FinishTimeFriday = SubString(!InputDialogResult; '|'; 3)
!FirstDay = '01.01.' & !Year
!LastDay = '31.12.' & !Year
!DayCount = DateDiff('D'; !FirstDay; !LastDay) + 1
!CurrentDay = !FirstDay
!I = 0
!DetailDataSet = !DataSet.DetailDataSet(1)
!DayReq = !DetailDataSet.Requisites('ISBDate')
!StartTimeReq = !DetailDataSet.Requisites('ISBFloatNumber') 
!FinishTimeReq = !DetailDataSet.Requisites('ISBFloatNumber2')
!DurationDayReq = !DetailDataSet.Requisites('ISBFloatNumber3')
!DetailDataSet.DisableControls
!DetailDataSet.First
while not !DetailDataSet.Eof
  !DetailDataSet.Delete
endwhile
while !I < !DayCount
  !Day = DayOfWeek(!CurrentDay)
  !DetailDataSet.Append
  !DayReq.Value = !CurrentDay
  if !Day < 5
    !StartTimeReq.AsString = !StartTime 
    !FinishTimeReq.AsString = !FinishTime
  else
    if !Day == 5
      !StartTimeReq.AsString = !StartTime 
      !FinishTimeReq.AsString = !FinishTimeFriday
    else         
      !DurationDayReq.AsNumeric = 0
     endif          
  endif
  !CurrentDay = ChangeDate('D'; !CurrentDay; 1)   
  !I = !I + 1
endwhile
!DetailDataSet.First
!DetailDataSet.EnableControls

Всех коллег с наступающим Новым Годом и Рождеством!

 

КРВ.rar (20,50 Кб)

 

Владимир Гарипов

Актуальная проблема :) Только я ручками прошелся по календарю на 2013 и 2014 год, все равно из-за праздничных дней приходится руками редактировать его

Евгения Жвакина

спасибо большое! очень полезное нововведение! теперь осталось только добавить возможность настройки календаря рабочего времени для многих госучреждений, где обед длится не час, а 48 минут, благодаря чему в пятницу они и уходят на час раньше)))

Алексей Немцев

Евгения, так ведь эта доработка и позволяет автоматически установить по пятнам сокращенный рабочий день, прямо в примере - на час меньше. Открою секрет - и во многих коммерческих компаниях, за счет укороченного обеденного перерыва, по пятницам так же сокращенный день. Где на час, у нас, например, на 50 минут.

Спасибо за отзыв!

Владимир Гарипов
спасибо большое! очень полезное нововведение! теперь осталось только добавить возможность настройки календаря рабочего времени для многих госучреждений, где обед длится не час, а 48 минут, благодаря чему в пятницу они и уходят на час раньше)))

Везде по разному, мы подстраиваемся под администрацию и работаем в таком режиме:
пн-чт 8:45-13:00 14:00-18:00
пт 9:00-13:00 14:00-17:00

Авторизуйтесь, чтобы написать комментарий