Штрихкод в управляемой форме в толстом клиенте.

1. Mi11er 96 19.08.21 18:35 Сейчас в теме
Всем привет.
Есть старая УТ 10.3 , есть в ней пара документов у которых на управляемых формах ( ну просто их проще дизайнить... )
Вот в одном из новых доков, потребовалось сделать печать этикетки со штрихкодом.
Думал , все по старинке сделаю, но встретил проблему.

Как делалось

&НаСервере
Функция ПечатьЭтикеткиНаСервере()
	
	Об = РеквизитФормыВЗначение("Объект");
	
	СтруктураВозврат = Новый Структура;
	СтруктураВозврат.Вставить("Успех", Истина);
	
	ПринтерДляПечати = МДО_ОбщийМодуль.ОпределитьПринтерДляПользователя(ПараметрыСеанса.ТекущийПользователь);
	Если ПринтерДляПечати = "" Тогда
		СтруктураВозврат.Успех = Ложь;
		СтруктураВозврат.Вставить("Ошибка","Не задан принтер");
		Возврат СтруктураВозврат;
	КонецЕсли;
	
	Макет = Об.ПолучитьМакет("Этикетка");
	
	ТабДокумент = Новый ТабличныйДокумент;
	ТабДокумент.ВысотаСтраницы	=	370;
	ТабДокумент.ШиринаСтраницы	=	570;
	ТабДокумент.ПолеСверху 		= 	0;
	ТабДокумент.ПолеСправа 		= 	0;
	ТабДокумент.ПолеСнизу 		= 	0;
	ТабДокумент.ПолеСлева 		= 	0;
	ТабДокумент.АвтоМасштаб 	= 	Истина;
	ТабДокумент.ИмяПринтера		=	ПринтерДляПечати;
	ТабДокумент.ВерхнийКолонтитул.Выводить	=	Ложь;
	ТабДокумент.НижнийКолонтитул.Выводить	=	Ложь;
	  	
	Область = 	Макет.ПолучитьОбласть("Этикетка");	
	Для Каждого Товар из Объект.Товары Цикл
		Область.Параметры.Заполнить(Товар.Номенклатура);			
	КонецЦикла;
	
	КомпонентШК 			  =	Область.Рисунки.Штрихкод.Объект;
	КомпонентШК.ТипКода   	  = 4;
	КомпонентШК.АвтоТип   	  = Ложь;
	КомпонентШК.Сообщение     = Объект.Номер;
	ТабДокумент.Вывести(Область);
	
	ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
	
	СтруктураВозврат.Вставить("ТД",ТабДокумент);
	Возврат СтруктураВозврат;

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

&НаКлиенте
Процедура ПечатьЭтикетки(Команда)
	
	Если Объект.Номер = "" Или Объект.Товары.Количество() = 0 Тогда
		ПоказатьОповещениеПользователя("Ошибка печати",,"Неверный номере или пустая таблица товаров");
		Возврат;
	КонецЕсли;
	
	Результат = ПечатьЭтикеткиНаСервере();
	Если НЕ Результат.успех Тогда
		ПоказатьОповещениеПользователя("Ошибка",,Результат.ошибка);
		Возврат;
	КонецЕсли;
	
	ТабДокумент = Результат.ТД;
	ТабДокумент.Показать();
	
КонецПроцедуры


Показать


Ну и разумеется ошибка начинается с этой части
КомпонентШК 			  =	Область.Рисунки.Штрихкод.Объект;
КомпонентШК.ТипКода   	  = 4;


{Документ.мд_Рекламация.Форма.ФормаДокумента.Форма(536)}: Значение не является значением объектного типа (ТипКода)
КомпонентШК.ТипКода = 4;


