В программе «1С:Зарплата и управление персоналом» (редакция 3.1) стандартные системные показатели, такие как СтоимостьДняЧаса, НормаЧасов или НормаДней, ориентируются на основной график сотрудника, его индивидуальный график или производственный календарь. Однако на практике возникают ситуации, когда оплату дней или часов по тарифной ставке необходимо пересчитать исходя из нормы времени совсем другого графика.
Разберем подробно, почему возникают ограничения при работе с формулами в 1С:ЗУП 3.1, а также проанализируем два основных способа решения этой задачи: методический (без изменения конфигурации) и программный (с помощью доработки).
Попытка передать конкретный график работы прямо в формулу начисления упирается в архитектуру платформы 1С:ЗУП 3.1:
Графики работы сотрудников) в качестве аргументов функций.СтоимостьДняЧаса: Алгоритм расчета стоимости часа/дня зашит в программном коде базовых модулей программы (в частности, в обработке МенеджерРасчетаЗарплаты и модулях группы РасчетЗарплатыРасширенный). Этот показатель рассчитывается исходя из совокупной тарифной ставки и нормы времени по текущему графику сотрудника или по производственному календарю.Чтобы избежать ежедневного ввода показателей по каждому сотруднику и не снимать конфигурацию с поддержки, рассмотрим методическое решение. Создадим специальный показатель нормы времени, который вводится один раз в месяц сразу на всю организацию.
Разберем настройку по шагам:
Перейдем в раздел Настройка — Показатели расчета зарплаты и создадим новый показатель (например, НормаЧасовАльтернативная).
В настройках укажем:
Перейдем в раздел Настройка — Шаблоны ввода данных для расчета зарплаты. Создадим новый шаблон и отметим в нем созданный показатель НормаЧасовАльтернативная.
В начале расчетного периода расчетчик заполняет документ Данные для расчета зарплаты (раздел Зарплата). В документе вводится всего одна цифра — количество рабочих часов за месяц по требуемому альтернативному графику.
В виде начисления задаем формулу расчета. Вместо системного показателя СтоимостьДняЧаса или НормаЧасов используем наш новый показатель:
Оклад * ВремяВЧасах / НормаЧасовАльтернативная
Или при использовании часовой тарифной ставки:
ТарифнаяСтавкаЧасовая * ВремяВЧасах
Если альтернативных графиков несколько или требуется полностью автоматизировать процесс вычисления нормы времени без ручного заполнения документа Данные для расчета зарплаты, необходимо внести изменения в программный код.
Проанализируем порядок программной реализации:
Обработка.МенеджерРасчетаЗарплаты, а также РасчетЗарплатыРасширенный).Графики работы сотрудников, по нему рассчитывается объем рабочего времени за текущий период и подставляется в расчетную таблицу.Пример кода для программного получения нормы времени из конкретного графика за расчетный период:
Функция ПолучитьНормуЧасовПоГрафику(СсылкаГрафик, ДатаНачала, ДатаОкончания) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(ГрафикиРаботы.КоличествоЧасов) КАК НормаЧасов
|ИЗ
| РегистрСведений.ГрафикиРаботыСотрудников КАК ГрафикиРаботы
|ГДЕ
| ГрафикиРаботы.ГрафикРаботы = &ГрафикРаботы
| И ГрафикиРаботы.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";
Запрос.УстановитьПараметр("ГрафикРаботы", СсылкаГрафик);
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончания));
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() И ЗначениеЗаполнено(Выборка.НормаЧасов) Тогда
Возврат Выборка.НормаЧасов;
КонецЕсли;
Возврат 0;
КонецФункции
При выборе решения учитывайте объем ручной работы и сложность сопровождения системы: