Почему в 1С:ЗУП 3.1.12 не заполняется отработанное время и норма времени в документе «Начисление зарплаты и взносов»?

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

При работе с версией 1С:Зарплата и Управление Персоналом 3.1.12 пользователи часто сталкиваются с неприятной ситуацией: документ Начисление зарплаты и взносов создается, сотрудники в него подбираются, но колонки с нормой времени и фактически отработанными часами остаются пустыми либо возникает критическая ошибка «Деление на 0». Рассмотрим подробно причины этого поведения и пошагово разберем методы решения проблемы.

Проблема с предопределенным элементом «Рабочее время»

Одной из наиболее неочевидных, но частых причин является повреждение справочника Виды использования рабочего времени. В программе ЗУП 3.1 существует предопределенный элемент Рабочее время, который является системным и служит «контейнером» для агрегации различных видов явок (дневные, вечерние, ночные). Рассмотрим, как проверить его состояние.

Выясним причину через интерфейс:

  1. Перейдем в раздел Настройка — Виды использования рабочего времени.
  2. Проверим наличие элемента с наименованием Рабочее время.
  3. Если элемент помечен на удаление или дублируется, это блокирует алгоритмы расчета времени.

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

Ошибка «Деление на 0» и заполнение графиков на будущие периоды

Разберем ситуацию, когда при заполнении документа Начисление зарплаты и взносов программа выдает ошибку «Деление на 0». Это происходит из-за того, что знаменатель в формуле расчета (норма времени) равен нулю. Посмотрим, почему это случается, даже если текущий месяц в графике заполнен.

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

Выполним следующие действия:

  1. Откроем Производственный календарь на текущий и следующий годы, убедимся, что они заполнены и записаны.
  2. Зайдем в каждый График работы сотрудников и нажмем кнопку Заполнить на текущий и следующий периоды.
  3. Проверим, что в графике нет «пустых» дней, которые должны быть рабочими.

Обновление регистра «Данные графиков работы сотрудников»

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

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

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

Проблема отсутствия «Организации» в строках начисления

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

Для решения этой проблемы попробуем следующее:

  1. Использовать команду Подбор вместо кнопки Добавить или Заполнить. При подборе механизмы проверки ссылочной целостности работают иначе, что иногда позволяет «протолкнуть» корректные данные в строку.
  2. Проверить права доступа (RLS). Если включено ограничение доступа на уровне записей, расчетные механизмы могут не иметь прав на чтение данных графика под текущим пользователем, что возвращает пустые значения.

Влияние документов «Табель» на расчет

Выясним, как наличие документа Табель влияет на заполнение начисления. В теории, если табель проведен и в нем стоят часы (например, 95 часов), документ начисления должен подтянуть эти данные автоматически.

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

Техническая проверка через консоль запросов (для программистов)

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   ДанныеГрафиковРаботыСотрудников.Значение
    |ИЗ
    |   РегистрСведений.ДанныеГрафиковРаботыСотрудников КАК ДанныеГрафиковРаботыСотрудников
    |ГДЕ
    |   ДанныеГрафиковРаботыСотрудников.Сотрудник = &Сотрудник
    |   И ДанныеГрафиковРаботыСотрудников.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";

Запрос.УстановитьПараметр("Сотрудник", ВыбранныйСотрудник);
Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца(Объект.ДатаРегистрации));
Запрос.УстановитьПараметр("ДатаОкончания", КонецМесяца(Объект.ДатаРегистрации));

РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
    Сообщить("Данные в регистре графиков отсутствуют! Требуется перепополнение графика.");
КонецЕсли;

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

Итоги

Подводя итог, при пустой норме времени в ЗУП 3.1.12 мы должны последовательно проверить:

  1. Целостность предопределенного элемента Рабочее время.
  2. Заполнение графиков и календарей на два года (текущий и будущий).
  3. Актуальность записей в регистре Данные графиков работы сотрудников.
  4. Отсутствие ошибок платформы, связанных с потерей ссылки на Организацию в строках документа.

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

← На главную