При проведении приходного кассового ордера (ПКО), в частности при оформлении поступления денежных средств из кассы ККМ, пользователи могут столкнуться с критической ошибкой платформы «Деление на 0». Документ блокируется и отказывается проводиться, останавливая работу кассового узла. Разберем по шагам, почему возникает эта неполадка, где именно хранятся некорректные данные и как быстро восстановить работоспособность системы.
Проанализируем ситуацию с точки зрения программных алгоритмов конфигурации 1С:Управление торговлей. При проведении кассовых документов программа выполняет расчет и фиксацию сумм не только в валюте самого платежа, но и в базовых валютах учета (валюта управленческого и валюта регламентированного учета). Пересчет выполняется по формуле:
СуммаВВалютеУчета = СуммаДокумента * Курс / Кратность
Если в системе для используемой валюты значение реквизита Кратность или сам Курс не заполнены, равны нулю или содержат пустую ссылку, операция деления вызывает исключение на уровне платформы. Поскольку в типовых механизмах проверка деления на ноль часто не вынесена в предварительный диалог ОбработкаПроверкиЗаполнения, транзакция проведения аварийно прерывается системным сообщением.
Выясним причину, из-за которой корректные ранее данные внезапно приводят к ошибке. Практика показывает несколько ключевых источников сбоя:
КурсыВалют с нулевыми полями курса и кратности.Валюты могут появиться два элемента с одинаковым наименованием (например, два рубля), при этом для одного из них курс и кратность не ведутся.Рассмотрим подробнее способ быстрой локализации проблемы через поиск пустых записей. Для этого выполним запрос в консоли запросов к срезу последних регистра курсов на дату проблемного документа:
ВЫБРАТЬ
Период,
Валюта,
Курс,
Кратность
ИЗ
РегистрСведений.КурсыВалют.СрезПоследних(&ДатаДокумента, )
ГДЕ
Курс <= 0
ИЛИ Кратность <= 0
ИЛИ Валюта ЕСТЬ NULL
ИЛИ Валюта = ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)
Если консоль недоступна, откроем регистр сведений КурсыВалют напрямую через меню Все функции (или Функции для технического специалиста) и установим сортировку по возрастанию колонок Курс и Кратность. При обнаружении записей с пустыми или нулевыми значениями их необходимо удалить либо вручную установить значение Курс = 1 и Кратность = 1 (для национальной валюты).
Посмотрим на пример, когда в справочнике Валюты присутствуют две записи с кодом рубля. Документ кассы может ссылаться на одну позицию, а константа валюты учета — на другую. Разберем по шагам алгоритм исправления:
Валюты.В ряде случаев в самом документе ПКО присутствуют скрытые реквизиты пересчета (например, коэффициенты или кратность), которые заполняются при создании документа на основании выемки из ККМ. Если документ был создан в момент, когда курс был пуст, эти параметры зафиксировались внутри объекта со значением 0.
Для исправления ситуации выполним следующие действия:
Валюты, поочередно откроем используемые валюты и нажмем Записать и закрыть. Это запустит типовые обработчики проверки и перезапишет служебные регистры.Приходный кассовый ордер за проблемную дату и проверим правильность заполнения реквизитов пересчета курсов.Если записи регистра исправлены, но документ по-прежнему выдает ошибку «Деление на 0», дело в кэшировании данных. Выполним перезапуск клиентского сеанса 1С. В случае клиент-серверного варианта базы данных перезапустим службу кластера серверов 1С:Предприятия (ragent), чтобы принудительно очистить кэш модулей с повторным использованием возвращаемых значений.