Почему в 1С:ЗУП при расчете зарплаты неверно встает норма часов (176 вместо 120), хотя производственный календарь заполнен верно?

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

При работе с начислением зарплаты или аванса (расчетом за первую половину месяца) в программе «1С:Зарплата и Управление Персоналом» пользователи могут столкнуться с ситуацией, когда норма времени рассчитывается некорректно. Например, мы ожидаем увидеть норму по производственному календарю 120 часов (из-за праздников в мае или январе), а программа упорно подставляет число 176 (стандартная норма для полного месяца без праздников). Рассмотрим подробно, почему это происходит, как диагностировать проблему и как ее исправить.

Анализ симптомов проблемы

Давайте разберем ситуацию, с которой столкнулся автор темы. Симптомы следующие:

  1. При начислении за первую половину месяца норма часов для сотрудников на пятидневке отображается неверно (например, 176 часов).
  2. Производственный календарь проверен: в нем корректно отражены праздничные дни, и норма за месяц составляет 120 часов.
  3. Графики работы сотрудников настроены корректно (ссылаются на верный год и заполнены).
  4. Ввод индивидуального графика на сотрудника с жестким указанием нормы (120 часов) не меняет результат расчета — все равно подтягивается 176.
  5. Обновление графиков и перезаполнение календаря не помогают.

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

Типовой механизм расчета нормы времени в 1С:ЗУП

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

Иерархия получения данных для этого показателя выглядит так (от высшего приоритета к низшему):

  1. Индивидуальный график работы: Если на месяц заведен этот документ, норма берется из него.
  2. График работы сотрудника: Если индивидуального нет, данные берутся из назначенного кадровым документом графика.
  3. Производственный календарь: График работы строится на основании календаря.

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

Диагностика: Проверка используемых показателей

В ходе обсуждения выяснилось, что ключевая ошибка часто кроется в наименовании показателей. Давайте откроем настройку начисления, по которому производится расчет (раздел Настройка — Начисления).

Внимательно посмотрим на формулу. В корректной типовой формуле для оклада по часам мы обычно видим:

Оклад * ВремяВЧасах / НормаВремениВЧасах

Однако, в проблемной базе формула может выглядеть иначе. Например:

Оклад * ВремяВЧасах / НормаЧасовПоПятидневке

На первый взгляд кажется, что НормаЧасовПоПятидневке — это синоним или правильный показатель. Но в 1С:ЗУП это принципиальный момент. Показатель НормаВремениВЧасах является предопределенным. Это значит, что платформа "знает", как его рассчитывать: она автоматически идет в регистры графиков работы и берет оттуда часы.

Показатель НормаЧасовПоПятидневке (или любое другое похожее название) с вероятностью 99% является пользовательским (произвольным) показателем.

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

Когда мы создаем произвольный показатель, мы должны определить, как он будет заполняться. У него есть настройки:

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

В рассматриваемом случае показатель НормаЧасовПоПятидневке был настроен как "Постоянный" или "Ежемесячный", и для него когда-то было задано значение 176. Это значение могло быть введено документом Данные для расчета зарплаты полгода назад или установлено как значение по умолчанию.

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

Как исправить ситуацию

Для решения проблемы нам необходимо выполнить следующие шаги:

Шаг 1. Проверка формулы начисления

Зайдите в карточку вида начисления, который рассчитывается неверно. Найдите показатель, отвечающий за норму времени (знаменатель дроби). Щелкните по нему, чтобы открыть его свойства, или найдите его в списке Настройка — Показатели расчета зарплаты.

Шаг 2. Анализ показателя

Если показатель является пользовательским (не предопределенным), проверьте его настройки. Скорее всего, вы увидите, что это показатель, значение которого "Вводится для организации" или "Вводится для сотрудника", и он не имеет связи с графиком работы.

Чтобы убедиться, откуда берется цифра 176, можно воспользоваться Универсальным отчетом (доступен через Функции технического специалиста).

Шаг 3. Корректировка формулы

Самое надежное решение — вернуть в формулу типовой механизм. Измените формулу начисления, заменив пользовательский показатель на предопределенный НормаВремениВЧасах (или НормаВремениВДнях, в зависимости от контекста).

Пример изменения:

Было: Оклад * ОтработаноЧасов / МояСтраннаяНорма

Стало: Оклад * ВремяВЧасах / НормаВремениВЧасах

После сохранения формулы пересчитайте документ начисления зарплаты. Программа автоматически обратится к графику работы сотрудника, увидит там 120 часов (согласно производственному календарю) и выполнит расчет корректно.

Дополнительные проверки (если формула верна)

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

Проверка регистра сведений «Графики работы по видам времени»

Бывает, что визуально в графике работы все красиво (часы стоят), но во внутренние регистры данные не записались. Это может произойти из-за сбоев при обновлении или некорректном заполнении.

Для проверки используем Универсальный отчет:

  1. Тип объекта: Регистр сведений.
  2. Имя объекта: Графики работы по видам времени.
  3. В настройках отбора установите:
    • График работы: Равно [Ваш график].
    • Дата: В списке [Даты текущего месяца].

Сформируйте отчет. В колонке ресурсов вы увидите фактические часы, которые "видит" система. Если там пусто или цифры не те, что в интерфейсе, необходимо:

  1. Зайти в Производственный календарь, внести фиктивное изменение, сохранить, вернуть как было и снова сохранить (чтобы сбросить кэш календаря).
  2. Зайти в сам График работы и нажать кнопку "Заполнить". Убедитесь, что галочка "Автоматическое обновление по производственному календарю" установлена.
  3. Записать график.

Важный нюанс при начислении за первую половину месяца

Также стоит упомянуть особенность расчета аванса. Если вы используете пользовательский показатель нормы, и он задан одной цифрой на месяц (например, 176), то при расчете аванса (за период с 1 по 15 число) программа может повести себя двояко в зависимости от настроек показателя:

Типовой показатель НормаВремениВЧасах умеет "обрезаться" по датам периода действия документа. То есть при расчете аванса за полмесяца в знаменатель попадет норма только за эти полмесяца (например, 60 часов из 120), если формула и настройки начисления предполагают расчет от фактически отработанного времени за период.

Резюме

Если вы столкнулись с "лишними" часами в норме времени (например, 176 вместо 120) и уверены в правильности календаря, с высокой долей вероятности проблема заключается в использовании произвольного показателя в формуле начисления. Этот показатель не связан с графиком и хранит статичное значение. Решение — использование типового показателя НормаВремениВЧасах.

← На главную