Комментарий:
Штраф это не начисление, величина штрафа не увеличивает размер выплат сотруднику. Если бы вы сделали его вытесняющим оклад (возможно при ОПРЕДЕЛЕННОЙ настройке регистра сведений графика), то размещение его в данном ПВР было бы оправдано.
Что же это за ОПРЕДЕЛЕННАЯ настройка регистра такая? Давайте разбираться.
По условию задачи: "Сотрудники предприятия получают оплату по окладу пропорционально ОТРАБОТАННОМУ времени в ЧАСАХ".
Таким образом единица измерения для оклада - "ЧАС", для штрафа - "15 МИНУТ". Если сотрудник опоздал на 15 минут значит час не отработан, т.е. НОЛЬ. Поэтому Штраф вытесняет оклад.
Теперь надо придумать, как настроить график? В данной задаче он будет не совсем привычный — записей за каждый рабочий день будет не одна, а 32 (при 8-и часовом рабочем дне).
Например, если работаем с 9.00
09.15 - "ЗначениеЧасы"=1, "ЗначениеШтраф"=1;
09.30 - "ЗначениеЧасы"=0, "ЗначениеШтраф"=1;
09.45 - "ЗначениеЧасы"=0, "ЗначениеШтраф"=1;
10.00 - "ЗначениеЧасы"=0, "ЗначениеШтраф"=1;
и т.д.
А дальше все стандартно — запрос к таблице ДанныеГрафика. Штаф вытесняет оклад, поэтому если сотрудник опоздал на 15 и более минут, Факт времени отработанного времени за этот час будет "0". И за каждые 15 минут опоздания будет "1".
PS. При таком большом количестве записей удобно воспользоваться обработкой примерно такого вида
Набор = РегистрыСведений.ГрафикиРаботы.СоздатьНаборЗаписей();
Набор.Отбор.Сотрудник.Установить(Сотрудник);
Набор.Отбор.Подразделение.Установить(Подразделение);
Набор.Прочитать();
ЧислоСекунд = 15*60;
Дат = ДатаНачала;
Сч=0;
Пока Дат <= ДатаОкончания Цикл
Если Найти(ВыходныеДни, Строка(ДеньНедели(Дат))) Тогда
//Запись.ЗначениеЧасы = 0;
//Запись.ЗначениеШтраф = 0;
Иначе
Если Дата(1,1,1,Час(Дат), Минута(Дат),0) > '000101010900' и Дата(1,1,1,Час(Дат), Минута(Дат),0) <= '000101011700' Тогда
Сч = ?(Сч=4, 1, Сч + 1);
Запись = Набор.Добавить();
Запись.Дата = Дат;
Запись.Сотрудник = Сотрудник;
Запись.Подразделение = Подразделение;
Запись.ЗначениеШтраф = 1;
Запись.ЗначениеЧасы = ?(Сч=1, 1, 0);
КонецЕсли;
КонецЕсли;
Дат = Дат + ЧислоСекунд;
КонецЦикла;
Набор.Записать();