В работе розничных магазинов, особенно в сегменте одежды и обуви, часто возникает критическая ситуация: покупатель прикладывает карту к терминалу, деньги списываются, банк выдает слип-чек, но фискальный чек на кассовом аппарате (ККТ) не печатается. При этом программа 1С выдает ошибку о том, что «сумма оплаты превышает сумму чека», а позиции из формы Рабочего места кассира (РМК) бесследно исчезают или документ переходит в неопределенное состояние. Рассмотрим подробно, почему это происходит и как настроить систему, чтобы избежать подобных сбоев.
Основная причина проблемы кроется не в физической поломке оборудования, а в математических расхождениях при распределении скидок. Разберем ситуацию на примере. Допустим, в чеке есть несколько позиций с применением сложной маркетинговой акции. При расчете итоговой суммы со скидкой в 1С может получиться значение с длинной дробной частью (например, 333.3333...). Программа округляет это значение до двух знаков для передачи на банковский терминал. Однако при передаче данных в драйвер ККТ (кассового аппарата) срабатывают внутренние алгоритмы проверки прошивки кассы.
Если сумма всех строк (Цена × Количество) после применения скидок расходится с итоговой суммой, переданной от эквайрингового терминала хотя бы на 1 копейку, касса блокирует пробитие чека. Для системы 1С это выглядит как критическая ошибка фискализации. В некоторых релизах конфигурации 1С:Розница (особенно в отраслевых решениях для одежды и обуви) алгоритм обработки ошибок настроен так, что при неудаче фискализации табличная часть может очищаться, либо чек «зависает», оставляя кассира в недоумении.
Самый эффективный способ борьбы с расхождениями в копейках — это правильная настройка взаимодействия 1С с драйвером кассы. Рассмотрим, как это сделать:
Выясним причину, почему это помогает. Смысл этого режима заключается в том, что если система видит невозможность разделить сумму на количество без остатка, драйвер автоматически подберет такие комбинации строк, чтобы общая сумма чека в точности совпала с итогом. Не удивляйтесь, если в бумажном чеке одна позиция (например, 3 пары носков) разобьется на две строки: 2 шт. по одной цене и 1 шт. по цене, отличающейся на копейку. Это абсолютно законно и позволяет фискализировать чек без ошибок.
Чтобы минимизировать работу ФЛК, проанализируем настройки маркетинга. Часто проблемы возникают из-за того, что скидки рассчитываются «слишком точно».
Рассмотрим по шагам настройку округления:
Если итоговая сумма чека всегда будет целым числом, вероятность возникновения конфликта «лишней копейки» между банковским терминалом и кассовым аппаратом сводится к минимуму. Это особенно актуально для конфигураций Розница 8. Магазин одежды и обуви, где часто применяются сложные бонусные программы и распределенные скидки на комплекты.
Поскольку проблема часто наблюдается в магазинах одежды и обуви, проанализируем влияние маркировки. В современных реалиях (ФФД 1.2) кассовый аппарат проверяет код маркировки перед закрытием чека. Рассмотрим сценарий возникновения ошибки:
В этот момент возникает «зависание»: оплата по безналу уже прошла (слип есть), а фискальный чек не вышел. Программа может ошибочно посчитать сессию завершенной с ошибкой и очистить форму РМК. Чтобы этого не происходило, необходимо убедиться, что используется актуальная версия платформы (например, 8.3.22 и выше) и обновленные драйверы ККТ, которые умеют корректно обрабатывать статусы проверки маркировки до момента фактического списания средств с карты, если это позволяет эквайринговое решение.
Если позиции все же пропали из РМК, проанализируем, где их искать в базе данных. В 1С данные не исчезают бесследно. Посмотрим на следующие объекты:
Документ.ЧекККМ. Часто там можно увидеть конкретное описание программного исключения, например, Ошибка вызова метода ФР: Сумма оплат меньше суммы чека.Проанализируем ситуацию с программным обеспечением. Пользователи часто отмечают, что проблема обостряется после обновления конфигурации. Рассмотрим важные моменты:
Во-первых, при обновлении конфигурации Розница до версии 2.3.8 и выше, обязательно нужно обновлять и драйвер ККТ (например, Атол до версии 10.9.x и выше). Старые версии драйверов некорректно транслируют ошибки ФЛК в управляемые формы 1С.
Во-вторых, проверим настройки таймаутов. Если касса долго печатает слип-чек эквайринга, 1С может разорвать соединение по таймауту до того, как ККТ начнет печатать фискальную часть. Увеличьте таймаут в настройках подключаемого оборудования до 30-60 секунд.
Для программистов, желающих отловить момент «исчезновения» строк, рекомендуем обратить внимание на процедуру ПриЗавершенииПечатиЧека в модуле формы РМК. Посмотрим, как в коде обрабатывается отказ печати:
// Пример логики, которую стоит проверить в коде
Если РезультатПечати = Ложь Тогда
// Если здесь стоит ОчиститьТабличнуюЧасть(), это и есть причина пропажи позиций
// Необходимо заменить на логику сохранения чека в "Отложенные"
Предупреждение("Ошибка фискализации! Чек сохранен как отложенный.");
КонецЕсли;
Подводя итог, можно сказать: чтобы позиции не пропадали, нужно синхронизировать алгоритмы округления 1С и ККТ через форматно-логический контроль и убедиться, что кассовая смена и драйверы находятся в актуальном состоянии. Это обеспечит стабильную работу магазина и избавит кассиров от необходимости вручную делать возвраты по терминалу при каждой ошибке печати чека.