Прочел мега тону статей, понял, что в УФ это сделано через анус обезьяны и расстроился.
Теперь вопрос. Может кто делал такой изврат ... ? и поможет с кодом и компонентами для УТ...
По теме из базы знаний
Найденные решения
5. Ivanov_OM 38 19.08.21 19:06 Сейчас в теме
(3)
Функция ПодключитьВнешнююКомпонентуПечатиШтрихкода() Экспорт
	
	//Макет = ПолучитьМакет("КомпонентаПечатиШтрихкода");
	
	ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкода", "ШтрихКод", ТипВнешнейКомпоненты.Native);
	
	// Создадим объект внешней компоненты
	Если ПодключениеВыполнено Тогда
		ВнешняяКомпонента = Новый("AddIn.ШтрихКод.Barcode");
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
	// Если нет возможности рисовать
	Если НЕ ВнешняяКомпонента.ГрафикаУстановлена Тогда
		// То картинку сформировать не сможем
		Возврат Неопределено;
	Иначе
		// Установим основные параметры компоненты
		// Если в системе установлен шрифт Tahoma
		Если ВнешняяКомпонента.НайтиШрифт("Tahoma") = Истина Тогда
			// Выбираем его как шрифт для формирования картинки
			ВнешняяКомпонента.Шрифт = "Tahoma";
		Иначе
			// Шрифт Tahoma в системе отсутствует
			// Обойдем все доступные компоненте шрифты
			Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов -1 Цикл
				// Получим очередной шрифт, доступный компоненте
				ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч);
				// Если шрифт доступен
				Если ТекущийШрифт <> Неопределено Тогда
					// Они и будет шрифтом для формирования штри-кода
					ВнешняяКомпонента.Шрифт = ТекущийШрифт;
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		// Утановим размер шрифта
		ВнешняяКомпонента.РазмерШрифта = 12;
		
		Возврат ВнешняяКомпонента;
	КонецЕсли;
	
КонецФункции
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Ivanov_OM 38 19.08.21 18:50 Сейчас в теме
Тут все зависит от платформы.
У новых платформ не работает старая компонента штрихкода, только встроенная.
У меня платформа 8.3.18.1208
У меня вот так работает:
ПараметрыШтрихкода = Новый Структура;
			ПараметрыШтрихкода.Вставить("Ширина",		110);
			ПараметрыШтрихкода.Вставить("Высота",		20);
			ПараметрыШтрихкода.Вставить("ТипКода",		1);//Автоопределение
			ПараметрыШтрихкода.Вставить("РазмерШрифта",	8);
			ПараметрыШтрихкода.Вставить("Штрихкод",		СтрокаИзСписка.ШтрихКод);
			ПараметрыШтрихкода.Вставить("ОтображатьТекст",	Истина);
							
			ЭтикеткаОбласть.Рисунки.ШтрихКод.Картинка = ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода)
Показать


Функция получения штрихкода:
Функция ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода) Экспорт
	
	ВнешняяКомпонента = ПодключитьВнешнююКомпонентуПечатиШтрихкода();
	
	Если ВнешняяКомпонента = Неопределено Тогда
		ВызватьИсключение НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода!'");
	КонецЕсли;
	
	// Зададим размер картинки
	ВнешняяКомпонента.Ширина = Окр(ПараметрыШтрихкода.Ширина);
	ВнешняяКомпонента.Высота = Окр(ПараметрыШтрихкода.Высота);
	
	ВнешняяКомпонента.АвтоТип = Ложь;
	ВнешняяКомпонента.ТипКода         = ПараметрыШтрихкода.ТипКода;
	ВнешняяКомпонента.ОтображатьТекст = ПараметрыШтрихкода.ОтображатьТекст;
	ВнешняяКомпонента.РазмерШрифта    = ПараметрыШтрихкода.РазмерШрифта;
	
	// Или установим код EAN-13
	// ВнешняяКомпонента.ТипКода = 1;
	//
	// Тип смотрим в документации на внешнуюю компоненту
	
	// Если код содержит контрольный символ, обязательно указываем
	ВнешняяКомпонента.СодержитКС = СтрДлина(ПараметрыШтрихкода.Штрихкод) = 13;
	
	// Если отображать контрольный символ не нужно
	// ВнешняяКомпонента.ВидимостьКС = Ложь;
	
	// Формируем картинку штрихкода
	ВнешняяКомпонента.ЗначениеКода = ПараметрыШтрихкода.Штрихкод;
	
	// Если установленная нами ширина меньше минимально допустимой для этого штрихкода
	Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
		ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода + 10;
	КонецЕсли;
	
	// Сформируем картинку
	ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();
	
	// Если картинка сформировалась
	Если ДвоичныеДанныеКартинки <> Неопределено Тогда
		// Формируем из двоичных данных
		Возврат Новый Картинка(ДвоичныеДанныеКартинки);
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции
Показать
3. Mi11er 96 19.08.21 18:58 Сейчас в теме
(2)
У меня платформа 8.3.18.1208

