Добавление штрихкода на печатную форму

1. ArtyVT 18.01.23 11:38 Сейчас в теме
Добрый день, уважаемые гуру своего дела, и примкнувшие!
Уже непозволительно много времени потратил на попытки вставить штрихкод на печатную форму, поэтому взываю к помощи. В документ штрихкод поставить получается (код приложил), но на печатную форму не могу осилить.
Т.е. сейчас есть макет, на котором добавлена область "Штрихкод" в которой расположена Картинка. В Модуле менеджера созданный конструктором код, который, естественно не дает никаких намеков на то, что там откуда-то может появиться штрихкод. Я по-разному пытался пристроить в Модуль менеджера тот код, что дал мне возможность показать штрихкод в документе, но всё тщетно.
В моём понимании: в Модуле менеджера я в каком-то виде должен обыграть тот код, что в Процедуре ВывестиШтрихКодНаСервере()? И соответственно где разместить Функцию ПолучитьКартинкуШтрихкода(), которая должна мне нарисовать сам штрихкод?
Буду благодарен за любую помощь, и готов предоставить необходимую информацию. Спасибо!
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Farhat95 18.01.23 13:24 Сейчас в теме
Через Запрос получаешь штрихкод и выводишь через процедуру печати.
11. independ 1520 23.01.23 11:50 Сейчас в теме
(1) какой тип ШК? Если EAN8 или EAN13, можно вывести шрифтом EAN, предварительно применив кодировку

		Если СтрДлина(Строка.Штрихкод)=13 Тогда
			Область.Параметры.Штрихкод=КодируемШтрихКод(Строка.Штрихкод);
		ИначеЕсли СтрДлина(Строка.Штрихкод)=8 Тогда
			Область.Параметры.Штрихкод=КодируемШтрихКод8(Строка.Штрихкод);
		Иначе	
			Область.Параметры.Штрихкод="";
		КонецЕсли;
&НаСервереБезКонтекста
Функция КодируемШтрихКод(Парам)
	Если СтрДлина(Парам)<>13 Тогда
		Возврат "1234567890123"; 
	КонецЕсли;	
	ПечШтрих="";
	Код=Парам;
	Ф = Новый Массив(11);
	Ф[1]="000000";        //0
	Ф[2]="001011";        //1
	Ф[3]="001101";        //2
	Ф[4]="001110";        //3
	Ф[5]="010011";        //4
	Ф[6]="011001";        //5
	Ф[7]="011100";        //6
	Ф[8]="010101";        //7
	Ф[9]="010110";        //8
	Ф[10]="011010";       //9
	Маска=""+Лев(СокрЛП(Код),1)+Ф[Число(Лев(СокрЛП(Код),1))+1]+"222222";
	Дл=СтрДлина(Код);
	Для ИИ=1 По Дл Цикл
		Если ИИ=1 Тогда
			Стр1=""+Лев(СокрЛП(Код),1);
		Иначе //ИИ от 2 до 13
			
			СимволМаски=Сред(Маска,ИИ,1);
			Если СимволМаски="0" Тогда
				Стр1=Символ(65+Сред(Код,ИИ,1));
			ИначеЕсли СимволМаски="1" Тогда
				Стр1=Символ(75+Сред(Код,ИИ,1));
			ИначеЕсли СимволМаски="2" Тогда
				Стр1=Символ(97+Сред(Код,ИИ,1));
			КонецЕсли;
		КонецЕсли;
		ПечШтрих=ПечШтрих+Стр1; 
		Если ИИ=7 Тогда
			ПечШтрих=ПечШтрих+"*";
		ИначеЕсли ИИ=13 Тогда     
			ПечШтрих=ПечШтрих+"+";
		КонецЕсли;
	КонецЦикла;
	Возврат ПечШтрих;
КонецФункции	

&НаСервереБезКонтекста
Функция КодируемШтрихКод8(Парам)
	Если СтрДлина(Парам)<>8 Тогда
		Возврат "12345678"; 
	КонецЕсли;
	ПечШтрих=":";
	Для ИИ=1 По 4 Цикл
		ПечШтрих=ПечШтрих+Символ(65+Сред(Парам,ИИ,1));
	КонецЦикла;	
	ПечШтрих=ПечШтрих+"*";
	Для ИИ=5 По 8 Цикл
		ПечШтрих=ПечШтрих+Символ(97+Сред(Парам,ИИ,1));
	КонецЦикла;	
	ПечШтрих=ПечШтрих+"+";
	Возврат ПечШтрих;
