Как в формуле начисления ЗУП 3.1 указать вид учета времени сотрудника?

Бизнес-аналитик 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

При настройке сложных систем оплаты труда в программе 1С:Зарплата и управление персоналом 3.1 (ЗУП) разработчики и аналитики часто сталкиваются с необходимостью динамического расчета. Например, когда алгоритм начисления напрямую зависит от того, где именно работал сотрудник — на суше или в море, по обычному графику или на вахте. Первое интуитивное желание специалиста с навыками программирования — написать логическое условие в формуле расчета, обратившись к справочнику видов времени через функции программирования или запросы.

В этой статье мы подробно разберем, почему прямые обращения к метаданным в формулах не работают, и рассмотрим штатные, методологически верные способы настройки программы для решения этой задачи без изменения конфигурации.

Почему нельзя написать условие с видом времени прямо в формуле?

Давайте проанализируем попытку использовать в формуле конструкцию вида:

?(ВидУчетаРабочегоВремени = Значение(Справочник.ВидыИспользованияРабочегоВремени.Найти("РаботаВМоре")), ...)

Такой подход в 1С:ЗУП 3.1 принципиально **невозможен** по следующим причинам:

  1. Ограничение синтаксиса формул: Язык формул в ЗУП является упрощенным математическим интерпретатором. Он поддерживает только базовые арифметические операции, логические условия ?(), математические функции (МИН, МАКС, ОКРУГЛ) и оперирует исключительно предопределенными или созданными пользователем показателями.
  2. Отсутствие доступа к метаданным: В формулах нельзя использовать обращение к методам платформы вроде НайтиПоНаименованию() или конструкции типа Значение().
  3. Невозможность выполнения запросов: Встроенный редактор формул не поддерживает язык запросов СКД. Формула рассчитывается индивидуально для каждого сотрудника на основании уже подготовленных системой числовых данных за расчетный период.

Для реализации разного расчета в зависимости от режима работы или вида времени в 1С:ЗУП 3.1 используется принципиально иной, декларативный подход. Рассмотрим пошагово, как правильно настроить систему.

Решение 1. Настройка начисления по условию «Только если введен вид учета времени»

Вместо того чтобы пытаться уместить проверку вида времени внутрь одной огромной формулы, методология 1С предлагает разделять начисления. Мы создаем отдельные виды начислений для разных условий работы, а система сама определяет, какое из них применить, анализируя табель или график сотрудника.

Выполним настройку по шагам:

  1. Перейдем в меню Настройка — Начисления и создадим новое начисление (например, «Доплата за работу в море»).
  2. На вкладке Основное найдем раздел Начисление выполняется.
  3. Установим значение Только если введен вид учета времени.
  4. В появившемся поле выберем нужный вид времени из классификатора. Например, предопределенный или созданный нами вид времени «Работа в море» (код в табеле может быть настроен индивидуально).
  5. Настроим формулу расчета. Теперь в самой формуле нам больше не требуется проверять, в море сотрудник или нет. Программа автоматически назначит и рассчитает это начисление только за те дни или часы, которые зарегистрированы в графике или табеле под этим видом времени.

Если у вас есть два разных режима (например, работа в море и работа на суше), создайте два отдельных начисления. Первое будет срабатывать при вводе времени «Работа в море», второе — при вводе обычного времени «Явка». Такой подход гарантирует быструю работу системы расчета и прозрачность начисления для пользователя.

Решение 2. Динамический расчет через показатели подразделений

Бывают ситуации, когда расчет начисления (например, доплаты за работу в праздничные и выходные дни) должен отличаться в зависимости от дислокации сотрудника или его подразделения. Допустим, для сотрудников наземных служб доплата за выходные составляет 200%, а для плавсостава в море выходные дни не оплачиваются дополнительно, но праздничные дни компенсируются в размере 300%.

Для реализации этой логики оптимально использовать механизм показателей, привязанных к подразделениям. Разберем этот сценарий:

  1. Перейдем в меню Настройка — Показатели расчета зарплаты и создадим новый показатель, например, ПроцентДоплатыЗаВыходнойВМоре.
  2. В настройках показателя укажем:
    • Назначение показателя: Для подразделения.
    • Тип показателя: Числовой.
    • Использование показателя: Во всех месяцах после ввода значения (постоянное использование).
  3. В свойствах подразделений укажем значения этого показателя. Для наземных подразделений установим значение 200, а для морских судов (подразделений плавсостава) — значение 0 (так как выходные там не доплачиваются).
  4. В формуле начисления оплаты выходных и праздничных дней используем созданный показатель подразделения:

?(ВремяВВыходныеИПраздники > 0, ВремяВВыходныеИПраздники * СтоимостьЧаса * (ПроцентДоплатыЗаВыходнойВМоре / 100), 0)

При таком подходе система сама определит, в каком подразделении числится сотрудник в расчетном периоде, подтянет соответствующее числовое значение показателя (0% или 200%) и корректно рассчитает итоговую сумму без сложных программных доработок.

Решение 3. Использование показателей для конкретных сотрудников

Если специфика работы такова, что сотрудники одного и того же подразделения могут оперативно переходить с одного режима работы на другой, можно привязать показатель к самому сотруднику. Создадим разовый или накапливаемый показатель (например, ПризнакРаботыВМоре), который будет принимать значение 1 (работа в море) или 0 (работа на суше).

Тогда в формуле расчета доплаты за выходной день мы сможем использовать следующее логическое ветвление:


?(ПризнакРаботыВМоре = 1, 
  0, 
  ВремяВДняхЧасах * СтоимостьДняЧаса * 2)

В этом случае, если у сотрудника зафиксирован признак работы в море, расчет выдаст 0. Если признак равен 0 (работа на суше), программа начислит стандартную двойную оплату за работу в выходной день.

Важная деталь: Настройка графиков при нестандартном учете времени

При работе вахтовым методом или в море часто возникает ситуация, когда общее число учитываемых часов в сутки превышает стандартные лимиты (например, из-за специфических дежурств, сменности или пересечения часовых поясов). При попытке провести такой табель или индивидуальный график система 1С:ЗУП 3.1 по умолчанию выдаст ошибку о пересечении рабочего времени.

Чтобы программа позволяла проводить такие документы:

  1. Перейдите в раздел Настройка — Расчет зарплаты.
  2. Найдите и снимите флаг «Контролировать пересечение времени в графиках и табелях» (или аналогичные контроли планового и фактического времени в зависимости от релиза конфигурации).
  3. Это позволит вам гибко отражать в табелях реальную картину отработанного сотрудниками времени, включая сложные морские вахты и сверхурочные смены, длительность которых превышает стандартные 24 часа в сутки.

Подводя итоги, отметим: гибкость настройки 1С:ЗУП 3.1 позволяет отказаться от доработки конфигурации на уровне кода даже в таких сложных отраслях, как судоходство и добывающая промышленность. Использование комбинации видов времени, условий запуска начислений и иерархических показателей является наиболее стабильным и поддерживаемым способом автоматизации расчета заработной платы.

← На главную