Была бы еще у меня новая =) Так ладно бы... а тут 1С:Предприятие 8.3 (8.3.8.2322) и УТ 10.3.13.2, старье =)
Работает и ладно =) Свое дело знает. Просто мне скучно и подавай УФ для документа.

Вот и ищу, как напечатать чудный ШК.

А где взяли ?
    
ВнешняяКомпонента = ПодключитьВнешнююКомпонентуПечатиШтрихкода();
4. Ivanov_OM 38 19.08.21 19:01 Сейчас в теме
(3)Тогда тебе надо добавить компоненту печати штрихкода.
Нужно создать общий макет тип Двоичные данные и загрузить этот файл:
Прикрепленные файлы:
КомпонентаПечатиШтрихкода.xml
5. Ivanov_OM 38 19.08.21 19:06 Сейчас в теме
(3)
Функция ПодключитьВнешнююКомпонентуПечатиШтрихкода() Экспорт
	
	//Макет = ПолучитьМакет("КомпонентаПечатиШтрихкода");
	
	ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкода", "ШтрихКод", ТипВнешнейКомпоненты.Native);
	
	// Создадим объект внешней компоненты
	Если ПодключениеВыполнено Тогда
		ВнешняяКомпонента = Новый("AddIn.ШтрихКод.Barcode");
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
	// Если нет возможности рисовать
	Если НЕ ВнешняяКомпонента.ГрафикаУстановлена Тогда
		// То картинку сформировать не сможем
		Возврат Неопределено;
	Иначе
		// Установим основные параметры компоненты
		// Если в системе установлен шрифт Tahoma
		Если ВнешняяКомпонента.НайтиШрифт("Tahoma") = Истина Тогда
			// Выбираем его как шрифт для формирования картинки
			ВнешняяКомпонента.Шрифт = "Tahoma";
		Иначе
			// Шрифт Tahoma в системе отсутствует
			// Обойдем все доступные компоненте шрифты
			Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов -1 Цикл
				// Получим очередной шрифт, доступный компоненте
				ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч);
				// Если шрифт доступен
				Если ТекущийШрифт <> Неопределено Тогда
					// Они и будет шрифтом для формирования штри-кода
					ВнешняяКомпонента.Шрифт = ТекущийШрифт;
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		// Утановим размер шрифта
		ВнешняяКомпонента.РазмерШрифта = 12;
		
		Возврат ВнешняяКомпонента;
	КонецЕсли;
	
КонецФункции
Показать
6. Mi11er 96 19.08.21 19:23 Сейчас в теме
(5) сработало, коряво, но сработало...главное что с этим уже можно работать
У меня только один вопрос, как можно было из 4 лаконично спроектированных строк вывода ШК, превратить в 100 строк + еще какая внешняя компонента...
Прикрепленные файлы:
7. Ivanov_OM 38 19.08.21 22:35 Сейчас в теме
(6) Вт так 1с сейчас и работает.
Чтобы нормально читался штрихкод, пробуй изменять настройки принтера.
Там тоже куча нюансов.
8. Mi11er 96 20.08.21 11:34 Сейчас в теме
(7) Сам ШК четкий получился, это надпись у него такая, но я ее просто убрал и вывел параметром как текст, проблемы более нет.
Спасибо еще раз
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот