Касса долго проверяет марку: как изменить таймаут проверки КМ

Кассир сканирует код, касса думает и выдаёт отказ. Товар нормальный, интернет есть, но проверка не успела уложиться в отведённое время.

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

Два параметра и их значения по умолчанию

В модуле ЕСМ за это отвечают два таймаута.

ПараметрПо умолчаниюОграничение / рекомендация
cdnCodesCheckTimeout — время на проверку кода онлайн1500 мс (1,5 с)30 000 мс (30 с)
cdnHealthCheckTimeout — время на проверку доступности площадки2000 мс (2 с)10 000 мс (рекомендуемый)

Значения по умолчанию задаются онлайн-конфигурацией ЦРПТ, то есть приходят снаружи, а не зашиты в модуль.

Первый параметр — тот, что чаще всего и нужен. Полторы секунды на ответ — немного, если канал загружен или нестабилен.

Раздел «Маркировка» в «Тест драйвера ККТ» с полем «Таймаут проверки КМ»
Поле таймаута в «Тесте драйвера» относится к своему этапу проверки. Его нельзя отождествлять с cdnCodesCheckTimeout ЕСМ без сопоставления методов и документации.

Второй отвечает за проверку самих площадок. Модуль перед обращением убеждается, что узел жив; если этот шаг не успевает, он переходит к следующему узлу, и на это тоже уходит время.

Сразу о плате за увеличение

Увеличение таймаута не ускоряет проверку. Оно даёт ей больше времени на то, чтобы завершиться.

Измерить до измененияПроверить после
Время сканирования, начала запроса и ответа; код и узел отказаТе же действия и сопоставимая нагрузка; изменилось ли число таймаутов
Общий лимит кассового ПО и длительность онлайн-/офлайн-этапаКлиент не прекращает ожидание раньше ЕСМ
Полный объект текущих настроек без служебной обёрткиПрочитанные значения и контрольный запрос; HTTP 200 недостаточно

Для возврата используйте сохранённый полный объект настроек и тот же проверенный id. Конкретный метод чтения берите из API установленной версии: если по адресу работает PUT, из этого не следует, что там же есть GET. Если исходные значения не удалось получить, не выполняйте замену объекта наугад.

Подняв лимит, вы дадите системе больше времени — но и за 30 секунд ответ может не прийти. Проверьте также общий таймаут кассового ПО: оно может прервать операцию раньше ЕСМ.

Меняйте лимит по измерению. Сохраните время нескольких успешных и неудачных проверок и этап задержки. Значения 4000/3000 мс ниже — пример, а не подтверждённая настройка для большинства точек.

Перед запросом: сохраните текущие настройки

PUT заменяет настройки: пропущенные необязательные поля сбрасываются к значениям по умолчанию. Поэтому не отправляйте только два таймаута и не копируйте чужое значение allowRemoteConnection. Сохраните текущие значения полей настроек своего экземпляра в резервный файл, а для запроса подготовьте отдельный файл esm-settings.json в UTF-8. Состав допустимых полей сверяйте с API установленной версии ЕСМ; не отправляйте служебную обёртку ответа вместо объекта настроек.

В инструкции ЕСМ от 03.08.2026 перечислены allowRemoteConnection, обязательный gismtAddress, cdnCodesCheckTimeout и cdnHealthCheckTimeout. В рабочей копии сохраните текущее значение удалённого доступа и адрес своего контура; измените только таймауты, например на 4000 и 3000 мс. Если ваша версия поддерживает другие необязательные настройки, которые необходимо сохранить, включите и их по её документации. Если текущие значения неизвестны, сначала получите их через интерфейс или документированный API своей версии, а не подставляйте значения наугад.

Как изменить: Windows

Настройка меняется запросом к конкретному экземпляру. Сверьте его идентификатор по списку экземпляров и реквизитам ККТ; в описанной инструкции используется заводской номер.

Откройте PowerShell в каталоге подготовленного esm-settings.json. Введите идентификатор нужного экземпляра ЕСМ (в описанной инструкции он совпадает с заводским номером ККТ). Команда ниже отправляет файл целиком и не подставляет чужие настройки:

$instanceId = Read-Host 'Введите идентификатор экземпляра ЕСМ'
if ([string]::IsNullOrWhiteSpace($instanceId)) { throw 'Идентификатор не задан' }
$body = Get-Content -LiteralPath .\esm-settings.json -Raw -Encoding UTF8
$settings = $body | ConvertFrom-Json
if (-not $settings.gismtAddress) { throw 'Не задан gismtAddress' }
if ($settings.allowRemoteConnection -isnot [bool]) { throw 'Укажите текущее allowRemoteConnection: true или false' }
$escapedId = [uri]::EscapeDataString($instanceId)
$response = Invoke-WebRequest -Uri "http://127.0.0.1:51077/api/v1/settings/$escapedId" -Method Put -ContentType 'application/json' -Body ([Text.Encoding]::UTF8.GetBytes($body))
$response.StatusCode

