Ошибка при печати штрихкодов на х64-клиенте 1С: Компонента 1С:Печать штрихкодов не установлена на данном компьютере

Публикация № 943944

Разработка - Практика программирования

Буквально вчера столкнулся с проблемой, что типовая 1С УТ 10.3 при печати формы с штрихкодом стала выдавать: Компонента 1С:Печать штрихкодов не установлена на данном компьютере. Нигде я не нашел инструкции, как это быстренько решить. Поэтому приведу здесь своё решение и надеюсь, что оно кому-нибудь поможет хоть немного сэкономить время.

Итак, буквально вчера я столкнулся с проблемой, что типовая 1С УТ 10.3 при печати формы с штрихкодом стала выдавать:

Компонента 1С:Печать штрихкодов не установлена на данном компьютере

 

 Код, инициализирующий данную компоненту:

Попытка
	КомпонентШК = Новый COMОбъект("V8.Barcod.1");
Исключение
	Сообщить("Компонента 1С:Печать штрихкодов не установлена на данном компьютере!", СтатусСообщения.Важное);
	Возврат;
КонецПопытки;


Как показал дальнейший поиск информации, проблема в том, что клиентское приложение, в котором штрихкоды не хотели печататься - 64-х разрядное (в 32-х разрядных клиентах печаталось всё как надо). Кстати, на сайте 1С тут так же лежит 32-х разрядная компонента, которая никак проблему не решает, а описание того, что делать в случае 64-х разрядных клиентов отсутствует. 

Разумеется, самым очевидным видится решение - просто установить вместо х64 - клиента его 32-х разрядную версию. Но, мне что-то показалось это слишком простым вариантом (хотя и он полностью рабочий).

Следующее, что я решил попробовать это воспользоваться инструкцией по запуску x32 COM-объектов из x64 приложения, но ничего не заработало.

После этого, я решил посмотреть в сторону УТ11 и того как там решена эта проблема(и есть ли она там). Я развернул УТ11(11.4.5.143) и оказалось, что там такой проблемы просто нет.

В УТ11 в общем модуле "МенеджерОборудованияСерверПовтИсп" имеется функция, которая инициализирует соответствующую нативную компоненту, которая лежит в общем макете "КомпонентаПечатиШтрихкодов". Причем там лежит сразу несколько компонент - и под х32, и под х64 и под линукс (см. один из рисунков. Их все можно получить выгрузив данные из макета в каталог на диске).

 Поскольку я не особенно хотел что-то кодировать, то я в свою конфигурацию просто скопировал общий макет "КомпонентаПечатиШтрихкодов", а так же несколько вспомогательных функций (я здесь приведу их полный текст, а то ведь вдруг у кого нет под рукой УТ11):

 

// Функция выполняет подключение внешней компоненты и ее первоначальную настройку.
// Возвращаемое значение: НЕОПРЕДЕЛЕНО - компоненту не удалось загрузить.
Функция ПодключитьВнешнююКомпонентуПечатиШтрихкода() Экспорт
	
	ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
	
	// Создадим объект внешней компоненты.
	Если ПодключениеВыполнено Тогда
		ВнешняяКомпонента = Новый("AddIn.КартинкаШтрихкода.Barcode");
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
	// Если нет возможности рисовать.
	Если НЕ ВнешняяКомпонента.ГрафикаУстановлена Тогда
		// То картинку сформировать не сможем.
		Возврат Неопределено;
	Иначе
		// Установим основные параметры компоненты.
		// Если в системе установлен шрифт Tahoma.
		Если ВнешняяКомпонента.НайтиШрифт("Tahoma") Тогда
			// Выбираем его как шрифт для формирования картинки.
			ВнешняяКомпонента.Шрифт = "Tahoma";
		Иначе
			// Шрифт Tahoma в системе отсутствует.
			// Обойдем все доступные компоненте шрифты.
			Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов -1 Цикл
				// Получим очередной шрифт, доступный компоненте.
				ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч);
				// Если шрифт доступен
				Если ТекущийШрифт <> Неопределено Тогда
					// Они и будет шрифтом для формирования штрихкода.
					ВнешняяКомпонента.Шрифт = ТекущийШрифт;
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		// Установим размер шрифта
		ВнешняяКомпонента.РазмерШрифта = 12;
		
		Возврат ВнешняяКомпонента;
	КонецЕсли;
	
