В конфигурации 1С:Комплексная автоматизация 1.1 (построенной на базе ЗУП 2.5) часто возникает задача автоматизировать расчет специфических выплат, таких как «Дни в пути» (ДП), основываясь исключительно на отметках в табеле учета рабочего времени. Основная сложность заключается в том, что типовой функционал не всегда позволяет «подцепить» произвольный буквенный код из табеля и превратить его в денежное начисление без конфликтов с основным окладом.
В данной статье мы разберем, как правильно настроить систему, чтобы кадровик мог просто проставить «ДП» в табеле, а расчетчик получил готовые суммы в документе Начисление зарплаты.
Рассмотрим типичную ошибку начинающих специалистов. При попытке создать новое начисление и назначить его сотруднику как основное (например, наряду с окладом), программа выдает сообщение: «Сотруднику не может быть назначено основное начисление дважды». Это происходит потому, что в архитектуре 1С:КА 1.1 (ЗУП 2.5) за один и тот же период времени может отвечать только одно начисление, имеющее вид «Начисление за работу полную смену в пределах нормы времени».
Проанализируем ситуацию: если мы назначим «Дни в пути» как основное начисление, оно начнет «вытеснять» оклад, либо программа просто заблокирует проведение документа. Выходом является использование механизма дополнительных начислений за уже оплаченное время.
Этот способ является наиболее предпочтительным, так как он сохраняет типовую логику конфигурации и не создает проблем при последующих обновлениях. Разберем его по шагам.
Шаг 1. Настройка Классификатора использования рабочего времени
Прежде всего, нам нужно создать сам символ «ДП» в системе. Перейдем в справочник Классификатор использования рабочего времени и создадим новый элемент:
Шаг 2. Создание нового вида начисления
Теперь перейдем к справочнику Основные начисления организаций (или Дополнительные начисления, в зависимости от выбранной логики, но в КА 1.1 лучше работать через основные с правильной настройкой времени):
ТарифнаяСтавкаМесячная / НормаВремениВЧасах * ВремяВЧасах. Здесь ВремяВЧасах — это показатель, который система будет искать в регистре рабочего времени по нашему коду «ДП».Шаг 3. Назначение начисления сотруднику
Выясним причину, по которой начисление может не появляться в документе расчета. Чтобы программа «увидела» необходимость расчета, начисление должно быть назначено сотруднику планово. Это можно сделать документами Ввод сведений о плановых начислениях, Кадровое перемещение или Прием на работу. Укажите нулевой показатель, если формула требует значения, или просто сам факт наличия начисления.
Рассмотрим альтернативный вариант, который предложили коллеги на форуме. Если типовая настройка по каким-то причинам не подтягивает данные (например, из-за специфики заполнения табеля «сводно»), можно прибегнуть к небольшому «костылю» — программному созданию движений в регистре РабочееВремяРаботниковОрганизаций.
Суть метода заключается в том, чтобы при проведении документа ТабельУчетаРабочегоВремени принудительно записывать данные о времени по нашему виду использования времени «ДП».
Посмотрим на пример кода, который можно разместить в модуле подписки на событие ОбработкаПроведения документа ТабельУчетаРабочегоВремени:
Процедура ПриПроведенииТабеляОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
Для Каждого Строка Из Источник.ОтработанноеВремя Цикл
// Проверяем, есть ли в строке табеля наш вид времени
Если Строка.ВидИспользованияРабочегоВремени = Справочники.КлассификаторИспользованияРабочегоВремени.НайтиПоНаименованию("Дни в пути") Тогда
НоваяСтрока = Источник.Движения.РабочееВремяРаботниковОрганизаций.Добавить;
НоваяСтрока.Период = Источник.ПериодРегистрации;
НоваяСтрока.Сотрудник = Строка.Сотрудник;
НоваяСтрока.Организация = Источник.Организация;
НоваяСтрока.ВидИспользованияРабочегоВремени = Строка.ВидИспользованияРабочегоВремени;
// Указываем данные о времени для расчета
НоваяСтрока.Дней = Строка.Дней;
НоваяСтрока.Часов = Строка.Часов;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Проанализируем ситуацию: этот код гарантирует, что в регистре накопления появятся записи, на которые опирается документ Начисление зарплаты при расчете по формуле, где участвует показатель ВремяВЧасах.
При внедрении данного функционала разберем несколько критических моментов:
?(Условие, Выражение1, Выражение2). Однако при использовании вида времени «Дополнительное время в пределах нормы» система обычно корректно берет 0, если в табеле нет соответствующих записей.НормаВремениВЧасах может отработать некорректно. Проверьте, чтобы в настройках начисления на вкладке «Прочее» были правильно указаны вытесняющие начисления (например, прогулы или больничные).НормаВремениВЧасах, который учитывает индивидуальный график работника.Таким образом, мы выяснили, что наиболее стабильным решением является настройка начисления с видом времени «Дополнительное время в пределах нормы». Это позволяет гармонично вписать «Дни в пути» в общую структуру фонда оплаты труда без нарушения логики учета рабочего времени в 1С:Комплексная автоматизация 1.1.