Адаптация УТ 10.3 для работы с ТС ПиОТ (ESM): используем код из УПП1.3
Руководство по точечному внедрению проверки кодов маркировки через локальный ESM в УТ 10.3 без перехода на УТ 11.
1. Зачем это нужно
Руководство по точечному внедрению проверки кодов маркировки через локальный ESM в УТ 10.3 без перехода на УТ 11.
При розничной продаже маркированных товаров действует разрешительный режим: перед фискализацией код маркировки (КМ) должен быть проверен, а в чек ФФД 1.2 передаются идентификатор запроса и время (тег 1260).
Два основных пути проверки КМ:
| Путь | Кто проверяет | Куда ходит 1С |
|---|---|---|
| CDN (классический) | Облако ГИС МТ через CDN-площадки | ИнтерфейсИСМП.СокращеннаяИнформацияПоКМПриРозничнойПродаже |
| ПиОТ (локальный) | ESM на кассовом ПК | HTTP api/v1/codes/check через модули ИнтеграцияТСПИоТ* |
ПиОТ снижает зависимость от интернета: локальный модуль «Честный знак» (ЛМ ЧЗ) внутри ESM проверяет КМ даже при обрыве связи с ГИС МТ. Конфигурация УПП 1.3 (ветка с ПиОТ) содержит готовый блок. Типовая УТ 10.3 его не включает. Задача — точечно перенести блок ПиОТ, не ломая существующую розницу и CDN-fallback.
2. Основная идея адаптации
Что переносим:
- ~12 объектов метаданных ПиОТ (справочник, регистр, перечисление, формы).
- 6 общих модулей
ИнтеграцияТСПИоТ*. - Адаптацию имён API под модули УТ.
- Фасад проверки КМ в прикладном модуле.
Что НЕ переносим:
- Всю библиотеку ИСМП (~470 модулей).
- Документы опта ИСМП.
ШтрихкодированиеОбщегоНазначения*целиком.
Что НЕ перезаписываем:
- Доработанные формы розницы.
- Модуль
ЧекККМцеликом. - CDN-ветку.
Принципы:
- Точечный перенос, не объединение конфигураций.
- Хук в существующую цепочку фискализации (
ФискализироватьЧек), а не замена модуля документа. - CDN остаётся как вариант — если ПиОТ не настроен, поведение как раньше.
- Адаптация API — модули из УПП ссылаются на имена модулей УПП; в УТ их нужно заменить на аналоги.
- Сохранить доработки целевой конфигурации — особенно хранение и обработка штрихкодов маркировки.
3. Архитектура: как взаимодействуют компоненты
3.1. Общая схема на кассовом ПК
3.2. Роли компонентов
| Компонент | Роль |
|---|---|
| 1С (конфигурация) | Сканирование КМ, сбор позиций чека, HTTP-запрос к ESM, регистрация КМ в буфере ККТ, фискализация с тегами 1260 |
| ESM (ТС ПиОТ) | Локальный HTTP-сервис на кассе; проверяет КМ онлайн (ГИС МТ) или офлайн (через ЛМ ЧЗ); возвращает reqId, reqTimestamp, статус |
| ЛМ ЧЗ | Устанавливается отдельно; 1С к нему напрямую не ходит — только ESM использует ЛМ для офлайн-проверки |
| Драйвер ККТ (ATOL epf) | ЗапросКМ / ПодтвердитьКМ — регистрация КМ в буфере ФН; при ПиОТ — с флагом NotSendToServer (без повторной проверки через ОИСМ на ККТ) |
| ККТ + ФН | Пробитие чека ФФД 1.2 с кодами маркировки и реквизитами проверки |
3.3. Цепочка при продаже
3.4. Почему два шага: ESM + буфер ККТ
Ошибка 420 «Контрольная марка не проверена» возникает, если КМ не зарегистрирована в буфере ФН перед пробитием.
- ESM выполняет разрешительный режим (бизнес-проверка в ГИС МТ).
- Буфер ККТ (
ЗапросКМ/ПодтвердитьКМ) — техническая регистрация КМ в ФН для ФФД 1.2.
При ПиОТ проверка на ККТ через ОИСМ не нужна (уже проверено через ESM), поэтому в epf передаётся NotSendToServer = Истина.
4. Что импортировать из УПП
4.1. Метаданные (переносить целиком)
| Объект | Назначение |
|---|---|
Справочник.ТСПИоТ (+ формы) |
Настройка экземпляра ПиОТ, привязка к ККТ (новые версии БПО) |
РегистрСведений.НастройкиПодключенияТСПИоТ (+ формы) |
Legacy/fallback: адрес ESM по номеру ФН |
Перечисление.ТипыТСПИоТ |
Внутренний 1С:ПиОТ / внешний ESM |
ОбщаяФорма.ФормаПроверкиСтатусовГотовностиТСПИоТ |
Диагностика готовности ESM |
ОбщийМакет.Драйвер1СТСПИоТ |
Шаблон драйвера (при использовании внутреннего ПиОТ) |
Подсистема ПодключаемоеОборудование.ТСПИоТ |
Навигация в конфигураторе |
Зарегистрировать в Configuration.xml, ConfigDumpInfo.xml, при необходимости — в ролях.
4.2. Общие модули (переносить + адаптировать API)
| Модуль | Назначение |
|---|---|
ИнтеграцияТСПИоТ |
Сервер: настройки подключения, признак «ПиОТ настроен», заполнение данных проверки |
ИнтеграцияТСПИоТКлиентСервер |
HTTP api/v1/info, api/v1/codes/check, разбор JSON-ответов |
ИнтеграцияТСПИоТКлиент |
Клиентские вызовы, асинхронные сценарии |
ИнтеграцияТСПИоТВызовСервера |
Серверные вызовы с клиента |
ИнтеграцияТСПИоТВебКлиент |
Веб-клиент (может потребовать доработки async) |
МенеджерОборудованияТСПИоТ |
Связь ККТ ↔ элемент справочника ТСПИоТ |
4.3. Точечные доработки в существующих модулях целевой УТ
| Модуль целевой УТ | Что добавить |
|---|---|
ИнтеграцияИСМП |
ВерсияБПОПоддерживаетПроверкуКМЧерезТСПИоТ() |
ИнтеграцияИСМПКлиентСервер |
ПараметрыПодключенияТСПИоТ(), Доступен1СПИоТ() |
ИнтеграцияИСМППовтИсп |
Кеш проверки версии БПО |
ИнтеграцияИСМПВызовСервера |
ПолучитьДанныеНастройкиТСПИоТ |
ИнтерфейсИСМПКлиентСервер |
Функции разбора ответа ТСПИоТ (портировать только вызываемые) |
ДопФункции (или аналог) |
Фасад проверки КМ, HTTP к ESM, буфер ККТ |
ПанельОбменИСМП.Форма |
Гиперссылка «Настройки подключения к ТС ПиОТ» |
4.4. Что НЕ импортировать
- Всю библиотеку
ШтрихкодированиеОбщегоНазначения*/ОбщегоНазначенияИСМП*(~470 файлов). ИнтерфейсИСМПОбщегоНазначения*целиком (~8000 строк) — только реально вызываемые функции.- Модули
МенеджерОборудования*/ОборудованиеЧекопечатающиеУстройстваиз УПП — если БПО в УТ достаточно. - Типовую цепочку
ШтрихкодированиеИСМПКлиентдля сканирования — если в целевой конфигурации своя розничная логика. - Модуль
Документ.ЧекККМиз УПП — только хук, не замена.
4.5. Внешняя обработка (не входит в CF)
| Файл | Назначение |
|---|---|
ATOLkkt22(Проверка КМ).epf |
Доработка ПроверитьКодыКМ с параметром ПослеВнешнейПроверки → NotSendToServer |
Подключается как обработка обслуживания ККТ ATOL на каждом кассовом месте.
5. Адаптация API: таблица замен
При переносе модулей ИнтеграцияТСПИоТ* из УПП в УТ 10.3 выполнить замену имён модулей:
| УПП (источник) | УТ 10.3 (цель) |
|---|---|
ОбщегоНазначенияИСМП |
ИнтеграцияИСМП |
ОбщегоНазначенияИСМПКлиентСервер |
ИнтеграцияИСМПКлиентСервер |
ОбщегоНазначенияИСМППовтИсп |
ИнтеграцияИСМППовтИсп |
ОбщегоНазначенияИСМПВызовСервера |
ИнтеграцияИСМПВызовСервера |
ОбщегоНазначенияИС |
ИнтеграцияИС |
ОбщегоНазначенияИСПовтИсп |
ИнтеграцияИСПовтИсп |
РаботаСКонтрагентамиИСВызовСервера |
ИнтеграцияИСВызовСервера |
ШтрихкодированиеОбщегоНазначенияИС* |
ШтрихкодированиеИС* |
ШтрихкодированиеОбщегоНазначенияИСМП* |
ШтрихкодированиеИСМП* |
ОбменДаннымиИСМПКлиентСервер.ОтправитьДанныеВСервис |
ИнтеграцияИСМП.ОтправитьДанныеВСервис |
ОбменДаннымиИСМПКлиентСервер.ОбработатьРезультатОтправкиHTTPЗапросаКакJSON |
ИнтерфейсМОТПСлужебный.ОбработатьРезультатОтправкиHTTPЗапросаКакJSON |
ОбщегоНазначенияИСКлиентСервер.ОбъектВТекстJSON |
ИнтерфейсМОТПСлужебный.ОбъектВТекстJSON |
ОбщегоНазначенияБПО* |
ОбщегоНазначения / МенеджерОборудования* |
Автоматизация: скрипты migrate_piot_to_prod.py, adapt_piot_api_prod.py, port_interface_helpers.py.
6. Ключевые функции адаптера (на примере ДопФункции)
Рекомендуется реализовать единый фасад в общем модуле прикладных функций.
6.1. ПроверитьКМПриПродаже — главная точка входа
ПроверитьКМПриПродаже(
ОбъектДрайвера,
ОбработкаОбслуживания,
ТЧТовары,
ФискальноеУстройство,
ПараметрыОперацииФискализацииЧека,
ТоварныйДокумент = Неопределено,
ЭтоПродажа = Истина,
ПроверятьСредствамиККТ = Истина)
| Параметр | Назначение |
|---|---|
ЭтоПродажа |
Истина — ПиОТ/CDN; Ложь — только буфер ККТ (возврат) |
ПроверятьСредствамиККТ |
Ложь при сканировании (только онлайн); Истина при фискализации |
ПараметрыОперацииФискализацииЧека |
Должен содержать ЗаводскойНомерФН для поиска настроек в РС; на выходе — СтРезультатПроверкиКМ |
Матрица сценариев:
| Сценарий | ПиОТ | CDN | Буфер ККТ | Тег 1260 |
|---|---|---|---|---|
| Продажа, ПиОТ настроен | d03; | — | d03; (NotSendToServer) | d03; |
| Продажа, ПиОТ не настроен | — | d03; | d03; (полная проверка) | d03; |
| Возврат, ПиОТ настроен | — | — | d03; (NotSendToServer) | — |
| Скан при продаже | d03;/CDN | d03;/— | — | — |
6.2. ПроверитьКМ_РазрешительныйРежимТСПИоТ
- Сбор КМ из ТЧ (
ШКМаркировки.ПолныйШтрихкод→ Base64). - HTTP POST
api/v1/codes/checkчерезИнтеграцияТСПИоТКлиентСервер. - Заполнение
СтРезультатПроверкиКМ(ключ — ссылка на элементШтрихкодыУпаковокТоваров).
6.3. ЗарегистрироватьКМВБуфереККТПослеВнешнейПроверки
- Вызов epf:
ПроверитьКодыКМПослеВнешнейПроверки→NotSendToServer = Истина. - Без ожидания ответа ОИСМ на ККТ.
6.4. НастройкиПодключенияТСПИоТДляФискализации
Двухступенчатый поиск настроек ESM:
Справочник.ТСПИоТ.ПолучитьТСПИоТ(ФискальноеУстройство)— если БПО ≥ 3.2.9.8 и справочник заполнен.РегистрСведений.НастройкиПодключенияТСПИоТпоНомерФискальногоНакопителя(=ЗаводскойНомерФНиз параметров ККТ).
Рекомендации:
- Добавить реквизит
СтИспользуетсяПиОТ(Булево) в регистр — включение/выключение без удаления настроек. - Для одной кассы — fallback: если
ЗаводскойНомерФНпуст, брать единственную активную запись регистра. - Прокидывать
ЗаводскойНомерФНизПараметрыККТвПараметрыОперацииФискализацииЧекав формах предпросмотра и возврата.
6.5. Инициализация СтРезультатПроверкиКМ
Всегда создавать пустое Соответствие в начале ПроверитьКМПриПродаже — иначе МенеджерОборудованияВызовСервера.ЗаполнитьТоварнуюСтрокуЧека падает при возврате через предпросмотр.
7. Штрихкоды маркировки: типовая УТ vs доработанная
Это критическое различие, которое определяет, куда встраивать ПиОТ.
7.1. Типовая УТ 10.3
| Аспект | Как в типовой |
|---|---|
Хранение КМ в ЧекККМ.Товары |
Реквизит ШтрихкодУпаковки (ссылка на ШтрихкодыУпаковокТоваров) |
| Отдельная ТЧ | ЧекККМ.ШтрихкодыУпаковок — таблица упаковок с привязкой к строкам |
| Сканирование | Цепочка ШтрихкодированиеИСМПКлиент → ШтрихкодированиеИС.ПараметрыСканирования → проверка при скане |
| Проверка при пробитии | BPO: ПроверитьКодМаркировкиСредствамиККТ (async) или CDN через ИнтерфейсИСМП |
| Поля ошибок | Нет отдельных КМНеПрошлаПроверку / ОшибкаПроверкиКМ в типовой |
7.2. Доработанная УТ10 ПРОД (пример)
| Аспект | Как может быть у вас |
|---|---|
Хранение КМ в ЧекККМ.Товары |
Кастомный реквизит ШКМаркировки (ссылка на ШтрихкодыУпаковокТоваров) |
| Доп. поля | КМНеПрошлаПроверку, ОшибкаПроверкиКМ — фиксация ошибок проверки в строке |
| Создание элемента справочника | ДопФункции.ДобавитьШКвСправочник(ПолныйШтрихкод, НормализованныйШтрихкод) при скане |
| Поля справочника | ПолныйШтрихкод, ЗначениеШтрихкода — используются при проверке и фискализации |
| Base64 для ESM/ККТ | ДопФункции.ПолучитьКМвBase64(ПолныйШтрихкод) — вставка GS-разделителей + Base64 |
| Сканирование | Своя форма ФормаРегистрацииПродаж → СтПроверитьШКМаркировкиРазрешительныйРежим |
| Проверка при пробитии | Кастомный epf ATOL + фасад ПроверитьКМПриПродаже в ДопФункции |
| Точка входа | ЧекККМ.ФискализироватьЧек, формы предпросмотра, возврат |
7.3. Что учесть программисту при адаптации
- Не копировать слепо цепочку УПП (
ШтрихкодированиеОбщегоНазначенияИСМП*) — она рассчитана на типовую структуру документов. - Найти в своей конфигурации, где хранится КМ в розничном документе:
ШтрихкодУпаковки,ШКМаркировки,ШтрихкодыУпаковок(ТЧ) или иное. - Адаптировать сбор массива КМ в
ПроверитьКМ_РазрешительныйРежимТСПИоТпод свои реквизиты. - Ключ
СтРезультатПроверкиКМ— должен совпадать с тем, что используется при заполнении тега 1260 вЗаполнитьТоварнуюСтрокуЧека/ДанныеДляПробитияЧека. - Если в конфигурации нет
ПолныйШтрихкод— нужна своя функция подготовки Base64-кода для ESM.
8. Настройка ESM на стенде
8.1. Два способа хранения настроек в 1С
| Способ | Когда использовать |
|---|---|
Справочник.ТСПИоТ |
БПО ≥ 3.2.9.8, новые установки |
РегистрСведений.НастройкиПодключенияТСПИоТ |
Legacy, одна запись на ФН; измерение = НомерФискальногоНакопителя |
Связь параметров:
| Параметр | Откуда |
|---|---|
ФискальноеУстройство |
UUID ссылки на элемент справочника ККТ в 1С |
НомерФискальногоНакопителя |
Заводской номер ФН (ЗаводскойНомерФН из драйвера / api/v1/info → fnSerial) |
| Адрес ESM | Сервер, Порт, ЗащищенноеСоединение в регистре или справочнике |
Важно: в fallback-ветке регистра поиск идёт по номеру ФН, а не по UUID кассы. Если ЗаводскойНомерФН не передан в параметрах — запись не найдётся.
8.2. Рекомендуемый реквизит СтИспользуетсяПиОТ
Булево в регистре НастройкиПодключенияТСПИоТ:
Истина— проверка через ESM;Ложь— настройки сохранены, но используется CDN (fallback).
Добавить в запрос: ГДЕ СтИспользуетсяПиОТ = ИСТИНА.
9. Точки интеграции в рознице (чеклист программиста)
После переноса метаданных и модулей встроить вызов ПроверитьКМПриПродаже в существующие точки фискализации:
| № | Объект / форма | Процедура | Параметры |
|---|---|---|---|
| 1 | Документ.ЧекККМ |
ФискализироватьЧек |
ЭтоПродажа = (ВидОперации = Продажа) |
| 2 | Форма регистрации продаж | ФискализироватьЧекВФорме |
ЭтоПродажа по виду операции |
| 3 | Форма регистрации продаж | СтПроверитьШКМаркировкиРазрешительныйРежим |
ПроверятьСредствамиККТ = Ложь (только онлайн) |
| 4 | Обработка.ПредпросмотрЧека |
ПослеОбработкиСостоянияСмены |
ЭтоПродажа по типу документа-основания |
| 5 | ВозвратТоваровОтПокупателя |
кнопка пробития | ЭтоПродажа = Ложь |
Не включать типовой async-путь BPO ПроверитьКодМаркировкиСредствамиККТ / PiotCheckKM, если используется кастомный epf ATOL.
10. Требования к окружению
| Компонент | Требование |
|---|---|
| Платформа 1С | 8.3.24+ (проверено на 8.3.24.1586) |
| БПО | ≥ 3.2.9.8 для ВерсияБПОПоддерживаетПроверкуКМЧерезТСПИоТ() |
| ККТ | ATOL 11F, ФФД 1.2 |
| ESM | Установлен на кассовом ПК, api/v1/info отвечает |
| ЛМ ЧЗ | Установлен для офлайн (ESM использует сам) |
| epf ATOL | Доработан для NotSendToServer |
11. Порядок внедрения (пошагово)
Фаза 0 — подготовка
- Бэкап целевой конфигурации и базы
- Diff целевая ↔ УПП (розница, маркировка, ККТ)
- Diff целевая ↔ типовая (что уже доработано)
- Зафиксировать версию БПО
Фаза 1 — метаданные
- Перенести объекты из раздела 4.1
- Загрузить в конфигуратор, обновить БД
- Проверка конфигурации
Фаза 2 — модули ПиОТ
- Перенести 6 модулей из раздела 4.2
- Адаптировать API (раздел 5)
- Компиляция модулей
Фаза 3 — адаптер розницы
- Функции в
ДопФункции(раздел 6) - Хуки в точках из раздела 9
- Гиперссылка в
ПанельОбменИСМП - Подключить epf ATOL
Фаза 4 — настройка и права
- Запись в
НастройкиПодключенияТСПИоТ(ФН + адрес ESM) - Права на
ТСПИоТ,НастройкиПодключенияТСПИоТ,ШтрихкодыУпаковокТоваров - Права на
Document.ЧекККМ(Read без RLS для закрытия смены, если нужно)
Фаза 5 — тестирование
- Продажа с маркой через ПиОТ
- Продажа без ПиОТ (CDN regression)
- Возврат (та же смена + через предпросмотр)
- Скан при продаже (онлайн без буфера)
- ESM недоступен / аварийный режим
- Закрытие кассовой смены
12. Типичные ошибки и решения
| Ошибка | Причина | Решение |
|---|---|---|
| 420 «Контрольная марка не проверена» | КМ не в буфере ФН | После ESM вызывать ЗарегистрироватьКМВБуфереККТПослеВнешнейПроверки с NotSendToServer |
| «Поле объекта не обнаружено (СтРезультатПроверкиКМ)» | Не инициализировано соответствие | Создавать пустое СтРезультатПроверкиКМ в начале ПроверитьКМПриПродаже |
| «Для фискального устройства не настроено подключение к ТС ПиОТ» | Нет ЗаводскойНомерФН в параметрах |
Прокинуть из ПараметрыККТ или fallback по единственной записи РС |
| «Недостаточно прав на исполнение операции» при закрытии смены | RLS на ЧекККМ или нет прав на ШтрихкодыУпаковокТоваров |
Проверить роли; закрытие смены не связано с ПиОТ напрямую |
| ПиОТ «не находится» при пустом справочнике | Используется только РС по ФН | Заполнить регистр; номер ФН = fnSerial из ESM |
13. HTTP API ESM (справочно)
| Метод | URL | Назначение |
|---|---|---|
| POST | api/v1/info |
Статус ESM, fnSerial, kktSerial, готовность к проверке |
| POST | api/v1/codes/check |
Проверка кодов маркировки (тело: codes[], client_info) |
Ответ codes/check содержит статусы кодов и реквизиты для тега 1260 (reqId, reqTimestamp / аналоги в JSON ESM).
14. Краткий вывод
Адаптация УТ 10.3 под ПиОТ — это не перенос всей маркировки из УПП, а:
- Импорт ~12 объектов метаданных и 6 модулей ТС ПиОТ.
- Адаптация имён API под модули УТ.
- Реализация фасада проверки КМ в прикладном общем модуле.
- Хук в свою (не типовую) цепочку фискализации.
- Настройка ESM + epf ATOL на кассе.
- Учёт особенностей хранения штрихкодов в целевой конфигурации.
CDN остаётся запасным путём. ЛМ ЧЗ работает через ESM, не через 1С. Буфер ККТ обязателен даже после успешной проверки ESM.
Вступайте в нашу телеграмм-группу Инфостарт

