Почему не рассчитывается показатель ВремяВДняхЧасах в 1С:ЗУП 3.1 и как это исправить?

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

В версиях 1С:Зарплата и управление персоналом 3.1.18.х и 3.1.19.х пользователи массово столкнулись с неприятной ситуацией: при расчете документов-отклонений (командировки, больничные, отпуска) показатель ВремяВДняхЧасах внезапно обнуляется. Это приводит к тому, что сумма начисления становится равной нулю. Примечательно, что ошибка проявляется только после записи документа в базу данных — в новом, еще не сохраненном документе, расчет может проходить корректно.

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

Выясняем причину: Новый механизм учета времени

Начиная с релизов 3.1.18.216, разработчики 1С внедрили так называемый «новый механизм учета времени». Главная идея этого изменения заключалась в оптимизации производительности и повышении точности учета «внутрисменных» отклонений. Однако на практике это привело к конфликтам при расчете времени «на лету».

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

Проанализируем типичный сценарий ошибки:

  1. У сотрудника оформлен отпуск с 20.09.2021 по 03.10.2021.
  2. Мы пытаемся начислить командировку в конце октября (например, с 25.10.2021 по 29.10.2021).
  3. Программа видит наличие «хвоста» отпуска в октябре и при расчете командировки ошибочно обнуляет время, так как считает, что данные о времени в октябре еще «не определены» или заблокированы предыдущим периодом.

Способ 1: Использование документа «Табель»

Как было отмечено в ходе обсуждения проблемы, наиболее быстрым и действенным (хотя и не всегда удобным) способом является создание и проведение документа Табель за месяц, в котором происходит расчет. Рассмотрим, почему это помогает.

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

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

Способ 2: Проверка приоритетов начислений

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

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

Если в списке приоритетов отсутствуют необходимые виды расчетов, система может запутаться при распределении часов, что приведет к обнулению показателя ВремяВДняхЧасах.

Способ 3: Технические патчи и исправления (для администраторов)

Поскольку проблема носит массовый характер и признана разработчиками 1С, для релизов ветки 3.1.18/3.1.19 выпускались специальные исправления (патчи). Проанализируем действия по их установке:

Зайдем в раздел Администрирование — Обслуживание — Обновление программы. Выберем пункт Установленные исправления (патчи). Нам необходимо убедиться, что установлены патчи, исправляющие ошибки расчета времени. Одним из таких патчей в свое время был EF_60000133. Если патчи установлены, но не помогают, попробуйте их временно отключить и проверить расчет — иногда возникают конфликты между несколькими исправлениями.

Способ 4: Программное решение через комментирование кода

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


// В модуле управления расчетом времени часто встречается проверка 
// на наличие записанных данных в оперативных регистрах.
// Если мы принудительно заставим систему считать время по графику, а не по регистрам:

Если ЭтоНовыйОбъект Тогда
    // Расчет идет по графику - работает корректно
Иначе
    // Система пытается взять данные из записанных регистров - тут возникает ОШИБКА
    // Временное решение: заставить систему всегда считать по алгоритму для нового объекта
    // РезультатРасчета = РасчитатьПоГрафику(Параметры); 
КонецЕсли;

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

Дополнительные рекомендации

Разберем еще несколько моментов, которые могут влиять на результат:

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

← На главную