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

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

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

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

Основные причины возникновения ошибки «Деление на 0»

Давайте проанализируем, в каких именно механизмах проведения перемещения программа выполняет математическую операцию деления. Как правило, это вычисление весогабаритных характеристик перемещаемой партии, пересчет упаковок в базовые единицы хранения или расчет себестоимости списываемых товаров. Рассмотрим четыре наиболее распространенных сценария.

  1. Сбой или незаполнение глобальных констант единиц измерения.

    В современных конфигурациях 1С присутствуют глобальные настройки для ведения учета физических характеристик номенклатуры. Если система пытается рассчитать совокупный вес или объем перемещаемой партии для отражения в логистических регистрах, она обращается к предопределенным константам. Если в настройках системы «Единица измерения веса» или «Единица измерения объема» не выбрана или выбрана некорректно (например, с нулевым коэффициентом), это гарантированно приведет к ошибке деления на ноль при проведении перемещения.

  2. Нулевой коэффициент в справочнике упаковок или единиц измерения.

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

    КоличествоВБазовыхЕдиницах = КоличествоВДокументе * КоэффициентУпаковкиДокумента / КоэффициентБазовойЕдиницы

    Если в результате программного импорта данных (из Excel, внешней ERP-системы или при синхронизации с сайтом) у базовой единицы или у конкретной упаковки номенклатуры реквизит Коэффициент записался как 0 или остался незаполненным (NULL), при проведении перемещения платформа попытается разделить число на этот нулевой коэффициент.

  3. Некорректные значения в реквизитах динамического пересчета (Числитель/Знаменатель).

    Для мерных и весовых товаров в карточках номенклатуры и упаковок используются скрытые технические реквизиты, такие как ВесЧислитель и ВесЗнаменатель. При расчете веса система делит числитель на знаменатель. Если в реквизит ВесЗнаменатель каким-то образом записалось значение 0, это мгновенно вызовет аппаратный сбой при проведении складских документов.

  4. Ошибки партионного учета и себестоимости.

    При перемещении товаров система должна списать себестоимость с одного склада и оприходовать на другой. Если в регистре накопления Себестоимость товаров образовалась «зависшая» стоимость при нулевом количестве товара (например, в результате ручных корректировок или проведения документов задним числом), алгоритм расчета средней стоимости партии попытается разделить текущую стоимость на количество. Деление на нулевое количество на остатках приводит к ошибке проведения.

Шаг 1. Локализация проблемы с помощью отладчика

Самый быстрый способ понять, какая именно строка и какой товар вызывают сбой, — это запустить базу в режиме отладки. Рассмотрим, как это сделать по шагам:

  1. Откройте базу 1С в режиме «Конфигуратор» под пользователем с правами администратора (разработчика).
  2. Запустите сеанс отладки, нажав клавишу F5.
  3. В открывшемся пользовательском режиме найдите и откройте проблемный документ Перемещение товаров.
  4. Вернитесь в окно Конфигуратора. Откройте главное меню «Отладка» — «Остановка по ошибке».
  5. В появившемся окне установите флаг «Останавливаться по ошибке». Нажмите «ОК».
  6. Перейдите обратно в пользовательский сеанс и нажмите кнопку «Провести» на документе перемещения.
  7. При возникновении ошибки система не просто покажет предупреждение, а автоматически переключит вас в Конфигуратор и подсветит строку кода, на которой произошел сбой.

Проанализируем контекст выполнения программы в момент остановки. Для этого откройте табло (сочетание клавиш Ctrl + Alt + W) или воспользуйтесь вычислением выражения (Shift + F9). Посмотрите, какие переменные участвуют в делении. Например, если код выглядит так:


КоэффициентПересчета = СтрокаНоменклатуры.Упаковка.Коэффициент;
КоличествоБазовое = Количество / КоэффициентПересчета;

Вычислите значение переменной СтрокаНоменклатуры.Упаковка. Вы сразу увидите, для какого конкретного товара или упаковки не заполнен коэффициент, и сможете оперативно исправить его карточку в режиме предприятия.

Шаг 2. Проверка и исправление глобальных констант

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

  1. Перейдите в раздел НСИ и администрирование.
  2. Откройте подраздел Настройка параметров системы и выберите пункт Номенклатура.
  3. Раскройте группу настроек Единицы измерения.
  4. Убедитесь, что для параметров Единица измерения веса, Единица измерения объема, Единица измерения площади и Единица измерения длины выбраны корректные значения из классификатора.
  5. Если какое-то из полей пустое — выберите верную единицу измерения и запишите настройки.

В некоторых случаях эти константы могут быть скрыты из интерфейса. Тогда мы можем воспользоваться меню «Функции для технического специалиста» (в старых версиях — «Все функции»), найти там раздел Константы и напрямую проверить значения констант, отвечающих за базовые единицы веса и объема.

Шаг 3. Поиск некорректных коэффициентов в справочнике упаковок

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

Рассмотрим, как найти дефектные упаковки с нулевым коэффициентом с помощью консоли запросов:


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

Запустив этот запрос в консоли, вы получите полный список упаковок, у которых коэффициент равен нулю или не заполнен вовсе.

Для исправления ситуации выполним следующие действия:

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

Шаг 4. Устранение зависшей стоимости в партионном учете

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

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

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

← На главную