Как сложить дни работы и командировки для расчета начисления в 1С:ЗУП 3.1 без нарушения вытеснений?

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

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

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

В чем суть проблемы и почему «просто добавить вид времени» не работает?

Рассмотрим стандартную логику настройки нового начисления. Мы создаем начисление, в формуле которого используем показатель ВремяВДнях. Логично предположить, что на вкладке Учет времени нам достаточно указать вид времени Явка как основное время, а в таблице Дополнительные виды времени выбрать вид времени Командировка.

Однако дьявол кроется в настройках вытеснения (вкладка Приоритет). Любое плановое начисление за отработанное время должно вытесняться периодами отсутствия сотрудника — такими как Отпуск основной, Больничный, Отпуск без сохранения оплаты и другими. Если мы не настроим это вытеснение, то программа начислит надбавку за те дни, когда сотрудника фактически не было на работе по уважительной причине.

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

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

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

Ниже мы подробно разберем три практических сценария, как обойти это ограничение и заставить программу считать дни «работы + командировки» правильно.

Вариант 1. Автоматическое разделение на два начисления (Рекомендуемый методологический способ)

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

Шаг 1. Настройка основного начисления (за дни Явки)

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

  1. Перейдем в меню Настройка — Начисления и создадим новое начисление (например, «Надбавка за отработанное время (Явка)»).
  2. Назначение начисления укажем как Повременная оплата труда и надбавки. Начисление выполняется Ежемесячно.
  3. В формуле расчета пропишем стандартную формулу: РазмерНадбавки * ВремяВДнях / НормаДней. Здесь показатель РазмерНадбавки — это созданный нами постоянный показатель для сотрудника.
  4. На вкладке Учет времени укажем вид времени — Явка (или Рабочее время).
  5. На вкладке Приоритет в правое окно (вытесняющие начисления) добавим все стандартные отсутствия: Отпуск основной, Больничный, а также предопределенное начисление Командировка.

Шаг 2. Настройка зависимого начисления (за дни Командировки)

Теперь создадим второе начисление, которое будет автоматически «подхватывать» дни, проведенные сотрудником в служебных поездках:

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

Как это работает на практике?

Кадровик назначает сотруднику в плановом порядке только первое начисление («Надбавка за отработанное время (Явка)») и вносит размер надбавки. При расчете зарплаты за месяц:

Сумма двух строк в документе Начисление зарплаты и взносов даст идеальный и точный результат без ручного вмешательства.

Вариант 2. Обход ограничений приоритетов через «Групповое изменение реквизитов» (Технический хак)

Если по какой-то причине вы категорически против разбиения расчета на две строки в расчетном листке и хотите видеть строго одно начисление, можно обойти проверку ограничений платформы. Для этого воспользуемся встроенным административным инструментом.

Проанализируем этот процесс по шагам:

  1. Создадим новое начисление (например, «Надбавка общая (Явка+Командировка)»).
  2. На вкладке Учет времени укажем основное время — Явка, а в табличную часть Дополнительные виды времени добавим Командировка.
  3. На вкладке Приоритет добавим в список вытеснений все необходимые неявки (Отпуска, Больничные). Программа автоматически принудительно добавит туда и Командировку. Запишем и закроем начисление. На данном этапе командировка все еще вытесняет нашу надбавку.
  4. Перейдем в раздел Администрирование — Обслуживание — Корректировка данных — Групповое изменение реквизитов.
  5. В поле «Изменять» выберем объект Начисление. По ссылке «Все элементы» настроим отбор по нашему новому начислению, чтобы случайно не изменить лишние данные.
  6. Нажмем кнопку «Дополнительные параметры» внизу формы и установим флажок «Показывать служебные реквизиты».
  7. Найдем в списке реквизитов табличную часть, отвечающую за вытесняющие начисления (обычно это вкладка Вытесняющие начисления или зависимые связи).
  8. С помощью обработки очистим или удалим из этой табличной части строки, связанные с начислением Командировка (и Командировка (внутрисменная)), оставив при этом отпуска и больничные.
  9. Нажмем кнопку «Изменить реквизиты».

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

Вариант 3. Обход через временное изменение приоритетов «Командировки»

Существует еще один способ обмануть платформенную проверку без использования групповой обработки реквизитов. Он заключается во временном изменении настроек самого предопределенного расчета командировки.

Рассмотрим эту схему подробнее:

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

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

Резюме и рекомендации

Мы детально разобрали три различных подхода к решению популярной проблемы учета дней командировок при расчете плановых надбавок. Какой метод выбрать?

← На главную