При оформлении документа «Командировка» в программе 1С:Зарплата и управление персоналом пользователи нередко сталкиваются с неприятным системным сообщением: «деление на 0». Эта ошибка блокирует расчет среднего заработка и не позволяет провести документ. В данной статье мы детально разберем, почему программа не видит данные о времени, и как совместными усилиями найти и устранить причину этой проблемы.
Прежде чем переходить к настройкам, давайте проанализируем, почему возникает математическая ошибка деления на ноль. Расчет среднего заработка для командировки строится по формуле: Сумма начислений за расчетный период / Отработанное время в днях (или часах). Если программа выдает ошибку, это означает, что знаменатель в этой формуле равен нулю. Другими словами, система по какой-то причине считает, что сотрудник не отработал ни одного дня или часа, либо у него отсутствует норма рабочего времени.
Рассмотрим основные шаги по диагностике и решению этой ситуации.
Самая распространенная причина, по которой НормаДнейЧасов оказывается равной нулю, — это банально незаполненный график работы на новый календарный год. Рассмотрим ситуацию: в феврале расчет прошел успешно, а в марте возникла ошибка. Это первый признак того, что в справочнике графиков отсутствуют данные на текущий период.
Выполним следующие действия:
Проанализируем более глубокие настройки, которые часто сбивают с толку даже опытных пользователей. В справочнике «Графики работы сотрудников» есть гиперссылка Изменить свойства графика. Разберем, на что там нужно обратить внимание:
Параметр «Считать норму по другому графику». Если здесь стоит галочка, программа при расчете среднего заработка будет искать норму времени не в основном графике сотрудника, а в том, который указан в этом поле. Если этот «другой» график (например, пятидневка) не заполнен на текущий год, возникнет ошибка деления на 0, даже если основной график сотрудника выглядит корректно.
Параметр «Неполное рабочее время». Проверим, установлены ли флаги «Неполный рабочий день» или «Неполная рабочая неделя». При таких настройках крайне важно, чтобы был правильно указан график для расчета нормы, иначе 1С не сможет определить долю ставки и корректно рассчитать знаменатель формулы.
Выясним, не вводился ли сотруднику документ Индивидуальный график. В системе 1С этот документ имеет приоритет над основным графиком работы. Если документ был создан (например, для изменения сменности), но в нем не заполнены часы или он остался «пустым» из-за ошибки ввода, программа возьмет норму именно из него.
Рассмотрим алгоритм проверки:
Ситуация усложняется, если сотрудник только что принят на работу. В этом случае у него нет данных за предыдущие 12 месяцев. Программа пытается рассчитать средний заработок исходя из данных текущего месяца (месяца события).
Проанализируем ситуацию: если сотрудник принят 1-го числа, а 2-го числа уезжает в командировку, программа должна взять данные из его плановых начислений и нормы по графику за текущий месяц. Если в этот момент ВремяВДняхЧасах за отработанный период равно 0 и нет данных о тарифной ставке в регистре, может возникнуть ошибка. В таких случаях рекомендуется проверить правильность оформления приема на работу и корректность указания Плановых начислений.
Иногда визуально данные в графиках заполнены, но в технических регистрах накоплены ошибки. Для расчета среднего заработка 1С использует данные из регистра накопления ДанныеОВремениДляРасчетаСреднегоЗаработкаОбщий.
Рассмотрим, как можно исправить ситуацию технически:
Если для сотрудника установлен суммированный учет рабочего времени, программа переходит на расчет среднего заработка исходя из часов, а не дней. Выясним, корректно ли настроен вид времени.
В настройках графика (раздел Параметры сменного графика) должен быть указан вид времени «Явка». Если в графике стоят только «Ночные» или «Сверхурочные» без основного времени «Явка», алгоритм расчета может не распознать эти часы как рабочее время для нормы, что приведет к пустому знаменателю.
Посмотрим на пример настройки кода:
// Внутренняя логика программы проверяет:
Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГрафикРаботы, "СуммированныйУчетРабочего времени") Тогда
Знаменатель = СведенияОДоходах.ВремяВЧасах;
Иначе
Знаменатель = СведенияОДоходах.ВремяВДнях;
КонецЕсли;
Если Знаменатель = 0 Тогда
ВызватьИсключение "Ошибка: Деление на 0 при расчете среднего заработка";
КонецЕсли;
Подводя итог, можно сказать, что ошибка «деление на 0» в командировке — это всегда сигнал о «пустоте» в данных о времени. Для решения проблемы мы рекомендуем последовательно проверить:
Чаще всего проблема решается простым нажатием кнопки «Заполнить» в графике работы сотрудника за текущий год, что сразу наполняет систему необходимыми данными для корректного деления.