Как исправить ошибку «Деление на ноль» в отчете «Ведомость товаров по складам» в 1С

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

При работе с типовыми и доработанными отчетами (в частности, «Ведомость товаров по складам») пользователи и разработчики могут столкнуться с ошибкой платформы 1С: «Деление на ноль» (или деление на 0). При этом сам запрос в консоли отчетов может выполняться корректно, а отладчик не всегда останавливается на строке с ошибкой.

В этой статье мы подробно проанализируем причины возникновения этой проблемы, разберем способы поиска источника ошибки и рассмотрим правила защиты формул в запросах и СКД.

Причина 1: Незаполненные коэффициенты или кратность в справочниках

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

Разберем по шагам, как локализовать и исправить эту проблему:

  1. Сохраним отчет как внешний файл (с расширением .erf) и запустим его в режиме отладки.
  2. Если ошибка возникает при формировании отчета по конкретным позициям, проверим нормативно-справочную информацию (НСИ) для этих товаров.
  3. Перейдем в справочник единиц измерения/упаковок проблемной номенклатуры и проверяем реквизиты Коэффициент и Кратность. Убедимся, что для всех элементов заданы корректные значения (например, 1 кг = 1 кг, коэффициент не равен 0).

Причина 2: Вычисляемые поля и ресурсы в СКД

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

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


ВЫБОР 
    КОГДА Сумма(Делитель) = 0 ТОГДА 0 
    ИНАЧЕ Сумма(Делимое) / Сумма(Делитель) 
КОНЕЦ

Если в поле «Выражение» вкладки «Ресурсы» просто указать Сумма(Делимое) / Сумма(Делитель), то при нулевом значении итогового знаменателя платформа выдаст ошибку деления на 0 при формировании отчета.

Причина 3: Пользовательские настройки отчета

Выясним, почему отчет может корректно работать у одного пользователя и вызывать ошибку у другого. В режиме «1С:Предприятие» пользователи могут самостоятельно изменять варианты отчета, добавляя пользовательские поля или формулы условного оформления.

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

  1. Откроем форму управления настройками отчета.
  2. Сбросим пользовательские настройки отчета до стандартных значений.
  3. Проверим формирование отчета за тот же период.

Правильная проверка на ноль и NULL в запросах 1С

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


ВЫБОР
    КОГДА &ЕдиницыКоличества = 0 ТОГДА 
        ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток
    КОГДА &ЕдиницыКоличества = 1 ТОГДА 
        ВЫБОР 
            КОГДА ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов <> 0 
            ТОГДА ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток / ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов
            ИНАЧЕ 0 
        КОНЕЦ
КОНЕЦ

Обратим внимание: у числовых реквизитов объектов 1С значение по умолчанию равно 0, а не NULL. Проверка с помощью ЕСТЬNULL в запросах требуется только тогда, когда используется левое или правое соединение таблиц, и запись в присоединяемой таблице может отсутствовать.

← На главную