Files
cursor-1c/rfid-recomedations.md

14 KiB
Raw Permalink Blame History

** Запрос **

посмотри процедуры работы с rfid метками, что можно улучшить? сформируй файл md с рекомендациями в папке work

** Рекомендации: **

Рекомендации по доработке контура RFID (ves2020)

Дата: 07.10.2026
Конфигурация: ВесоваяАК
Область: префикс лс_*, HTTP-сервис RFID2, рабочий стол весовщика

Документ обобщает обзор исходников без внесения правок. Приоритет — от безопасности и стабильности UI к рефакторингу структуры.


1. Кратко об архитектуре

Локальный HTTP-считыватель (/reader inventory|read|write)
        ↓
лс_RFID (клиент: опрос, чтение/запись)
        ↓
лс_НастройкиRFIDОбмена + лс_RFIDСервер (раскладка, бизнес)
        ↓
Регистры меток / идентификаторов → документы с лс_Метка
        ↓
HTTP RFID2 (мобильные устройства, ВТ, БЭКЗ)
Объект Назначение Объём (ориентир)
CommonModules/лс_RFID Клиентский опрос считывателя, сценарии весовой/ТТН ~1,6k строк
CommonModules/лс_RFIDСервер Раскладка метки, ТТН, ВТ, БЭКЗ, идентификаторы ~3,9k строк
HTTPServices/RFID2 API мобильного приложения (RootURL = rfid) ~2,2k строк
РС лс_RFIDМетки, лс_АктивныеМетки, лс_ПрочитанныеДанныеСМетки, лс_ИдентификаторыRFID* Хранение меток и GUID обмена —
Справочник лс_НастройкиRFIDОбмена Карта полей на метке (offset/size/тип) —
Константа лс_URLСчитывателя URL локального reader (по умолчанию http://127.0.0.1:8888) —

Отдельного объекта БПО «оборудование RFID» нет: доступ к считывателю — HTTP. Параллельно существует контур ак_Глонасс* / ак_Виалон* (внешние таблицы RFID) — не смешивать с лс_* без отдельного решения.


2. Приоритет 1 — критично

2.1. Хардкод UUID устройства вместо проверки регистрации

Где: HTTPServices/RFID2/Ext/Module.bsl — сравнение ИдентификаторУстройства с литералом 901ff453-4d26-44ff-ab31-3dd8457b8c8b (несколько методов).

Проблема: обход модели лс_МобильныеУстройства / ПроверитьИдентификаторУстройства. Знание UUID даёт доступ к API.

Рекомендация:

  • единая функция авторизации устройства (регистр + роль);
  • убрать все литеральные UUID;
  • при необходимости «сервисного» устройства — константа или предопределённая запись регистра, не строка в коде.

2.2. Модальный UI при опросе считывателя

Где: лс_RFID.ОпросСчитывателяРабочийСтолВесовщика и родственные ОпросСчитывателя* — Вопрос(), ОткрытьМодально().

Проблема: блокировка клиента, конфликты с таймером опроса, плохая совместимость с веб-/тонким клиентом.

Рекомендация:

  • везде асинхронные ПоказатьВопрос / ОткрытьФорму + ОписаниеОповещения;
  • опрос на время диалога явно останавливать и возобновлять в колбэках (часть сценариев уже близка к этому — унифицировать).

2.3. Обработка ошибок: пустые исключения и Сообщить()

Где: лс_RFID (клиентский HTTP к считывателю), фрагменты лс_RFIDСервер, обработчики RFID2.

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

Рекомендация:

  • запись в журнал регистрации (категория вроде лс.RFID);
  • пользователю — ПоказатьОповещениеПользователя / предупреждение с понятным текстом;
  • не оставлять пустой Исключение без фиксации факта сбоя.

3. Приоритет 2 — архитектура и сопровождение

3.1. Разрезать крупные модули

Текущие модули совмещают транспорт, раскладку, UI-сценарии и интеграции.

Предлагаемое разбиение (имена условные):

Модуль / область Ответственность
Транспорт считывателя inventory / read / write, таймауты, веб-мост
Раскладка метки НайтиПараметрыОбмена, буфер ДД, команды записи/стирания
Сценарии весовой опрос → параметры → создание документов
ТТН / БЭКЗ / ВТ существующие ОбработатьЗапрос*, списки команд метки
HTTP RFID2 тонкий слой: разбор запроса → вызов серверного API

Клиентский лс_RFID не должен дублировать серверную логику тонкими обёртками «пробросить на сервер» без необходимости.

3.2. Директивы &НаКлиенте / &НаСервере в общих модулях

В общих модулях это неканонично (директивы форм). Предпочтительны свойства модуля (Клиент / Сервер / Вызов сервера) и явные клиентские/серверные модули без смешения контекстов.

3.3. Унификация сценариев опроса

Дублируются почти одинаковые процедуры:

  • ОпросСчитывателяРабочийСтолВесовщика
  • ОпросСчитывателяРабочийСтолВесовщикаПриходПоСкладу
  • ОпросСчитывателяРасходнаяТТН
  • ОпросСчитывателяПриходТТН

и пары обработчиков вроде ОбработатьЗапросВТ_СоздатьПриходПоСкладу / …2.

Рекомендация: один pipeline:

код метки → прочитать раскладку → разобрать → решить действие → UI / запись

Точка учёта и вид документа — параметры снаружи, а не копипаста веток.


4. Приоритет 3 — надёжность и эксплуатация

4.1. Синхронный polling HTTP (таймаут 5 с)

Каждый тик таймера создаёт HTTPСоединение к локальному reader. При недоступности считывателя UI «подвешивается».

Рекомендация:

  • короткий таймаут и backoff после серии ошибок;
  • отключение опроса при N подряд неудачах с явным статусом на форме;
  • по возможности — push/событие от reader-сервиса вместо частого inventory.

4.2. Разный URL считывателя: толстый vs веб

  • Толстый клиент: константа лс_URLСчитывателя.
  • Веб-клиент: захардкоженный https://127.0.0.1:9999 + макет КостыльНаJS у лс_RFIDМетки.

Рекомендация: один конфигурируемый endpoint (включая HTTPS-мост), без литералов в коде.

4.3. Автосоздание «пустых» элементов справочников

Функции ПолучитьИлиСоздатьПустого* (контрагенты, ТС, физлица, номенклатура) при обмене плодят заглушки.

Рекомендация:

  • создавать элементы только при полном пакете данных;
  • либо статус «не сопоставлено» / отдельный контур внешних идентификаторов без мусора в основных справочниках;
  • запрет проведения документов с незаполненными обязательными реквизитами заглушек.

4.4. Отладочная задержка в HTTP-сервисе

ЗадержкаДляОтладки в RFID2 — цикл по ТекущаяДата() по параметру debug (занятость CPU).

Рекомендация: удалить из продакшена или ограничить константой/ролью администратора.

4.5. Мелкая правка

Опечатка КонеЦесли в RFID2/Ext/Module.bsl (процедура ЗадержкаДляОтладки) — исправить при касании модуля.


5. Что не трогать в первую очередь

  • Раскладка полей лс_ТипНастройкиRFIDОбмена / версии обмена на карте — менять только синхронно с прошивкой/мобильным клиентом.
  • Контур ак_ГлонассРегистрацияМеток / ак_ВиалонРегистрацияМеток — отдельная модель; унификация с лс_* — отдельный проект.
  • Косметический рефакторинг без тестов на весовой и мобильном обмене.

6. Предлагаемый порядок работ

№ Задача Риск Эффект
1 Убрать хардкод UUID, единая проверка устройства в RFID2 Средний (мобильные клиенты) Безопасность
2 Асинхронные диалоги на рабочем столе весовщика Средний (регресс UI) Стабильность весовой
3 Журнал ошибок + отказ от пустых Исключение / Сообщить Низкий Диагностика
4 Единый URL/транспорт считывателя (вкл. веб-мост) Средний Сопровождение
5 Общий pipeline опроса вместо 4 копий Высокий Сопровождение
6 Разрезка лс_RFID / лс_RFIDСервер / слой HTTP Высокий Долгий срок
7 Политика автосоздания справочников Средний (данные) Качество НСИ

Перед п. 5–6 желателен короткий чек-лист ручной проверки: опрос метки на весовой, запись/стирание полей, создание прихода, мобильный /dict и /rfid, сценарии ВТ/БЭКЗ.


7. Ключевые процедуры (ориентир для правок)

Клиент (лс_RFID):
ПолучитьКодМеткиHF, ПрочитатьДанныеСМетки, ЗаписатьДанныеНаМетку, ПрочитатьСтруктуруДанныхСМетки, ПрочитатьВсюМетку, ОпросСчитывателя*, ПолучитьПараметрыПриходПоВесовой / …ПриходПоСкладу.

Сервер (лс_RFIDСервер):
НайтиПараметрыОбмена, СоздатьКомандуДляЗаписиДанных, РазобратьПрочитанныеДанныеСМетки, СоздатьОбновитьТТН, ОбработатьЗапросВТ_*, ОбработатьЗапросБЭКЗ_*, НельзяПровестиБезМетки, КонтрагентРазрешенДляRFID.

HTTP (RFID2):
REGISTER_DEVICE_GET, GET_DICTIONARIES, RFID_GET, RFIDList_GET, TTNUpdate_POST, vtPOST, bekzPOST.


8. Источники обзора

  • Выгрузка конфигурации: d:\dev\1C\ves2020
  • Поиск по терминам: RFID, лс_RFID, HTTP RFID2
  • MCP graph/code в сессии обзора не были доступны; разбор — по исходникам на диске

Следующий шаг по запросу: детальный план правок по файлам или реализация одного пункта (например, только auth в RFID2 или только асинхронный опрос весовщика).