Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

ERR_QUERY_DIV_BY_ZERO 1С:Предприятие и СУБД

Ошибка 1С: Деление на ноль в выражении запроса — Способы устранения

Обновлено: 25.08.2026 · Официальная документация ↗
  • Аварийное прерывание выполнения отчета на СКД или динамического списка: {(Строка, Колонка)}: Ошибка в выражении: Деление на ноль.
  • В СУБД MS SQL ошибка транслируется как Divide by zero error encountered (SQLSTATE 22012).
  • В PostgreSQL запрос завершается ошибкой: ERROR: division by zero (SQLSTATE 22012).
  • Ошибка проявляется при расчете относительных показателей (себестоимость за единицу, процент наценки, средняя цена при нулевом количестве).

1. Безопасное деление через конструкцию ВЫБОР КОГДА

Все операции деления в запросах 1С должны оборачиваться в условную конструкцию, проверяющую знаменатель:

ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    Продажи.СуммаОборот КАК Сумма,
    Продажи.КоличествоОборот КАК Количество,
    ВЫБОР
        КОГДА ЕСТЬNULL(Продажи.КоличествоОборот, 0) = 0 ТОГДА 0
        ИНАЧЕ Продажи.СуммаОборот / Продажи.КоличествоОборот
    КОНЕЦ КАК СредняяЦена
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи;

2. Защита от деления на ноль в вычисляемых полях СКД

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

Выбор 
    Когда Количество = 0 Или Количество Есть Null Тогда 0 
    Иначе Сумма / Количество 
Конец

3. Обработка пользовательских полей и ресурсов СКД

На вкладке Ресурсы при расчете процента по группировкам используйте выражение с проверкой родительского итога:

Выбор
    Когда ВычислитьВыражение("Сумма(СуммаОборот)", "ОбщийИтог") = 0 Тогда 0
    Иначе Сумма(СуммаОборот) / ВычислитьВыражение("Сумма(СуммаОборот)", "ОбщийИтог") * 100
Конец
💡 Практика специалистов: В схемах компоновки данных (СКД) всегда переносите расчет относительных показателей (цены, доли, проценты) из текста SQL-запроса на уровень ресурсов и выражений СКД, иначе итоговые строки группировок будут рассчитываться математически некорректно.

Частые вопросы (FAQ)

Почему ЕСТЬNULL(Делитель, 0) не спасает от деления на ноль?

Функция ЕСТЬNULL заменяет только значение Null на указанный литерал (0). Если получен ноль, то операция деления на ноль все равно произойдет. Необходимо проверять условие через ВЫБОР КОГДА ... = 0 ТОГДА 0.

Как ведет себя СУБД, если деление на ноль происходит во вложенном условии?

Оптимизатор запросов SQL (как MS SQL, так и PostgreSQL Cost-Based Optimizer) может изменить порядок вычисления выражений и инициировать деление до фильтрации строк WHERE, что вызовет падение запроса.

Можно ли отключить ошибку деления на ноль на уровне SQL-сервера?

В MS SQL существует директива SET ARITHABORT OFF / SET ANSI_WARNINGS OFF, возвращающая NULL вместо ошибки, однако платформа 1С принудительно инициализирует соединения в строгом режиме ANSI, поэтому настройка на стороне 1С не поддерживается.

Как обработать возможное деление на ноль во встроенном языке?

Используйте тернарный оператор или условие: Результат = ?(Делитель = 0, 0, Делимое / Делитель);

Полезные материалы
Рекомендуем