Основная идея – в 1С в обычных формах нет вьюхи для отдельного вывода изображения с qr-кодом, например, на второй монитор.
С ростом популярности оплаты через Систему Быстрых Платежей (СБП) возникла необходимость в интеграции с API банка для конфигурации УТ 10.3, в ходе которой вылез вопрос способов отображения изображения с QR-кодом для клиента – все примеры сводятся к получению QR-кода любым доступным способом и печати его на бумажном носителе, или выводе его на специальном дисплее для таких кодов, цена на который начинается от 3 т.р. Немного помониторив рынок б/у торгового оборудования, попались объявления на POS-мониторы стоимостью от 500р., которые как раз и можно приспособить для вывода QR-кода для покупателя: просто втыкаем как второй дисплей на точке продаж и выводим на него изображения с QR-кодом.
Для вывода было нарисовано win-приложение, данные которому можно передавать через обычный файл *.json в виде задания.
Приложение умеет отображать QR-код и несколько вариантов статусов. Весь процессинг выполняется на стороне 1С и приложение служит только для отображения статуса операции или вывода кода для оплаты.
Как использовать:
После запуска приложения в директории запуска создаётся дополнительный каталог "swap", в который можно складывать задание в формате *.json. Допустимое наименование для файла с заданием - "task.json".
Настройка фонового изображения:
При первом запуске в директории приложения создаётся файл настроек "config.ini", в котором можно указать стиль фона и его цвет (по умолчанию применяется клетчатая расцветка, как в анонсе). Пример:
[main]
bgstyle=solid
bgcolor=#ffddaa ;Или сокращение #fda
Допустимые параметры для task.json:
"header" - Произвольная строка, которая выводится над QR-кодом. В неё можно передать, например, номер и сумму чека. Можно вывести не более 2-х строк.
"operation" - Выполняемая команда. Допускаемые значения:
"qrstring" – вывести QR-код, который будет сформирован из строки, содержащейся в параметре "qrdata"
"notice" – вывести статус операции, указанный в параметры "status"
"clear" – очистить форму на дисплее
"qrdata" - Строка с данными для QR-кода
"status" - Статус выполнения операции. Допускаемые значения:
"ok" – Всё хорошо
"fail" – Ошибка при выполнении
"warning" – Предупреждение
*Все операции допускают использование "header".
**Тип значение любого параметры - Строка
Пример: в 1С формируется обращение к API банка, на которое возвращается ссылка для оплаты через СБП -> Затем формируется задания для QR-дисплея в виде json:
{
"qrdata": "https://qr.nspk.ru/AS100001ORTF4GAF80KPJ53K186D9A3G?type=01&bank=100000000007&crc=0C8A",
"operation": "qrstring"
}
На экране отобразится код для оплаты:
После того как операция будет обработана, на экран можно вывести статус её выполнения с помощью json:
{
"operation": "notice",
"status": "ok" ИЛИ "fail"
}
И ли
Ещё один сценарий использования:
В офис организации приходит юр. лицо, которое хочет рассчитаться по безналу через мобильное приложение. Можно сформировать для него QR-код, который автоматически заполнит платёжное поручение.
JSON-задание для такого QR-кода можно получить с помощью подобного кода:
// Структуры для передачи на дисплей
//////////////////////////////////////////////////////////////////////////////////////////
//// Данный для "qrdata" //
//// Обязательные: //
//////////////////////////////////////////////////////////////////////////////////////////
//Name - Наименование получателя платежа - Макс. 160 символов //
//PersonalAcc - Номер счета получателя платежа - Макс. 20 символов //
//BankName - Наименование банка получателя платежа - Макс. 45 символов //
//BIC - БИК - Макс. 9 символов //
//CorrespAcc - Номер кор./сч. банка получателя платежа - Макс. 20 символов //
//////////////////////////////////////////////////////////////////////////////////////////
//// Дополнительные: //
//////////////////////////////////////////////////////////////////////////////////////////
//Sum - Сумма платежа, в копейках - Макс. 18 символов //
//Purpose - Наименование платежа (назначение) - Макс. 210 символов //
//PayeeINN - ИНН получателя платежа - Макс. 12 символов //
//KPP - КПП получателя платежа - Макс. 9 символов //
//////////////////////////////////////////////////////////////////////////////////////////
Функция ПолучитьСтруктуруКлиентБанк(ДокументСсылка)
Результат = Новый Структура;
// Тип операции
Результат.Вставить("operation", "qrstring");
ДанныеДляПлатежа = ПолучитьПараметрыПечатиСчетаЗаказа("счет");
ДанныеШапки = ПолучитьДанныеШапкиДокумента();
НомерСчета = ОбщегоНазначения.ПолучитьНомерНаПечать(ДокументСсылка);
ВалютаНаименование = ДокументСсылка.ВалютаДокумента.Наименование;
// Заголовок
Заголовок = "Счёт №" + НомерСчета + " от " + Формат(ДокументСсылка.Дата, "ДФ='дд ММММ гггг'") + " г."
+ Символы.ПС + "Сумма: " + ДанныеДляПлатежа.Всего + ВалютаНаименование;
Результат.Вставить("header", Заголовок);
// Данные для QR-кода
СтрокаНазначениеПлатежа = "Оплата по счету №" + НомерСчета + " от " + Формат(ДокументСсылка.Дата, "ДФ='дд ММММ гггг'") + " г. "
+ ДанныеДляПлатежа.НДС
+ ?(ДанныеДляПлатежа.ВсегоНДС > 0,
" " + Формат(ДанныеДляПлатежа.ВсегоНДС, "ЧДЦ=2") + ВалютаНаименование,
"");
Тело = "ST00012"
+ "|Name=" + ДокументСсылка.Организация.Наименование
+ "|PersonalAcc=" + ДокументСсылка.Организация.ОсновнойБанковскийСчет.НомерСчета
+ "|BankName=" + ДокументСсылка.Организация.ОсновнойБанковскийСчет.Банк.Наименование
+ "|BIC=" + ДокументСсылка.Организация.ОсновнойБанковскийСчет.Банк.Код
+ "|CorrespAcc=" + ДокументСсылка.Организация.ОсновнойБанковскийСчет.Банк.КоррСчет
+ "|Sum=" + Формат(ДанныеДляПлатежа.ВсегоКОплате * 100, "ЧДЦ=0; ЧН=0; ЧГ=0")
+ "|Purpose=" + СтрокаНазначениеПлатежа
+ "|PayeeINN=" + ДокументСсылка.Организация.ИНН
+ ?(ПустаяСтрока(ДокументСсылка.Организация.КПП) = Истина, "","|KPP=" + ДокументСсылка.Организация.КПП);
Результат.Вставить("qrdata", Тело);
Возврат Результат;
КонецФункции