Расширение функционала формирования графиков суммированного учета рабочего времени. ЗУП 3.1
Не «вытеснение» рабочего времени праздниками, а «сдвиг» на следующий непраздничный день при формировании графиков суммированного учета рабочего времени по сменам.
- Описание
- Подробнее
Описание
Расширение позволяет реализовать дополнительный функционал при формировании графиков суммированного учета рабочего времени (СУРВ): сдвигать смену на праздничный и/или выходные дни, а также сдвигать первый день начала смены.
Рассмотрим режим работы из двух смен (А и Б) по 11,5 часов с чередованием для каждой смены 2 дня работа, 2 дня отдых. «Дополнительный нюанс 1» — праздничные дни тоже являются днями отдыха (закрашены красным). «Дополнительный нюанс 2» — работодатель решил установить дополнительные конкретные дни отдыха (закрашены оранжевым).
Время работы | ЯНВАРЬ | |||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | ||
7.30 – 20.00 |
|
|
|
|
|
|
|
| Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | |
Вых.дни | АБ | АБ | АБ | АБ | АБ | АБ | АБ | АБ | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | |
Время работы | ФЕВРАЛЬ | |||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
|
| ||
7.30 – 20.00 | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б |
| А | А | Б | Б | А | А |
|
| |
Вых.дни | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | АБ | Б | Б | А | А | Б | Б |
|
| |
Время работы | МАРТ | |||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | ||
7.30 – 20.00 | Б | Б | А | А | Б | Б | А |
| А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | |
Вых.дни | А | А | Б | Б | А | А | Б | АБ | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | |
Время работы | АПРЕЛЬ | |||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| ||
7.30 – 20.00 | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б |
|
|
|
| |
Вых.дни | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | АБ | АБ | АБ |
| |
Время работы | МАЙ | |||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | ||
7.30 – 20.00 |
| Б | А |
|
| А | Б | Б |
|
|
|
| А |
| А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | |
Вых.дни | АБ | А | Б | АБ | АБ | Б | А | А | АБ | АБ | АБ | АБ | Б | АБ | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | А | А | Б | Б | |
Установка флажка «При заполнении учитывать праздничные дни» в праздничные дни:
не проставит рабочие часы, но не «перенесёт/сдвинет» их на следующий не праздничный день (а как учесть дополнительные конкретные дни отдыха — завести специальный производственный календарь???):
Месяц | Смена А (учитывать праздничные дни) | |||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | ||
Январь | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | ||||||||||||||||||||
Февраль | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | Х | Х | |||||||||||||||||
Март | 11,5 | 11,5 | 11,5 | 10,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | ||||||||||||||||
1 квартал | ||||||||||||||||||||||||||||||||
Апрель | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | Х | |||||||||||||||||
Май | 11,5 | 11,5 | 11,5 | 11,5 | 10,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 |
Для «сдвига» необходимо установить флажок расширения «При заполнении сдвигать смену с учетом праздничных дней» и добавить в список «Нерабочих праздничных дней» нужные праздники и дополнительные конкретные дни отдыха:
Рабочее время, попавшее на дни из списка «Нерабочих праздничных дней», будет переноситься/сдвигаться на следующий день не из этого списка:
Месяц | Смена А (сдвигать на праздничные и дополнительные конкретные дни отдыха) | |||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | ||
Январь | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | ||||||||||||||||||||
Февраль | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | Х | Х | ||||||||||||||||
Март | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | ||||||||||||||||||
1 квартал | ||||||||||||||||||||||||||||||||
Апрель | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | Х | |||||||||||||||||
Май | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 |
Аналогичный подход применяется если надо сделать дополнительными конкретные днями отдыха и все выходные (Субботу и Воскресенье) – устанавливаем флажок «При заполнении сдвигать смену с учетом выходных дней» (доступен только если сдвигаются праздники!):
Месяц | Смена А (сдвигать на праздничные, дополнительные конкретные дни отдыха и все выходные) | |||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | ||
Январь | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | ||||||||||||||||||||||||
Февраль | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | Х | Х | ||||||||||||||||||||
Март | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | ||||||||||||||||||||||
1 квартал | ||||||||||||||||||||||||||||||||
Апрель | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | Х | ||||||||||||||||||||
Май | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 | 11,5 |
Если смена устроена как 8 часов вечером с 18-00 до 00-00 и 8 часов утром с 00-00 до 08-00 и нужно, чтобы сотрудники приходили так, чтобы их часть (вторая половина) смены всегда была в рабочий день, а часть (первая половина) смены могла приходится на «нерабочий день» (праздничный, выходной, дополнительный конкретный день отдыха). Например, это сотрудники, которые заряжают батареи электроинструмента/электротранспорта перед сменой сотрудников, использующих электротехнику. Т.е. они должны работать, как и сотрудники, использующие электротехнику, но выходить в день перед ними! Почему бы просто не сделать им дату отсчета на день меньше? – некорректно будут работать сдвиги выходных!
В этом случае устанавливается флажок «При заполнении сдвигать смену на предыдущий день» и дату начала отсчета указываем как первый рабочий день сотрудников, использующих электротехнику:
Месяц | Часы по видам времени "Явка", "Вечерние часы", выведены в формате Я/ВЧ | |||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | ||
Январь | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | ||||||||||||||
6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | |||||||||||||||
Февраль | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | Х | Х | ||||||||||
6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | |||||||||||||
Март | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | ||||||||||||
6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | |||||||||||||
1 квартал | ||||||||||||||||||||||||||||||||
Апрель | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | Х | |||||||||||
6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | |||||||||||||
Май | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | ||||||||||||
6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 | 6/2 | 2/6 |
Способ реализации такого алгоритма следующий:
Создаем в справочнике «Графики» дополнительные реквизиты для хранения нужных значений (и настраиваем ввод/изменение/сохранение на форме элемента):
В случае с графиками этого в принципе достаточно, а если надо функционал добавить и к режимам работы – то аналогичные реквизиты создать в справочнике «Режимы работы сотрудников» и реализовать код по переносу их в форму «Графика» при создании графиков из режимов работы.
Для заполнения графика с учетом новых параметров надо внести изменения в 2 процедуры модуля объекта справочника «Графики»:
В процедуру "ЗаполнитьДанныеГрафика" в начало добавить:
//РСГ # begin
НачинаемСдвигатьПраздникиВыходные = Ложь; // Если дата начала построения графика приходится на праздник или выходной и стоит сдвигать
// - то сдвиг начинаем после первого отработанного(не праздник и не выходной) дня.
//РСГ # en
а код заполнения рабочего времени за день:
Если ЗаполнятьВремяЗаДень(ОбрабатываемаяДата, ВидДня, ПеренесенныеДни) Тогда
ЗаполнитьВремяЗаДень(ОбрабатываемаяДата, ВидДня, ЧасовЗаДень, ДанныеГрафика, ПриоритетВидовВремениДляПредпраздничных, ОтражатьЧасыВДеньНачалаСмены);
КонецЕсли;
ОбрабатываемаяДата = ОбрабатываемаяДата + ДлинаСуток;
НомерДняЦикла = НомерДняЦикла + 1;
заменить на:
//РСГ # begin
Если НЕ НачинаемСдвигатьПраздникиВыходные Тогда //Проверяем надо ли сдвигать праздники и выходные
Если (СдвигатьПраздники И ВидДня <> Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник)
Или ((СдвигатьПраздники И ВидДня <> Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник)
И (СдвигатьВыходные И ВидДня <> Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота
И ВидДня <> Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье)) Тогда
НачинаемСдвигатьПраздникиВыходные = Истина; //Устанавливаем флаг сдвига
КонецЕсли;
КонецЕсли;
Если НачинаемСдвигатьПраздникиВыходные //Сдвигаем
И (СдвигатьПраздники //праздники
Или СдвигатьВыходные) Тогда //и выходные
Если ЗаполнятьВремяЗаДень(ОбрабатываемаяДата, ВидДня, ПеренесенныеДни) Тогда //Сдвиг не нужен
Если СдвигатьСмену //Сдвигаем смену по календарным дням
И ДнейСдвигаСмены <> 0 Тогда //вперед или назад на отличное от нуля значение
ЗаполнитьВремяЗаДень(ОбрабатываемаяДата + ДнейСдвигаСмены, ВидДня, ЧасовЗаДень, ДанныеГрафика, ПриоритетВидовВремениДляПредпраздничных, ОтражатьЧасыВДеньНачалаСмены);
Иначе //Не сдвигаем смену по календарным дням
ЗаполнитьВремяЗаДень(ОбрабатываемаяДата, ВидДня, ЧасовЗаДень, ДанныеГрафика, ПриоритетВидовВремениДляПредпраздничных, ОтражатьЧасыВДеньНачалаСмены);
КонецЕсли;
НомерДняЦикла = НомерДняЦикла + 1;
КонецЕсли;
ОбрабатываемаяДата = ОбрабатываемаяДата + ДлинаСуток;
Иначе // Обычный порядок
Если ЗаполнятьВремяЗаДень(ОбрабатываемаяДата, ВидДня, ПеренесенныеДни) Тогда
ЗаполнитьВремяЗаДень(ОбрабатываемаяДата, ВидДня, ЧасовЗаДень, ДанныеГрафика, ПриоритетВидовВремениДляПредпраздничных, ОтражатьЧасыВДеньНачалаСмены);
КонецЕсли;
ОбрабатываемаяДата = ОбрабатываемаяДата + ДлинаСуток;
НомерДняЦикла = НомерДняЦикла + 1;
КонецЕсли;
//РСГ # end
В функцию "ЗаполнятьВремяЗаДень" в конец надо добавить проверки на флаги "сдвига":
//РСГ # begin
Если СдвигатьПраздники Тогда //Сдвигаем праздники - Свой список праздников
Если НерабочиеПраздничныеДни.Найти(ОбрабатываемаяДата, "Дата") <> Неопределено Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Если СдвигатьВыходные //Сдвигаем выходные
И (ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота
Или ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье) Тогда
Возврат Ложь;
КонецЕсли;
//РСГ # end