Проверить возможность и ёмкость метки, не записывая её

Учебные задачи

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

Где и как запускать

Полный клиентский модуль своей учебной мобильной формы. Сканирование/чтение собственной NFC-метки; без записи и необратимой блокировки.

Подготовка

  1. Только отдельное учебное мобильное приложение/клиент, поддерживающее NFC, на платформе с этими API (начиная с 8.3.23). В проекте мобильного приложения должна быть предусмотрена функциональность NFC; используйте собственный телефон и собственную учебную метку.

  2. В своей управляемой форме создайте команды НачатьУчебноеЧтение и ОстановитьУчебноеЧтение, назначьте одноимённые клиентские обработчики. Полный модуль урока вставьте в модуль этой формы; обработчик оповещения должен быть экспортной асинхронной функцией.

  3. Учебную метку заранее подготовьте собственным контролируемым способом с несекретным содержимым Книга. Не используйте пропуск, платёжную карту, чужую, производственную или ценную метку.

  4. Этот модуль только сканирует/читает и проверяет поддержку операций. ЗаписатьСообщениеАсинх и ЗаблокироватьЗаписьНаМеткуАсинх не вызываются; данные физической метки и возможность её перезаписи не изменяются.

  5. Сканирование создаёт один интерактивный сеанс. Отмена пользователем передаёт Неопределено. После выполнения обработчика сеанс автоматически заканчивается по справке.

&НаКлиенте
Процедура НачатьУчебноеЧтение(Команда)
    Менеджер = СредстваNFC.МеткиNDEF;
    Если НЕ Менеджер.ПоддерживаетсяАктивноеСканирование() Тогда
        Сообщить("Активное NDEF-сканирование здесь не поддерживается");
        Возврат;
    КонецЕсли;
    Оповещение = Новый ОписаниеОповещения("УчебнаяМеткаОбнаружена", ЭтотОбъект);
    Менеджер.ВключитьАктивноеСканирование("Только чтение собственной учебной NFC-метки", Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура ОстановитьУчебноеЧтение(Команда)
    СредстваNFC.МеткиNDEF.ОтключитьАктивноеСканирование();
КонецПроцедуры

&НаКлиенте
Асинх Функция УчебнаяМеткаОбнаружена(Метка, ДополнительныеПараметры) Экспорт
    Если Метка = Неопределено Тогда
        Сообщить("Сканирование завершено без обнаруженной метки");
        Возврат Неопределено;
    КонецЕсли;
    Попытка
        МожноЗаписать = Ждать Метка.ПоддерживаетсяЗаписьНаМеткуАсинх();
        МожноЗаблокировать = Ждать Метка.ПоддерживаетсяБлокировкаЗаписиНаМеткуАсинх();
    Исключение
        Сообщить("Проверка возможностей метки не выполнена: " + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
    Сообщить("Метка допускает запись: " + Строка(МожноЗаписать));
    Сообщить("Метка поддерживает блокировку записи: " + Строка(МожноЗаблокировать));
    Записи = Новый Массив;
    Записи.Добавить(Новый ТекстоваяЗаписьNDEF("Книга", "ru"));
    УчебноеСообщение = Новый СообщениеNDEF(Новый ФиксированныйМассив(Записи));
    Максимум = Метка.МаксимальныйРазмер;
    Если Максимум = Неопределено Тогда
        Сообщить("Ёмкость неизвестна; нельзя объявить сообщение гарантированно помещающимся");
    Иначе
        Сообщить("Максимальный размер сообщения, байт: " + Строка(Максимум));
        Сообщить("Подготовленный размер, байт: " + Строка(УчебноеСообщение.Размер));
        Сообщить("По известной ёмкости помещается: " + Строка(УчебноеСообщение.Размер <= Максимум));
    КонецЕсли;
    Сообщить("Подготовлено только сообщение в памяти: запись и необратимая блокировка НЕ выполняются");
    Возврат Неопределено;
КонецФункции

Разбор по шагам

  1. ПоддерживаетсяЗаписьНаМеткуАсинх относится к конкретной обнаруженной метке. Метод менеджера о поддержке устройства не заменяет эту проверку.

  2. ПоддерживаетсяБлокировкаЗаписиНаМеткуАсинх только сообщает возможность. Настоящая ЗаблокироватьЗаписьНаМеткуАсинх необратимо делает носитель неперезаписываемым и здесь не вызывается.

  3. МаксимальныйРазмер может быть Неопределено. В этой ветке не пытаемся сравнивать число с неизвестной ёмкостью и не заявляем успех.

  4. Для известной ёмкости сравниваем полный размер СообщениеNDEF, не число букв Книга и не число записей.

  5. Даже достаточный размер и поддержка записи не являются гарантией успешной будущей записи: контакт с меткой может быть потерян.

Как проверить результат

  1. Реальные признаки записи/блокировки и либо неизвестная ёмкость, либо сравнение размеров.

  2. Ни одна ветка не вызывает запись или блокировку. После запуска метка остаётся в прежнем состоянии.

Ожидаемый результат

Получена предварительная проверка конкретной метки без изменения носителя.

На что обратить внимание

  1. Не выполняйте необратимую блокировку как тест поддержки функции.

  2. Неизвестная ёмкость не равна нулю и не означает автоматически неограниченную ёмкость.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.