Печать штрихкода в управляемом приложении Программируя под 8.2, работающем в режиме управляемого приложения, я столкнулся с проблемой печати штрихкода. Для платформы 8.1 и платформы 8.2 в режиме обычного приложения такой проблемы не было: устанавливаем элемент «1С:Печать штрихкодов» в макет и наслаждаемся вертикальными черточками. В режиме управляемого приложения вываливается ошибка:
Код 1C v 8.2 УП ОбластьВывода.Рисунки.ШтрихКод.Объект – неопределено
Что же случилось?
Дело в том, что для управляемого приложения внешние компоненты разрабатываются по другой технологии. Пример внешней компоненты для печати штрих-кода в 8.2 есть в демонстрационной конфигурации "Управляемое приложение" в макетах справочника Товары либо в конфигурации «1С:Управление торговлей» версии 11, макеты обработки «Печать этикеток и ценников».
Данная компонента, получив в качестве параметра строку штрихкода, возвращает картинку – штрихкод, которую программисту предлагается поместить в любое удобное место печатной формы.
Теперь как это сделать.
Всего обработок аж четыре штуки:
КомпонентаПечатиШтрихкодовWindows32
КомпонентаПечатиШтрихкодовWindows64
КомпонентаПечатиШтрихкодовLinux32
КомпонентаПечатиШтрихкодовLinux64
Все они загружены в одноименные макеты. Функция, подключающая внешнюю компоненту в зависимости от платформы может выглядеть так:
Код 1C v 8.х Функция ПодключитьВнешнююКомпонентуПечатиШтрихкода() Экспорт
// В зависимости от типа платформы подключим соответствующую внешнюю компоненту
СистемнаяИнформация = Новый СистемнаяИнформация;
Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда
ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("Обработка.ПечатьЭтикетокИЦенников.Макет.КомпонентаПечатиШтрихкодовWindows32", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("Обработка.ПечатьЭтикетокИЦенников.Макет.КомпонентаПечатиШтрихкодовWindows64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда
ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("Обработка.ПечатьЭтикетокИЦенников.Макет.КомпонентаПечатиШтрихкодовLinux32", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
Иначе
ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("Обработка.ПечатьЭтикетокИЦенников.Макет.КомпонентаПечатиШтрихкодовLinux64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
КонецЕсли;
// Создадим объект внешней компоненты
Если ПодключениеВыполнено Тогда
ВнешняяКомпонента = Новый("AddIn.КартинкаШтрихкода.Barcode");
Иначе
Возврат Неопределено;
КонецЕсли;
// Если нет возможности рисовать
Если НЕ ВнешняяКомпонента.ГрафикаУстановлена Тогда
// То картинку сформировать не сможем
Возврат Неопределено;
Иначе
// Установим основные параметры компоненты
// Если в системе установлен шрифт Tahoma
Если ВнешняяКомпонента.НайтиШрифт("Tahoma") = Истина Тогда
// Выбираем его как шрифт для формирования картинки
ВнешняяКомпонента.Шрифт = "Tahoma";
Иначе
// Шрифт Tahoma в системе отсутствует
// Обойдем все доступные компоненте шрифты
Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов -1 Цикл
// Получим очередной шрифт, доступный компоненте
ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч);
// Если шрифт доступен
Если ТекущийШрифт <> Неопределено Тогда
// Они и будет шрифтом для формирования штри-кода
ВнешняяКомпонента.Шрифт = ТекущийШрифт;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Утановим размер шрифта
ВнешняяКомпонента.РазмерШрифта = 10;
Возврат ВнешняяКомпонента;
КонецЕсли;
КонецФункции
В коде выше все компоненты загружены в макеты обработки «ПечатьЭтикетокИЦенников». В принципе ничто не мешает поместить их в любое иное место. Вызов функции осуществляется командой:
Код 1C v 8.х ВнешняяКомпонента = ПодключитьВнешнююКомпонентуПечатиШтрихкода();
Если что-то не получилось – возвращает НЕОПРЕДЕЛЕНО.
Далее опишем функцию, которая, получив данные, сформирует нужную нам картинку с штрихкодом:
Код 1C v 8.х Функция ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, Штрихкод, Ширина, Высота) Экспорт
// Зададим размер картинки
ВнешняяКомпонента.Ширина =Ширина;
ВнешняяКомпонента.Высота =Высота;
// Разрешим компоненте самой определять тип кода
ВнешняяКомпонента.АвтоТип = истина;
// Если код содержит контрольный символ, обязательно указываем
ВнешняяКомпонента.СодержитКС = СтрДлина(Штрихкод) = 13;
// Если отображать контрольный символ не нужно
// ВнешняяКомпонента.ВидимостьКС = Ложь;
// Формируем картинку штрихкода
ВнешняяКомпонента.ЗначениеКода = Штрихкод;
// Если установленная нами ширина меньше минимально допустимой для этого штрихкода
Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
// Скорректируем ширину
ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода + 10;
КонецЕсли;
// Сформируем картинку
ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();
// Если картинка сформировалась
Если ДвоичныеДанныеКартинки <> Неопределено Тогда
// Формируем из двоичных данных
Возврат Новый Картинка(ДвоичныеДанныеКартинки);
КонецЕсли;
Возврат Неопределено;
КонецФункции
В данной функции используется автоопределение типа штрихкода командой
Код 1C v 8.х ВнешняяКомпонента.АвтоТип = истина;
Можно тип штрихкода указать вручную:
Код 1C v 8.х ВнешняяКомпонента.АвтоТип = Ложь;
ВнешняяКомпонента.ТипКода = 1; // указан тип EAN13
ТипКода - число от 0 до 15: 0 - EAN8, 1 - EAN13, 2 - EAN128. Вот полный список типов по порядку:
EAN8, EAN13, EAN128, Code39, Code128, Code16k, PDF417, Standart (Industrial) 2 of 5, Interleaved 2 of 5, Расширение Code39, Code93, ITF14, RSS14, CodaBar, EAN13 AddOn 2, EAN13 AddOn 5.
Кроме типа штрихкода, компонента имеет ряд других свойств, например ВнешняяКомпонента.ОтображатьТекст, ВнешняяКомпонента.РазмерШрифта и прочие, можно посмотреть в свойствах.
Наконец последнее - вывод штрихкода. Для этого в макет поместим картинку с именем «Штрихкод». Получаем и выводим штрихкод в область командой:
Код 1C v 8.х ОбластьЗначение.Рисунки.Штрихкод.Картинка = ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, Штрихкод, 50, 30);
Где
Штрихкод – переменная, содержащая строку штрихкода номенклатуры, 50 – требуемая ширина, 30 – высота картинки. В макете размер картинки лучше всего поставить «Реальный размер».
Замечание. Сразу бросается в глаза то, что я вручную указываю размер требуемой картинки – 50 на 30. Возникает вопрос, а нельзя ли размеры требуемой картинки получить из картинки на макете? Конечно можно:
Код 1C v 8.х ОбластьЗначение.Рисунки.Штрихкод.Ширина
ОбластьЗначение.Рисунки.Штрихкод.Высота
К сожалению, цифры получаемые этими командами почему-то слишком малы. Как получить реальный видимый размер картинки я пока не знаю, может кто подскажет?
Источник Категория:
Штрих-код (barcode) Вывод картинки в строках отчета на СКД В этом примере показан метод вывода в строку отчета картинки, вид которой завист от значения другого поля.
Ради примера, в отчет выведем справоник «Банки» - реквизит «Ссылка» и картинку возле этого реквизита. Вид картинки зависит от значения реквизита «ЭтоГруппа»
Создаем новый
отчет - Основная схема компоновки данных:
В
Вычисляемые поля добавлено поле «ПолеКартинка». В выражение добавлено значение «%Картинка%», поэтому выражению будем искать область ячеек куда необходимо вставить нашу картинку:
В это поле будет выводится картинка.
В настройках указываем:
В модуле объекта пишем код:
Код 1C v 8.х Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДокументРезультат.Очистить();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
//ПроцессорВывода.Вывести(ДокументРезультат);
ПолеПоКоторомуНеобходимоПолучитьЗначение = "Ссылка";
ПроцессорВывода.НачатьВывод();
Пока истина Цикл
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Если ЭлементРезультата = Неопределено Тогда
прервать;
КонецЕсли;
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
Если ЭлементРезультата.ЗначенияПараметров.Количество() > 0 Тогда
ЗначениеВыводимыхДанных = Неопределено;
Для каждого ЗначениеПараметра из ЭлементРезультата.ЗначенияПараметров Цикл
Если ТипЗнч(ЗначениеПараметра.Значение) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
ПоляРасшифровки = ДанныеРасшифровки.Элементы[ЗначениеПараметра.Значение].ПолучитьПоля();
Для Каждого ПолеРасшифровки из ПоляРасшифровки Цикл
Если ПолеРасшифровки.Поле = ПолеПоКоторомуНеобходимоПолучитьЗначение Тогда
ЗначениеВыводимыхДанных = ПолеРасшифровки.Значение;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(ЗначениеВыводимыхДанных) Тогда
Рис = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рис.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
Индекс = ДокументРезультат.Рисунки.Индекс(Рис);
Если ЗначениеВыводимыхДанных.ЭтоГруппа Тогда
ДокументРезультат.Рисунки[Индекс].Картинка = БиблиотекаКартинок.ГруппаИЭлемент;
Иначе
ДокументРезультат.Рисунки[Индекс].Картинка = БиблиотекаКартинок.Сформировать;
КонецЕсли;
ВысотаТабДок = ДокументРезультат.ВысотаТаблицы;
ОбластьДляКартинки = ДокументРезультат.НайтиТекст("%Картинка%");
Если ОбластьДляКартинки <> Неопределено Тогда
ДокументРезультат.Рисунки[Индекс].Расположить(ОбластьДляКартинки);
ОбластьДляКартинки.Текст = "%КартинкаДобавлена%"
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
КонецПроцедуры
В результате:
Скачать пример этого отчета(Работает в любой конфишурации где есть справочник Банки):
Скачивать файлы может только зарегистрированный пользователь! Категория:
Схема Компоновки Данных Печать штрихкода 1. Для того чтобы вставить объект для печати штрихкода в табличный документ выполните последовательно следующие действия:
Меню Таблица - Рисунки - Вставить объект
Если библиотека 1C Bar Code установлена корректно, в списке выбора внешних объектов появится строка "1С.V8.Печать штрих-кодов" (режим выбора как элемент управления):
2. Разместите рисунок объекта в нужной области печатной формы, установить размер колонки и рисунка так, чтобы ширина одного и другого не мешали выводу на печать
3. Далее необходимо внести изменения в код внешней обработки, которую планируется подключить в качестве внешней печатной формы. Первым делом нужно отредактировать текст запроса, добавив туда информацию из регистра сведений "Штрихкоды". Это позволит использовать два нужных нам измерения - сам штрихкод и тип штрихкода.
Код 1C v 8.х Запрос.Текст = "ВЫБРАТЬ
| РеализацияТоваровУслугТовары.НомерСтроки,
| РеализацияТоваровУслугТовары.Номенклатура.Артикул КАК Артикул,
| РеализацияТоваровУслугТовары.Номенклатура,
| РеализацияТоваровУслугТовары.Номенклатура.НаименованиеПолное КАК Товар,
| РеализацияТоваровУслугТовары.Количество,
| РеализацияТоваровУслугТовары.ЕдиницаИзмерения КАК ЕдиницаЦены,
| МестаХраненияНоменклатуры.МестоХранения.Наименование КАК Склад,
| Штрихкоды.Штрихкод,
| Штрихкоды.ТипШтрихкода
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияНоменклатуры КАК
МестаХраненияНоменклатуры
| ПО РеализацияТоваровУслугТовары.Номенклатура =
МестаХраненияНоменклатуры.Номенклатура
| И РеализацияТоваровУслугТовары.Склад =
МестаХраненияНоменклатуры.Склад
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
| ПО РеализацияТоваровУслугТовары.Номенклатура = Штрихкоды.Владелец
| И РеализацияТоваровУслугТовары.ЕдиницаИзмерения.ЕдиницаПоКлассификатору =
| Штрихкоды.ЕдиницаИзмерения.ЕдиницаПоКлассификатору
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка = &СсылкаНаОбъект
|УПОРЯДОЧИТЬ ПО
| Склад УБЫВ";
После внесения изменений в макет и запрос обработки, требуется отредактировать способ заполнения данными областей макета с учетом внесенных изменений. Самое интересное в этом примере кода процедуры - способ передачи данных в объект рисунка печати штрихкода:
Код 1C v 8.х // Строки накладной
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
ОбластьМакета.Параметры.Заполнить(Выборка);
Если Выборка.ТипШтрихкода <> NULL И Выборка.Штрихкод <> NULL Тогда
ОбластьМакета.Рисунки.D1.Объект.ТипКода = Выборка.ТипШтрихкода.Код;
ОбластьМакета.Рисунки.D1.Объект.ТекстКода = Выборка.Штрихкод;
иначе
ОбластьМакета.Рисунки.D1.Объект.ТипКода = 0;
ОбластьМакета.Рисунки.D1.Объект.ТекстКода = "00000000";
КонецЕсли;
ТабДок.Вывести(ОбластьМакета);
КонецЦикла;
Все, больше ничего не надо, сохраняем и формируем
Категория:
Штрих-код (barcode) Добавление поддержки нестандартного штрих-кода в обработке ПечатьЭтикеток Обработка
ПечатьЭтикеток использует компоненту "1С:Печать штрихкодов"(доступную на диске ИТС) для печати штрих-кодов(далее ШК). Эта компонента поддерживает следующие типы штрих-кодов: EAN8, EAN13, EAN128, Code39, Code128.
Что делать если на предприятии используется отличный ШК, например Interleave 2 of 5, для которго есть системный шрифт @IDAutomationSHI25M, используемый для вывода ШК на экран или на принтер.
Рассмотрим как проще всего добавить поддержку этого типа ШК в обработке
ПечатьЭтикеток .
Первым делом скопируем общий макет Этикетка в макет для вывода нашего штрих-кода ЭтикеткаInterleave. В этом макете надо удалить элемент управления, связанный с компонентой "1С:Печать штрихкодов". И оформить центральное поле как параметр табличного документа ШтрихКод, выводимый шрифтом @IDAutomationSHI25M.
Далее разрешаем запуск обработки даже с неустановленной компонентой т.к. для вывода нашего ШК компонента не нужна. Для этого комментируем строчку в модуле формы обработки:
Код 1C v 8.х Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Попытка
КомпонентШК = Новый COMОбъект("V8.Barcod.1");
Макет = ПолучитьОбщийМакет("Этикетка");
ЭтикеткаОбласть = Макет.ПолучитьОбласть(1,1,4,2);
ЭтикеткаОбласть.Рисунки.Штрихкод.Объект.Сообщение = "1111111111116";
Исключение
Сообщить("Компонента 1С:Печать штрихкодов не установлена на данном компьютере!
|Возможна печать только штрих-кодов Interleave!", СтатусСообщения.Важное);
//Отказ = Истина;
КонецПопытки;
КонецПроцедуры
В общем модуле УправлениеРозничнойТорговлей также есть место проверки на компоненту
Код 1C v 8.х #Если Клиент Тогда
// Печать этикеток со штрих-кодом
//
Процедура ПечатьЭтикеток(Товары = Неопределено) Экспорт
//am+ Эта проверка нам не нужна, во первых она выполняется ПередОткрытием в форме обработки.
// Кроме того у нас есть тип штрихкода, который печататется без компоненты.
//Попытка
// КомпонентШК = Новый COMОбъект("V8.Barcod.1");
//Исключение
// Сообщить("Компонента 1С:Печать штрихкодов не установлена на данном компьютере!", СтатусСообщения.Важное);
// Возврат;
//КонецПопытки;
//am-
В обработке есть место, где выполняется проверка типа ШК. Наш ШК сейчас не пройдет проверку и печать выполнена не будет. Чтоб печать выполнялась необходимо исправить функцию в общем модуле УправлениеРозничнойТорговлей.
Код 1C v 8.х
// Возвращает значение типа штрих-кода для использования в ЭУ
// "1С:Печать штрих-кодов"
//
// Параметры
// ТипКода - ПланыВидовХарактеристик.ТипыШтрихкодов - тип, значение для которого
// нужно получить
//
// Возвращаемое значение:
// Число, которое может быть присвоено свойству ЭУ "ТипКода"
//
Функция ПолучитьЗначениеТипаШтрихкодаДляЭУ(ТипКода) Экспорт
Перем Значение;
Если ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN8 Тогда
Значение = 0;
ИначеЕсли ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13 Тогда
Значение = 1;
ИначеЕсли ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN128 Тогда
Значение = 2;
ИначеЕсли ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.Code39 Тогда
Значение = 3;
ИначеЕсли ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.Code128 Тогда
Значение = 4;
//am+
ИначеЕсли ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.Interleave20FS Тогда
Значение = 100;
//am-
Иначе
Значение = -1;
КонецЕсли;
Возврат Значение;
КонецФункции // ПолучитьЗначениеТипаШтрихкодаДляЭУ()
Мы на завершающем этапе, вносим изменения непосредственно в обработку.
Код 1C v 8.х Процедура Печать(ТаблицаТоваров) Экспорт
//am+ Так как у нас два разных макета, то нам нельзя смешивать типы ШК
// печатаемые в разных макетах. Выполним проверку.
флВремЕстьInterleave = Ложь;
флВремЕстьНеInterleave = Ложь;
Для Каждого СтрокаИзСписка Из ТаблицаТоваров Цикл
Если СтрокаИзСписка.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.Interleave20FS Тогда
флВремЕстьInterleave = Истина;
Иначе
флВремЕстьНеInterleave = Истина;
КонецЕсли;
Если флВремЕстьInterleave и флВремЕстьНеInterleave Тогда
Предупреждение("В списке одновременно встречаются штрих-коды несовместимых типов,
|Штрих-коды Interleave необходимо печатать отдельно от остальных!");
Возврат;
КонецЕсли;
КонецЦикла;
//am-
Таб = Новый ТабличныйДокумент;
Таб.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка"+СокрЛП(ИмяКомпьютера());
//am+ Используем наш макет.
Если флВремЕстьInterleave Тогда
Макет = ПолучитьОбщийМакет("ЭтикеткаInterleave");
Иначе
//am-
Макет = ПолучитьОбщийМакет("Этикетка");
КонецЕсли;
//am+ Некоторые строки в нашем макете не заработают, необходимо добавить условие.
Если Не флВремЕстьInterleave Тогда
//am-
РисунокШтрихкод = ЭтикеткаОбласть.Рисунки.Штрихкод;
КонецЕсли;
//am+
Если Не флВремЕстьInterleave Тогда
//am-
РисунокШтрихкод.Расположить(ОбластьШтрихкод);
КонецЕсли;
Если УправлениеРозничнойТорговлей.ПроверитьШтрихКод(СтрокаИзСписка.ШтрихКод,
СтрокаИзСписка.ТипШтрихкода) Тогда
//am+ здесь мы установим размер шрифта (об этом в конце статьи) и зададим параметр ШтрихКод нашего макета для вывода
Если флВремЕстьInterleave Тогда
ЭтикеткаОбласть.Параметры.Установить(0,
СформироватьШтрихКодДляМакетаЭтикеткаInterleave(СтрокаИзСписка.ШтрихКод));
ЭтикеткаОбласть.Области.ОбластьШтрихкод.Шрифт =
Новый Шрифт(ЭтикеткаОбласть.Области.ОбластьШтрихкод.Шрифт,,РезмерШрифтаInterleave);
Иначе
//am-
Попытка //попытку нужно добавить т.к. если компонента не установлена, то будут ошибки.
ЭтикеткаОбласть.Рисунки.Штрихкод.Объект.ТипКода = ТипКода;
ЭтикеткаОбласть.Рисунки.Штрихкод.Объект.Сообщение = СтрокаИзСписка.ШтрихКод;
Исключение
КонецПопытки;
КонецЕсли;
Последний штрих это добавить регулятор размера шрифта (в коде переменная РезмерШрифтаInterleave) на форму обработки:
источник Категория:
Штрих-код (barcode) 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, ИмяВременногоФайла);
//Печать
Макет = Документы.ЗаказПокупателя.ПолучитьМакет("МакетПечатиКода");
Область = Макет.ПолучитьОбласть("Код");
Область.Рисунки.КодРисунок.Картинка = Новый Картинка(ИмяВременногоФайла);
ТабДок.Вывести(Область);
Возврат ТабДок;
КонецФункции
Источник Категория:
COM-объекты, WMI, WSH Вывод картинки (изображения) на печать, в макет (табличный документ) Код 1C v 8.х // 1-й вариант
//Как вывести картинку в табличный документ?
ТабДок = Новый ТабличныйДокумент;
Макет = ОбработкаОбъект.ПолучитьМакет("Макет");
ОбластьКартинки = Макет.ПолучитьОбласть("ОбластьСКартинкой");
Картинка = Новый Картинка(ПутьККартинке);
// Элемент управления "Логотип" входит в коллекцию картинок области.
ОбластьКартинки.Рисунки.Логотип.Картинка = Картинка;
ТабДок.Вывести(ОбластьКартинки);
ТабДок.Показать();
// 2-й вариант
//Как вывести картинку в табличный документ без изменения макета?
Область = Макет.ПолучитьОбласть("Шапка");
Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Верх = 5;
Рисунок.Высота = 10;
Рисунок.Ширина = 10;
Рисунок.Лево = 5;
Рисунок.Картинка = Новый Картинка(ПутьККартинке);
Рисунок.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
ТабДок.Вывести(Область);
//3-й вариант
//ПечатьОрганизации , добавляем в макет картинку с именем Картинка1 в самую нижнюю
//область с именем ОбластьПечатьОрганизации
ОбластьПечатьОрганизации = Макет.ПолучитьОбласть("ПечатьОрганизации");
Картинка= Новый Картинка("C:\files\img\печатьОрганизации.gif") ;
ОбластьПечатьОрганизации.Рисунки.Картинка1.Картинка = картинка;
ТабДок.Вывести(ОбластьПечатьОрганизации);
// 4-й вариант динамически
ОбластьПечатьОрганизации = Макет.ПолучитьОбласть("ПечатьОрганизации");
КартинкаПечатьОрганизации = ОбластьПечатьОрганизации.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
КартинкаПечатьОрганизации.Картинка = БиблиотекаКартинок.ОбщаяКартинка1;
КартинкаПечатьОрганизации.Верх = 0;
КартинкаПечатьОрганизации.Высота = 80;
КартинкаПечатьОрганизации.Ширина = 80;
КартинкаПечатьОрганизации.Лево = 50;
КартинкаПечатьОрганизации.ГраницаСверху = Ложь;
КартинкаПечатьОрганизации.ГраницаСлева = Ложь;
КартинкаПечатьОрганизации.ГраницаСправа = Ложь;
КартинкаПечатьОрганизации.ГраницаСнизу = Ложь;
КартинкаПечатьОрганизации.РазмерКартинки = РазмерКартинки.АвтоРазмер;
ТабДок.Вывести(ОбластьПечатьОрганизации);
//5-й вариант получение картинки из хранилища значений
// Выборка.Изображение - выборка из запроса, Изображение реквизит -хранил. значений
Попытка
Путь = КаталогВременныхФайлов()+ "\1С_Картинка_"+Формат(ТекущаяДата(),"ДФ=yyyyMMddЧЧммсс")+".bmp";
КартинкаВПамяти = Выборка.Изображение.Получить();
КартинкаВПамяти.Записать(Путь);
ОбластьСостав.Рисунки.D1.Картинка = Новый Картинка(Путь);
Исключение
ОбластьСостав.Рисунки.D1.Картинка = Новый Картинка;
КонецПопытки;
Для
7.7 пример обработки, которая выводит все картинки (.jpg) из выбранного каталога (и подкаталогов) в печатную форму
Скачивать файлы может только зарегистрированный пользователь!
Вот ее код:
Код 1C v 7.x Перем Картинка, ТЗКаталога, ПутьКаталогаРисунков;
//******************************************************************************
Процедура Сформировать1()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
Картинка = СоздатьОбъект("Картинка");
т=1;
ТЗКаталога.ВыбратьСтроки();
Пока ТЗКаталога.ПолучитьСтроку() = 1 Цикл
Картинка.Загрузить(ТЗКаталога.Путь);
Сформировать = т;
Таб.ВывестиСекцию("Заголовок");
т = т+1;
КонецЦикла;
Таб.Опции(0,0,0,0);
Таб.Показать("Сформировать","");
ТЗКаталога = "";
КонецПроцедуры
//******************************************************************************
Процедура карт(карт) //Вызывается из объекта картинка на печатной форме
карт.РежимРисования(3);
карт.УстановитьКартинку(Картинка);
КонецПроцедуры //карт(карт) Вызывается из объекта картинка на печатной форме
//******************************************************************************
Процедура СканироватьКаталог(Каталог)
Перем А;
ФСО=СоздатьОбъект("ФС");
Ф=ФСО.НайтиПервыйФайл(Каталог+"*");
Пока Ф<>"" Цикл
Если (Ф<>".")И(Ф<>"..") Тогда
ФС.АтрибутыФайла(Каталог+Ф,,А);
Если Сред(А,4,1)="1" Тогда
СканироватьКаталог(Каталог+Ф+"\");
Иначе
Если (Прав(Ф,4)=".jpg") или (Прав(Ф,4)=".wmf") или (Прав(Ф,4)=".emf") или (Прав(Ф,4)=".ico") или (Прав(Ф,4)=".bmp") или (Прав(Ф,4)=".dib") или (Прав(Ф,4)=".rle") Тогда
ТЗКаталога.НоваяСтрока();
ТЗКаталога.Путь = Каталог+Ф;
ТЗКаталога.Файл = Ф; //Для поиска файла по имени (исп в другой обработке)
КонецЕсли;
КонецЕсли;
КонецЕсли;
//Сообщить(Каталог+Ф);
Ф=ФСО.НайтиСледующийФайл();
КонецЦикла;
КонецПроцедуры //СканироватьКаталог(Каталог)
//******************************************************************************
Процедура Сформировать()
Если ФС.ВыбратьКаталог(ПутьКаталогаРисунков,"Выберете папку с рисунками .jpg...",60) <> 1 Тогда
Предупреждение("Рисунки не покажу!");
Возврат;
Иначе
ТЗКаталога = СоздатьОбъект("ТаблицаЗначений");
ТЗКаталога.НоваяКолонка("Путь",,,,,,,);
ТЗКаталога.НоваяКолонка("Файл",,,,,,,);
СканироватьКаталог(ПутьКаталогаРисунков+"\");
КонецЕсли;
Сформировать1();
КонецПроцедуры
Категория:
Табличный документ Построение диаграммы Код 1C v 8.х Процедура ФормДиаграммы()
Траб=Новый ТаблицаЗначений;
Траб.Очистить();
Траб.Колонки.Добавить("ххх");
Траб.Колонки.Добавить("Норм");
Траб.Колонки.Добавить("Факт");
НовСтр=Траб.Добавить();
НовСтр.ххх="а1";
НовСтр.Норм=5;
НовСтр.Факт=10;
НовСтр=Траб.Добавить();
НовСтр.ххх="а2";
НовСтр.Норм=2;
НовСтр.Факт=15;
НовСтр=Траб.Добавить();
НовСтр.ххх="а3";
НовСтр.Норм=8;
НовСтр.Факт=14;
ТабДок = Новый ТабличныйДокумент;
Макет = Отчеты.УчетнаяКарточка.ПолучитьМакет("Диагр");
ОблДиаграмма = Макет.ПолучитьОбласть("Диагр1");
Диаграмма = ОблДиаграмма.Рисунки.D1.Объект;
Диаграмма.СерииВСтроках = Ложь;
Диаграмма.Обновление=Ложь;
Диаграмма.ИсточникДанных = Траб;
Диаграмма.Обновление=Истина;
ТабДок.Вывести(ОблДиаграмма);
ТабДок.АвтоМасштаб=Истина;
ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт;
ТабДок.Показать();
КонецПроцедуры
Полезная процедура формирования диаграммы в макете
Строить можно и в макете и в форме.
Код 1C v 8.х
Процедура ПостроитьДиаграмму(Траб,Диаграмма)
Для Каждого Колонка из Траб.Колонки Цикл
Если Траб.Колонки.Индекс(Колонка) <> 0 Тогда
Диаграмма.Серии.Добавить(Колонка.Имя);
КонецЕсли;
КонецЦикла;
Для Каждого СтрТраб из Траб Цикл
Точка=Диаграмма.Точки.Добавить(СтрТраб.Получить(0));
Индекс=0;
Для Каждого Серия из Диаграмма.Серии Цикл
Индекс=Индекс+1;
Диаграмма.УстановитьЗначение(Точка,Серия,СтрТраб.Получить(Индекс));
КонецЦикла;
КонецЦикла;
КонецПроцедуры
gwa. Григорьев В. Категория:
Диаграмма Пример определения системных каталогов пользователя ( Shell Application Namespace ) Код 1C v 8.х
App = Новый COMОбъект("Shell.Application");
// Дополнительные данные получаем так:
// Название - App.Namespace(26).Title
// Путь - App.Namespace(26).Self.Path
//Список доступных каталогов
App.Namespace(1) // Internet Explorer пример - ::{871C5380-42A0-1069-A2EA-08002B30309D}
App.Namespace(2) // Программы пример - C:\Documents and Settings\E.S.Migachev\Главное меню\Программы
App.Namespace(3) // Панель управления пример - ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}
App.Namespace(4) // Принтеры и факсы пример - ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{2227A280-3AEA-1069-A2DE-08002B30309D}
App.Namespace(5) // Мои документы пример - C:\Documents and Settings\E.S.Migachev\Мои документы
App.Namespace(6) // Избранное пример - C:\Documents and Settings\E.S.Migachev\Избранное
App.Namespace(7) // Автозагрузка пример - C:\Documents and Settings\E.S.Migachev\Главное меню\Программы\Автозагрузка
App.Namespace(8) // Недавние документы пример - C:\Documents and Settings\E.S.Migachev\Recent
App.Namespace(9) // SendTo пример - C:\Documents and Settings\E.S.Migachev\SendTo
App.Namespace(10) // Корзина пример - ::{645FF040-5081-101B-9F08-00AA002F954E}
App.Namespace(11) // Главное меню пример - C:\Documents and Settings\E.S.Migachev\Главное меню
App.Namespace(13) // Моя музыка пример - C:\Documents and Settings\E.S.Migachev\Мои документы\Моя музыка
App.Namespace(14) // Мои видеозаписи пример - C:\Documents and Settings\E.S.Migachev\Мои документы\Мои видеозаписи
App.Namespace(16) // Рабочий стол пример - C:\Documents and Settings\E.S.Migachev\Рабочий стол
App.Namespace(17) // Мой компьютер пример - ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
App.Namespace(18) // Сетевое окружение пример - ::{208D2C60-3AEA-1069-A2D7-08002B30309D}
App.Namespace(19) // NetHood пример - C:\Documents and Settings\E.S.Migachev\NetHood
App.Namespace(20) // Fonts пример - C:\WINDOWS\Fonts
App.Namespace(21) // Шаблоны пример - C:\Documents and Settings\E.S.Migachev\Шаблоны
App.Namespace(22) // Главное меню пример - C:\Documents and Settings\All Users\Главное меню
App.Namespace(23) // Программы пример - C:\Documents and Settings\All Users\Главное меню\Программы
App.Namespace(24) // Автозагрузка пример - C:\Documents and Settings\All Users\Главное меню\Программы\Автозагрузка
App.Namespace(25) // Рабочий стол пример - C:\Documents and Settings\All Users\Рабочий стол
App.Namespace(26) // Application Data пример - C:\Documents and Settings\E.S.Migachev\Application Data
App.Namespace(27) // PrintHood пример - C:\Documents and Settings\E.S.Migachev\PrintHood
App.Namespace(28) // Application Data пример - C:\Documents and Settings\E.S.Migachev\Local Settings\Application Data
App.Namespace(31) // Избранное пример - C:\Documents and Settings\All Users\Избранное
App.Namespace(32) // Temporary Internet Files пример - C:\Documents and Settings\E.S.Migachev\Local Settings\Temporary Internet Files
App.Namespace(33) // Cookies пример - C:\Documents and Settings\E.S.Migachev\Cookies
App.Namespace(34) // History пример - C:\Documents and Settings\E.S.Migachev\Local Settings\History
App.Namespace(35) // Application Data пример - C:\Documents and Settings\All Users\Application Data
App.Namespace(36) // WINDOWS пример - C:\WINDOWS
App.Namespace(37) // system32 пример - C:\WINDOWS\system32
App.Namespace(38) // Program Files пример - C:\Program Files
App.Namespace(39) // Мои рисунки пример - C:\Documents and Settings\E.S.Migachev\Мои документы\Мои рисунки
App.Namespace(40) // E.S.Migachev пример - C:\Documents and Settings\E.S.Migachev
App.Namespace(41) // system32 пример - C:\WINDOWS\system32
App.Namespace(43) // Common Files пример - C:\Program Files\Common Files
App.Namespace(45) // Шаблоны пример - C:\Documents and Settings\All Users\Шаблоны
App.Namespace(47) // Администрирование пример - C:\Documents and Settings\All Users\Главное меню\Программы\Администрирование
App.Namespace(48) // Администрирование пример - C:\Documents and Settings\E.S.Migachev\Главное меню\Программы\Администрирование
App.Namespace(49) // Сетевые подключения пример - ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{7007ACC7-3202-11D1-AAD2-00805FC1270E}
App.Namespace(53) // Музыка (общая) пример - C:\Documents and Settings\All Users\Документы\Моя музыка
App.Namespace(54) // Рисунки (общие) пример - C:\Documents and Settings\All Users\Документы\Мои рисунки
App.Namespace(55) // Видео (общее) пример - C:\Documents and Settings\All Users\Документы\Мои видеозаписи
App.Namespace(56) // Resources пример - C:\WINDOWS\Resources
App.Namespace(57) // 0419 пример - C:\WINDOWS\Resources\0419
App.Namespace(59) // CD Burning пример - C:\Documents and Settings\E.S.Migachev\Local Settings\Application Data\Microsoft\CD Burning
Категория:
COM-объекты, WMI, WSH Как сформировать, вывести на печать таблицу, табличный документ Код 1C v 8.х //Получение макета и областей вывода
Макет = ПолучитьМакет("Отчет");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьКартинки = Макет.ПолучитьОбласть("ОбластьСКартинкой")
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
ТабДок = Новый ТабличныйДокумент;
//Вывод параметров в область
ОбластьЗаголовок.Параметры.ДатаНач = ДатаНач;
ОбластьЗаголовок.Параметры.ДатаКон = ДатаКон;
//Вывод области в табличный документ
ТабДок.Вывести(ОбластьЗаголовок);
//Вывод картинки
Картинка = Новый Картинка(ПутьККартинке);
// Элемент управления "Логотип" входит в коллекцию картинок области.
ОбластьКартинки.Рисунки.Логотип.Картинка = Картинка;
ТабДок.Вывести(ОбластьКартинки);
//Выведем шапку таблицы
ТабДок.Вывести(ОбластьШапкаТаблицы);
//Выведм строки из Результата запроса
ВыборкаДетали = Результат.Выбрать();
Пока ВыборкаДетали.Следующий() Цикл
//Заполним параметры значениями свойств переданного объекта. Заполняются только те параметры, имена которых совпадают с именами свойств объекта.
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
//Запишем в и область Описание примечание из запроса
ОбластьДетальныхЗаписей.Область("Описание").Примечание.Текст = ВыборкаДетали.СодержаниеСобытия;
ТабДок.Вывести(ОбластьДетальныхЗаписей);
КонецЦикла;
//Зададим параметры вывода
ТабДок.АвтоМасштаб=истина; // уместить на одну страницу
ТабДок.ТолькоПросмотр=истина;
ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт;
ТабДок.ОтображатьСетку=Ложь;
ТабДок.ОтображатьЗаголовки=Ложь;
//Выведем полученный документ
ТабДок.Показать();
Код 1C v 7.x
Процедура ПросмотрДокумента()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("РасходныйДокумент");
Секция = Таб.ПолучитьСекцию("Шапка");
Таб.ВывестиСекцию(Секция);
Секция = Таб.ПолучитьСекцию("ПодписьТаблицы");
Таб.ВывестиСекцию(Секция);
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
Секция = Таб.ПолучитьСекцию("ТабличнаяЧасть");
Таб.ВывестиСекцию(Секция);
КонецЦикла;
Секция = Таб.ПолучитьСекцию("Подвал");
Таб.ВывестиСекцию(Секция);
Таб.ТолькоПросмотр(0);
Таб.Показать();
КонецПроцедуры
Категория:
Табличный документ