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

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

В процессе работы с программой 1С:Бухгалтерия предприятия 3.0 пользователи часто сталкиваются с критической ошибкой при попытке провести документ Поступление на расчетный счет. Проблема проявляется в виде системного сообщения: «Ошибка SQL: Деление на 0 значения типа Numeric». Чаще всего это происходит в организациях, применяющих упрощенную систему налогообложения (УСН), когда в настройках включено автоматическое распределение документов.

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

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

Давайте проанализируем ситуацию с технической стороны. Ошибка локализуется в общем модуле УчетУСН, в частности, при вызове метода Выполнить() для сложного запроса. Система пытается распределить сумму поступившей оплаты по документам отгрузки. Для этого она вычисляет коэффициенты распределения НДС и сумм реализации. Если в базе данных присутствуют документы с нулевой суммой в тех полях, которые выступают делителем в запросе, SQL-сервер прерывает операцию с фатальной ошибкой.

Основные триггеры проблемы:

  1. Незаполненные аналитики: В документе или договоре не указана валюта, либо указан договор, в котором не заданы курс и кратность (даже для рублей).
  2. Конфликт признаков НДС: Организация находится на УСН, но в документах реализации ошибочно сформировались движения по регистру НДС продажи.
  3. Ошибки округления и пустые значения: Наличие документов отгрузки с нулевой итоговой суммой, которые система пытается «закрыть» входящим платежом.
  4. Баг типового релиза: В некоторых версиях конфигурации (начиная с 3.0.115) алгоритм распределения оплат «неплательщика НДС» содержал архитектурный недочет в запросе.

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

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

Рассмотрим пошагово, что нужно проверить:

  1. Откройте документ Поступление на расчетный счет, который выдает ошибку.
  2. Проверьте поле Договор. Попробуйте перевыбрать его. Если в договоре не указана валюта расчетов, обязательно заполните её.
  3. Обратите внимание на Курс и Кратность. Если они равны нулю, это и есть причина сбоя. Установите корректные значения (для рубля — 1).
  4. Попробуйте перевыбрать даты в документе (дату входящего документа и дату самого поступления). Как показывает практика, это инициирует обновление внутренних кэшей документа и иногда позволяет провести его без ошибок.
  5. Если используется автоматическое распределение оплат, попробуйте временно сменить способ погашения задолженности на «По документу» и выбрать конкретный документ расчетов. Это поможет локализовать проблемную реализацию.

Способ 2. Анализ документов реализации на наличие «скрытого» НДС

Иногда корень проблемы лежит в документах Реализация (акт, накладная), которые были созданы ранее. Разберем ситуацию: организация на УСН, НДС не платит, но в документе реализации по какой-то причине (например, после группового изменения реквизитов или некорректного импорта) флаг «НДС в сумме» или «Тип налогообложения» установлен неверно.

Проанализируем движения документа реализации. Если документ делает записи в регистр накопления НДС Продажи, находясь на УСН, это может запутать алгоритм распределения в банковской выписке. Чтобы исправить это:

Способ 3. Использование расширения для обхода ошибки

Если проверка данных не помогла, значит, мы столкнулись с ошибкой в логике формирования запроса. Рассмотрим программный способ решения через механизм расширений. Нам необходимо скорректировать работу функции ПодготовитьТаблицуНДСПоРеализацииНеплательщиком.

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


&Вместо("ПодготовитьТаблицуНДСПоРеализацииНеплательщиком")
Функция Расш1_ПодготовитьТаблицуНДСПоРеализацииНеплательщиком(ТаблицаВзаиморасчетов, ТаблицаРеквизитов)
    
    // Проверяем наличие данных в таблице реквизитов
    Если ТаблицаРеквизитов <> Неопределено И ТаблицаРеквизитов.Количество() > 0 Тогда
        Реквизиты = ТаблицаРеквизитов[0];
        
        // В некоторых случаях для организаций на УСН распределение можно пропустить
        // Если это специфический случай конкретной фирмы, можно добавить условие по ИНН или Организации
        
        Результат = ПродолжитьВызов(ТаблицаВзаиморасчетов, ТаблицаРеквизитов);
        Возврат Результат;
    Иначе
        // Возвращаем Неопределено, чтобы запрос не падал на пустых данных
        Возврат Неопределено;
    КонецЕсли;
    
КонецФункции

Важный момент: если вы используете расширение, убедитесь, что в коде не осталось жестких привязок к названиям организаций. В последних версиях патчей от 1С данная проблема решается добавлением оператора ВЫБОР КОГДА непосредственно в текст запроса внутри общего модуля. Если вы самостоятельно правите запрос, ищите блоки, где производится деление, и оборачивайте делитель в конструкцию: ВЫБОР КОГДА СуммаДелителя = 0 ТОГДА 1 ИНАЧЕ СуммаДелителя КОНЕЦ.

Дополнительные рекомендации

Проанализируем еще несколько неочевидных причин:

Подводя итог, можно сказать, что ошибка «Деление на 0» в банковских выписках — это симптом «грязных» данных в цепочке документов Реализация -> Поступление или недоработки типового кода в части обработки исключительных ситуаций. Следуя нашим рекомендациям, вы сможете восстановить работоспособность базы и успешно провести банковские документы.

← На главную