КонецФункции

Функция ОпределитьТипШтрихкода(Штрихкод) Экспорт
	
	ТипШтрихкодаЗнач = "";	
	ДлинаШтрихкода = СтрДлина(Штрихкод);
	
	Если ДлинаШтрихкода = 0 Тогда
		Возврат ТипШтрихкодаЗнач;
	КонецЕсли;
	
	Сумма = 0;
	
	Если ДлинаШтрихкода = 14 Тогда // ITF14
		
		Коэффициент = 1; 
		Для Сч = 1 По 13 Цикл
			ВремКодСимвола = КодСимвола(Штрихкод, Сч);
			Если ВремКодСимвола < 48 Или ВремКодСимвола > 57 Тогда
				Прервать;
			КонецЕсли;
			Сумма       = Сумма + Коэффициент * (ВремКодСимвола - 48);
			Коэффициент = 4 - Коэффициент;
		КонецЦикла;
		Сумма = (10 - Сумма % 10) % 10;
		Если КодСимвола(Штрихкод, 14) = Сумма + 48 Тогда
			ТипШтрихкодаЗнач = "ITF14";
 		КонецЕсли;
		
	ИначеЕсли ДлинаШтрихкода = 13 Тогда // EAN13
		
		EAN13 = Истина;
		Коэффициент = 1;
		Для Сч = 1 По 12 Цикл
			ВремКодСимвола = КодСимвола(Штрихкод, Сч);
			Если ВремКодСимвола < 48 Или ВремКодСимвола > 57 Тогда
				EAN13 = Ложь;
				Прервать;
			КонецЕсли;
			Сумма  = Сумма + Коэффициент * (ВремКодСимвола - 48);
			Коэффициент = 4 - Коэффициент;
		КонецЦикла;
		Сумма = (10 - Сумма % 10) % 10;
		ПроверочныйСимвол = Символ(Сумма + 48);
		Если EAN13 И ПроверочныйСимвол = Прав(Штрихкод, 1) Тогда
			ТипШтрихкодаЗнач = "EAN13";
		КонецЕсли;
		
	ИначеЕсли ДлинаШтрихкода = 8 Тогда // EAN8
		
		EAN8 = Истина;
		Коэффициент = 3;
		Для Сч = 1 По 7 Цикл
			ВремКодСимвола = КодСимвола(Штрихкод, Сч);
			Если ВремКодСимвола < 48 Или ВремКодСимвола > 57 Тогда
				EAN8 = Ложь;
				Прервать;
			КонецЕсли;
			Сумма       = Сумма + Коэффициент * (ВремКодСимвола - 48);
			Коэффициент = 4 - Коэффициент;
		КонецЦикла;
		Сумма = (10 - Сумма % 10) % 10;
		Если EAN8 И (КодСимвола(Штрихкод, 8) = Сумма + 48) Тогда
			ТипШтрихкодаЗнач = "EAN8";
		КонецЕсли;
		
	КонецЕсли;
	
	Если ТипШтрихкодаЗнач= "" Тогда // CODE39
		
		CODE39 = Истина;
		Для Сч = 1 По ДлинаШтрихкода Цикл
			ВремКодСимвола = КодСимвола(Штрихкод, Сч);
			Если (ВремКодСимвола <> 32)
				И (ВремКодСимвола < 36 Или ВремКодСимвола > 37)
				И (ВремКодСимвола <> 43)
				И (ВремКодСимвола < 45 Или ВремКодСимвола > 57)
				И (ВремКодСимвола < 65 Или ВремКодСимвола > 90) Тогда
				CODE39 = Ложь;
				Прервать;
			КонецЕсли;
		КонецЦикла;
		
		Если CODE39 Тогда
			ТипШтрихкодаЗнач = "CODE39";
		КонецЕсли                                                     
		
	КонецЕсли;
	
	Если ТипШтрихкодаЗнач= ""  Тогда // CODE128
		// CODE128 символы ASCII от 0 до 127 (цифры от «0» до «9», буквы от «A» до «Z» и от «a» до «z») и специальные символы;
		CODE128 = Истина;
		Для Сч = 1 По ДлинаШтрихкода Цикл
			ВремКодСимвола = КодСимвола(Штрихкод, Сч);
			Если (ВремКодСимвола > 127) Тогда
				CODE128 = Ложь;
			Прервать;
			КонецЕсли;
		КонецЦикла;
		
		Если CODE128 Тогда
			ТипШтрихкодаЗнач = "CODE128";
		КонецЕсли                                                     
		
	КонецЕсли;
	
	Если ТипШтрихкодаЗнач = "CODE128"  Тогда // EAN128
		// В коде EAN128 регламентирован словарь CODE128 но регламентированы группы кодов.
		Если КодСимвола(Штрихкод, 1) = 40 Тогда
			ТипШтрихкодаЗнач = "EAN128";
		КонецЕсли;
	КонецЕсли;
	
	Возврат ТипШтрихкодаЗнач;
	
