Использование штрихкодов в самописной конфе
По теме из базы знаний
- Направления работы программиста 1С
- Опыт интеграции ФР Штрих-М с 1С
- Автоматическое подтверждение легальности обновления базы или как обновить 100 типовых баз 1С за 5 часов
- Автоматизация распределительных центров компании "Вкусвилл" на мобильной платформе 1С
- Конфигурация "Памятка" (Справка) для внедренцев и программистов 1С + бонус: реальная база знаний.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Смотря что вы имеете ввиду. Главное получить данные со сканера - для этого нужна компонента (смотрите пример работы с торговым оборудованием в любой типовой). Остальное сугубо 1С-ное программирование.
Хотя если устроит отдельное окно для ввода ш/к, то можно и без компонент. Сканер настроить так, чтобы просто выдавал в место курсора (без разницы это ворд, эксель или спец поле ввода в 1С), и отдельное поле + кнопка для поиска по ш/к.
У нас все сканеры подключены так, чтобы в 1С срабатывало событие - так можно только при использовании внешних компонент, "преобразующих" входной поток со сканера во внешнее событие в 1С
Хотя если устроит отдельное окно для ввода ш/к, то можно и без компонент. Сканер настроить так, чтобы просто выдавал в место курсора (без разницы это ворд, эксель или спец поле ввода в 1С), и отдельное поле + кнопка для поиска по ш/к.
У нас все сканеры подключены так, чтобы в 1С срабатывало событие - так можно только при использовании внешних компонент, "преобразующих" входной поток со сканера во внешнее событие в 1С
(4) :) понятно
сформировать - это вы сами пишите процедурку
напечатать - в обычных формах чаще всего это использование 1С-овской компоненты для печати штрихкодов. Устанавливаете ее и в табличный документ можно будет вставить новый объект для печати штрихкода
- в управляемых формах другая компонента (например, она встроена в типовую УТ 11)
сформировать - это вы сами пишите процедурку
напечатать - в обычных формах чаще всего это использование 1С-овской компоненты для печати штрихкодов. Устанавливаете ее и в табличный документ можно будет вставить новый объект для печати штрихкода
- в управляемых формах другая компонента (например, она встроена в типовую УТ 11)
(12) в УТ 11 эта компонента лежит как двоичные данные в общем макете с названием "КомпонентаПечатиШтрихкодов" и комментарием "Компонента использует библиотеку ImageMagick, разработанную ImageMagick Studio LLC. Лицензия http://www.imagemagick.org/script/license.php "
а вы туда значение-то передали? в УТ 11 есть спец функция, которая по переданным данным возвращает картинку, которую уже и используем. если есть УТ-шка под рукой - гляньте как подставляется картинка ш/к в обработке Печать этикеток и ценников
(15) sommid, об этой функции идет речь??
Функция ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, Ширина, Высота, Штрихкод, ТипКода = 0)
// Зададим размер картинки
ВнешняяКомпонента.Ширина = Окр(Ширина);
ВнешняяКомпонента.Высота = Окр(Высота);
// Разрешим компоненте самой определять тип кода
ВнешняяКомпонента.АвтоТип = Ложь;
ВнешняяКомпонента.ТипКода = ТипКода;
// Или установим код EAN-13
// ВнешняяКомпонента.ТипКода = 1;
//
// Тип смотрим в документации на внешнуюю компоненту
// Если код содержит контрольный символ, обязательно указываем
ВнешняяКомпонента.СодержитКС = СтрДлина(Штрихкод) = 13;
// Если отображать контрольный символ не нужно
// ВнешняяКомпонента.ВидимостьКС = Ложь;
// Формируем картинку штрихкода
ВнешняяКомпонента.ЗначениеКода = Штрихкод;
// Если установленная нами ширина меньше минимально допустимой для этого штрихкода
Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
// Скорректируем ширину
ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода + 10;
КонецЕсли;
// Сформируем картинку
ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();
// Если картинка сформировалась
Если ДвоичныеДанныеКартинки <> Неопределено Тогда
// Формируем из двоичных данных
Возврат Новый Картинка(ДвоичныеДанныеКартинки);
КонецЕсли;
Возврат Неопределено;
КонецФункции
Показать
(19) ong1990,
Проще некуда :)
&НаСервере
Процедура СформироватьНаСервере()
Результат.Очистить();
ВремОбъект = РеквизитФормыВЗначение("Объект");
Макет = ВремОбъект.ПолучитьМакет("Макет");
Область = Макет.ПолучитьОбласть("Строка|Колонка");
Рисунок = Область.Рисунки.ШтрихКод;
Эталон = Обработки.ПечатьШтрихкода.ПолучитьМакет("Эталон");
КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина" , Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Высота" , Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("ТипКода" , ТипШтрихкода);
ПараметрыШтрихкода.Вставить("ОтображатьТекст" , Истина);
ПараметрыШтрихкода.Вставить("РазмерШрифта" , 12);
ПараметрыШтрихкода.Вставить("УголПоворота" , Число(УголПоворота));
ПараметрыШтрихкода.Вставить("Штрихкод" , Штрихкод);
ПараметрыШтрихкода.Вставить("ПрозрачныйФон" , ПрозрачныйФон);
Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
Рисунок.Картинка = Картинка;
Результат.Вывести(Область);
КонецПроцедуры
Функция ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода) Экспорт
ВнешняяКомпонента = МенеджерОборудованияСерверПовтИсп.ПодключитьВнешнююКомпонентуПечатиШтрихкода();
Если ВнешняяКомпонента = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода!'");
КонецЕсли;
// Зададим размер картинки
ВнешняяКомпонента.Ширина = Окр(ПараметрыШтрихкода.Ширина);
ВнешняяКомпонента.Высота = Окр(ПараметрыШтрихкода.Высота);
ВнешняяКомпонента.АвтоТип = Ложь;
Если ПараметрыШтрихкода.ТипКода = 99 Тогда
ТипШтрихкодаВрем = ОпределитьТипШтрихкода(ПараметрыШтрихкода.Штрихкод);
Если ТипШтрихкодаВрем = "EAN8" Тогда
ВнешняяКомпонента.ТипКода = 0;
ИначеЕсли ТипШтрихкодаВрем = "EAN13" Тогда
ВнешняяКомпонента.ТипКода = 1;
// Если код содержит контрольный символ, обязательно указываем
ВнешняяКомпонента.СодержитКС = СтрДлина(ПараметрыШтрихкода.Штрихкод) = 13;
ИначеЕсли ТипШтрихкодаВрем = "EAN128" Тогда
ВнешняяКомпонента.ТипКода = 2;
ИначеЕсли ТипШтрихкодаВрем = "CODE39" Тогда
ВнешняяКомпонента.ТипКода = 3;
ИначеЕсли ТипШтрихкодаВрем = "CODE128" Тогда
ВнешняяКомпонента.ТипКода = 4;
ИначеЕсли ТипШтрихкодаВрем = "ITF14" Тогда
ВнешняяКомпонента.ТипКода = 11;
Иначе
ВнешняяКомпонента.АвтоТип = Истина;
КонецЕсли;
Иначе
ВнешняяКомпонента.АвтоТип = Ложь;
ВнешняяКомпонента.ТипКода = ПараметрыШтрихкода.ТипКода;
КонецЕсли;
Если ПараметрыШтрихкода.Свойство("ПрозрачныйФон") Тогда
ВнешняяКомпонента.ПрозрачныйФон = ПараметрыШтрихкода.ПрозрачныйФон;
КонецЕсли;
ВнешняяКомпонента.ОтображатьТекст = ПараметрыШтрихкода.ОтображатьТекст;
// Формируем картинку штрихкода
ВнешняяКомпонента.ЗначениеКода = ПараметрыШтрихкода.Штрихкод;
Если ПараметрыШтрихкода.Свойство("УголПоворота") Тогда
ВнешняяКомпонента.УголПоворота = ПараметрыШтрихкода.УголПоворота;
Иначе
ВнешняяКомпонента.УголПоворота = 0;
КонецЕсли;
// Если установленная нами ширина меньше минимально допустимой для этого штрихкода
Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода;
КонецЕсли;
// Если установленная нами высота меньше минимально допустимой для этого штрихкода
Если ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Тогда
ВнешняяКомпонента.Высота = ВнешняяКомпонента.МинимальнаяВысотаКода;
КонецЕсли;
Если ПараметрыШтрихкода.Свойство("РазмерШрифта") И (ПараметрыШтрихкода.РазмерШрифта > 0)
И (ПараметрыШтрихкода.ОтображатьТекст) И (ВнешняяКомпонента.РазмерШрифта <> ПараметрыШтрихкода.РазмерШрифта) Тогда
ВнешняяКомпонента.РазмерШрифта = ПараметрыШтрихкода.РазмерШрифта;
КонецЕсли;
// Сформируем картинку
ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();
// Если картинка сформировалась
Если ДвоичныеДанныеКартинки <> Неопределено Тогда
// Формируем из двоичных данных
Возврат Новый Картинка(ДвоичныеДанныеКартинки);
КонецЕсли;
Возврат Неопределено;
КонецФункции
ПоказатьПроще некуда :)
он меняется для разных ш/к, но всегда не соответствует переданному или выводится всегда одинаковый? пару примеров можете привести.. вроде хитростей особо нету, все нормально работает, у нас несколько типов ш/к используется и все ок
(28) sommid,
ТАбличныйДокумент=Новый ТабличныйДокумент;
ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
// Создадим объект внешней компоненты.
Если ПодключениеВыполнено Тогда
ВнешняяКомпонента = Новый("AddIn.КартинкаШтрихкода.Barcode");
Иначе
Возврат Неопределено;
КонецЕсли;
Для каждого элемент из МассивОбъектов цикл
Для каждого ном из элемент.Товары цикл
ТАбличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
Макет=ПолучитьМакет("ПФ_MXL_ЭтикеткаТовара");
ОбластьКонтрагент=МАкет.ПолучитьОбласть("Контрагент");
ОбластьШапка=МАкет.ПолучитьОбласть("Шапка");
ОбластьНоменклатура=Макет.ПолучитьОбласть("номенклатура");
ОбластьАртикул=Макет.ПолучитьОбласть("Артикул");
ОбластьПроизводитель=Макет.ПолучитьОбласть("Производитель");
ОбластьКоличество=Макет.ПолучитьОбласть("Количество");
ОбластьШтрихкод=Макет.ПолучитьОбласть("Штрихкод");
ОбластьКонтрагент.Параметры.Контрагент=элемент.Контрагент;
ОбластьНоменклатура.Параметры.номенклатура=ном.Номенклатура;
ОбластьАртикул.Параметры.Артикул=ном.Номенклатура.Артикул;
ОбластьПроизводитель.Параметры.Производитель=ном.Номенклатура.Марка;
ОбластьКоличество.Параметры.Количество=Ном.Количество;
Если ВнешняяКомпонента = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода!'");
КонецЕсли;
Номенклатура=ном.Номенклатура;
Штрихкод =Число( ШтрихкодНоменклатуры(Номенклатура));
Рисунок=ОбластьШтрихкод.Рисунки.штрихкодРисунок;
ТипШтрихкода=1;
Эталон = Обработки.ПечатьШтрихкода.ПолучитьМакет("Эталон");
КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина" , Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Высота" , Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("ТипКода" , ТипШтрихкода);
ПараметрыШтрихкода.Вставить("ОтображатьТекст" , Истина);
ПараметрыШтрихкода.Вставить("РазмерШрифта" , 12);
ПараметрыШтрихкода.Вставить("Штрихкод" , Штрихкод);
Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
Рисунок.Картинка = Картинка;
ТАбличныйДокумент.Вывести(ОбластьШапка);
ТАбличныйДокумент.Вывести(ОбластьКонтрагент);
ТАбличныйДокумент.Вывести(ОбластьНоменклатура);
ТАбличныйДокумент.Вывести(ОбластьАртикул);
ТАбличныйДокумент.Вывести(ОбластьПроизводитель);
ТАбличныйДокумент.Вывести(ОбластьКоличество);
ТАбличныйДокумент.Вывести(ОбластьШтрихкод);
КонецЦикла;
КонецЦикла;
Возврат ТАбличныйДокумент;
Показать
значит надо разбираться со ш/к и передаваемыми настройками.
я у себя немножко правил эту функцию. В частности управление параметром СодержитКС.
я тип ш/к явно не передаю, т.е. использую автоопределение ш/к:
я у себя немножко правил эту функцию. В частности управление параметром СодержитКС.
я тип ш/к явно не передаю, т.е. использую автоопределение ш/к:
Функция ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода) Экспорт
...
Если Число(ПараметрыШтрихкода.ТипКода) = 99 Тогда
ТипШтрихкодаВрем = ОпределитьТипШтрихкода(ПараметрыШтрихкода.Штрихкод);
Если ТипШтрихкодаВрем = "EAN8" Тогда
ВнешняяКомпонента.ТипКода = 0;
ИначеЕсли ТипШтрихкодаВрем = "EAN13" Тогда
ВнешняяКомпонента.ТипКода = 1;
// Если код содержит контрольный символ, обязательно указываем
ВнешняяКомпонента.СодержитКС = СтрДлина(ПараметрыШтрихкода.Штрихкод) = 13;
...
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот