Почему Командировка не вытесняет Отсутствие по невыясненной причине в 1С:ЗУП 3.1 и как это исправить

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

В практике работы с программой 1С:Зарплата и управление персоналом 8 (редакция 3.1) часто встречается ситуация: бухгалтер регистрирует отсутствие сотрудника документом Отсутствие (прогул, неявка) с кодом НН. Позже выясняется, что сотрудник находился в командировке. Бухгалтер вводит документ Командировка, но в табеле учета рабочего времени по-прежнему отображается код НН вместо положенного К. Рассмотрим подробнее, почему так происходит, разберем внутреннюю логику программы и выясним, какие шаги нужно предпринять для корректного отражения данных.

Причина 1: Разделение механизмов расчета и учета времени

Первое, что мы должны проанализировать — это разницу между начислением и состоянием. В 1С:ЗУП 3.1 эти процессы разделены:

  1. Настройка приоритетов: На вкладке «Приоритет» вида расчета Командировка мы указываем, какие начисления она должна вытеснять. Это влияет исключительно на расчет денежных сумм. Если Командировка вытесняет Отсутствие по невыясненной причине, то при расчете зарплаты программа не будет дважды уменьшать оклад или пытаться начислить что-то лишнее.
  2. Учет времени и состояний: Записи в табеле формируются на основании регистра сведений Состояния сотрудников. Когда мы проводим документ Отсутствие (прогул, неявка), программа делает запись в этот регистр. Код в табеле берется именно отсюда.

Проблема заключается в том, что простое проведение второго документа поверх первого не всегда «затирает» старое состояние. Проанализируем ситуацию: если документ Командировка не имеет в своем программном коде четкой инструкции по вытеснению конкретно «неявки» в регистре состояний, в табеле останутся старые данные.

Причина 2: Техническая ошибка и иерархия состояний

Выясним причину на уровне платформы и программного кода. Существует зарегистрированная ошибка 1С (№50000146), которая тянется еще с ранних релизов 3.1. Логика программы опирается на перечисление СостоянияСотрудника. В этом перечислении заложена определенная последовательность.

Например, Болезнь (больничный лист) программно считается «более приоритетным» состоянием, чем Отсутствие по невыясненной причине. Поэтому больничные листы вытесняют неявки практически всегда без проблем. А вот Командировка в некоторых версиях конфигурации стоит в иерархии иначе, что мешает ей автоматически «победить» уже введенную неявку в регистре Состояния сотрудников.

Решение 1: Настройка приоритетов в виде начисления

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

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

После изменения настроек необходимо перепроводить документы. Однако, как показывает практика, для табеля этого часто бывает недостаточно.

Решение 2: Использование механизма «Исправить» (Рекомендуемый путь)

Разберем самый надежный способ, заложенный разработчиками 1С. Если вы уже ввели документ Отсутствие (прогул, неявка), и период уже «закрыт» или зафиксирован, не нужно просто создавать Командировку сверху.

Рассмотрим алгоритм действий:

  1. Откройте исходный документ Отсутствие (прогул, неявка).
  2. В нижней части формы нажмите на ссылку Исправить.
  3. Программа создаст новый документ-исправление. В нем вы можете либо сторнировать отсутствие полностью, либо изменить его период.
  4. После этого введите документ Командировка на освободившийся период.

Этот метод гарантирует, что записи в регистре Состояния сотрудников не будут конфликтовать, и в табеле корректно отобразится код К.

Решение 3: Проверка ручных документов «Табель»

Проанализируем еще одну частую ошибку. Если в вашей базе данных введен документ Табель (раздел Зарплата — Табели), то никакие изменения в первичных кадровых документах (командировках, больничных) не изменят печатную форму табеля автоматически.

Важно помнить: Документ Табель в 1С:ЗУП 3.1 имеет наивысший приоритет. Он фиксирует данные «как есть» на момент проведения. Чтобы изменения отразились:

Технический анализ регистра «Состояния сотрудников»

Для программистов и опытных пользователей полезно будет проверить содержимое регистра напрямую. Если вы видите, что данные в табеле неверные, выполните следующий запрос или посмотрите через «Все функции»:


ВЫБРАТЬ
    СостоянияСотрудников.Сотрудник,
    СостоянияСотрудников.Период,
    СостоянияСотрудников.Состояние,
    СостоянияСотрудников.ДокументОснование
ИЗ
    РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников
ГДЕ
    СостоянияСотрудников.Сотрудник = &Сотрудник

Если в результате вы видите две записи на один и тот же период от разных документов (Отсутствие и Командировка), это означает, что механизм вытеснения не отработал. В норме документ с более высоким приоритетом должен «разрезать» запись менее приоритетного документа.

Резюме по исправлению ситуации

Подводя итог, если вы столкнулись с тем, что НН не заменяется на К, действуйте по следующему чек-листу:

  1. Убедитесь, что в настройках начисления Командировка в списке вытесняемых видов расчета (вкладка Приоритет) присутствует Отсутствие по невыясненной причине.
  2. Проверьте, нет ли проведенного документа Табель за этот месяц. Если есть — перезаполните его.
  3. Если документы вводятся в разных периодах (например, неявка в январе, а командировка вводится в феврале «задним числом»), используйте кнопку Исправить в документе неявки.
  4. В крайнем случае, попробуйте отменить проведение документа Отсутствие, провести Командировку, и снова провести Отсутствие. Программа при проведении должна увидеть занятый период и предложить «обрезать» неявку.

Соблюдение этих правил позволит вам избежать расхождений между кадровым учетом и фактическим расчетом заработной платы.

← На главную