Как исправить ошибку «Деление на 0» при загрузке отчета о розничных продажах в 1С:Бухгалтерия 8.3?

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

При импорте документов из внешних источников (таких как файлы Excel, XML, JSON или CSV) во внешние обработки «1С:Бухгалтерия 8.3» пользователи часто сталкиваются с аварийным завершением работы программы. Одной из наиболее распространенных и неприятных ошибок является «Деление на 0». Данная проблема полностью блокирует процесс загрузки данных, не позволяя создать или провести документ Отчет о розничных продажах.

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

Выясняем причины возникновения ошибки

Для того чтобы эффективно решить проблему, сначала проанализируем механизм работы внешней обработки загрузки. Ошибка «Деление на ноль» чаще всего возникает в математических формулах пересчета числовых показателей табличной части документа. Рассмотрим три основные группы причин:

  1. Проблемы с курсом и кратностью валюты. Если в настройках загрузки или в самом документе фигурирует иностранная валюта, система выполняет пересчет сумм в регламентированную валюту (рубли) по формуле: СуммаРегл = СуммаВал * Курс / Кратность. Если в регистре сведений КурсыВалют на дату документа отсутствует запись, или если кратность валюты по какой-то причине равна нулю, программа выдаст критическую ошибку деления на ноль. При этом ручная установка кратности в справочнике на текущую дату может не помочь, если сам загружаемый документ создается прошедшей датой.
  2. Нулевое количество или нулевая цена в файле-источнике. При импорте товаров обработка пытается рассчитать цену за единицу или процент скидки. Формула расчета цены выглядит стандартно: Цена = Сумма / Количество. Если в файле присутствует строка с количеством равным 0 (например, подарок, акционная позиция, услуга доставки с нулевым количеством, либо техническая «пустая» строка в конце таблицы Excel), обработка пытается разделить сумму на ноль.
  3. Некорректное сопоставление колонок (маппинг). Если пользователь при настройке параметров загрузки случайно перепутал номера колонок файла (например, указал текстовое поле «Артикул» или «Номенклатура» вместо числового поля «Количество»), система при чтении преобразует текст в число. Любое нечисловое значение при таком преобразовании превратится в 0, что опять же приведет к ошибке деления в кодовой строке.

Далее мы подробно разберем, как исправить эту ошибку программным и административным путем.

Способ 1. Временный обход ошибки через отключение проведения документа

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

Рассмотрим, как это сделать по шагам:

  1. Откройте информационную базу в режиме Конфигуратор.
  2. Через меню Файл — Открыть найдите и откройте вашу внешнюю обработку (файл с расширением .epf).
  3. Перейдите в модуль обработки (обычно это Модуль объекта) и найдите строку, которая вызывает ошибку (например, строку 3693, где устанавливается флаг отмены проведения).
  4. Найдите переменную Отказ = Истина;, которая срабатывает при возникновении ошибки проведения документа Отчет о розничных продажах.
  5. Закомментируйте эту строку, добавив два символа косой черты // в начале строки:

// Отказ = Истина; // Временно комментируем, чтобы документ записался непроведенным

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

Способ 2. Правильное исправление кода обработки (Защита от деления на ноль)

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

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

СтрокаТаблицы.Цена = СтрокаТаблицы.Сумма / СтрокаТаблицы.Количество;

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


Если СтрокаТаблицы.Количество <> 0 Тогда
    СтрокаТаблицы.Цена = СтрокаТаблицы.Сумма / СтрокаТаблицы.Количество;
Иначе
    СтрокаТаблицы.Цена = 0; // Назначаем нулевую цену, если количество не заполнено
КонецЕсли;

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

СуммаРегл = СуммаВал * КурсДокумента / КратностьДокумента;

Мы должны обезопасить расчет с помощью тернарного (сокращенного) условного оператора ? или стандартной конструкции Если...Тогда. Посмотрим на пример реализации:


БезопаснаяКратность = ?(КратностьДокумента = 0, 1, КратностьДокумента);
СуммаРегл = СуммаВал * КурсДокумента / БезопаснаяКратность;

Этот простой прием гарантирует, что даже если кратность в документе или справочнике окажется незаполненной (равной 0), система подставит в качестве делителя единицу, расчет завершится корректно, и программа не выдаст аварийное сообщение.

Способ 3. Проверка и очистка исходных данных без изменения кода

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

Выполните следующие шаги для локализации ошибок в данных:

  1. Откройте загружаемый файл в табличном редакторе (например, Microsoft Excel или встроенном редакторе таблиц).
  2. Включите фильтрацию по числовым колонкам (Количество, Сумма, Цена).
  3. Проверьте наличие строк, где количество равно 0, пусто или содержит текстовые символы (например, пробелы, знаки дефиса или буквы). Удалите такие строки или заполните их корректными числовыми значениями.
  4. Перейдите в самый конец таблицы. Часто при выгрузках из сторонних систем (например, CRM или сайтов интернет-магазинов) внизу файла формируются невидимые пустые строки с сохраненным форматированием границ ячеек. Обработка считывает эти строки как заполненные объекты с нулевыми реквизитами. Полностью удалите все пустые строки ниже основной таблицы данных.
  5. Проверьте дату загружаемых документов и сопоставьте её с историей курсов валют в 1С. Перейдите в раздел Справочники — Валюты, откройте используемую валюту и убедитесь, что курс и кратность заполнены именно на ту дату, за которую загружается отчет о розничных продажах.

Подведем итоги

Мы детально изучили проблему деления на ноль при загрузке документов в «1С:Бухгалтерия 8.3». Наиболее надежным и профессиональным решением является программная защита в коде внешней обработки (Способ 2). Она защитит базу данных от некорректно подготовленных файлов пользователей в будущем. Если же вам требуется разовое оперативное решение, воспользуйтесь очисткой файла-источника (Способ 3) или временным отключением жесткого отказа проведения (Способ 1).

← На главную