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