Как устранить расхождение на копейки в чеках при использовании скидок в 1С:Управление торговлей 10.3 и ККМ АТОЛ 91Ф?

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

Проблема расхождения сумм в чеках на копейки — это классическая ситуация, с которой сталкиваются специалисты при автоматизации розничной торговли. Особенно остро этот вопрос стоит в связке «1С:Управление торговлей 10.3» и современных онлайн-касс, таких как АТОЛ 91Ф. Конфликт возникает из-за разницы в алгоритмах расчета итоговой суммы: программа 1С сначала вычисляет общую сумму и вычитает из неё скидку, тогда как кассовый аппарат, согласно требованиям законодательства, должен оперировать ценой за единицу товара уже с учетом всех примененных скидок.

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

Причина возникновения расхождений: математика и закон

Для начала выясним причину конфликта. Разберем ситуацию на примере. Допустим, мы продаем 3 единицы товара по цене 100 рублей за штуку. Клиенту предоставляется суммовая скидка в 1 рубль на всю позицию.

Логика 1С:Управление торговлей 10.3:
Программа считает так: (100 руб. * 3 шт.) - 1 руб. = 299 руб. Итоговая сумма по строке в 1С зафиксирована как 299 рублей.

Логика онлайн-кассы (согласно ФФД 1.05 и выше):
Касса обязана получить цену за единицу товара. Она пытается вычислить её: 299 руб. / 3 шт. = 99,6666... руб. Однако формат фискальных данных (ФФД) не позволяет передать в кассу цену с бесконечным количеством знаков после запятой — допускается только два знака.

Если 1С передаст цену 99,66 руб., то касса посчитает итог: 99,66 * 3 = 298,98 руб. (расхождение -2 копейки).
Если 1С передаст цену 99,67 руб., касса посчитает: 99,67 * 3 = 299,01 руб. (расхождение +1 копейка).

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

Решение 1: Перевод АТОЛ 91Ф в режим фискального регистратора

Многие пользователи используют АТОЛ 91Ф («ньюджер») как автономную кассу. Однако для корректной работы с 1С крайне рекомендуется перевести аппарат в режим фискального регистратора (ФР). В этом режиме касса полностью подчиняется командам драйвера, приходящим из 1С, и не пытается применять собственную внутреннюю логику округления скидок.

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

  1. Подключим кассу к компьютеру по интерфейсу USB.
  2. Переведем аппарат в режим сопряжения с ПК через меню самой кассы.
  3. В 1С:УТ 10.3 откроем форму настройки торгового оборудования.
  4. Убедимся, что используется актуальный драйвер АТОЛ 10.х. Использование старых драйверов 8-й серии для новых моделей может приводить к ошибкам передачи скидок.
  5. Проверим лицензии устройства. Для работы некоторых режимов в современных прошивках АТОЛ требуется наличие соответствующих лицензий в ККТ (хотя для базового режима ФР через USB они обычно не требуются).

Решение 2: Программная корректировка — метод разбиения строк

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

В нашем примере с 3 штуками за 299 рублей программа должна отправить на кассу:

Рассмотрим пример кода, который можно внедрить в обработку обслуживания ККМ или общий модуль, отвечающий за фискализацию чека (например, ОбщиеМеханизмыФискальногоРегистратора):


// Пример логики распределения суммы по позициям
ВсегоКолво = СтрокаЧека.Количество;
ИтоговаяСуммаСоСкидкой = СтрокаЧека.Сумма;

// Вычисляем цену с округлением вниз
Цена1 = Окр(ИтоговаяСуммаСоСкидкой / ВсегоКолво, 2, РежимОкругления.Низ);
Сумма1 = Цена1 * ВсегоКолво;

Если Сумма1 < ИтоговаяСуммаСоСкидкой Тогда
    // Появилась разница в копейках
    РазницаКопеек = (ИтоговаяСуммаСоСкидкой - Сумма1) * 100;
    
    // Выделяем часть товара по цене на 1 копейку больше
    КолвоПоЦене2 = РазницаКопеек;
    КолвоПоЦене1 = ВсегоКолво - КолвоПоЦене2;
    Цена2 = Цена1 + 0.01;
    
    // Формируем две строки вместо одной
    ЗарегистрироватьПозицию(Товар, КолвоПоЦене1, Цена1);
    ЗарегистрироватьПозицию(Товар, КолвоПоЦене2, Цена2);
Иначе
    ЗарегистрироватьПозицию(Товар, ВсегоКолво, Цена1);
КонецЕсли;

Этот метод гарантирует, что сумма в кассе всегда будет соответствовать сумме в 1С до копейки, не нарушая при этом требований ФФД о передаче реальной цены за единицу.

Решение 3: Настройка параметров округления в драйвере АТОЛ

Иногда проблему можно решить «малой кровью», изменив параметры форматно-логического контроля в настройках самого оборудования. Проанализируем возможности драйвера АТОЛ 10-й версии:

  1. Зайдем в «Тест драйвера ККТ».
  2. Перейдем в раздел «Свойства» -> «Параметры ККТ».
  3. Найдем пункт, связанный с правилами округления сумм. В некоторых прошивках можно разрешить кассе самостоятельно корректировать копейки за счет скидки.
  4. Однако будьте осторожны: если касса сама «отбросит» копейку, она не совпадет с Z-отчетом и данными в учетной системе 1С, что создаст сложности для бухгалтерии при сверке эквайринга или наличной выручки.

Важные замечания по ФФД

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

Рекомендация: Настройте 1С таким образом, чтобы в драйвер передавалась чистая цена (сумма строки / количество) без явного указания скидки в параметрах команды регистрации позиции. Все информационные сообщения о скидках для покупателя лучше выводить в текстовые нефискальные строки чека.

Заключение

Мы рассмотрели основные причины расхождения копеек при работе 1С:УТ 10.3 с кассой АТОЛ 91Ф. Подведем итог: наиболее правильным и современным решением является программное разбиение строк в модуле фискализации 1С. Это позволит вам сохранить полную идентичность данных в учетной системе и фискальном накопителе, избежав ошибок при проверках налоговой инспекцией и упростив жизнь бухгалтеру при закрытии смен.

← На главную