По рабочему вопросу понадобилась печать стикера с QR 2Д и ITF-14 кодом. Сторонние решения для 1С не устраивали своей жадностью, а бесплатных решений кроме вот этого найдено не было. Очень помогла в разработке публикация http://infostart.ru/public/80106/ Скачать измененную версию можно здесь: http://infostart.ru/public/147843/
Функция 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(); КонецФункции Процедура КнопкаВыполнитьНажатие(Кнопка) Если НЕ ЗначениеЗаполнено(Контрагент) Тогда Предупреждение("Не указан контрагент!"); Возврат; КонецЕсли; Если НЕ ЗначениеЗаполнено(Номенклатура) Тогда Предупреждение("Не выбрана номенклатура!"); Возврат; КонецЕсли; Если НЕ ЗначениеЗаполнено(ДатаВыпуска) Тогда Предупреждение("Не указана дата розлива!"); Возврат; КонецЕсли; Если НЕ ЗначениеЗаполнено(КоличествоЭтикеток) Тогда Предупреждение("Не указано количество экземпляров!"); Возврат; КонецЕсли; ТабДок = Новый ТабличныйДокумент; Макет = ПолучитьМакет("Стикер"); НомерИнвойса = "00000000"; // затычка! Попытка АртикулЧисло = Число(Номенклатура.Артикул); Исключение АртикулЧисло = 0; КонецПопытки; ТекстКода = "*" + НомерИнвойса + Формат(АртикулЧисло, "ЧЦ=13; ЧВН=; ЧГ=0") + "" + Формат(ДатаВыпуска, "ДФ=yyyyMMdd") + ПризнакТипаУпаковки + "*"; Макет.Параметры.КодЗаказчика = Номенклатура.Артикул; Макет.Параметры.ДатаРозлива = Формат(ДатаВыпуска, "ДФ=dd.MM.yyyy"); Макет.Параметры.НоменклатураПолноеНаименование = Номенклатура.НаименованиеПолное; Макет.Параметры.КонтрагентПолноеНаименование = Контрагент.НаименованиеПолное; Макет.Параметры.АдресКонтрагента = УправлениеКонтактнойИнформацией.ПолучитьАдресИзКонтактнойИнформации(Контрагент, "Юридический"); Макет.Параметры.ТелефонКонтрагента = "Тел " + УправлениеКонтактнойИнформацией.ПолучитьТелефонИзКонтактнойИнформации(Контрагент, Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента); //Макет.Рисунки.QRCode.Объект.Data = ТекстКода; Сообщить("2D код: " + ТекстКода); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Штрихкоды.Штрихкод как штр |ИЗ | РегистрСведений.Штрихкоды КАК Штрихкоды |ГДЕ | Штрихкоды.Владелец = &Владелец | И Штрихкоды.ТипШтрихкода = &ТипШтрихкода"; Запрос.Параметры.Вставить("Владелец", Номенклатура); Запрос.Параметры.Вставить("ТипШтрихкода", ПланыВидовХарактеристик.ТипыШтрихкодов.ITF14); ИмяВременногоФайла = ПолучитьИмяВременногоФайла("png"); АдресНачало = "http://chart.apis.google.com/chart?cht=qr&chs=230x230&chld=H|0&chl="; АдресКонец = ТекстКода; АдресКонец = СтрЗаменить(АдресКонец, " ", "+"); АдресКонец = EncodeURL(АдресКонец); Соединение = ПолучитьCOMОбъект("","Microsoft.XMLHTTP"); Соединение.open("GET", АдресНачало + АдресКонец,0,,); Соединение.send(null); СохранитьДвоичныйБуферВФайл(Соединение.responseBody, ИмяВременногоФайла); //Печать Макет.Рисунки.D10.Картинка = Новый Картинка(ИмяВременногоФайла); ТаблицаШТ = Запрос.Выполнить().Выгрузить(); Макет.Рисунки.D2.Объект.Сообщение=0; для каждого кц из ТаблицаШТ цикл Макет.Рисунки.D2.Объект.Сообщение=кц.штр; //сообщить(кц.штр); конеццикла; яч=строка(Макет.Рисунки.D2.Объект.Сообщение)+"!"; если яч="0!" тогда сообщить("АХТУНГ! Не назначен EAN-14!!!"); конецесли; Для Ш = 1 По КоличествоЭтикеток Цикл ТабДок.Вывести(Макет); ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); КонецЦикла; ТабДок.ТолькоПросмотр = Истина; ТабДок.Показать(); КонецПроцедуры Процедура ПриОткрытии() Контрагент = Справочники.Контрагенты.НайтиПоКоду("000000012"); КонецПроцедуры
Ах ты ж хитрая ж..
Это пять баллов!