Как исправить ошибку «Деление на 0» при сохранении графика в 1С:ЗУП 3.1?

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

При выполнении рутинных операций в программе «1С:Зарплата и управление персоналом 3.1» — например, при попытке сохранить измененный или новый график работы — пользователи могут столкнуться с критической ошибкой платформы. В окне сообщения выводится ошибка вызова метода контекста Записать для объекта НаборСреднемесячныеНормы с сообщением от МенеджерРасчетаЗарплаты: «Деление на 0» в конкретном начислении за прошлый период.

Рассмотрим подробнее механизмы возникновения этой проблемы и разберем по шагам варианты ее решения.

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

Проанализируем ситуацию, чтобы понять, почему запись графика работы активирует перерасчет прошлых периодов. В 1С:ЗУП 3.1 при сохранении графика работы программа автоматически запускает процедуру актуализации норм времени и перерасчета фонда оплаты труда (ФОТ). Если в информационной базе присутствуют плановые начисления, связанные с показателем времени, программа пытается пересчитать формулу.

Основными причинами ошибки являются:

  1. "Битые" ссылки на сотрудников после переноса данных. Если данные переносились из другой конфигурации или объекты были частично удалены без контроля ссылочной целостности, в регистры могут попасть идентификаторы видов (285:94a1382c4ab5665b11e7da6b61f1a311). В документах начисления за прошлые периоды вместо конкретного сотрудника отображается пустое поле или несуществующий объект.
  2. Нулевое значение показателя «НормаЧасов». Ошибка деления на 0 возникает при вычислении формулы вида:

ФиксированнаяСуммаДляБригадирские * ВремяВЧасах / НормаЧасов

Если для сотрудника или его графика за указанный период (например, май 2017 года) не заполнен производственный календарь или сам график работы, значение показателя НормаЧасов становится равным 0, что блокирует сохранение данных.

Способ 1. Перевыбор сотрудника в документах начисления

Выясним причину на уровне конкретного документа расчета зарплаты. В тексте ошибки программа указывает период и вид начисления, на котором произошел сбой (например, начисление «Бригадирские» за май 2017 года).

  1. Перейдем в раздел Зарплата — Начисления зарплаты и взносов (или Начисление за первую половину месяца) за указанный в ошибке период.
  2. Откроем документ начисления и найдем вкладку с указанным видом расчета.
  3. Проверим список сотрудников. Если в строках отображается пустое имя или битая ссылка, необходимо вручную перевыбрать корректного сотрудника из справочника Сотрудники.
  4. Перерасчитаем или перепроведем документ, после чего повторим попытку сохранения графика работы.

Способ 2. Проверка и исправление формулы начисления

Чтобы обезопасить базу от подобных сбоев в будущем, настроим защиту от деления на ноль непосредственно в формуле начисления.

  1. Перейдем в меню Настройки — Начисления.
  2. Откроем карточку проблемного начисления.
  3. На вкладке Основное отредактируем формулу расчета. Для предотвращения деления на ноль изменим знаменатель с помощью функции Макс или условного оператора Выбор:

ФиксированнаяСуммаДляБригадирские * ВремяВЧасах / Макс(НормаЧасов, 1)

Либо с использованием конструкции выбора:


Выбор
	Когда НормаЧасов = 0
		Тогда 0
	Иначе ФиксированнаяСуммаДляБригадирские * ВремяВЧасах / НормаЧасов
Конец

Способ 3. Проверка производственного календаря и графиков

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

  1. Перейдем в раздел Настройки — Производственные календари. Убедимся, что календарь заполнен за тот год, который фигурирует в тексте ошибки.
  2. Проверим графики работы сотрудников за соответствующий месяц. Если норма часов не заполнена, необходимо заполнить и сохранить график за этот период.

Способ 4. Тестирование и исправление информационной базы

В случаях, когда после переноса данных в базе образовались ссылки на несуществующие объекты, выполним техническое обслуживание базы:

  1. Создадим резервную копию информационной базы.
  2. Запустим программу в режиме Конфигуратор.
  3. В меню откроем Администрирование — Тестирование и исправление...
  4. Отметим флажками пункты Проверка логической целостности информационной базы и Поиск ссылок на несуществующие объекты.
  5. В переключателях при наличии ссылок на несуществующие объекты выберем вариант Очищать ссылки или Удалять объекты.
  6. Запустим процесс кнопкой Выполнить.

После очистки битых ссылок механизм МенеджерРасчетаЗарплаты перестанет обращаться к несуществующим записям, и график работы успешно сохранится.

← На главную