Как устранить зависания и долгий отклик при пробитии чеков с маркированным табаком в 1С:Розница?

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

При переходе на обязательный учет маркированной продукции (в частности, табачных изделий через МОТП) многие розничные магазины столкнулись с неприятной технической проблемой. В момент пробития чека — сразу после подтверждения оплаты покупателем — программа 1С:Розница зависает на длительное время (от 15 секунд до нескольких минут). При этом наблюдается интенсивный дисковый обмен (I/O) с базой данных, нагружающий систему на 100%. Если же опцию ведения учета табачной продукции отключить, чеки начинают пробиваться мгновенно.

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

Причина 1: Ошибка платформенных запросов в конфигурациях 1С:Розница (линейка 2.3.4.х)

Рассмотрим природу самого первого сбоя, с которым массово столкнулись пользователи. При активированной интеграции с МОТП и оформлении документа Чек ККМ программа осуществляет проверку статусов кодов маркировки и фиксирует их в информационной базе. В релизах линейки 2.3.4 разработчиками были допущены неоптимальные алгоритмы запросов, которые при проведении чека на файловых базах данных приводили к лавинообразному росту дисковых операций.

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

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

Причина 2: Избыточный рост справочника «Штрихкоды упаковок»

Если патчи установлены, база обновлена, но чеки все равно бьются медленно, проанализируем накопительный эффект базы данных. Каждый уникальный код маркировки, отсканированный на кассе, записывается системой в справочник Штрихкоды упаковок (в некоторых версиях — ШтрихкодыУпаковокТоваров). За несколько месяцев активных продаж табака база накапливает сотни тысяч записей. При проведении документа система выполняет метод Объект.Движения.Записать(), проверяя уникальность и сопоставляя коды по всей таблице справочника, что вызывает колоссальные задержки.

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

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

// Пример обработки для удаления устаревших записей штрихкодов упаковок
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Штрихкоды.Ссылка КАК Ссылка
    |ИЗ
    |	Справочник.ШтрихкодыУпаковокТоваров КАК Штрихкоды
    |ГДЕ
    |	Штрихкоды.ДатаСоздания < &ГраничнаяДата";

// Установим границу удаления, например, старше 3 месяцев
Запрос.УстановитьПараметр("ГраничнаяДата", ДобавитьМесяц(ТекущаяДата(), -3));
РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Попытка
        ОбъектШтрихкода = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
        ОбъектШтрихкода.Удалить();
    Исключение
        ЗаписьЖурналаРегистрации("ОчисткаШтрихкодов", УровеньЖурналаРегистрации.Предупреждение, , , "Не удалось удалить код: " + ОписаниеОшибки());
    КонецПопытки;
КонецЦикла;
  1. После удаления записей обязательно запустим конфигуратор, перейдем в меню Администрирование -> Тестирование и исправление.... Выберем пункты «Реиндексация таблиц информационной базы» и «Сжатие таблиц информационной базы». Это уменьшит физический размер файлов на SSD и ускорит индексный поиск.

Причина 3: Использование устаревшего интерфейса РМК при работе через веб-сервер

Если информационная база опубликована на веб-сервере (Apache или IIS), а рабочие места кассиров подключены через тонкий клиент, зависания могут быть связаны с использованием старого интерфейса РМК (Регистратора расчетно-кассовых операций). При сканировании маркированной продукции в старом РМК веб-клиент отправляет множество синхронных запросов к серверу для валидации каждой позиции, вызывая зависание интерфейса.

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

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

Причина 4: Влияние разрешительного режима и настроек драйвера ККТ

Современные требования к продаже маркированных товаров включают обязательную проверку кодов в режиме онлайн через систему ГИС МТ («Честный Знак») перед непосредственной печатью чека на кассовом аппарате. Если у вас установлены ККТ Штрих-М или Атол, задержка может возникать на этапе связи кассового драйвера с серверами проверок.

Проанализируем шаги по устранению задержек на уровне оборудования:

  1. Обновление драйверов ККТ. Для аппаратов Штрих-М обновим локальный драйвер до актуальной версии (не ниже 5.16/5.17), а для Атол — до версии 10.х. Устаревшие версии драйверов (например, Штрих 4.15) некорректно обрабатывают таймауты запросов к серверам маркировки ИС МП.
  2. Прошивка кассового аппарата. Убедимся, что ККТ прошита под актуальные требования ФФД 1.2, которые оптимизируют передачу тегов маркировки (в частности, тега 1162).
  3. Настройка таймаутов проверки. В параметрах интеграции с ИС МП (в самой 1С) уменьшим время ожидания ответа от сервера ГИС МТ. Если таймаут по умолчанию составляет 10-15 секунд, при проблемах со связью касса будет простаивать это время на каждом чеке. Оптимально установить таймаут в пределах 1.5–3 секунд.
  4. Офлайн-лимиты. Настроим кассовое ПО на работу с локальной базой проверок кодов маркировки (если это разрешено правилами товарной группы для вашей торговой точки), чтобы минимизировать сетевые задержки при пробитии.

Соблюдение этих рекомендаций, своевременная чистка базы данных от старых кодов маркировки и использование актуальных драйверов касс позволят свести время печати чека с табачной продукцией к стандартным 1–2 секундам.

← На главную