КонецФункции

Функция ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода) Экспорт
	
	//ВнешняяКомпонента = МенеджерОборудованияСерверПовтИсп.ПодключитьВнешнююКомпонентуПечатиШтрихкода();
	ВнешняяКомпонента = ПодключитьВнешнююКомпонентуПечатиШтрихкода();
	
	Если ВнешняяКомпонента = Неопределено Тогда
		ВызватьИсключение НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода.'");
	КонецЕсли;
	
	// Зададим размер формируемой картинки.
	ВнешняяКомпонента.Ширина = Окр(ПараметрыШтрихкода.Ширина);
	ВнешняяКомпонента.Высота = Окр(ПараметрыШтрихкода.Высота);
	
	ВнешняяКомпонента.АвтоТип = Ложь;
	
	Если ПараметрыШтрихкода.ТипКода = 99 Тогда
		ТипШтрихкодаВрем = ОпределитьТипШтрихкода(ПараметрыШтрихкода.Штрихкод);
		Если ТипШтрихкодаВрем = "EAN8" Тогда
			ВнешняяКомпонента.ТипКода = 0;
		ИначеЕсли ТипШтрихкодаВрем = "EAN13" Тогда
			ВнешняяКомпонента.ТипКода = 1;
			// Если код содержит контрольный символ, обязательно указываем.
			ВнешняяКомпонента.СодержитКС = СтрДлина(ПараметрыШтрихкода.Штрихкод) = 13;
		ИначеЕсли ТипШтрихкодаВрем = "EAN128" Тогда
			ВнешняяКомпонента.ТипКода = 2;
		ИначеЕсли ТипШтрихкодаВрем = "CODE39" Тогда
			ВнешняяКомпонента.ТипКода = 3;
		ИначеЕсли ТипШтрихкодаВрем = "CODE128" Тогда
			ВнешняяКомпонента.ТипКода = 4;
		ИначеЕсли ТипШтрихкодаВрем = "ITF14" Тогда
			ВнешняяКомпонента.ТипКода = 11;
		ИначеЕсли ТипШтрихкодаВрем = "QR" Тогда
			ВнешняяКомпонента.ТипКода = 16;
		ИначеЕсли ТипШтрихкодаВрем = "EAN13Addon2" Тогда
			ВнешняяКомпонента.ТипКода = 14;
		ИначеЕсли ТипШтрихкодаВрем = "EAN13Addon5" Тогда
			ВнешняяКомпонента.ТипКода = 15;
		Иначе
			ВнешняяКомпонента.АвтоТип = Истина;
		КонецЕсли;
	Иначе
		ВнешняяКомпонента.АвтоТип = Ложь;
		ВнешняяКомпонента.ТипКода = ПараметрыШтрихкода.ТипКода;
	КонецЕсли;
	
	Если ПараметрыШтрихкода.Свойство("ПрозрачныйФон") Тогда
		ВнешняяКомпонента.ПрозрачныйФон = ПараметрыШтрихкода.ПрозрачныйФон;
	КонецЕсли;
	
	ВнешняяКомпонента.ОтображатьТекст = ПараметрыШтрихкода.ОтображатьТекст;
	
	// Формируем картинку штрихкода.
	ВнешняяКомпонента.ЗначениеКода = ПараметрыШтрихкода.Штрихкод;
	// Угол поворота штрихкода.
	ВнешняяКомпонента.УголПоворота = ?(ПараметрыШтрихкода.Свойство("УголПоворота"), ПараметрыШтрихкода.УголПоворота, 0);
	// Уровень коррекции QR кода (L=0, M=1, Q=2, H=3).
	ВнешняяКомпонента.УровеньКоррекцииQR = ?(ПараметрыШтрихкода.Свойство("УровеньКоррекцииQR"), ПараметрыШтрихкода.УровеньКоррекцииQR, 1);
	
	// Если установленная нами ширина меньше минимально допустимой для этого штрихкода.
	Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
		ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода;
	КонецЕсли;
	
	// Если установленная нами высота меньше минимально допустимой для этого штрихкода.
	Если ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Тогда
		ВнешняяКомпонента.Высота = ВнешняяКомпонента.МинимальнаяВысотаКода;
	КонецЕсли;

	Если ПараметрыШтрихкода.Свойство("РазмерШрифта") И (ПараметрыШтрихкода.РазмерШрифта > 0) 
		И (ПараметрыШтрихкода.ОтображатьТекст) И (ВнешняяКомпонента.РазмерШрифта <> ПараметрыШтрихкода.РазмерШрифта) Тогда
		ВнешняяКомпонента.РазмерШрифта = ПараметрыШтрихкода.РазмерШрифта;
	КонецЕсли;
	
	// Сформируем картинку
	ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();
	
	// Если картинка сформировалась.
	Если ДвоичныеДанныеКартинки <> Неопределено Тогда
		// Формируем из двоичных данных.
		Возврат Новый Картинка(ДвоичныеДанныеКартинки);
	КонецЕсли;
	
	Возврат Неопределено;

