Vinaora Nivo SliderVinaora Nivo SliderVinaora Nivo SliderVinaora Nivo SliderVinaora Nivo SliderVinaora Nivo SliderVinaora Nivo SliderVinaora Nivo SliderVinaora Nivo SliderVinaora Nivo SliderVinaora Nivo SliderVinaora Nivo SliderVinaora Nivo Slider
Автор: Administrator Категория: Разработка
Дата публикации Просмотров: 1228
Печать

Столкнулся с интересной задачей реализации генерации QR-кода в 1С 8.2. Для генерации было использовано 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, ИмяВременногоФайла);

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

(Информация с ресурса http://danila.org.ua)

QR-кодматричный код (двухмерный штрихкод), разработанный и представленный японской компанией «Denso-Wave»[1] в 1994 году. Аббревиатура QR производна от англ. quick response, что переводится как «быстрый отклик». Основное достоинство QR-кода — это легкое распознавание сканирующим оборудованием (в том числе и фотокамерой мобильного телефона), что дает возможность использования в торговле, производстве, логистике. Сегодня QR-коды больше всего распространены в Японии, стране, где штрих-коды пользовались такой большой популярностью, что объем информации, зашифрованной в коде, вскоре перестал устраивать индустрию. Японцы начали экспериментировать с новыми способами кодирования небольших объемов информации в графической картинке. Уже в начале 2000 года QR-коды получили широкое распространение в Японии, их можно было встретить на большом количестве плакатов, упаковок и товаров.
(с)http://ru.wikipedia.org.

Add comment


Security code
Refresh

Последние новости

Written on 16/05/2012, 10:29 by admin
ob-otvetstvennosti-i-bezotvetstvennosti-ili-kak-opredelit-doljnostnye-obyazannosti-rabotnikovПоговорим о должностных обязанностях. Казалось бы, что тут может быть интересного?! Обязанности – они, как говорится, и в Африке обязанности. Нет ничего...
Written on 06/05/2012, 01:19 by admin
upravlenie-znaniyami-sozdanie-bazy-znanii-a-chto-na-praktikeПродолжая тему двух предыдущих постов (первый и второй), в которых проводилось исследование на тему управления знаниями и были рассказаны основные...
Written on 05/05/2012, 22:26 by admin
kak-pobedit-vorovstvo-sobstvennyh-sotrudnikovТы скажи нам, Карамзин,Как там Тверь, Калуга, Клин?И ответил Карамзин: «Да везде воруют, БЛИН!»Как вы полагаете, кто способен нанести бизнесу больший...
Written on 05/05/2012, 22:14 by admin
kak-naiti-chujoe-myloРуководство содержит описание поиска личных и корпоративных email различными методами с использованием специальных сервисов и поисковых систем....
Written on 05/05/2012, 22:10 by admin
prognozirovanie-prodaj-i-motivaciya-truda«…Конечно, можно платить и от продаж. Но лучше платить людям за то, что они делают на самом деле».   Территориальный менеджер крупной табачной...

Последние сообщения

  • linx 12.05.2012 13:49
    а как тоже самое сделать через политики в домене?

    Read more...

     
  • Super User 27.04.2012 09:03
    Вот пример как можно обработать перетаскивание из Excel: Отключаем стандартную обработку у табличного ...

    Read more...

     
  • Super User 27.04.2012 09:03
    1) Нужно установить свойство "РазрешитьНачал оПеретаскивания " у табличного поля из которого будем ...

    Read more...

     
  • Unknown181538 06.04.2012 14:36
    Я имею ввиду текст, который пишется для обработки в режиме пользователя. По умолчанию обработка ...

    Read more...

     
  • Administrator 06.04.2012 14:29
    Уважаемый, Unknown181538. По первому пункту согласен, спасибо. Видимо оператор "выполнить" "остался" ...

    Read more...

Login Form