При работе с версией 1С:Зарплата и Управление Персоналом 3.1.12 пользователи часто сталкиваются с неприятной ситуацией: документ Начисление зарплаты и взносов создается, сотрудники в него подбираются, но колонки с нормой времени и фактически отработанными часами остаются пустыми либо возникает критическая ошибка «Деление на 0». Рассмотрим подробно причины этого поведения и пошагово разберем методы решения проблемы.
Одной из наиболее неочевидных, но частых причин является повреждение справочника Виды использования рабочего времени. В программе ЗУП 3.1 существует предопределенный элемент Рабочее время, который является системным и служит «контейнером» для агрегации различных видов явок (дневные, вечерние, ночные). Рассмотрим, как проверить его состояние.
Выясним причину через интерфейс:
Проанализируем ситуацию, когда элемент помечен на удаление. В этом случае программа перестает видеть основной идентификатор времени. Нам необходимо снять пометку на удаление. Если же в системе образовался дубль (один элемент предопределенный, другой — созданный пользователем), воспользуемся стандартной обработкой Поиск и замена дублей. Важно, чтобы во всех графиках и кадровых документах использовался именно предопределенный системный элемент Рабочее время.
Разберем ситуацию, когда при заполнении документа Начисление зарплаты и взносов программа выдает ошибку «Деление на 0». Это происходит из-за того, что знаменатель в формуле расчета (норма времени) равен нулю. Посмотрим, почему это случается, даже если текущий месяц в графике заполнен.
В релизах ветки 3.1.12 был замечен баг: при расчете зарплаты за декабрь программа может обращаться к данным следующего календарного года (например, для определения границ расчетного периода или при наличии переходящих остатков). Если Производственный календарь и Графики работы на следующий год не заполнены, система получает нулевую норму.
Выполним следующие действия:
Иногда визуальное заполнение графика в справочнике не гарантирует, что данные попали в целевой регистр сведений, из которого их берет документ начисления. Рассмотрим механизм принудительного обновления данных.
Проанализируем работу регистра Данные графиков работы сотрудников. Если записи в нем повреждены или отсутствуют, документ начисления не увидит норму. Попробуем обновить его вручную:
В самом графике работы временно изменим любой параметр (например, количество часов в одном из дней или флаг использования праздничных дней). Нажмем Записать. После этого вернем настройки в исходное состояние и снова нажмем Записать. Это действие инициирует пересчет данных в регистре для всех сотрудников, привязанных к данному графику.
Довольно редкий, но зафиксированный в версии 3.1.12 глюк — потеря ссылки на организацию в табличной части документа. Посмотрим на пример: в шапке документа организация указана, но при расчете в строках по сотрудникам она оказывается пустой. Это приводит к тому, что программа не может сопоставить сотрудника, график и производственный календарь организации.
Для решения этой проблемы попробуем следующее:
Выясним, как наличие документа Табель влияет на заполнение начисления. В теории, если табель проведен и в нем стоят часы (например, 95 часов), документ начисления должен подтянуть эти данные автоматически.
Однако, если в настройках начисления (например, Оплата по окладу) на вкладке Учет времени указан основной вид времени, отличный от того, что проставлен в табеле, возникнет конфликт. Убедимся, что:
Оплата по окладу выбран вид времени Рабочее время или Явка.Табель проведен до создания документа Начисление зарплаты и взносов.Если вышеуказанные способы не помогают, проанализируем ситуацию на уровне базы данных. Нам нужно проверить, что возвращает функция расчета времени. Рассмотрим фрагмент кода, который можно использовать во внешней обработке для проверки доступности данных графиков:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеГрафиковРаботыСотрудников.Значение
|ИЗ
| РегистрСведений.ДанныеГрафиковРаботыСотрудников КАК ДанныеГрафиковРаботыСотрудников
|ГДЕ
| ДанныеГрафиковРаботыСотрудников.Сотрудник = &Сотрудник
| И ДанныеГрафиковРаботыСотрудников.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";
Запрос.УстановитьПараметр("Сотрудник", ВыбранныйСотрудник);
Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца(Объект.ДатаРегистрации));
Запрос.УстановитьПараметр("ДатаОкончания", КонецМесяца(Объект.ДатаРегистрации));
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Сообщить("Данные в регистре графиков отсутствуют! Требуется перепополнение графика.");
КонецЕсли;
Если запрос возвращает пустой результат, проблема однозначно в регистре Данные графиков работы сотрудников. Если же данные есть, но в документ не попадают — проблема в самом релизе 3.1.12 и механизме компоновки данных в документе Начисление зарплаты и взносов. В таком случае рекомендуется обновиться до более стабильного релиза (например, ветки 3.1.14 или выше), так как в 3.1.12 были зафиксированы ошибки в модулях расчета, исправленные в последующих патчах.
Подводя итог, при пустой норме времени в ЗУП 3.1.12 мы должны последовательно проверить:
Эти шаги в большинстве случаев позволяют восстановить корректный расчет заработной платы без необходимости внесения изменений в программный код.