КонецФункции

Таким образом, теперь имеется возможность получать картинку штрихкода и вставлять её (как и раньше) прямо в макет. Я делаю это таким образом:

ОбластьШапки.Рисунки.Штрихкод.Картинка = ОбработкаШтрихкодирования.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);

 Правда перед самим вызовом необходимо задать параметры штрихкода:

ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина",                    Окр(РисунокШтрихкода.Ширина / 0.1));
ПараметрыШтрихкода.Вставить("Высота",                    Окр(РисунокШтрихкода.Высота / 0.1));
ПараметрыШтрихкода.Вставить("Штрихкод",                  Штрихкод);  //здесь д.б. наша строка ШК
ПараметрыШтрихкода.Вставить("ТипКода",                   4);
//ПараметрыШтрихкода.Вставить("GS1DatabarКоличествоСтрок", GS1DatabarКоличествоСтрок);
ПараметрыШтрихкода.Вставить("МонохромныйШрифт",          Истина);
//ПараметрыШтрихкода.Вставить("УголПоворота",              УголПоворота);
ПараметрыШтрихкода.Вставить("ОтображатьТекст",           Истина);
ПараметрыШтрихкода.Вставить("РазмерШрифта",              15);
ПараметрыШтрихкода.Вставить("Масштабировать",            Истина);
//ПараметрыШтрихкода.Вставить("СохранятьПропорции",        СохранятьПропорции);
//ПараметрыШтрихкода.Вставить("ВертикальноеВыравнивание",  ВертикальноеВыравнивание);

Подробный перечень параметров и то, как с ними работать, а также их описание можно посмотреть на сайте 1С (в т.ч. и по первой ссылке из статьи - там многие параметры повторяются), ну и в самой УТ11. Для моих же целей оказался вполне пригоден представленный код.  

На этом всё, надеюсь статья была вам полезна. 

 

