Каждый ПИОТ для своей ККТ работает на разных портах и возвращает результат проверки.
Вводные данные
ТС Пиот используем от производителя ЕСП
ККТ используем Атол и Штрих
Официальная позиция от ЕСП

Этап 1 Регистрация ККТ В ЕСМ
Первый технический вопрос, как появляются в списке ККТ

С появлением ПИОТ производители ККТ сделали агента ДККТ, которая слушает 4042 порт и обрабатывает входящие соединения, для дальнейшей обработки, на внутренним gRPC сервере ККТ.
Для получения списка ЕСМ запрашивает информацию об устройстве и ее отдает.
Пример из лога:
2026.05.22 22:42:06.851 INF Запросим инфо об устройстве
2026.05.22 22:42:06.852 INF deviceConfig &{{7380440902442xxx fn_v_1_2 2026-11-23 00:00:00 3439 49802 13724} {0006965453000xxx 00108727311xxx 7743793xxx АТОЛ 27Ф 5.17.0 АТОЛ 10.10.8.24 АТОЛ 2026-05-22 22:42:05} 1} err <nil>
Теперь разберемся, как запускается ДККТ у каждого производителя.
Небольшое отклонение от курса, я не нашел возможности изменить порт ДККТ, возможно, производители негласно договорились, что он 4042, это будет являться основным камнем преткновения в дальнейшем.
ККТ производитель АТОЛ, драйвер KKT10-10.10.8.23
С установкой драйвера устанавливается служба ATOL: Fptr grpc service
При старте она занимает на всех интерфейсах порт 4042
C:\Windows\system32>netstat -ano | findstr 4042
TCP 0.0.0.0:4042 0.0.0.0:0 LISTENING 10144
И пока служба жива, порт занят
ККТ производитель Штрих, драйвер DrvFR_5.25_2142 производитель ТоргБаланс
У штриха нет отдельной службы, порт занимается при первом обращении к драйверу и живет до тех пор, пока драйвер активен (это второй камень преткновения, но об этом позже, для регистрации это не имеет никакого значения).
Как только мы запустили Тест драйвер(DrvFRTst.exe), у нас занялся порт.
Как происходит инициализация драйвера в 1С, описано ниже, как дойдем до 1С.
C:\Windows\system32>netstat -ano | findstr 4042
TCP 127.0.0.1:4042 0.0.0.0:0 LISTENING 8756
Теперь для регистрации в Тест драйвере должны быть установлена связь и с оборудованием, и тогда ЕСМ по gRPC сможет получить информацию.
Вывод
Сначала запускаем службу Атол и регистрируем Атол.
После отключаем службу Атол и запускаем Тест драйвер и регистрируем ШТРИХ.
Как происходит регистрация, есть много информации, дублировать не вижу смысла, при двух ККТ должна получиться картина

Один оркестратор – служба для управления службами ESM: Control Module.
ESM: Control Module – две службы, для каждого ККТ в имени службы заложен серийный номер.
Пример
esm-cm-045372000208xxxx
На данном этапе запустить одновременно у нас две службы не получится, но они зарегистрированы, для каждого ККТ получена собственная лицензия, ее необходимо предварительно приобрести у ЕСП для каждого ККТ.
Этап 2. Настройка служб ESM: Control Module
Исполняемый файл службы "C:\Program Files\ESP\ESM\bin\controlmodule.exe" --id 045372000208xxxx --port 50402 --soft-port 0
Мы видим, что службу можно запустить на разных портах, каждая следующая сама регистрируется последовательно на порт 50401, 50402.
Но на данном этапе мы все равно не можем их одновременно запустить, разбираемся дальше, почему.
Проверяем, что запускает служба 2160 – это пид службы на данный момент
netstat -ano | findstr 2160
TCP 0.0.0.0:50402 0.0.0.0:0 LISTENING 2160
TCP 0.0.0.0:51401 0.0.0.0:0 LISTENING 2160
И видим, что помимо 50402, которая указана, служба еще открывает 51401 для проверки марок из приложений, в том числе 1С как раз используется именно внешний порт.
У нас первая задача изменить внешний порт, да, и это возможно, спасибо разработчикам ЕСП.
Настройки хранятся C:\ProgramData\ESP\ESM\um в файлах с номерами ККТ.
Пример config_045372000208xxxx.yml
Нас интересует секция
soft:
swaggerPath: ""
httpsPort: 51401
lastkey: ""
Для одной из служб меняем порт на другой пример 51402, но это надо запомнить и настроить в дальнейшем в 1С, чтобы при обращении к ККТ 045372000208xxxx проверка проходила по порту 51402.
На данном этапе можно запустить обе службы для теста.

