Каталог решений - QR-код

Описание

Для генерации использовано api от google (http://chart.apis.google.com/chart). Вот сайт, который работает с ним. После того, как вы вводите все параметры кода и нажимаете кнопку генерировать, получаем что-то вроде такой ссылки. По сути эта ссылка нам и нужна. Создав необходимый url можно скачать картинку, которая генерируется с помощью api. Почему не подключал компоненты — писалось под веб-клиент не был уверен, что на стороне сервера будет установлена компонента. 

И так в чем заключается подход:

  1. Генерируем текст, который надо прописать в qr-коде.
  2. Используя ссылку «http://chart.apis.google.com/chart?cht=qr&chs=230×230&chl=» +»Наш текст» скачиваем картинку.
  3. Размещаем картинку в нашем табличном документе.

Код реализации:

&НаСервере
Функция hex(Знач Значение)
Значение=Число(Значение);
Если
Значение<=0 Тогда
Результат="0";
Иначе
Значение=Цел(Значение);
Результат="";
Пока
Значение>0 Цикл
Результат=Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Значение%16 + 1,1)+Результат;
Значение=Цел(Значение/16) ;
КонецЦикла;
КонецЕсли;
Если
СтрДлина(Результат) < 2 Тогда

Результат = "0" + Результат;

КонецЕсли;
Возврат
"%" + Результат;
КонецФункции

&НаСервере
Функция EncodeURL(URL)
Рез = "";
Для
Сч = 1 По СтрДлина(URL) Цикл
ch = Сред(URL,Сч,1);
vch = КодСимвола(ch);

Если (
"A" <= ch ) И ( ch <= "Z") Тогда // "A".."Z"
Рез = Рез + ch;
ИначеЕсли (
"a" <= ch ) И ( ch <= "z") Тогда // "a".."z"
Рез = Рез + ch;
ИначеЕсли (
"0" <= ch ) И ( ch <= "9") Тогда // "0".."9"
Рез = Рез + ch;
ИначеЕсли (
ch = " ") ИЛИ ( ch = "+") Тогда // space
Рез = Рез + "+";
ИначеЕсли (
ch = "-" ) ИЛИ ( ch = "_") // unreserved
ИЛИ (ch = ".") ИЛИ (ch = "!")
ИЛИ (
ch = "~") ИЛИ (ch = "*")
ИЛИ (
ch = "") ИЛИ (ch = "(")
ИЛИ (
ch = ")") Тогда
Рез = Рез + ch;
ИначеЕсли (
vch <= 127) Тогда // other ASCII
Рез = Рез + hex(vch);
ИначеЕсли (
vch <= 2047) Тогда // non-ASCII <= 0x7FF
Рез = Рез + hex(192 + Цел(vch / 64));
Рез = Рез + hex(128 + (vch % 64));
Иначе
// 0x7FF < ch <= 0xFFFF
Рез = Рез + hex(224 + Цел(vch / 4096));
Рез = Рез + hex(128 + (Цел(vch / 64) % 64));
Рез = Рез + hex(128 + (vch % 64));
КонецЕсли;
КонецЦикла;

Возврат
Рез;
КонецФункции
// ()

&НаСервере
Функция СохранитьДвоичныйБуферВФайл(Буфер, ИмяФайла) Экспорт
Поток = Новый COMОбъект("ADODB.Stream");
Поток.Type = 1; //Бинарный
Поток.Mode = 3;
Поток.Open();
Поток.Write(Буфер);
Поток.SaveToFile(ИмяФайла);
Поток.Close();
КонецФункции

&НаСервере
Функция НапечататьКодСервер(ЗаказСсылка)
ТабДок = Новый ТабличныйДокумент;
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("png");
АдресНачало = "http://chart.apis.google.com/chart?cht=qr&chs=230x230&chl=";
АдресКонец = ЗаказСсылка.Номер + Символы.ПС + Заказссылка.Контрагент.Наименование;
АдресКонец = СтрЗаменить(АдресКонец, " ", "+");
АдресКонец = EncodeURL(АдресКонец);

Соединение = ПолучитьCOMОбъект("","Microsoft.XMLHTTP");
Соединение.open("GET", АдресНачало + АдресКонец,0,,);
Соединение.send(null);
СохранитьДвоичныйБуферВФайл(Соединение.responseBody, ИмяВременногоФайла);

//Печать
Макет = Документы.ЗаказПокупателя.ПолучитьМакет("МакетПечатиКода");
Область = Макет.ПолучитьОбласть("Код");
Область.Рисунки.КодРисунок.Картинка = Новый Картинка(ИмяВременногоФайла);
ТабДок.Вывести(Область);
Возврат
ТабДок;
КонецФункции
has been added to your cart:
Оформление заказа