П.С. Использовалась платформа 1С:Предприятие 8.3 (8.3.12.1567), конфигурации "Управление торговлей", редакция 10.3 (10.3.47.3) и "Управление торговлей", редакция 11 (11.4.5.143)

 

 

 

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. CheBurator 3439 17.11.18 00:52 Сейчас в теме
м.б. я не прав.. но даже я, не восьмерочник, знаю что в текущих конфигах на 8-ке нет необходимости устанавливать отдельную компоненту 1С:Печать штрихкодов ....
2. Идальго 139 17.11.18 10:14 Сейчас в теме
(1) Хех, я тоже так думал, до позавчерашнего дня)) Просто попробуйте смоделировать ситуацию на демке - версию платформы и конфигурации я указал.
38. user970589 4 09.02.21 10:55 Сейчас в теме
(1)автор прав, на 64-х даже после установки компоненты все равно ругается, попробую сделать как тут описано
3. Xershi 1090 17.11.18 10:57 Сейчас в теме
Открыли Америку. Когда УТ 10 писали 64 битного клиента не было. Естественно там устаревшая компонента.
Вот здесь уже готовое решение, только добавить в конфу обработку:
https://infostart.ru/public/510646/
28. unknown181538 35 12.05.20 13:41 Сейчас в теме
(3) тут же вообще QR-коды
user970589; +1 Ответить
4. muskul 19.11.18 08:55 Сейчас в теме
То есть без снятия с поддержки ничего не работает?
5. Идальго 139 19.11.18 09:14 Сейчас в теме
(4) На х64 клиенте, вроде нет - не должно (либо клиента х32 использовать либо вот как в статье способ, либо подобный). Хотя я не видел ни разу УТ10.3 на поддержке на предприятиях - везде всё переписано вдоль и поперёк.
6. Andrefan 21.11.18 09:46 Сейчас в теме
Бедный автор, столько старался. А ведь нужно просто следить за развитием платформы и знать, что есть кросс-платформенная нативная компонента в ней, которая годна как для x32, так и для x64....
7. Идальго 139 21.11.18 13:20 Сейчас в теме
8. COMPER 331 07.02.19 10:17 Сейчас в теме
(6) подскажите пожалуйста, что за компонента и как с ней работать в ут10?
9. Andrefan 07.02.19 14:27 Сейчас в теме
(8) Так и называется: КомпонентаПечатиШтрихкодов. В метаданных это общий макет.
Работать с ней очень просто.
Копируете из любой современной конфы этот макет и ряд методов, которые с ней работают (ПодключитьВнешнююКомпонентуПечатиШтрихкода, ОпределитьТипШтрихкода, ПолучитьКартинкуШтрихкода и ещё какие-то). Функция ПолучитьКартинкуШтрихкода возвращает картинку, которую и вставляете в Ваш табличный документ.
begemot; 1v7; criptid; SantiouS; CXY; COMPER; +6 Ответить
10. SantiouS 17.05.19 10:38 Сейчас в теме
(9)
ПодключитьВнешнююКомпонентуПечатиШтрихкода

Спасибо большое. Очень помог Ваш комментарий.
25. ccapt 26.03.20 11:59 Сейчас в теме
(6)
нативная компонента это встроенная в конфигурацию, или внешний модуль вроде COM (хотя странно, что ее можно называть нативной), специфичный для каждой клиентской платформы? если второе, то жалко скорее тех, кто выбирает зависимость от установки и конфигурирования такой компоненты на каждом клиенте.
26. Andrefan 26.03.20 19:51 Сейчас в теме
(25) компонента кросс-платформенная. Какой может быть COM? Компонента хранится в общем макете в конфигурации. Как она работает - знают только её авторы, но работает же!
27. ccapt 26.03.20 21:35 Сейчас в теме
(26)
нента кросс-платформенная. Какой может быть COM? Компонента хранится в общем макете в конфигурации. Как она работает - знают только её авторы, но работает

ком там приведен как премер внешней компоненты. и в этой части это был вопрос, что под нативной компонентой имел в виду автор.

а то, что как работает встроенная компонента, не известно где написано - согласен полностью. сам до сих пор не нашел. структура и объем документации 1с - известное днище и ад. поиск в итс - тоже. уроды.
29. SuhoffGV 15.05.20 14:34 Сейчас в теме
(26)во внешнем макете архив с библиотеками под разные ОС. Причем версия компоненты 1cBarcode 9.0.9.2, хелпа по отличиям и её функциям я не нашел, как и самой компоненты отдельно. Приходится ковырятся с ней наугад. Так как в типовой есть примеры не всех ШК которые умеет компонента, а нужен именно тот, к которому нет примера.
Прикрепленные файлы:
11. hawk 61 19.07.19 10:35 Сейчас в теме
Доброго времени суток, подскажите пожалуйста, не могу разобраться у меня самописная конфа, данный код использую для вывода ШК на ПФ, в файловом варианте все прекрасно выводит, а в клиент-серверном картинка как во вложении, через отладчик смотрел картинка есть все в порядке, только вот в свойствах картинки "Картинка: png Invalid IHDR data"
Прикрепленные файлы:
12. Идальго 139 22.07.19 22:50 Сейчас в теме
(11) вы что-то неверно передаёте наверное в клиент-серверном варианте. К сожалению я не могу вам помочь сейчас, т.к. нет свободного времени. Советую только обратиться к типовым конфигурациям - делать как там.
16. btree 05.11.19 23:19 Сейчас в теме
(11)
png Invalid IHDR data