Мы видим, что обе службы запущены и не конфликтуют.
Теперь нам нужно разобраться, как все же служба получает информацию о физической ККТ.
Снова смотрим конфиг конфигурации
dkkt:
port: 4042
url: 127.0.0.1
Вот второй ключевой момент: если мы в Штрих ничего не можем сделать, т.к. при первом обращении к драйверу у нас происходит открытие порта 4042 на 127.0.0.1, то с Атолл картина немного другая, занимает порт 4042 на всех интерфейсах и согласно документации стека протокола Windows (WinSock) и алгоритму Best Match, если у нас занят сокет на одном из интерфейсов, и мы занимаем сокет на всех, то служба займет только на имеющихся и запустится, конфликта не будет.
Следствие предыдущего абзаца - нам нужно сначала запустить драйвер, а после службу, тогда для Атола настраиваем url с сетевым адресом своего ПК у нас 192.168.0.2 как пример.
И тогда служба Есм для Атола будет опрашивать информацию о ККТ с интерфейса 192.168.0.2, а Штрих с 127.0.0.1.
На данном этапе у нас корректно отправляются запросы по каждому ТС ПИОТ.
|
Служба |
Внутренний gRPC порт (связь с драйвером ККТ) |
Внешний HTTP порт (для 1С) |
Назначение |
|
Атол |
4042 (через 192.168.0.2) |
51402 (меняем в конфиге) |
Прием запросов на проверку марок от 1С |
|
Штрих |
4042 (через 127.0.0.1) |
51401 |
Прием запросов на проверку марок от 1С |
Этап 3. Настройка в 1С
Первым делом отключаем службу Атола (ATOL: Fptr grpc service) из автозапуска в службах.
Как происходит открытие порта 4042 из 1С.
ОбъектДрайвера = Ждать ПодключаемоеОборудованиеДрайверКлиент.ОбъектДрайвераАсинх(ПараметрыПодключения); // Тут мы получаем драйвер ККТ Штрих, если в параметры передали информацию о штрихе
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьРевизиюИнтерфейсаАсинх(); и вот тут мы обращаемся к драйверу и у нас сразу запускается сокет 4042 на 127.0.0.1, владельцем процесса оказывается сама 1С. Одно из главных ограничений то, что закрыть мы его не можем, разработчики драйвера не позаботились, хотя было бы гораздо проще, если бы метод существовал, но имеем что имеем.
Дальше запускаем службу ATOL: Fptr grpc service, для этого я сделал отдельную службу, которая умеет по REST запускать службу Атол и переключать службы ESM, переключение нужно, если у нас есть два ККТ Атол, но это немного другая история и если кому нужна будет служба, которая умеет управлять включением и отключением служб ЕСМ по Rest, напишите в комментариях.
И теперь остается после запуска 1С остановить службу Атол, инициализировать драйвер и запустить службу Атол. Это уже решается совсем несложно, ну и, естественно, настроить, что активный ККТ проверял именно свой ПИОТ, я делал для конфигурации 1С:Касса, расширение для работы с двумя ККТ и двумя ПИОТ, в рамках доработки 1С кода не так много, и технических сложностей уже нет. Если статья понравилась и нужно подробнее описать в 1С, то обязательно сделаю.
Итог

Вступайте в нашу телеграмм-группу Инфостарт