helpf.pro
Регистрация
 +21 
Распечатать

QR код в 1С

Столкнулся с интересной задачей реализации генерации QR-кода в 1С 8.2 ( 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. Размещаем картинку в нашем табличном документе.
Код реализации:
Код 1C v 8.2 УП
 &НаСервере
Функция 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, ИмяВременногоФайла);

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

Источник
Разместил:   Версии: | 8.x | 8.2 УП |  Дата:   Прочитано: 40464
 +21 
Распечатать
Возможно, вас также заинтересует
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
Google maps : вывод точек на карту и режим панорамы 9
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора
Google maps, поиск оптимального маршрута 5
В данном посте хочу коснуться основных аспектов построения оптимального маршрута с использованием API Google maps. Исходные данные для построения маршрута: * Географические координаты объектов, которые хранятся в базе; * Координаты начальной и коне
HTML5 Canvas в 1С 8.3 или Google нам поможет 0
Добрался я для написания маленьких тестов для 1С в плане web графики. Версии 1С 8.2.61 и 8.3.3.641. Зайдем на http://www.w3schools.com/html/html5_canvas.asp и перенесем примеры в обработку 1С. Скачать обработку: Результаты не радуют. 1С в Intern
Автоматическое резервное копирование 1С:Предприятия в облако с помощью ПО Effector Saver 4
Всем известно, для большей гарантии восстановления важных данных, необходимо копировать архивы в несколько мест хранения. Отдельный диск может помочь в случае порчи основного, но в случае если устройство будет потеряно или украдено, он будет так же
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!