Почему различаются суммы в ПКО и в товарном чеке и как решить проблему округления копеек?

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

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

В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем технические нюансы взаимодействия «1С» с онлайн-кассами (ККТ) и рассмотрим практические способы ее решения.

Выясняем причину: жесткий контроль ККТ и «правило 1 копейки»

Основным источником проблемы является так называемое «Правило 1 копейки», актуальность которого многократно возросла с переходом на онлайн-кассы по стандарту 54-ФЗ. Современные фискальные накопители и кассовые аппараты жестко контролируют математическое равенство в каждой строке чека:

Количество * Цена со скидкой = Сумма строки

Если в вашей «1С» расчет скидок или распределение общей суммы оплаты по позициям выполняется программно, на кассу могут отправляться дробные числа с большим количеством знаков после запятой. ККТ округляет их по своим внутренним математическим алгоритмам. В результате итоговая сумма, посчитанная кассой, начинает отличаться от суммы документа ПКО в «1С».

Выделим три основные технические причины, по которым плывут копейки:

  1. Разные механизмы округления в «1С» и ККТ. В «1С» округление может происходить по арифметическим правилам, а в драйвере кассы — путем отсечения знаков или по специфическому алгоритму производителя оборудования (например, АТОЛ или Штрих-М).
  2. Аппаратное округление чека при наличном расчете. Во многих торговых точках для удобства расчетов наличными настраивают округление итоговой суммы до 50 копеек или до целого рубля. Если эта скидка-округление применяется только на кассе (в драйвере ККТ), то физический чек уменьшается, а в «1С» документ ПКО проводится на исходную сумму без учета округления.
  3. Ошибки в кастомных доработках. Если ваша конфигурация «1С» доработана, то при формировании XML-пакета для передачи на кассу программисты могли допустить ошибку при расчете скидок или распределении авансов по товарным позициям.

Проанализируем доступные варианты решения этой проблемы.

Способ 1. Обновление драйвера фискального регистратора

Первое, с чего следует начать, — это обновление интеграционной компоненты и драйверов ККТ. В старых версиях драйверов существовали жесткие ограничения на количество знаков после запятой при передаче цен и скидок. В современных версиях драйверов ККТ (например, АТОЛ 10.х) реализована поддержка более точных вычислений, что позволяет минимизировать погрешности округления при передаче данных из «1С».

Способ 2. Округление суммы до целого числа в документе-основании

Если расхождения вызваны округлением копеек при наличном расчете, наиболее правильным решением будет перенос логики округления целиком на сторону «1С». Не позволяйте кассовому аппарату принимать решения об округлении самостоятельно.

Рассмотрим, как настроить этот процесс:

  1. В документе реализации («Реализация товаров и услуг» или «Чек ККМ») настройте автоматическое округление суммы в пользу покупателя до целого рубля или до 50 копеек.
  2. В этом случае «1С» сразу запишет округленную сумму в документ ПКО.
  3. На кассу будет отправлена уже готовая, чистая сумма без дробных копеек, и кассе не придется ничего округлять самостоятельно.

Способ 3. Программная корректировка расхождений (решение для разработчиков)

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

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


// Пример распределения погрешности округления на самую дорогую позицию
Процедура СкорректироватьПогрешностьОкругления(ТаблицаТоваров, ИсходнаяСуммаДокумента)
    
    ТекущаяСуммаЧека = 0;
    МаксЦена = 0;
    СтрокаСМаксЦеной = Неопределено;
    
    // Считаем текущую сумму по строкам и находим самую дорогую позицию
    Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
        СтрокаТовара.Сумма = Округлить(СтрокаТовара.Количество * СтрокаТовара.Цена, 2);
        ТекущаяСуммаЧека = ТекущаяСуммаЧека + СтрокаТовара.Сумма;
        
        Если СтрокаТовара.Цена > МаксЦена Тогда
            МаксЦена = СтрокаТовара.Цена;
            СтрокаСМаксЦеной = СтрокаТовара;
        КонецЕсли;
    КонецЦикла;
    
    // Вычисляем разницу между ПКО и суммой строк
    Разница = ИсходнаяСуммаДокумента - ТекущаяСуммаЧека;
    
    // Если есть расхождение (например, в несколько копеек), корректируем дорогую позицию
    Если Разница <> 0 И СтрокаСМаксЦеной <> Неопределено Тогда
        СтрокаСМаксЦеной.Сумма = СтрокаСМаксЦеной.Сумма + Разница;
        // Пересчитываем цену для ККТ, чтобы сошлось равенство Цена * Кол-во = Сумма
        СтрокаСМаксЦеной.Цена = СтрокаСМаксЦеной.Сумма / СтрокаСМаксЦеной.Количество;
    КонецЕсли;

КонецПроцедуры

Использование этого алгоритма при подготовке XML-пакета для БПО (Библиотеки подключаемого оборудования) гарантирует, что итоговая сумма по чеку на ККТ всегда сойдется с суммой документа ПКО в вашей информационной базе.

Способ 4. Проверка настроек аппаратного округления в ККТ

Если расхождения носят единичный характер, обязательно проверьте параметры самого кассового аппарата. Для этого:

  1. Откройте утилиту «Тест драйвера ККТ» (для АТОЛ) или аналогичную программу для вашего фискального регистратора.
  2. Перейдите в свойства ККТ и найдите таблицы параметров (обычно раздел «Параметры ККТ» -> «Работа с чеком» или «Округление»).
  3. Проверьте, не включена ли там опция автоматического округления чека при наличном расчете.
  4. Если округление включено на стороне кассы, рекомендуется его отключить, чтобы избежать расхождений с данными в «1С». Все скидки и округления должны управляться исключительно учетной системой.

Таким образом, мы выяснили причины возникновения расхождений между ПКО и товарным чеком. Для долгосрочного решения проблемы рекомендуется отключить аппаратное округление в кассе, обновить драйверы и настроить округление цен непосредственно в документах «1С» до момента передачи данных на печать.

← На главную