Почему пропадают позиции из чека после оплаты картой в 1С:Розница и как это исправить?

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

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

Проанализируем механику ошибки: конфликт округления

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

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

Решение №1: Настройка форматно-логического контроля (ФЛК)

Самый эффективный способ борьбы с расхождениями в копейках — это правильная настройка взаимодействия 1С с драйвером кассы. Рассмотрим, как это сделать:

  1. Перейдем в раздел Администрирование — Подключаемое оборудование.
  2. Выберем используемый экземпляр ККТ с передачей данных и нажмем кнопку Настроить.
  3. Найдем параметр Форматно-логический контроль (ФЛК).
  4. По умолчанию там может стоять значение «Не использовать» или «Выдавать ошибку». Нам необходимо установить значение «Разделять строки» (в некоторых драйверах может называться «Исправлять расхождения»).

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

Решение №2: Настройка правил округления в маркетинговых акциях

Чтобы минимизировать работу ФЛК, проанализируем настройки маркетинга. Часто проблемы возникают из-за того, что скидки рассчитываются «слишком точно».

Рассмотрим по шагам настройку округления:

  1. Перейдем в раздел Маркетинг — Скидки (наценки).
  2. Для каждой действующей акции проверим вкладку Округление.
  3. Рекомендуется устанавливать Округление чека в пользу покупателя до целого рубля.

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

Решение №3: Специфика маркировки (Честный ЗНАК)

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

  1. Кассир закрывает чек, выбирает безналичную оплату.
  2. 1С отправляет команду на терминал, клиент прикладывает карту, деньги списываются.
  3. 1С пытается пробить фискальный чек, но ККТ отправляет запрос в систему «Честный ЗНАК» для проверки кода маркировки одной из позиций.
  4. Если сервер маркировки возвращает ошибку (например, статус товара «не в обороте»), ККТ выдает ошибку фискализации.

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

Технические нюансы: поиск «пропавших» данных

Если позиции все же пропали из РМК, проанализируем, где их искать в базе данных. В 1С данные не исчезают бесследно. Посмотрим на следующие объекты:

Рекомендации по обновлению и драйверам

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

Во-первых, при обновлении конфигурации Розница до версии 2.3.8 и выше, обязательно нужно обновлять и драйвер ККТ (например, Атол до версии 10.9.x и выше). Старые версии драйверов некорректно транслируют ошибки ФЛК в управляемые формы 1С.

Во-вторых, проверим настройки таймаутов. Если касса долго печатает слип-чек эквайринга, 1С может разорвать соединение по таймауту до того, как ККТ начнет печатать фискальную часть. Увеличьте таймаут в настройках подключаемого оборудования до 30-60 секунд.

Для программистов, желающих отловить момент «исчезновения» строк, рекомендуем обратить внимание на процедуру ПриЗавершенииПечатиЧека в модуле формы РМК. Посмотрим, как в коде обрабатывается отказ печати:


// Пример логики, которую стоит проверить в коде
Если РезультатПечати = Ложь Тогда
    // Если здесь стоит ОчиститьТабличнуюЧасть(), это и есть причина пропажи позиций
    // Необходимо заменить на логику сохранения чека в "Отложенные"
    Предупреждение("Ошибка фискализации! Чек сохранен как отложенный.");
КонецЕсли;

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

← На главную