Задержка при печати чека ККМ до 5 минут в 1С:Розница по сети: причины и решение

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

Каждый владелец розничного магазина или системный администратор рано или поздно сталкивается с ситуацией, когда работа на кассовом узле начинает замедляться. Но задержка при печати чека ККМ длительностью в 5–7 минут — это критическая проблема, которая полностью парализует продажи, собирает очереди и генерирует убытки. Особенно остро эта проблема проявляется на рабочих местах кассиров (РМК), которые подключаются к информационной базе по локальной сети через общий сетевой диск (протокол SMB).

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

Причина 1. Файловый режим работы СУБД 1С через сетевой диск (SMB/CIFS)

Если ваша база данных 1С находится в файловом режиме (файл 1Cv8.1CD лежит на одном из компьютеров, а остальные машины подключаются к нему через «сетевой диск»), то при пробитии чека вы неизбежно столкнетесь с проблемой сетевых блокировок.

Проанализируем, что происходит в системе в момент нажатия кнопки «Пробить чек»:

  1. 1С инициирует транзакцию проведения документа Документ.ЧекККМ.
  2. В файловом режиме работы блокируется не конкретная строка, а таблицы базы данных целиком.
  3. Поскольку файл базы физически расположен на другом компьютере, операционная система Windows использует протокол SMB для передачи данных. Этот протокол накладывает так называемые «опортунистические блокировки» (Oplocks).
  4. Если сеть загружена или имеет микро-сбои, пакеты задерживаются. Программа 1С на клиентском ПК ожидает ответа от дисковой подсистемы сервера. В это время блокировка с таблиц не снимается, из-за чего «зависают» все остальные кассы, пытающиеся обратиться к базе.

Как решить эту проблему?

Единственным надежным архитектурным решением здесь является полный отказ от использования сетевых дисков (файлового доступа по сети). Вместо этого мы рекомендуем выполнить публикацию информационной базы на веб-сервере:

  1. Установим на компьютер, где физически лежит база 1С, бесплатный веб-сервер (например, Apache 2.4 или встроенный в Windows IIS).
  2. Выполним публикацию базы 1С на веб-сервере через конфигуратор (меню «Администрирование» — «Публикация на веб-сервере»).
  3. Настроим подключение на двух других компьютерах через «Тонкий клиент» по протоколу HTTP/HTTPS, указав адрес публикации (например, http://192.168.1.100/roznica).

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

Причина 2. Поиск маркированной продукции «от сотворения мира»

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

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

Если база данных работает несколько лет, объем таблицы чеков становится колоссальным, и на файловой базе этот запрос просто «вешает» систему. Для решения этой проблемы выполним следующие действия:

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

  1. Перейдем в раздел «Продажи» — «Выторг» или воспользуемся обработкой «Архивация чеков ККМ».
  2. Установим период архивации (например, оставим чеки только за последние 3 месяца, а всё, что старше — заархивируем).
  3. Запустим процесс. Система объединит старые чеки в сводные документы, а сами детальные записи удалит, что кардинально уменьшит размер базы.

2. Программная корректировка (для специалистов)
Если у вас есть штатный программист 1С, мы можем ограничить глубину поиска маркированного товара в коде конфигурации. Рассмотрим пример модификации поискового запроса. Вместо сканирования всей таблицы документов, добавим жесткое ограничение по дате (например, проверять только за последние 30 дней):


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

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

Такая несложная доработка кода полностью убирает пятиминутные зависания при подготовке чека к печати.

Причина 3. Неверные настройки сетевого обмена и таймаутов ККТ

Когда ККТ «Штрих-М» или «Ритейл» подключена по протоколу TCP/IP, критически важную роль играют параметры связи, прописанные в самом драйвере кассы.

Часто в настройках сетевого подключения ККТ устанавливается слишком маленький параметр «Таймаут ожидания байта» (Byte Timeout). По умолчанию он может быть равен 100–150 мс. При отправке тяжелого чека по сети (особенно если параллельно идет сетевой обмен файловой базы 1С) пакеты данных ККТ задерживаются. Драйвер, не получив вовремя байт ответа от кассы, считает связь разорванной и уходит в бесконечный цикл повторных опросов устройства. Это визуально выглядит как глухое зависание 1С.

Выясним, как правильно настроить драйвер «Штрих-М»:

  1. Запустим утилиту «Тест драйвера ФР» (версии не ниже 4.14.792).
  2. Перейдем в «Свойства» — «Параметры связи».
  3. В поле «Таймаут» увеличим значение с стандартных 100–300 мс до 2000–3000 мс. Это даст системе запас времени на доставку пакетов по локальной сети.
  4. Проверим скорость обмена. Вопреки расхожему мнению, скорость 115200 бит/с в локальных сетях может приводить к коллизиям. Если связь нестабильна, попробуем снизить скорость обмена до 57600 или 38400 бит/с в настройках COM-порта (если используется переходник) или оптимизировать настройки сетевой платы кассы.
  5. Убедимся, что сетевые кассы подключены к роутеру по стабильному медному кабелю (Ethernet LAN), а не по беспроводной сети Wi-Fi, которая подвержена постоянным микро-потерям пакетов.

Причина 4. Влияние Защитника Windows (Windows Defender) и антивирусов

Еще один скрытый виновник зависаний при печати — встроенный антивирус Windows 10/11. В момент подготовки чека программа 1С активно создает временные файлы во временной директории пользователя (каталог Temp), а также обращается к логам и файлу базы данных 1Cv8.1CD через сеть.

Защитник Windows пытается сканировать каждый измененный или созданный временный файл «на лету», блокируя к нему доступ для платформы 1С. В условиях сетевой работы файловой базы это парализует дисковый ввод-вывод.

Что необходимо сделать:

  1. Откроем «Безопасность Windows» — «Защита от вирусов и угроз» — «Параметры защиты от вирусов и угроз» — «Исключения».
  2. Добавим в список исключений:
    • Каталог с базой данных 1С (как локальный путь, так и сетевой).
    • Процессы 1cv8.exe и 1cv8c.exe.
    • Папки кэша 1С (обычно находятся в %LocalAppData%\1C и %AppData%\1C).
  3. На сетевых компьютерах, где кассы подключены по IP, также добавим в исключения исполняемые файлы драйверов ККТ (библиотеки drvfr.dll, smscatest.exe и другие файлы из каталога установки драйвера «Штрих-М»).

Резюме и план действий

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

  1. Откажемся от сетевого диска. Опубликуем базу на веб-сервере Apache и переведем пользователей на тонкий клиент. Это устранит 90% сетевых задержек СУБД.
  2. Сделаем замер производительности в 1С. Если замер указывает на длительное выполнение запросов к таблице чеков — проведем свертку (архивацию) старых чеков ККМ и очистим базу от мусора через «Тестирование и исправление» в режиме конфигуратора (с обязательным флагом «Реиндексация таблиц»).
  3. Настроим параметры связи ККТ. Обновим драйвер «Штрих-М» до актуальной версии (не ниже 4.14.792), увеличим таймаут ожидания байта до 2000–3000 мс и заменим подключение по Wi-Fi на надежный кабель LAN.
  4. Настроим антивирус. Внесем платформу 1С и каталоги баз данных в исключения Защитника Windows.

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

← На главную