Вы смогли разобраться в чем дело, у меня тоже перестало ни с того ни с сего работать, точно такая картинка, хотя использовал типовой механизм УТ
21. btree 14.11.19 23:08 Сейчас в теме
(16) Смогли разобраться в чем дело?
22. btree 20.11.19 22:57 Сейчас в теме
(16) Если это файловый вариант, то запускаете 1с от имени администратора и печатает нормально.
13. marat.coolls 05.11.19 13:19 Сейчас в теме
Вы привели пример с ошибкой. А как её исправить то в итоге? Что прописать вместо этого? КомпонентШК = Новый COMОбъект("V8.Barcod.1");
14. Идальго 139 05.11.19 20:49 Сейчас в теме
(13)
Вы привели пример с ошибкой. А как её исправить то в итоге? Что прописать вместо этого? КомпонентШК = Новый COMОбъект("V8.Barcod.1");


Вы не правы, всё написано)))

1) Смотрите, вот при заполнении макета вызывается такая функция:
ОбластьШапки.Рисунки.Штрихкод.Картинка = ОбработкаШтрихкодирования.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);


2) В функции п.1 вызывается другая функция, в которой уже подключается внешняя компонента:
ВнешняяКомпонента = ПодключитьВнешнююКомпонентуПечатиШтрихкода();


Т.о., проще всего сделать так: а) Скопировать в свою конфигурацию из УТ11 общий макет "КомпонентаПечатиШтрихкодов" (здесь ВК лежат); б) Добавить представленный код в свою обработку; в) Сформировав "ПараметрыШтрихкода", передаете их в ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода) , а эта функция вам уже возвратит ШК.

Мне кажется, что теперь даже новичкам станет ясно)))
15. marat.coolls 05.11.19 22:57 Сейчас в теме
(14) Нет, не ясно. Как использовать во внешней обработке примерно понятно. А мой вопрос остался открытым.
КомпонентШК = ПодключитьВнешнююКомпонентуПечатиШтрихкода(); Такая штука не работает.
17. marat.coolls 05.11.19 23:35 Сейчас в теме
Поле объекта недоступно для записи (Картинка)
ЭтикеткаОбласть.Рисунки.Штрихкод.Картинка = МенеджерОборудованияСерверПовтИсп.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
18. Идальго 139 06.11.19 00:01 Сейчас в теме
(17) Ну что же, я думаю, остается только посоветовать вам посмотреть на то, как оно реализовано в типовых.
19. marat.coolls 06.11.19 00:05 Сейчас в теме
(18) Грустно. А ведь осталось всего ничего...В том то и проблема, что в типовых примерно так же реализовано. Вот только почему поле Картинка не доступна для записи, не понятно.
20. user1304800 08.11.19 18:11 Сейчас в теме
(19) У меня возникла такая же проблема. Обошел ее вот таким способом (нашел в типовых):
РисунокШтрихкодаИсточник=ОбластьМакета.Рисунки.ШтрихКод;

РисунокШтрихкода = ОбластьМакета.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
РисунокШтрихкода.Верх = РисунокШтрихкодаИсточник.Верх;
РисунокШтрихкода.Лево = РисунокШтрихкодаИсточник.Лево;
РисунокШтрихкода.Высота = РисунокШтрихкодаИсточник.Высота;
РисунокШтрихкода.Ширина = РисунокШтрихкодаИсточник.Ширина;
РисунокШтрихкода.Имя = РисунокШтрихкодаИсточник.Имя;
РисунокШтрихкода.Линия = РисунокШтрихкодаИсточник.Линия;
РисунокШтрихкода.РазмерКартинки = РазмерКартинки.Растянуть;

ОбластьМакета.Рисунки.Удалить(РисунокШтрихкодаИсточник);

ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", РисунокШтрихкодаИсточник.Ширина);
ПараметрыШтрихкода.Вставить("Высота", РисунокШтрихкодаИсточник.Высота);
ПараметрыШтрихкода.Вставить("Штрихкод", Штрихкоддокумента);
ПараметрыШтрихкода.Вставить("ТипКода", 1);
ПараметрыШтрихкода.Вставить("МонохромныйШрифт", Истина);
ПараметрыШтрихкода.Вставить("ОтображатьТекст", Истина);
ПараметрыШтрихкода.Вставить("РазмерШрифта", 10);
ПараметрыШтрихкода.Вставить("Масштабировать", Истина);
ПараметрыШтрихкода.Вставить("СохранятьПропорции", Истина);