КонецФункции	
Показать
Прикрепленные файлы:
ean13.ttf
2. Farhat95 18.01.23 13:16 Сейчас в теме
в Модуле менеджера в процедуре печати надо присоединить как я понимаю.
5. ArtyVT 19.01.23 16:20 Сейчас в теме
(2) так я оно и пытаюсь. А 1Ска меня всё больше ошибками одаряет, или молчаливо, но и без заветной картинки, открывает мою форму. Но спасибо за ответы!
4. TheOldGuard 10 19.01.23 16:02 Сейчас в теме
БСП ГенерацияШтрихкода.ИзображениеШтрихкода

// Формирование изображения штрихкода.
//
// Параметры: 
//   ПараметрыШтрихкода - см. ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода.
//
// Возвращаемое значение: 
//   Структура:
//      Результат - Булево - результат генерации штрихкода.
//      ДвоичныеДанные - ДвоичныеДанные - двоичные данные изображения штрихкода.
//      Картинка - Картинка - картинка с сформированным штрихкодом или НЕОПРЕДЕЛЕНО.
//
Функция ИзображениеШтрихкода(ПараметрыШтрихкода) Экспорт
Показать
6. ArtyVT 19.01.23 16:31 Сейчас в теме
(4)
БСП ГенерацияШтрихкода.ИзображениеШтрихкода
Эх, генерацию-то я осилил. В документ обычный в ТабДок отправил. А вот договориться, чтобы шк вставал вместо разовой картинки на макет не могу. Никак не докумекаю. Но спасибо за небольшой ликбез! Сегодня дел поднавалили других, а завтра буду опять заниматься, вдруг гляну, а тут и правда вот оно! И так бывает :)
7. TheOldGuard 10 19.01.23 16:35 Сейчас в теме
(6)
Из того же модуля, делал себе генерацию QR
Процедура ПечатьQR Кода(ТабличныйДокумент)
	Макет = ПолучитьМакетНаСервере();
	ОбластьМакета = Макет.ПолучитьОбласть("QRКод");
	...
	СтруктураДанныхQRКода = Новый Структура;
	СтруктураДанныхQRКода.Вставить("Реквизит1"	, "Реквизит1";
	СтруктураДанныхQRКода.Вставить("Реквизит2"	, "Реквизит2";
	СтруктураДанныхQRКода.Вставить("Реквизит3"	, "Реквизит3";
	СтруктураДанныхQRКода.Вставить("Реквизит4"	, "Реквизит4";
	СтруктураДанныхQRКода.Вставить("Реквизит5"	, "Реквизит5";
	СтруктураДанныхQRКода.Вставить("Реквизит6"	, "Реквизит6";
	
	// Преобразуем структуру в json
	Запись = Новый ЗаписьJSON;
	Запись.УстановитьСтроку();			
	ЗаписатьJSON(Запись, СтруктураДанныхQRКода);
	QRСтрока = Запись.Закрыть();
	
	ДанныеQRКода = ГенерацияШтрихкода.ДанныеQRКода(QRСтрока, 0, 190);
	
	Если ТипЗнч(ДанныеQRКода) = Тип("ДвоичныеДанные") Тогда
		КартинкаQRКода = Новый Картинка(ДанныеQRКода);
		ОбластьМакета.Рисунки.QRКод.Картинка = КартинкаQRКода;
	КонецЕсли;
	ТабличныйДокумент.Вывести(ОбластьМакета);
	
КонецПроцедуры;
Показать

Только вам сначала надо параметры получить, потом штрих код и затем двоичные данные в картинку переводить
8. starik-2005 3039 19.01.23 16:55 Сейчас в теме
1. А что, в УТ разве нет механизма штрих-кодирования документов? В ЕРП есть.
2. Ну должна же быть где-то в БСП функция, которая вставляет ШК в макет. Помнится мне, что это было что-то на уровне одной строки кода для слабоумных пациентов кащенки. Типа "УправлениеЧемТоТам.ВставитьШКВмакет(АргументыИФакты);"
9. ArtyVT 19.01.23 17:38 Сейчас в теме
(8) 1. Вообще, по мануалам, есть. Я поискал, не нашел, почесал репу. Проверил, что у меня правда УТ. Поискал еще раз, ну нет и всё! И сам той же логикой пошел к Вашему пункту 2, думая: "ну фигня, сейчас сами может и не быстренько, но без мучений. Не тут-то было. Но я как бы из тех, что только к граниту примкнул, могу какую-то банальность просто упускать. Благо уже добрые люди наводки дают, буду пробовать применять
10. starik-2005 3039 23.01.23 11:25 Сейчас в теме
(9)
Я поискал, не нашел, почесал репу.
https://www.youtube.com/watch?v=wq09twXGMRA
На примере конфигурации: УТ 11.3.2.193
13. ArtyVT 23.01.23 13:07 Сейчас в теме
(10) Я так понимаю, эта стандартная процедура распространяется на ряд заранее установленных документов. На свои документы её уже не натянешь...
14. starik-2005 3039 23.01.23 14:22 Сейчас в теме
(13)
На свои документы её уже не натянешь...
Серьезно? Код печати открыт, макеты доступны. Посмотреть не пробовали?
12. ArtyVT 23.01.23 13:05 Сейчас в теме
Всем спасибо! Я, в общем, доколупал свою идею. Всё разместил непосредственно в модуле формы, создал кнопку под печать, всунул кусок про формирование штрихкода в создание печатной формы, и сам штрихкод тут же, в модуле формы формируется. Картинка со штрихкодом в ОбластьЗаголовок размещена, имя картинки "ШтрихкодК". Модуль менеджера и стандартные конструктора печати 1С задушили меня ошибками. Код размещу, может кому на будущее пригодится.

&НаКлиенте
Процедура ПечатьЗадания(Команда)
	
	ФормаПечати = ПечатьЗаданияНаСервере();
	ФормаПечати.Показать();

КонецПроцедуры

&НаСервере
Функция ПечатьЗаданияНаСервере()

	ТаблДок = Новый ТабличныйДокумент;
	ТекОбъект = РеквизитФормыВЗначение("Объект");
	Макет = ТекОбъект.ПолучитьМакет("ПроизводственноеЗадание");
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ПроизводственноеЗаданиеГАС.Дата КАК Дата,
	|	ПроизводственноеЗаданиеГАС.ДатаВыполнения КАК ДатаВыполнения,
	|	ПроизводственноеЗаданиеГАС.Номер КАК Номер,
	|	ПроизводственноеЗаданиеГАС.Подразделение КАК Подразделение,
	|	ПроизводственноеЗаданиеГАС.Сотрудник КАК Сотрудник,
	|	ПроизводственноеЗаданиеГАС.ТехнологияПроведенияРабот КАК ТехнологияПроведенияРабот,
	|	ПроизводственноеЗаданиеГАС.Штрихкод КАК Штрихкод,
	|	ПроизводственноеЗаданиеГАС.ВыданоВРаботу.(
	|		ОперацияВРаботу КАК ОперацияВРаботу,
	|		ИзделиеВРаботу КАК ИзделиеВРаботу,
	|		КоличествоВРаботу КАК КоличествоВРаботу,
	|		ОборудованиеВРаботу КАК ОборудованиеВРаботу,
	|		ШтампВРаботу КАК ШтампВРаботу,
	|		МестоПолученияВРаботу КАК МестоПолученияВРаботу,
	|		МестоСкладированияВРаботу КАК МестоСкладированияВРаботу
	|	) КАК ВыданоВРаботу,
	|	ПроизводственноеЗаданиеГАС.ПолучитьНаСкладе.(
	|		НомерСтроки КАК НомерСтроки,
	|		НаименованиеКПолучению КАК НаименованиеКПолучению,
	|		Количество КАК Количество
	|	) КАК ПолучитьНаСкладе,
	|	ПроизводственноеЗаданиеГАС.Оснастка.(
	|		НомерСтроки КАК НомерСтроки,
	|		НаименованиеОснастки КАК НаименованиеОснастки
	|	) КАК Оснастка
	|ИЗ
	|	Документ.ПроизводственноеЗаданиеГАС КАК ПроизводственноеЗаданиеГАС
	|ГДЕ
	|	ПроизводственноеЗаданиеГАС.Номер = &Номер";
	Запрос.Параметры.Вставить("Номер", Объект.Номер);
	Выборка = Запрос.Выполнить().Выбрать();

	ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
	Шапка = Макет.ПолучитьОбласть("Шапка");
	ОбластьВыданоВРаботуШапка = Макет.ПолучитьОбласть("ВыданоВРаботуШапка");
	ОбластьВыданоВРаботу = Макет.ПолучитьОбласть("ВыданоВРаботу");
	ОбластьПолучитьНаСкладеШапка = Макет.ПолучитьОбласть("ПолучитьНаСкладеШапка");
	ОбластьПолучитьНаСкладе = Макет.ПолучитьОбласть("ПолучитьНаСкладе");
	ОбластьОснасткаШапка = Макет.ПолучитьОбласть("ОснасткаШапка");
	ОбластьОснастка = Макет.ПолучитьОбласть("Оснастка");
	Подвал = Макет.ПолучитьОбласть("Подвал");

	ТаблДок.Очистить();

	ВставлятьРазделительСтраниц = Ложь;
	Пока Выборка.Следующий() Цикл
		Если ВставлятьРазделительСтраниц Тогда
			ТаблДок.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		
	ШтрихкодК = ПолучитьКартинкуШтрихкода(Объект.Штрихкод);
	Если ШтрихкодК  <> Неопределено Тогда
		ОбластьЗаголовок.Рисунки.ШтрихкодК.Картинка = ШтрихкодК;
	КонецЕсли;
		ТаблДок.Вывести(ОбластьЗаголовок);
					
		Шапка.Параметры.Заполнить(Выборка);
		Шапка.Параметры.ДатаВыполнения = Формат(Выборка.ДатаВыполнения, "ДФ=dd.MM.yyyy");
		ТаблДок.Вывести(Шапка, Выборка.Уровень());

		ТаблДок.Вывести(ОбластьВыданоВРаботуШапка);
		ВыборкаВыданоВРаботу = Выборка.ВыданоВРаботу.Выбрать();
		Пока ВыборкаВыданоВРаботу.Следующий() Цикл
			ОбластьВыданоВРаботу.Параметры.Заполнить(ВыборкаВыданоВРаботу);
			ТаблДок.Вывести(ОбластьВыданоВРаботу, ВыборкаВыданоВРаботу.Уровень());
		КонецЦикла;

	 	ТаблДок.Вывести(ОбластьПолучитьНаСкладеШапка);
		ВыборкаПолучитьНаСкладе = Выборка.ПолучитьНаСкладе.Выбрать();
		Пока ВыборкаПолучитьНаСкладе.Следующий() Цикл
			ОбластьПолучитьНаСкладе.Параметры.Заполнить(ВыборкаПолучитьНаСкладе);
			ТаблДок.Вывести(ОбластьПолучитьНаСкладе, ВыборкаПолучитьНаСкладе.Уровень());
		КонецЦикла;

		ТаблДок.Вывести(ОбластьОснасткаШапка);
		ВыборкаОснастка = Выборка.Оснастка.Выбрать();
		Пока ВыборкаОснастка.Следующий() Цикл
			ОбластьОснастка.Параметры.Заполнить(ВыборкаОснастка);
			ТаблДок.Вывести(ОбластьОснастка, ВыборкаОснастка.Уровень());
		КонецЦикла;

		Подвал.Параметры.Заполнить(Выборка);
		ТаблДок.Вывести(Подвал);

		ВставлятьРазделительСтраниц = Истина;
	КонецЦикла;
	Возврат ТаблДок;
КонецФункции

&НаСервере
Функция ПолучитьКартинкуШтрихкода(Штрихкод)
	ИнформацияОСистеме = Новый СистемнаяИнформация;
	ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
	Компонент = Новый ("AddIn.КартинкаШтрихкода.Barcode");
	Если Не Компонент.ГрафикаУстановлена Тогда
		Возврат Неопределено;
	КонецЕсли; 
	Если Компонент.НайтиШрифт("Times New Roman") = Истина Тогда
		Компонент.Шрифт = "Times New Roman";
	Иначе
		Для Сч = 0 По Компонент.КоличествоШрифтов -1 Цикл
			ТекущийШрифт = Компонент.ШрифтПоИдексу(Сч);
			Если ТекущийШрифт <> Неопределено Тогда
				Компонент.Шрифт = ТекущийШрифт;
				Прервать;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	Компонент.РазмерШрифта = 15;
	Компонент.Ширина = 100;
	Компонент.Высота = 90;
	Компонент.ТипКода = 1; // EAN-13
	Компонент.ВидимостьКС = Ложь;
	Компонент.ЗначениеКода = Штрихкод;
	Если Компонент.Ширина < Компонент.МинимальнаяШиринаКода Тогда
		Компонент.Ширина = Компонент.МинимальнаяШиринаКода + 10;
	КонецЕсли;
	ДвоичныеДанныеКартинки = Компонент.ПолучитьШтрихкод();
	Если НЕ ДвоичныеДанныеКартинки= Неопределено Тогда
		Возврат Новый Картинка (ДвоичныеДанныеКартинки);
	КонецЕсли;
	Возврат Неопределено;
КонецФункции;
Показать
Прикрепленные файлы:
15. starik-2005 3039 23.01.23 14:24 Сейчас в теме
(12)
в модуле формы
Если бы главный 1С-нег был в гробу, то я бы сейчас услышал скрип его старых переворачивающихся костей.
TheOldGuard; +1 Ответить
16. TheOldGuard 10 24.01.23 10:51 Сейчас в теме
(12) Подобные вещи необходимо размещать в модуле менеджера
Оставьте свое сообщение

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