Значения берутся из подготовленного файла. Перед отправкой проверьте, что изменены только нужные таймауты, а остальные разрешённые настройки сохранены. Команда сама не выставляет 4000/3000 и не включает удалённый доступ.

Осторожно с переносами строк. При копировании в PowerShell разрывы в неположенном месте ломают команду: интерпретатор принимает часть параметров за отдельную команду и возвращает ошибку «Некорректное тело запроса». Если запрос не отработал, первым делом проверьте, что он вставился одной конструкцией.

Как изменить: Linux

В Bash используйте подготовленный файл esm-settings.json. В примере проверяются идентификаторы из букв, цифр, дефиса и подчёркивания; для другого допустимого идентификатора нужно URL-кодирование по документации API.

read -r -p 'Идентификатор экземпляра ЕСМ: ' instance_id
if [[ "$instance_id" =~ ^[A-Za-z0-9_-]+$ ]]; then
  curl --fail-with-body --request PUT "http://127.0.0.1:51077/api/v1/settings/$instance_id" --header 'Content-Type: application/json' --data-binary @esm-settings.json --write-out '\nHTTP %{http_code}\n'
else
  printf '%s\n' 'Проверьте идентификатор; запрос не отправлен.'
fi

Если у вас накопитель МГМ

Для МГМ в подготовленном файле нужен адрес тестового контура. Ниже показано только поле объекта JSON, а не отдельная команда:

"gismtAddress": "https://cdn01.am.crptech.ru:19100"

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

Оговорка, о которой легко забыть

Запрос выполняется методом PUT, а PUT заменяет настройки целиком. Все необязательные параметры, которые вы не передали, сбрасываются к значениям по умолчанию.

Включение allowRemoteConnection:true меняет доступ с внешних IP, поэтому его нельзя добавлять просто как обязательную часть примера. Сохраняйте своё текущее значение. gismtAddress является обязательным полем, а не необязательной настройкой, которая просто сбросится при пропуске. Для рабочего ФН используется https://ts-reg.crpt.ru:19100, для МГМ — адрес тестового контура. После HTTP 200 проверьте значения в настройках и успешность проверки через кассовое ПО.

Что означают ответы

КодЧто произошло
200Настройки сохранены, тело ответа пустое
400Некорректное тело запроса или пустой идентификатор. Код 1025 внутри означает недопустимое значение параметра
500Внутренняя ошибка модуля

Пустой ответ при коде 200 — это норма, а не признак того, что запрос не сработал.

На смарт-терминалах Sigma проще

Там для этого есть интерфейс. В приложении ЕСМ рядом с полем «Таймаут проверки марки» находится кнопка «Настроить», значение меняется шагом в полсекунды.

Рекомендуемое время проверки там же и указано — 1,5 секунды, то есть то же самое значение по умолчанию.

Когда таймаут не поможет

Увеличение имеет смысл при подтверждённом недостатке времени. Даже постоянный таймаут может быть связан с задержкой, но сначала исключите неверный адрес, блокировку, лицензию и неготовый ЛМ. Сам факт редкого успеха или полного отказа причину не устанавливает.

  • Ошибка 514 — не работают оба пути проверки сразу, разбор здесь.
  • Закрытые адреса ЦРПТ на межсетевом экране. Сколько времени ни давай, до заблокированного узла запрос не дойдёт.
  • Параллельная проверка и в ОИСМ, и через ТС ПИоТ — она даёт плавающую ошибку 407, которая лечится не таймаутом, а последовательным порядком обращений.
  • Локальный модуль не инициализирован — офлайн-путь не работает, и вся нагрузка ложится на онлайн. Статус проверяется в самом ЛМ ЧЗ.

Частые вопросы

Где взять id? Прочитайте список экземпляров и сопоставьте его с реквизитами нужной ККТ. В инструкции id соответствует заводскому номеру, но перед PUT адресат должен быть проверен фактически.

Нужно ли перезапускать модуль после изменения? Нет, настройка применяется сразу.

Можно поставить сразу максимум — 30 секунд? Технически да, практически не стоит. Вы получите кассу, которая на каждом проблемном коде замирает на полминуты.

Изменится ли скорость офлайн-проверки? Эти параметры ограничивают сетевые обращения. Локальная проверка тоже занимает время; её длительность зависит от состояния ЛМ и компьютера, поэтому считать её мгновенной нельзя.

Настройка слетает после обновления модуля. Проверьте, не выполнялся ли повторно PUT-запрос без полного набора параметров — он сбрасывает всё, что в нём не указано.

Коротко

Сначала измерьте задержку и определите её этап. Затем сохраните полный объект настроек своего экземпляра, измените только нужные таймауты и проверьте результат. 30 000 мс для проверки кода — предел из инструкции; 10 000 мс для проверки доступности — рекомендация, а не заявленный жёсткий предел. Значения примера не являются универсальной настройкой.


Материал носит информационный характер. Сайт atoldriver.ru не является представительством компании АТОЛ или АО «ЕСП» и не оказывает услуг по обслуживанию оборудования.