Как исправить ошибку «Деление на 0» в отчете «Ведомость по товарам на складах» в 1С:Управление торговлей 11?

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

При работе в конфигурации 1С:Управление торговлей 11 пользователи часто сталкиваются с критической ошибкой при формировании стандартных отчетов или проведении документов. Текст ошибки обычно выглядит следующим образом: Деление на 0. Логи журнала регистрации указывают на Справочник.УпаковкиЕдиницыИзмерения.МодульМенеджера. Это системная проблема, которая блокирует получение данных по остаткам и движениям товаров. В этой статье мы подробно проанализируем причины возникновения этой ситуации и разберем методы её устранения.

Анализ программной ошибки

Давайте разберем, что именно происходит в системе в момент возникновения сбоя. Ошибка возникает при выполнении метода СкомпоноватьРезультат. Система пытается рассчитать вес товара или пересчитать одну единицу измерения в другую, используя коэффициенты. В модуле менеджера справочника УпаковкиЕдиницыИзмерения (обычно это строка 314 или близкие к ней в зависимости от релиза) выполняется следующая операция:


КоличествоКгВЕдиницеИзмеренияВеса = СтруктураРезультат.Числитель / СтруктураРезультат.Знаменатель;

Проблема заключается в том, что переменная СтруктураРезультат.Знаменатель оказывается равной нулю. Согласно законам математики и правилам платформы 1С, такая операция недопустима и приводит к немедленной остановке выполнения программного кода. Выясним причину, почему в информационной базе появляются записи с нулевым знаменателем.

Причина 1: Некорректные настройки базовых единиц измерения веса

Самая распространенная причина — это отсутствие или некорректная настройка основной единицы измерения веса в параметрах системы. Рассмотрим, как это проверить:

  1. Перейдем в раздел НСИ и администрирование.
  2. Выберем пункт Настройка НСИ и разделов, далее перейдем в подраздел Номенклатура.
  3. Развернем группу Единицы измерения.
  4. Проанализируем поле Единица измерения веса. Если это поле пустое, система не понимает, к какому эталону приводить весовые характеристики товаров.
  5. Проверим, какая единица там выбрана. Иногда по ошибке вместо «кг» (килограмм) там могут быть указаны «шт» (штуки) или иные нетипичные значения, которые не имеют правильных коэффициентов пересчета в классификаторе ОКЕИ.

Если поле пустое или заполнено неверно, необходимо выбрать правильную единицу (килограммы) из классификатора. Если она уже выбрана, попробуйте перевыбрать её заново, нажав на кнопку выбора и выбрав элемент из справочника Единицы измерения (ОКЕИ).

Причина 2: Пустые значения знаменателя в справочнике упаковок

Вторая по частоте причина — некорректно введенные данные в самой карточке упаковки номенклатуры. Даже если в интерфейсе вы видите, что коэффициент равен 1, в базе данных значение реквизита Знаменатель может быть равно 0. Это часто случается при миграции данных из старых систем (например, из 1С:УТ 10.3) или при программной загрузке товаров из Excel.

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


ВЫБРАТЬ
    Упаковки.Ссылка,
    Упаковки.Владелец,
    Упаковки.Наименование
ИЗ
    Справочник.УпаковкиЕдиницыИзмерения КАК Упаковки
ГДЕ
    Упаковки.Знаменатель = 0

Если запрос вернул список записей, значит, именно эти элементы вызывают ошибку Деление на 0. Нам необходимо установить Знаменатель равным 1 для всех таких записей.

Причина 3: Массовое исправление данных через групповое изменение реквизитов

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

  1. Откроем обработку (через меню Администрирование — Обслуживание — Корректировка данных).
  2. В поле «Изменять» выберем Упаковки и единицы измерения.
  3. Нажмем Добавить условие отбора. Выберем поле Знаменатель, вид сравнения «Равно», значение «0».
  4. В списке реквизитов найдем Знаменатель и установим новое значение «1».
  5. Нажмем кнопку Изменить реквизиты.

Важно: Перед выполнением групповых операций всегда создавайте архивную копию информационной базы.

Причина 4: Программное решение (для разработчиков)

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


// Вместо прямой операции:
// КоличествоКгВЕдиницеИзмеренияВеса = СтруктураРезультат.Числитель / СтруктураРезультат.Знаменатель;

// Используем безопасное условие:
Если СтруктураРезультат.Знаменатель <> 0 Тогда
    КоличествоКгВЕдиницеИзмеренияВеса = СтруктураРезультат.Числитель / СтруктураРезультат.Знаменатель;
Иначе
    КоличествоКгВЕдиницеИзмеренияВеса = 0;
    // Дополнительно можно вывести сообщение в журнал регистрации для диагностики
    ЗаписьЖурналаРегистрации("Ошибка.ЕдиницыИзмерения", УровеньЖурналаРегистрации.Предупреждение, , , "Нулевой знаменатель для единицы!");
КонецЕсли;

Использование тернарного оператора также допустимо для сокращения записи:


КоличествоКгВЕдиницеИзмеренияВеса = ?(СтруктураРезультат.Знаменатель = 0, 0, СтруктураРезультат.Числитель / СтруктураРезультат.Знаменатель);

Профилактика возникновения ошибки

Для того чтобы избежать повторения ситуации, следует придерживаться следующих правил при ведении учета в 1С:Управление торговлей 11:

Проанализировав все вышеперечисленные шаги, мы можем сделать вывод: ошибка «Деление на 0» в 1С:УТ 11 почти всегда связана с «грязными» данными в справочнике единиц измерения или невыполненными базовыми настройками НСИ. Исправление констант или массовая корректировка знаменателей полностью решает проблему без необходимости сложного программирования.

← На главную