При переходе на обязательный учет маркированной продукции (в частности, табачных изделий через МОТП) многие розничные магазины столкнулись с неприятной технической проблемой. В момент пробития чека — сразу после подтверждения оплаты покупателем — программа 1С:Розница зависает на длительное время (от 15 секунд до нескольких минут). При этом наблюдается интенсивный дисковый обмен (I/O) с базой данных, нагружающий систему на 100%. Если же опцию ведения учета табачной продукции отключить, чеки начинают пробиваться мгновенно.
В этой статье мы подробно разберем причины возникновения таких зависаний и рассмотрим комплексные методы оптимизации работы базы данных 1С и кассового оборудования (ККТ компаний «Штрих-М» и «Атол»), позволяющие полностью устранить проблему медленного закрытия чеков.
Рассмотрим природу самого первого сбоя, с которым массово столкнулись пользователи. При активированной интеграции с МОТП и оформлении документа Чек ККМ программа осуществляет проверку статусов кодов маркировки и фиксирует их в информационной базе. В релизах линейки 2.3.4 разработчиками были допущены неоптимальные алгоритмы запросов, которые при проведении чека на файловых базах данных приводили к лавинообразному росту дисковых операций.
Для решения этой проблемы фирма 1С выпустила официальное исправление (патч). Разберем по шагам, как исправить эту ошибку:
EF_00_00300787 с описанием «РМК: Долгое пробитие чека ККМ».Если патчи установлены, база обновлена, но чеки все равно бьются медленно, проанализируем накопительный эффект базы данных. Каждый уникальный код маркировки, отсканированный на кассе, записывается системой в справочник Штрихкоды упаковок (в некоторых версиях — ШтрихкодыУпаковокТоваров). За несколько месяцев активных продаж табака база накапливает сотни тысяч записей. При проведении документа система выполняет метод Объект.Движения.Записать(), проверяя уникальность и сопоставляя коды по всей таблице справочника, что вызывает колоссальные задержки.
Для оптимизации этой структуры выполним следующие действия:
// Пример обработки для удаления устаревших записей штрихкодов упаковок
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Штрихкоды.Ссылка КАК Ссылка
|ИЗ
| Справочник.ШтрихкодыУпаковокТоваров КАК Штрихкоды
|ГДЕ
| Штрихкоды.ДатаСоздания < &ГраничнаяДата";
// Установим границу удаления, например, старше 3 месяцев
Запрос.УстановитьПараметр("ГраничнаяДата", ДобавитьМесяц(ТекущаяДата(), -3));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Попытка
ОбъектШтрихкода = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
ОбъектШтрихкода.Удалить();
Исключение
ЗаписьЖурналаРегистрации("ОчисткаШтрихкодов", УровеньЖурналаРегистрации.Предупреждение, , , "Не удалось удалить код: " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
Если информационная база опубликована на веб-сервере (Apache или IIS), а рабочие места кассиров подключены через тонкий клиент, зависания могут быть связаны с использованием старого интерфейса РМК (Регистратора расчетно-кассовых операций). При сканировании маркированной продукции в старом РМК веб-клиент отправляет множество синхронных запросов к серверу для валидации каждой позиции, вызывая зависание интерфейса.
Для исправления этой ситуации выполним переход на новые стандарты работы:
Современные требования к продаже маркированных товаров включают обязательную проверку кодов в режиме онлайн через систему ГИС МТ («Честный Знак») перед непосредственной печатью чека на кассовом аппарате. Если у вас установлены ККТ Штрих-М или Атол, задержка может возникать на этапе связи кассового драйвера с серверами проверок.
Проанализируем шаги по устранению задержек на уровне оборудования:
Соблюдение этих рекомендаций, своевременная чистка базы данных от старых кодов маркировки и использование актуальных драйверов касс позволят свести время печати чека с табачной продукцией к стандартным 1–2 секундам.