Решение задач 1С:Предприятие 8 на примерах

Ошибка «Деление на 0» в 1С: причины и решение

Ошибки 1СОшибки в кодеОпубликовано

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

Текст ошибки

Деление на 0

Причины

Для пользователя

  1. Посмотрите, при какой операции возникает ошибка: проведение документа, формирование отчёта или регламентная операция.
  2. В документе проверьте табличные части: строки с нулевым количеством, пустая цена при заполненной сумме, единица измерения без коэффициента.
  3. Проверьте курсы валют на дату документа, если документ в валюте.
  4. Если ошибка при закрытии месяца, сформируйте ведомость по остаткам и найдите позиции, где количество равно нулю, а стоимость нет. Такие остатки корректируют документами, которые предусмотрены в вашей конфигурации.

Для разработчика: защита в коде

Если Количество = 0 Тогда
    Цена = 0;
Иначе
    Цена = Сумма / Количество;
КонецЕсли;

// Короткая форма
Цена = ?(Количество = 0, 0, Сумма / Количество);

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

В запросе

В запросе деление на ноль может закончиться ошибкой СУБД при выполнении. Проверяйте делитель конструкцией ВЫБОР:

ВЫБРАТЬ
    Товары.Номенклатура,
    ВЫБОР
        КОГДА Товары.Количество = 0
            ТОГДА 0
        ИНАЧЕ Товары.Сумма / Товары.Количество
    КОНЕЦ КАК Цена
ИЗ
    Документ.ПоступлениеТоваров.Товары КАК Товары

Если делитель может быть NULL (после левого соединения), сначала оберните его в ЕСТЬNULL(..., 0), а затем проверяйте на ноль.

В СКД

В выражениях вычисляемых полей и ресурсов используйте тот же приём: ВЫБОР КОГДА Сумма(Количество) = 0 ТОГДА 0 ИНАЧЕ Сумма(Сумма) / Сумма(Количество) КОНЕЦ. Особенно это важно для ресурсов, которые считаются в итогах по группировкам: в отдельных строках делитель может быть ненулевым, а в группе — нулевым, и наоборот.

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

Частые вопросы

Ошибка появилась в типовом отчёте. Это ошибка программы?

Чаще причина в данных: нулевое количество при ненулевой сумме или незаполненный курс. Найдите такие записи и исправьте документы.

Что лучше возвращать при нулевом делителе?

Зависит от смысла: для цены обычно 0, для процента — 0 или пусто. Главное — выбрать явно и одинаково во всех местах.

Значение в запросе 1С: ЗНАЧЕНИЕ, ВЫБОР, ЕСТЬNULL и группировка

Запросы

Как сравнивать с перечислениями и предопределёнными элементами через ЗНАЧЕНИЕ(), обрабатывать NULL после левого соединения и считать количество и суммы с группировкой и условием ИМЕЮЩИЕ.

Выражения и макеты СКД в 1С: вычисляемые поля и условное оформление

Отчёты и СКД

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

СКД в 1С: система компоновки данных и программное формирование отчёта

Отчёты и СКД

Объяснение системы компоновки данных 1С: из чего состоит схема компоновки, как работают наборы данных, ресурсы, параметры и настройки, и как сформировать отчёт из кода — в табличный документ или в таблицу значений.

Похожие ошибки