РисунокШтрихкода.Картинка=ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);

т.е. заменил картинку на макете на программно созданную.


Но потом возникла другая проблема: по качеству печатаемый штрихкод заметно хуже, чем в компоненте x32 и пользователи жалуются на проблемы при сканировании, а худшее качество числового штрихкода видно просто на глаз.
begemot; katrineKA; K-Gor; Dudasmit; +4 Ответить
23. btree 20.11.19 22:58 Сейчас в теме
(20)Если у кого плохо сканируется после печати, надо в свойсвах xps writera установить параметры печати png без сжатия
24. user1106243 19.02.20 16:01 Сейчас в теме
(20) Огромное спасибо всем. Особенно автору и (20).
Помогло, быстро и нормально.
30. K-Gor 26.05.20 18:54 Сейчас в теме
(20) Скорее всего надо было драйвере принтера сглаживание/полутона отключить.

Собственно именно это я сделал в драйвере TSC TE200 на вкладке "Графика".
Иначе края толстых штрихов кода получаются ломанные, а тонкие штрихи - размытые прерывистые.
31. aldo 26 07.07.20 01:37 Сейчас в теме
(19) Все намного проще. Не используйте в качестве картинки стандартную для печати ШК. Это не просто картинка, а объект со своими свойствами. Вставьте любую картинку из png файла и все будет печатать.
32. kauksi 209 08.07.20 12:31 Сейчас в теме
Чтобы штрихкод не расползался, нужно (у меня в УПП)
Эталон = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.ЭталонИС");
	КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;



         Рисунок = Обл.Рисунки.ШтрихКод;
		
				ПараметрыШтрихкода = Новый Структура;
				ПараметрыШтрихкода.Вставить("Ширина",          Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе));
				ПараметрыШтрихкода.Вставить("Высота",          Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе));
				ПараметрыШтрихкода.Вставить("Штрихкод",        СокрЛП(ДанныеШтрихКода));
				ПараметрыШтрихкода.Вставить("ТипКода",         4);
				ПараметрыШтрихкода.Вставить("ОтображатьТекст", Истина);
				
				Рисунок.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
Показать
33. assa 59 08.11.20 00:35 Сейчас в теме
Люди, подскажите, что не так сделал? Передаю
ПараметрыШтрихкода.Вставить("Штрихкод", "LI000003729");
Получаю то, что на картинке. Я такое и без компоненты могу получить :) и гораздо красивее.
Прикрепленные файлы:
34. assa 59 08.11.20 11:53 Сейчас в теме
(33) Немного разобрался. Если уменьшить размер шрифти, т.е. меньше 12, то получаю вот такое:
1CBarCode : Некорректное значение свойства «Шрифт»..
Не удалось сформировать внешнюю печатную форму!
Ошибка при установке значения атрибута контекста (РазмерШрифта): Ошибка внешней компоненты
Кракозябры это не я написал, а компонента. Если убрать из штрихкода текст, то ошибки нет, отображается только штрихкод.
И читается так: ДШ000003729 вместо LI000003729
35. assa 59 08.11.20 11:57 Сейчас в теме
(34) С четнием разобрался. Я читаю сканером прямо в блокнот. И какая раскладка стоит, те буквы и печатает. Т.е. Стоит RU тогда ДШ000003729, стоит EN - LI000003729. Для меня это открытие.
36. Идальго 139 08.11.20 18:36 Сейчас в теме
(35) я как-то делал предварительную проверку раскладки и принудительное переключение (чтоб таких траблов не было).
37. assa 59 08.11.20 22:27 Сейчас в теме
(36)Если читать из 1с с задействованием компонетны чтения штрихкода, то читает всегда правильно. А что по поводу (33)? Как вывести штрихкод с текстом? Что я не досмотрел?
Оставьте свое сообщение

См. также

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions Промо

Универсальные функции Практика программирования v8 Бесплатно (free)

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    4287    comol    22