Как исправить ошибку Деление на 0 при проведении ПКО в 1С:Управление торговлей

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

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

Механизм возникновения ошибки в типовой конфигурации

Проанализируем ситуацию с точки зрения программных алгоритмов конфигурации 1С:Управление торговлей. При проведении кассовых документов программа выполняет расчет и фиксацию сумм не только в валюте самого платежа, но и в базовых валютах учета (валюта управленческого и валюта регламентированного учета). Пересчет выполняется по формуле:

СуммаВВалютеУчета = СуммаДокумента * Курс / Кратность

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

Причины сбоя: где искать проблему

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

  1. Повреждение регистра «Курсы валют» после сбоев и тестирования: Аварийное отключение питания, некорректная перезагрузка сервера или процедура «Тестирование и исправление» (ТИИ) со включенной опцией создания объектов при наличии битых ссылок могут сформировать пустую запись в регистре сведений КурсыВалют с нулевыми полями курса и кратности.
  2. Дублирование валют: В результате некорректного переноса данных или синхронизации в справочнике Валюты могут появиться два элемента с одинаковым наименованием (например, два рубля), при этом для одного из них курс и кратность не ведутся.
  3. Несоответствие валюты кассы ККМ и кассы предприятия: Если в кассе ККМ или кассе организации очистился реквизит валюты либо указана ссылка на неиспользуемую валюту без истории котировок, система запрашивает курс для пустого значения.
  4. Зависание кэша платформы: При расчете курсов активно задействованы модули повторного использования. Если запись в регистре уже исправлена, сервер 1С может продолжать использовать устаревшие закэшированные нулевые значения.

Шаг 1. Диагностика регистра сведений «Курсы валют»

Рассмотрим подробнее способ быстрой локализации проблемы через поиск пустых записей. Для этого выполним запрос в консоли запросов к срезу последних регистра курсов на дату проблемного документа:


ВЫБРАТЬ
    Период,
    Валюта,
    Курс,
    Кратность
ИЗ
    РегистрСведений.КурсыВалют.СрезПоследних(&ДатаДокумента, )
ГДЕ
    Курс <= 0
    ИЛИ Кратность <= 0
    ИЛИ Валюта ЕСТЬ NULL
    ИЛИ Валюта = ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)

Если консоль недоступна, откроем регистр сведений КурсыВалют напрямую через меню Все функции (или Функции для технического специалиста) и установим сортировку по возрастанию колонок Курс и Кратность. При обнаружении записей с пустыми или нулевыми значениями их необходимо удалить либо вручную установить значение Курс = 1 и Кратность = 1 (для национальной валюты).

Шаг 2. Устранение дубликатов валюты

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

  1. Перейдем в раздел НСИ и администрирование → Обслуживание → Корректировка данных.
  2. Откроем сервис Поиск и удаление дублей.
  3. В качестве области поиска выберем справочник Валюты.
  4. Сравним найденные элементы: оригинал должен быть указан в константах учета и иметь непрерывную историю курсов.
  5. Выполним объединение дублей, чтобы все ссылки в кассах и документах перенаправились на рабочий элемент.

Шаг 3. Перезапись валют и обновление скрытых реквизитов документов

В ряде случаев в самом документе ПКО присутствуют скрытые реквизиты пересчета (например, коэффициенты или кратность), которые заполняются при создании документа на основании выемки из ККМ. Если документ был создан в момент, когда курс был пуст, эти параметры зафиксировались внутри объекта со значением 0.

Для исправления ситуации выполним следующие действия:

  1. Откроем справочник Валюты, поочередно откроем используемые валюты и нажмем Записать и закрыть. Это запустит типовые обработчики проверки и перезапишет служебные регистры.
  2. В проблемном документе ПКО изменим дату на секунду вперед или назад, перевыберем валюту/кассу и перезаполним сумму, после чего нажмем Провести.
  3. Если документов много, воспользуемся обработкой Групповое изменение реквизитов, выберем документы Приходный кассовый ордер за проблемную дату и проверим правильность заполнения реквизитов пересчета курсов.

Шаг 4. Очистка кэша и перезапуск служб

Если записи регистра исправлены, но документ по-прежнему выдает ошибку «Деление на 0», дело в кэшировании данных. Выполним перезапуск клиентского сеанса 1С. В случае клиент-серверного варианта базы данных перезапустим службу кластера серверов 1С:Предприятия (ragent), чтобы принудительно очистить кэш модулей с повторным использованием возвращаемых значений.

← На главную