При настройке сложных систем оплаты труда в программе 1С:Зарплата и управление персоналом 3.1 (ЗУП) разработчики и аналитики часто сталкиваются с необходимостью динамического расчета. Например, когда алгоритм начисления напрямую зависит от того, где именно работал сотрудник — на суше или в море, по обычному графику или на вахте. Первое интуитивное желание специалиста с навыками программирования — написать логическое условие в формуле расчета, обратившись к справочнику видов времени через функции программирования или запросы.
В этой статье мы подробно разберем, почему прямые обращения к метаданным в формулах не работают, и рассмотрим штатные, методологически верные способы настройки программы для решения этой задачи без изменения конфигурации.
Давайте проанализируем попытку использовать в формуле конструкцию вида:
?(ВидУчетаРабочегоВремени = Значение(Справочник.ВидыИспользованияРабочегоВремени.Найти("РаботаВМоре")), ...)
Такой подход в 1С:ЗУП 3.1 принципиально **невозможен** по следующим причинам:
?(), математические функции (МИН, МАКС, ОКРУГЛ) и оперирует исключительно предопределенными или созданными пользователем показателями.НайтиПоНаименованию() или конструкции типа Значение().Для реализации разного расчета в зависимости от режима работы или вида времени в 1С:ЗУП 3.1 используется принципиально иной, декларативный подход. Рассмотрим пошагово, как правильно настроить систему.
Вместо того чтобы пытаться уместить проверку вида времени внутрь одной огромной формулы, методология 1С предлагает разделять начисления. Мы создаем отдельные виды начислений для разных условий работы, а система сама определяет, какое из них применить, анализируя табель или график сотрудника.
Выполним настройку по шагам:
Если у вас есть два разных режима (например, работа в море и работа на суше), создайте два отдельных начисления. Первое будет срабатывать при вводе времени «Работа в море», второе — при вводе обычного времени «Явка». Такой подход гарантирует быструю работу системы расчета и прозрачность начисления для пользователя.
Бывают ситуации, когда расчет начисления (например, доплаты за работу в праздничные и выходные дни) должен отличаться в зависимости от дислокации сотрудника или его подразделения. Допустим, для сотрудников наземных служб доплата за выходные составляет 200%, а для плавсостава в море выходные дни не оплачиваются дополнительно, но праздничные дни компенсируются в размере 300%.
Для реализации этой логики оптимально использовать механизм показателей, привязанных к подразделениям. Разберем этот сценарий:
ПроцентДоплатыЗаВыходнойВМоре.200, а для морских судов (подразделений плавсостава) — значение 0 (так как выходные там не доплачиваются).
?(ВремяВВыходныеИПраздники > 0, ВремяВВыходныеИПраздники * СтоимостьЧаса * (ПроцентДоплатыЗаВыходнойВМоре / 100), 0)
При таком подходе система сама определит, в каком подразделении числится сотрудник в расчетном периоде, подтянет соответствующее числовое значение показателя (0% или 200%) и корректно рассчитает итоговую сумму без сложных программных доработок.
Если специфика работы такова, что сотрудники одного и того же подразделения могут оперативно переходить с одного режима работы на другой, можно привязать показатель к самому сотруднику. Создадим разовый или накапливаемый показатель (например, ПризнакРаботыВМоре), который будет принимать значение 1 (работа в море) или 0 (работа на суше).
Тогда в формуле расчета доплаты за выходной день мы сможем использовать следующее логическое ветвление:
?(ПризнакРаботыВМоре = 1,
0,
ВремяВДняхЧасах * СтоимостьДняЧаса * 2)
В этом случае, если у сотрудника зафиксирован признак работы в море, расчет выдаст 0. Если признак равен 0 (работа на суше), программа начислит стандартную двойную оплату за работу в выходной день.
При работе вахтовым методом или в море часто возникает ситуация, когда общее число учитываемых часов в сутки превышает стандартные лимиты (например, из-за специфических дежурств, сменности или пересечения часовых поясов). При попытке провести такой табель или индивидуальный график система 1С:ЗУП 3.1 по умолчанию выдаст ошибку о пересечении рабочего времени.
Чтобы программа позволяла проводить такие документы:
Подводя итоги, отметим: гибкость настройки 1С:ЗУП 3.1 позволяет отказаться от доработки конфигурации на уровне кода даже в таких сложных отраслях, как судоходство и добывающая промышленность. Использование комбинации видов времени, условий запуска начислений и иерархических показателей является наиболее стабильным и поддерживаемым способом автоматизации расчета заработной платы.