В процессе работы с программой 1С:Бухгалтерия предприятия 3.0 пользователи часто сталкиваются с критической ошибкой при попытке провести документ Поступление на расчетный счет. Проблема проявляется в виде системного сообщения: «Ошибка SQL: Деление на 0 значения типа Numeric». Чаще всего это происходит в организациях, применяющих упрощенную систему налогообложения (УСН), когда в настройках включено автоматическое распределение документов.
В данной статье мы подробно разберем, почему возникает эта ошибка, проанализируем механизмы работы программы и рассмотрим пошаговые инструкции по ее устранению — от простых пользовательских правок до внедрения программных исправлений через расширения.
Давайте проанализируем ситуацию с технической стороны. Ошибка локализуется в общем модуле УчетУСН, в частности, при вызове метода Выполнить() для сложного запроса. Система пытается распределить сумму поступившей оплаты по документам отгрузки. Для этого она вычисляет коэффициенты распределения НДС и сумм реализации. Если в базе данных присутствуют документы с нулевой суммой в тех полях, которые выступают делителем в запросе, SQL-сервер прерывает операцию с фатальной ошибкой.
Основные триггеры проблемы:
НДС продажи.Прежде чем переходить к программированию, рассмотрим самые быстрые способы исправления, доступные бухгалтеру. Часто ошибка исчезает после актуализации данных в документе.
Рассмотрим пошагово, что нужно проверить:
Поступление на расчетный счет, который выдает ошибку.Иногда корень проблемы лежит в документах Реализация (акт, накладная), которые были созданы ранее. Разберем ситуацию: организация на УСН, НДС не платит, но в документе реализации по какой-то причине (например, после группового изменения реквизитов или некорректного импорта) флаг «НДС в сумме» или «Тип налогообложения» установлен неверно.
Проанализируем движения документа реализации. Если документ делает записи в регистр накопления НДС Продажи, находясь на УСН, это может запутать алгоритм распределения в банковской выписке. Чтобы исправить это:
УчетУСН.Если проверка данных не помогла, значит, мы столкнулись с ошибкой в логике формирования запроса. Рассмотрим программный способ решения через механизм расширений. Нам необходимо скорректировать работу функции ПодготовитьТаблицуНДСПоРеализацииНеплательщиком.
Суть исправления заключается в добавлении проверки на пустые таблицы реквизитов или обнуление результата, если данные не соответствуют условиям распределения НДС. Посмотрим на пример кода, который можно внедрить в расширение:
&Вместо("ПодготовитьТаблицуНДСПоРеализацииНеплательщиком")
Функция Расш1_ПодготовитьТаблицуНДСПоРеализацииНеплательщиком(ТаблицаВзаиморасчетов, ТаблицаРеквизитов)
// Проверяем наличие данных в таблице реквизитов
Если ТаблицаРеквизитов <> Неопределено И ТаблицаРеквизитов.Количество() > 0 Тогда
Реквизиты = ТаблицаРеквизитов[0];
// В некоторых случаях для организаций на УСН распределение можно пропустить
// Если это специфический случай конкретной фирмы, можно добавить условие по ИНН или Организации
Результат = ПродолжитьВызов(ТаблицаВзаиморасчетов, ТаблицаРеквизитов);
Возврат Результат;
Иначе
// Возвращаем Неопределено, чтобы запрос не падал на пустых данных
Возврат Неопределено;
КонецЕсли;
КонецФункции
Важный момент: если вы используете расширение, убедитесь, что в коде не осталось жестких привязок к названиям организаций. В последних версиях патчей от 1С данная проблема решается добавлением оператора ВЫБОР КОГДА непосредственно в текст запроса внутри общего модуля. Если вы самостоятельно правите запрос, ищите блоки, где производится деление, и оборачивайте делитель в конструкцию: ВЫБОР КОГДА СуммаДелителя = 0 ТОГДА 1 ИНАЧЕ СуммаДелителя КОНЕЦ.
Проанализируем еще несколько неочевидных причин:
ТииБ (Тестирование и исправление базы данных) с включенными опциями проверки логической и ссылочной целостности. Это поможет найти «битые» ссылки в регистрах взаиморасчетов, которые могут подсовывать нулевые значения в запросы.Подводя итог, можно сказать, что ошибка «Деление на 0» в банковских выписках — это симптом «грязных» данных в цепочке документов Реализация -> Поступление или недоработки типового кода в части обработки исключительных ситуаций. Следуя нашим рекомендациям, вы сможете восстановить работоспособность базы и успешно провести банковские документы.