При работе в конфигурации 1С:Управление торговлей 11.4 (а также в аналогичных версиях 1С:ERP и 1С:КА 2.4) пользователи часто сталкиваются с критической ошибкой при выполнении операции «Проверка количества и маркировки товаров». В момент сканирования товара или при превышении фактически считанного количества над количеством в документе система выдает сообщение «Деление на 0». Эта проблема парализует работу склада и требует оперативного вмешательства технического специалиста.
В этой статье мы подробно разберем причины возникновения данной ошибки, проанализируем программный код типового решения и предложим несколько вариантов исправления ситуации: от быстрой программной правки до коррекции нормативно-справочной информации (НСИ).
Для начала выясним причину сбоя с помощью отладчика. Проанализируем цепочку вызовов, которая приводит к ошибке. Как правило, выполнение программы прерывается в модуле обработки ПроверкаКоличестваТоваров, а именно в функции РазбитьПоНеотгружаемым. Ошибка локализуется в следующем фрагменте кода:
Если ЗначениеЗаполнено(СтрокаТЧ.Упаковка) Тогда
КоэффициентУпаковки = СтрокаТЧ.Количество / СтрокаТЧ.КоличествоУпаковок;
Иначе
КоэффициентУпаковки = 1;
КонецЕсли;
Проблема заключается в том, что в переменной СтрокаТЧ.КоличествоУпаковок содержится значение 0. Согласно правилам математики и логике платформы 1С, операция деления на ноль вызывает исключительную ситуацию, выполнение кода прекращается, и пользователь видит системное сообщение об ошибке.
Почему значение реквизита равно нулю? Рассмотрим основные ситуации:
Реализация товаров и услуг) переносятся во внутренние структуры обработки с потерей коэффициентов, если для товара не заданы настройки упаковок по умолчанию.Упаковки для конкретной позиции числитель или знаменатель могут быть не заполнены или равны нулю. Несмотря на наличие проверок в форме элемента справочника, при программной загрузке или обменах такие данные могут попасть в базу.Если ошибка носит массовый характер и связана с особенностями релиза конфигурации, самым эффективным методом будет внесение изменений в программный код. Нам необходимо добавить проверку на заполненность знаменателя перед выполнением арифметической операции.
Рассмотрим, как изменить код функции РазбитьПоНеотгружаемым. Вместо базового условия добавим дополнительную проверку на ЗначениеЗаполнено(СтрокаТЧ.КоличествоУпаковок) и его неравенство нулю.
Рекомендуемый вариант исправления:
Если ЗначениеЗаполнено(СтрокаТЧ.Упаковка) И ЗначениеЗаполнено(СтрокаТЧ.КоличествоУпаковок) И СтрокаТЧ.КоличествоУпаковок <> 0 Тогда
КоэффициентУпаковки = СтрокаТЧ.Количество / СтрокаТЧ.КоличествоУпаковок;
Иначе
КоэффициентУпаковки = 1;
КонецЕсли;
В данном примере мы гарантируем, что деление будет произведено только в том случае, если КоличествоУпаковок содержит корректное число. В противном случае система примет КоэффициентУпаковки равным единице, что позволит избежать вылета программы и даст пользователю возможность завершить проверку.
Если программная правка невозможна (например, база находится на поддержке без возможности изменения), проанализируем состояние справочников. Нам необходимо убедиться, что реквизиты Числитель и Знаменатель в упаковках заполнены корректно.
Разберем шаги по проверке данных:
СтрокаТЧ.Номенклатура в момент ошибки.NULL или 0. Попробуйте перевыбрать упаковку в документе-распоряжении и заново запустить обработку проверки.Посмотрим на ситуацию шире. Иногда проблема кроется в том, как заполняется табличная часть самого документа перед вызовом формы проверки. Рекомендуем проанализировать процедуру ОтгружаемыеТоварыУпаковкаПриИзменении(Элемент) в модуле формы документа.
В этой процедуре происходит пересчет количества единиц при выборе другой упаковки. Проанализируем, не обнуляется ли реквизит КоличествоУпаковок при определенных условиях. Если в вашей организации используются индивидуальные упаковки, убедитесь, что при их выборе корректно подтягиваются коэффициенты из справочника. Часто бывает так, что при очистке поля Упаковка система оставляет старое значение в скрытых расчетах, что позже приводит к ошибке в обработке проверки.
Рассмотрим еще несколько важных моментов, которые помогут избежать ошибки «деление на 0»:
Использование патчей: Фирма «1С» регулярно выпускает исправления для типовых ошибок (патчи). Проверьте раздел «Администрирование» — «Обслуживание» — «Обновление программы» — «Установленные исправления». Ищите патчи, в описании которых упоминается обработка ПроверкаКоличестваТоваров или ошибка деления на ноль. Велика вероятность, что для вашего релиза 11.4 уже существует официальное мини-исправление.
Очистка кэша: В редких случаях форма проверки может использовать некорректные временные данные, сохраненные в кэше пользователя. Если ошибка воспроизводится только у одного сотрудника на конкретном рабочем месте, попробуйте очистить локальный кэш конфигурации 1С.
Итог: Проанализировав проблему, мы выяснили, что основной причиной является отсутствие защитного кода «от дурака» (или от некорректных данных) в типовом алгоритме пересчета упаковок. Внедрение условия Если СтрокаТЧ.КоличествоУпаковок <> 0 является наиболее быстрым и эффективным решением, которое позволит складу продолжить работу без ожидания глобального обновления конфигурации.