Рано или поздно при активной работе в программе «1С:Управление торговлей» редакции 11.3 (а также в сопряженных решениях 1С:ERP и 1С:Комплексная автоматизация) пользователи и администраторы сталкиваются с неприятной ситуацией. При попытке провести стандартный документ Перемещение товаров система прерывает работу аварийно, выдавая лаконичное, но пугающее сообщение: «Деление на 0».
Особенность этой проблемы в том, что конфигурация может не обновляться месяцами, код оставаться типовым, а права пользователей — неизменными. Ошибка возникает внезапно и, как правило, связана с накоплением некорректных данных в справочниках или регистрах. В этой статье мы подробно разберем, почему возникает эта ошибка, как локализовать ее источник с помощью конфигуратора и как быстро исправить данные в пользовательском режиме.
Давайте проанализируем, в каких именно механизмах проведения перемещения программа выполняет математическую операцию деления. Как правило, это вычисление весогабаритных характеристик перемещаемой партии, пересчет упаковок в базовые единицы хранения или расчет себестоимости списываемых товаров. Рассмотрим четыре наиболее распространенных сценария.
В современных конфигурациях 1С присутствуют глобальные настройки для ведения учета физических характеристик номенклатуры. Если система пытается рассчитать совокупный вес или объем перемещаемой партии для отражения в логистических регистрах, она обращается к предопределенным константам. Если в настройках системы «Единица измерения веса» или «Единица измерения объема» не выбрана или выбрана некорректно (например, с нулевым коэффициентом), это гарантированно приведет к ошибке деления на ноль при проведении перемещения.
При проведении документа система пересчитывает количество товара из единиц, указанных в табличной части (например, «коробка» или «поддон»), в базовые единицы хранения остатков (например, «штуки»). Расчет производится по следующей базовой формуле:
КоличествоВБазовыхЕдиницах = КоличествоВДокументе * КоэффициентУпаковкиДокумента / КоэффициентБазовойЕдиницы
Если в результате программного импорта данных (из Excel, внешней ERP-системы или при синхронизации с сайтом) у базовой единицы или у конкретной упаковки номенклатуры реквизит Коэффициент записался как 0 или остался незаполненным (NULL), при проведении перемещения платформа попытается разделить число на этот нулевой коэффициент.
Для мерных и весовых товаров в карточках номенклатуры и упаковок используются скрытые технические реквизиты, такие как ВесЧислитель и ВесЗнаменатель. При расчете веса система делит числитель на знаменатель. Если в реквизит ВесЗнаменатель каким-то образом записалось значение 0, это мгновенно вызовет аппаратный сбой при проведении складских документов.
При перемещении товаров система должна списать себестоимость с одного склада и оприходовать на другой. Если в регистре накопления Себестоимость товаров образовалась «зависшая» стоимость при нулевом количестве товара (например, в результате ручных корректировок или проведения документов задним числом), алгоритм расчета средней стоимости партии попытается разделить текущую стоимость на количество. Деление на нулевое количество на остатках приводит к ошибке проведения.
Самый быстрый способ понять, какая именно строка и какой товар вызывают сбой, — это запустить базу в режиме отладки. Рассмотрим, как это сделать по шагам:
F5.Перемещение товаров.Проанализируем контекст выполнения программы в момент остановки. Для этого откройте табло (сочетание клавиш Ctrl + Alt + W) или воспользуйтесь вычислением выражения (Shift + F9). Посмотрите, какие переменные участвуют в делении. Например, если код выглядит так:
КоэффициентПересчета = СтрокаНоменклатуры.Упаковка.Коэффициент;
КоличествоБазовое = Количество / КоэффициентПересчета;
Вычислите значение переменной СтрокаНоменклатуры.Упаковка. Вы сразу увидите, для какого конкретного товара или упаковки не заполнен коэффициент, и сможете оперативно исправить его карточку в режиме предприятия.
Если отладчик указывает на расчет общих весовых характеристик, нам необходимо проверить глобальные настройки системы. Выполним проверку по шагам:
Единица измерения веса, Единица измерения объема, Единица измерения площади и Единица измерения длины выбраны корректные значения из классификатора.В некоторых случаях эти константы могут быть скрыты из интерфейса. Тогда мы можем воспользоваться меню «Функции для технического специалиста» (в старых версиях — «Все функции»), найти там раздел Константы и напрямую проверить значения констант, отвечающих за базовые единицы веса и объема.
Если проблема скрыта в конкретной позиции номенклатуры, а документов перемещения или позиций в них слишком много для ручного перебора, мы можем написать простой запрос или воспользоваться стандартной обработкой «Групповое изменение реквизитов».
Рассмотрим, как найти дефектные упаковки с нулевым коэффициентом с помощью консоли запросов:
ВЫБРАТЬ
Упаковки.Ссылка КАК НекорректнаяУпаковка,
Упаковки.Владелец КАК Номенклатура,
Упаковки.Коэффициент КАК Коэффициент
ИЗ
Справочник.УпаковкиЕдиницыИзмерения КАК Упаковки
ГДЕ
Упаковки.Коэффициент <= 0
ИЛИ Упаковки.Коэффициент ЕСТЬ NULL
Запустив этот запрос в консоли, вы получите полный список упаковок, у которых коэффициент равен нулю или не заполнен вовсе.
Для исправления ситуации выполним следующие действия:
1).Если единицы измерения и упаковки проверены и не содержат ошибок, а документ все равно выдает деление на ноль при расчете себестоимости, проанализируем остатки партий. Для этого выполним следующие действия:
0, а конечный остаток стоимости при этом имеет положительное или отрицательное значение.Корректировка регистров или введите документ Отражение прочих доходов и расходов для списания суммовых остатков.Систематический контроль за корректностью ведения справочников единиц измерения и упаковок, а также своевременное исправление отрицательных остатков на складах позволят вам навсегда забыть об ошибке «Деление на 0» при перемещении товаров в 1С:УТ 11.3.