Строка QR кода в формате JSON
Текстовый формат JSON (JavaScript Object Notation) широко используется при обмене. По сравнению с XML он является более лаконичным и занимает меньше места. Кроме этого все браузеры имеют встроенные средства для работы с JSON.
В данной статьи я показываю, пример использования формат JSON при создании строки QR кода (ЗаписьJSON) и при обработке строки QR кода ( ЧтениеJSON) . Другие примеры чтения и записи JSON можно посмотреть в другой статьи Чтение и запись в формате JSON
В следующей функции, при печати счет на оплату, передается ссылку на заказ покупателя и возвращает строку QR кода в формате JSON. Для простоты я не показываю все данные строки, а только некоторые из них с учетом особенности форматирования – в случае данных типа число нужно форматировать без триады, а случае данных типа дата нужно использовать метод ЗаписьДатуJSON.
// функция из модуля менеджера заказа
Функция ПолучитьQRкодЗаказа(Заказ)
Данные = Новый Соответствие;
// Версия протокола
Данные.Вставить("Ver","001");
// Используем букву P для строковых данных
Данные.Вставить("P01",Заказ.Номер);
// Для чисел используем букву N и форматируем без триады
Данные.Вставить("N01",Формат(Заказ.СуммаДокумента,"ЧГ = 0"));
// Для переменных типа даты используем букву D
Данные.Вставить("D01",ЗаписатьДатуJSON(Заказ.Дата, ФорматДатыJSON.ISO)); ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
ЗаписатьJSON(ЗаписьJSON, Данные);
QRСтрока = ЗаписьJSON.Закрыть();
Возврат QRСтрока;
КонецФункции
Чтение QR кода в формате JSON происходит в модуле управляемой формы обработки. В данном случае вызывается процедуру ОбработатьПолученныйШК. Для простоты примера, я не показываю все обрабатываемые данные. Обратите внимание, что в процедуру глобального контекста ПрочитатьJSON я должен передать Массив, элементы которого содержат имена свойств JSON, для которых нужно вызывать восстановление даты из строки.
&НаКлиенте
Процедура ОбработатьПолученныйШК(СтрокаJSON)
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
ИменаСвойствСоЗначениямиДата = Новый Массив; ИменаСвойствСоЗначениямиДата.Добавить("D01");
Данные = ПрочитатьJSON(ЧтениеJSON,Истина,ИменаСвойствСоЗначениямиДата,ФорматДатыJSON.ISO); ЧтениеJSON.Закрыть();
НомерЗаказа = Данные.P01 ;
ДатаЗаказа = Данные.D01 ;
СуммаДокумента =Данные.N01;
КонецПроцедуры
Фирма “1С” реализовала поддержку сканера штрих -кодов на уровне “1С: Библиотека подключаемого оборудования”.
Перед тем как начать использовать сканер его необходимо инициализировать. Делать это лучше всего при открытии формы. В соответствующем событии определяем, какое именно оборудование будет использоваться, и пытаемся его подключить. В данном случае только сканер штрих-кода:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// ПодключаемоеОборудование
Если МенеджерОборудованияКлиент.ОбновитьРабочееМестоКлиента() Тогда ОписаниеОшибки = "" ;
ПоддерживаемыеТипыВО = Новый Массив();
ПоддерживаемыеТипыВО.Добавить( "СканерШтрихкода" );
Если Не менеджерОборудованияКлиент.ПодключитьОборудованиеПоТипу(УникальныйИдентификатор, ПоддерживаемыеТипыВО, ОписаниеОшибки) Тогда ТекстСообщения = НСтр( "ru = 'При подключении оборудования произошла ошибка: |""%ОписаниеОшибки%"".'" );
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ОписаниеОшибки%" , ОписаниеОшибки); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); КонецЕсли;
КонецЕсли;
КонецПроцедуры
Работа со сканером организована через событие оповещения формы. При возникновении события нужно определить, что его источником является сканер и использовать полученные от него данные. В приведённом ниже примере полученный от сканера код применяется в процедуре ОбработатьПолученныйШК():
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда
Если ИмяСобытия = "ScanData" Тогда Если Параметр[ 1 ] = Неопределено Тогда СтрокаQRКод = Параметр[ 0 ];
Иначе СтрокаQRКод = Параметр[ 1 ][ 1 ];
КонецЕсли;
ОбработатьПолученныйШК(СтрокаQRКод);
КонецЕсли;
КонецЕсли;
КонецПроцедуры