Стандартные доработки. Штрихкодирование документов.

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

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

Эта статья описывает процесс доработки типовых 1С конфигураций, для добавления функционала штрихкодирования   документов и быстрого их поиска по штрихкоду.  Метод работает для управляемых и неуправляемых печатных форм.

Молочников Олег Spb. 2010.

Стандартные доработки. Штрихкодирование документов.

 

Эта статья описывает процесс доработки типовых 1С конфигураций, для добавления функционала штрихкодирования   документов и быстрого их поиска по штрихкоду.  Метод работает для управляемых и неуправляемых печатных форм.

В этом примере рассматривается генерация штрихкода EAN128 следующей структуры:  3 символа – для идентификации типа документа + 6 символов  для даты + номер документа. Из ограничений метода :  в области макета где печатается штрихкод возможна печать только одного штрихкода. Название  рисунка для штрихкода должно начинаться на «Штрихкод”. Метод не работает без изменений, если есть кириллические символы в префиксах документах.

1.         В общий модуль, выполняемый на сервере добавьте следующие функции:

Функция ПодключитьВнешнююКомпонентуПечатиШтрихкода() Экспорт
    // В зависимости от типа платформы подключим соответствующую внешнюю компоненту
    ПодключениеВыполнено = Неопределено;
    СистемнаяИнформация = Новый СистемнаяИнформация;
    Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда
        ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодовWindows32", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
    ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
        ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодовWindows64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
    ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда
        ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодовLinux32", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
    Иначе
        ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодовLinux64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
    КонецЕсли;

    // Создадим объект внешней компоненты
    Если ПодключениеВыполнено Тогда
        ВнешняяКомпонента = Новый("AddIn.КартинкаШтрихкода.Barcode");
    Иначе
        Возврат Неопределено;
    КонецЕсли;

    // Если нет возможности рисовать
    Если НЕ ВнешняяКомпонента.ГрафикаУстановлена Тогда
        // То картинку сформировать не сможем
        Возврат Неопределено;
    Иначе

        // Установим основные параметры компоненты

        // Если в системе установлен шрифт Tahoma
        Если ВнешняяКомпонента.НайтиШрифт("Tahoma") Тогда
            // Выбираем его как шрифт для формирования картинки
            ВнешняяКомпонента.Шрифт = "Tahoma";
        Иначе

            // Шрифт Tahoma в системе отсутствует
            // Обойдем все доступные компоненте шрифты
            Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов -1 Цикл
                // Получим очередной шрифт, доступный компоненте
                ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч);
                // Если шрифт доступен
                Если ТекущийШрифт <> Неопределено Тогда
                    // Они и будет шрифтом для формирования штри-кода
                    ВнешняяКомпонента.Шрифт = ТекущийШрифт;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;

        // Утановим размер шрифта
        ВнешняяКомпонента.РазмерШрифта = 12;

        Возврат ВнешняяКомпонента;

    КонецЕсли;

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

// Функция выполняет формирование изображения штрихкода.
//
// Параметры:
//  ТипКода число от 0 до 16
// 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

Функция ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, Ширина, Высота, Штрихкод, ТипКода = 0) Экспорт

    // Зададим размер картинки
    ВнешняяКомпонента.Ширина = Окр(Ширина);
    ВнешняяКомпонента.Высота = Окр(Высота);

    // Разрешим компоненте самой определять тип кода
    ВнешняяКомпонента.АвтоТип = Ложь;
    ВнешняяКомпонента.ТипКода = ТипКода;


    // Если код содержит контрольный символ, обязательно указываем
    ВнешняяКомпонента.СодержитКС = СтрДлина(Штрихкод) = 13;
    ВнешняяКомпонента.ОтображатьТекст=Ложь;
    // Если отображать контрольный символ не нужно
    // ВнешняяКомпонента.ВидимостьКС = Ложь;

    // Формируем картинку штрихкода
    ВнешняяКомпонента.ЗначениеКода = Штрихкод;

    // Если установленная нами ширина меньше минимально допустимой для этого штрихкода
    Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
        // Скорректируем ширину
        ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода + 10;
    КонецЕсли;

    // Сформируем картинку
    ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();

    // Если картинка сформировалась
    Если ДвоичныеДанныеКартинки <> Неопределено Тогда
        // Формируем из двоичных данных
        Возврат Новый Картинка(ДвоичныеДанныеКартинки);
    КонецЕсли;

    Возврат Неопределено;

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

Функция ВывестиШтрихкодДокументаВОбластьМакета(ВнешняяКомпонента,ОбластьМакета,ЗначениеШтрихкода)  Экспорт
    Для каждого Рисунок Из ОбластьМакета.Рисунки Цикл
            Если Лев(Рисунок.Имя,8) = "Штрихкод" Тогда

                Если ВнешняяКомпонента = Неопределено Тогда
                    ВызватьИсключение НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода!'");
                КонецЕсли;
                Если ЗначениеЗаполнено(ЗначениеШтрихкода) Тогда
                    Рисунок.Картинка = ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, 361, 50, ЗначениеШтрихкода, 3);
                КонецЕсли;

            КонецЕсли;
        КонецЦикла;

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

 

 

2.      Проверим наличие в общих макетах компонент: КомпонентаПечатиШтрихкодовWindows32, КомпонентаПечатиШтрихкодовWindows64, КомпонентаПечатиШтрихкодовLinux32, КомпонентаПечатиШтрихкодовLinux64

Если их там нет, возьмем из типовых конфигураций.

3.      Модифицируем печатные формы документов следующим образом: Добавим на печатные формы требуемых документов изображение штрихкода как на рисунке с примером макета.

 

Обязательно имя рисунка должно начинаться на «Штрихкод”!!!!

4.       В тело функции печати печатной формы добавляем:

В начало функции:

 

 ВнешняяКомпонента = ИМЯОБЩЕГОМОДУЛЯ.ПодключитьВнешнююКомпонентуПечатиШтрихкода();

Перед выводом макета области со штрихкодом:

        ИМЯОБЩЕГОМОДУЛЯ.ВывестиШтрихкодДокументаВОбластьМакета(ВнешняяКомпонента,ОбластьМакета,"PER"+СтрЗаменить(Формат(Шапка.Дата,"ДФ=dd.MM.yy"),".","")+Шапка.Номер);

 

"PER» - заменяем на уникальное обозначение типа печатаемого документа. (В моем случае, это перемещение).

 

5.      В обработку ТОСервер в модуль объекта  в тело функции “ОбработатьСобытиеСШК»  вставляете следующий код:

 

  Если СтрДлина(ШК)=20 Тогда
        Попытка
            Если Лев(ШК,3)="RTU" Тогда
                ТипДокумента="РеализацияТоваровУслуг";
            ИначеЕсли Лев(ШК,3)="PTU" Тогда
                ТипДокумента="ПоступлениеТоваровУслуг";
            ИначеЕсли Лев(ШК,3)="PER" Тогда
                ТипДокумента="ПеремещениеТоваров";
            Иначе
                Обработка.СобытиеОбработано(Объект);
                Возврат Результат;
            КонецЕсли;
            Дата=Дата(2000+Число(Сред(ШК,8,2)), //Год
            Число(Сред(ШК,6,2)), //Месяц
            Число(Сред(ШК,4,2))); //День
            НомерДок=Сред(ШК,10);
            Результат = Документы[ТипДокумента].НайтиПоНомеру(НомерДок, Дата);
            Если Результат.Пустая() Тогда
                Предупреждение("Документ не найден!");
            Иначе
                Результат.ПолучитьФорму().Открыть();
            КонецЕсли;
            Обработка.СобытиеОбработано(Объект);
        Возврат Результат;
        Исключение
                Обработка.СобытиеОбработано(Объект);
        Возврат Результат;
        КонецПопытки;
    КонецЕсли;

 

 

6.      Дальнейшее развитие идеи (по комментариям читателей):

А) Вместо привязки к номеру, дате и типу документа можно использовать уникальный  идентификатор документа. Это более универсальный метод.

Б) Если печатных форм много, то можно не менять  макеты печатных форм, а сделать механизм хранения координат места в макете, в котором создавать динамический рисунок и в него выводить штрихкод. Требует экспериментов, но выигрыш в реализации очевиден: минимизация изменений конфигурации, простота добавления штрихкодов.

 

PS:Заранее благодарен за любые замечания и исправления.

 

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. kingan 5 15.12.10 09:08 Сейчас в теме
При формировании штрих кода по дате и номеру нужно учитывать, что если после распечатки документа будет изменен его дата или номер, то вы его не найдете. Поэтому для этих целей лучше использовать УникальныйИдентификатор.
wolder; shalimski; asg.aleks; vasiliy_b; smit1c; YuriFm; Yakud3a; pumbaE; artbear; Sherlock_kmw; straus; +11 Ответить
2. milkers 2467 15.12.10 10:47 Сейчас в теме
kingan пишет:
При формировании штрих кода по дате и номеру нужно учитывать, что если после распечатки документа будет изменен его дата или номер, то вы его не найдете. Поэтому для этих целей лучше использовать УникальныйИдентификатор.

Изменение даты в пределах переодичности нумератора документа (чаще всего это год) на поиск не влияют. Измение номера явление достаточно редкое. А уникальный идентификатор слишком большой.
3. parcan 64 15.12.10 11:40 Сейчас в теме
EAN128 допускает наличие в штрих-коде символов кириллицы?
4. milkers 2467 15.12.10 12:01 Сейчас в теме
5. SiAl 74 15.12.10 12:42 Сейчас в теме
Плюс за работу. Советую изменить
Если ВнешняяКомпонента.НайтиШрифт("Tahoma") = Истина Тогда

на
Если ВнешняяКомпонента.НайтиШрифт("Tahoma") Тогда
6. artbear 1209 15.12.10 14:52 Сейчас в теме
Лично я юзаю штрихкод "УникальныйИД + сумма документа" для контроля печатной формы, чтобы сразу исключить поддельные печатные формы.
7. milkers 2467 15.12.10 15:39 Сейчас в теме
(6) Хочу напомнить, что хотя в EAN128 длина штрихкода не ограниченна, остается еще и задача размещения штрихкода на печатных формах. И здесь чем он короче, тем это проще.
56. МСН 23.08.19 14:03 Сейчас в теме
(7) Самый простой способ сократить "УникальныйИД" єто применить к нему Хешфункцию, например Символьную или полиминиальную:
см. http://infostart.ru/public/70030/
https://www.intuit.ru/studies/courses/12181/1174/lecture/25261
Теорию можно почитать на http://e-maxx.ru/algo/string_hashes



//>>>>>>>>>>>>>>>>>>>>>>>>> Хеш
	#Область РасчетХешКодов  

		#Область ПолиномиальныйХеш  
			////////////////////////////////////////////////////////////­///// - Полиномиальный хеш (главная функция, с разбивкой по блокам)
			// Для ускорения работы с большими текстами, текст разбивается на блоки
			// Данная функция разбивает исходный текст (Параметр "Строка") на блоки длиной <ДлинаБлока>, по умолчанию длина блока 64 символа
			// и вычисляет хэш результат для всего текста (возвращая ХешКод, по умолчанию 20-значный, как остаток от деления на 64-битное число) .
			// == Основу взято из http://infostart.ru/public/70030/
			// == Теорию можно почитать на http://e-maxx.ru/algo/string_hashes
			Функция Хэш_Полиномиальный (Строка, ДлинаБлока = 64, hash = 0, M = 31, TABLE_SIZE = 18446744073709551615)
			     НачПозиция = 1;
			     ДлинаСтроки = СтрДлина(Строка);
			      Пока  НачПозиция<=ДлинаСтроки цикл
			        hash = Хэш_Полиномиальный_ОдинБлок(Сред(Строка, НачПозиция, ДлинаБлока), hash, M);
			        НачПозиция = НачПозиция + ДлинаБлока;
			    КонецЦикла;
			    возврат hash%TABLE_SIZE;
			КонецФункции

			////////////////////////////////////////////////////////////­///// - Полиномиальный хеш - для однго блока
			 //СтрокаХэш - исходный текст
			 //hash- начальное значение hash
			 // М - множитель (влияет накачество хэш и производительность)
			 // TABLE_SIZE - размер получаемого ключа, как Максимальная величина + 1
			    //TABLE_SIZE = 18446744073709551616-1; 64 бита
				//TABLE_SIZE = 67108864-1; 26 бита 8 разрядов
				//TABLE_SIZE = 8388608-1; 23 бита 7 разрядов
			    //M = 31; Умножитель
			Функция Хэш_Полиномиальный_ОдинБлок(СтрокаХэш, hash = 0, M = 31, TABLE_SIZE = 18446744073709551615)
			    ДлинаСтроки = СтрДлина(СтрокаХэш);
			    Для к=1 по ДлинаСтроки цикл
			        hash = M * hash + КодСимвола(Сред(СтрокаХэш,к,1));
			    конеццикла;
			    возврат hash;
			КонецФункции
		#КонецОбласти 

		////////////////////////////////////////////////////////////­///// - Символьный хеш или "Хеш-функция для строковых ключей" источник https://www.intuit.ru/studies/courses/12181/1174/lecture/25261 
		 //СтрокаХэш - исходный текст
		 // Парам_М - основа, определяет длину Хеш (по умолчанию =     909 091):
		 //									     909 091	-простое число для расчета 	по 6 разрядного хеш (еще есть М= 8388607, надо было брать 999983, но его поздно нашел, но в других алгоритмах рекомендую...)
		 // 								   9 999 907	-простое число для расчета	по 7 разрядного хеш 
		 // 								  99 999 827	-простое число для расчета	по 8 разрядного хеш 
		 //	Парам_а - множитель, по умолчанию простое число = 127 для ANSI ( для UTF8 рекомендуеться 65537)
		Функция Хэш_Символьный(СтрокаХэш, Парам_М=909091, Парам_а=127)
		    ДлинаСтроки = СтрДлина(СтрокаХэш);
			hash=0;
		    Для к=1 по ДлинаСтроки цикл
		        hash = (Парам_а * hash + КодСимвола(Сред(СтрокаХэш,к,1)))%Парам_М;
		    конеццикла;
		    возврат hash;
		КонецФункции
		
	#КонецОбласти
Показать
Serg_1C(M); +1 Ответить
8. SergeyT2006 16.12.10 04:08 Сейчас в теме
У Вас наверное только одна организация? Ибо может оказаться, а окажется обязательно, что существуют в одном году несколько документов одного типа, с одним номером, точнее с одной цифровой частью. Либо у Вас префикс номеров - латиница! Но об этом ограничении у Вас нигде не сказано.
Мне пришлось реализовывать механизм транслитерации для обхода этого ограничения.
ЗЫ Вроде у 1С есть стандартная компонента "1С:Печать штрихкодов", зачем такие сложности с подключением? ... или в 8.2 все иначе :oops:
18. mugambi 6 06.10.11 14:18 Сейчас в теме
(8) SergeyT2006, компонента 1С:Печать штрихкодов не работает в Тонком клиенте
55. МСН 23.08.19 13:40 Сейчас в теме
(8) компонента "1С:Печать штрихкодов" не работает для 64-разрядных и Линукс
9. yandextesting 144 16.12.10 10:32 Сейчас в теме
Из каких именно типовых конфигураций можно взять макеты КомпонентаПечатиШтрихкодов...? В УТ 11 - нет, в УПП 1.3 - нет, думал в библиотеке стандарных подсистем должны быть - тоже нет.
webfedor16; +1 Ответить
14. milkers 2467 23.12.10 14:50 Сейчас в теме
(9)(11)(12) Откройте конфигурацию "управление небольшой фирмой". Сделайте глобальный поиск "КомпонентаПечатиШтрихкодовWindows32" только по свойствам. Скопируйте через буфер обмена готовый макет (сначала встав на него в дереве конфигурации) и вставьте его в ветку "общие макеты" в своей конфигурации. Аналогично остальные макеты.
10. SergeyT2006 16.12.10 10:35 Сейчас в теме
Можно взять на диске ИТС, на сайте 1С... Могу выслать на мыло.
11. SergeyT2006 16.12.10 10:36 Сейчас в теме
Файл называется "1CBarCode.exe"
12. yandextesting 144 16.12.10 12:25 Сейчас в теме
Нашел макеты не в общих макетах, а в макетах обработки печати ценников и этикеток;
(11) - для 8.2 не покатит по-моему для тонкого и веб клиента
13. vladsol 16.12.10 19:44 Сейчас в теме
Модифицируем печатные формы документов следующим образом: Добавим на печатные формы требуемых документов изображение штрихкода как на рисунке с примером макета.

Обязательно имя рисунка должно начинаться на «Штрихкод”!!!!

В тело функции печати печатной формы добавляем:



Выполнял схожую задачу в рамках проекта электронного хранения документов, но на 8.1 для УПП. Когда штрихкодировать нужно не один документ, а много. И решил
задачу вывода штрихкода без изменения типовых макетов и модулей печатных форм.
Дело в том, что вывод типовых печатных форм идет через функцию общего модуля, в ней "ловится"
выводимый документ и пристыковывается снизу к общему макету, на котором единственно что есть - штрихкод.

Ниже код (честно признаюсь, часть кода я позаимствовал), может кому пригодится.

Мое решение не самое лучшее, так как штрихкод смещает документ при выводе. Я у коллег видел красивое решение в котором место вывода штрихкода задается интерактивно с помощью приблуды для
каждой печатной формы, макеты при этом не меняется. Подозреваю, что они при выводе также рисуют картинку в указанных для печатной формы координатах.

Процедура НапечататьДокумент(ПечДокумент, КоличествоЭкземпляров = 1, НаПринтер = Ложь, Заголовок = "", Ссылка = Неопределено, ИсточникМакета = Неопределено) Экспорт
    
	
	Если ПечДокумент = Неопределено тогда
		Возврат;
	КонецЕсли;


	Если ЗначениеЗаполнено(Ссылка) и ИнтеграцияЭХД_ИТ.ПроверитьВхождениеДокументаВПереченьЭХД(Ссылка) и ИнтеграцияЭХД_ИТ.ПолучитьВидДокументаЭХД(Ссылка) = 2 Тогда
		МакетОбщ = ПолучитьОбщийМакет("ШтрихКод");
		Область = МакетОбщ.ПолучитьОбласть("Штрихкод");
		ОбщМаскаКода = "000000000000";
		Код =  ИнтеграцияЭХД_ИТ.ВернутьШтрихКодДокументаЭХД(Ссылка);
		ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.Code128;
		ТипКодаЗнч = УправлениеРозничнойТорговлей.ПолучитьЗначениеТипаШтрихкодаДляЭУ(ТипКода);
		Если УправлениеРозничнойТорговлей.ПроверитьШтрихКод(Код,ТипКода) Тогда
			Попытка
				Область.Рисунки.ШтрихКодТО.Объект.ТипКода = ТипКодаЗнч;
				Область.Рисунки.ШтрихКодТО.Объект.Сообщение = Код;
			Исключение
			    Сообщить("Для вывода штрихкода на печатную форму необходимо установать ""1С:Печать штрихкодов"" ");
			КонецПопытки;
		КонецЕсли;
		табт = новый ТабличныйДокумент;
		табт.Вывести(Область);
		табт.ИмяПараметровПечати = ПечДокумент.ИмяПараметровПечати;
		табт.ОриентацияСтраницы = ПечДокумент.ОриентацияСтраницы;
		ДобавитьТабличныйДокумент(табт, ПечДокумент);
		ПечДокумент = табт;
		ПечДокумент.ТолькоПросмотр = истина;
	КонецЕсли;
...
КонецПроцедуры

Функция СтрокаТабличногоДокументаИмеетФормат(ТабличныйДокумент, НомерСтроки)
      
      тбФормата = Новый ТабличныйДокумент;
      ШиринаКолонки = ТабличныйДокумент.Область("R"+НомерСтроки+"C1").ШиринаКолонки + 1;
      тбФормата.Область("R1C1").ШиринаКолонки = ШиринаКолонки;
      тбФормата.ВставитьОбласть(ТабличныйДокумент.Область("R"+НомерСтроки),тбФормата.Область("R1C1"));
      Если НЕ тбФормата.Область("R1C1").ШиринаКолонки = ШиринаКолонки Тогда
            Возврат Истина;
      Иначе
            Возврат Ложь;
      КонецЕсли; 
      
КонецФункции

Функция ПолучитьНомерСтрокиКонцаФормата(ПечДокумент,НомерНачальнойСтроки)
      
      фл = СтрокаТабличногоДокументаИмеетФормат(ПечДокумент, НомерНачальнойСтроки);
      
      Для i = НомерНачальнойСтроки + 1 По ПечДокумент.ВысотаТаблицы Цикл
            
            Если СтрокаТабличногоДокументаИмеетФормат(ПечДокумент, i) <> фл Тогда
                Возврат (i-1);
            КонецЕсли; 
            
            Для j = 1 По ПечДокумент.ШиринаТаблицы Цикл
                  Если НЕ ПечДокумент.Область("R"+НомерНачальнойСтроки+"C"+j).ШиринаКолонки = ПечДокумент.Область("R"+i+"C"+j).ШиринаКолонки Тогда
                        Возврат (i-1);
                  КонецЕсли;
            КонецЦикла;
            
      КонецЦикла; 
      
      Возврат ПечДокумент.ВысотаТаблицы; 
      
КонецФункции

Процедура ДобавитьТабличныйДокумент(ВыходнойДокумент, ПечДокумент)
      i = 1;
      Пока i < ПечДокумент.ВысотаТаблицы Цикл
            k = ПолучитьНомерСтрокиКонцаФормата(ПечДокумент,i);
            ОбластьСтроки = ПечДокумент.Область(i,,k,);
            ОбластьСтроки.СоздатьФорматСтрок();
            ВыходнойДокумент.ВставитьОбласть(ОбластьСтроки, ВыходнойДокумент.Область(ВыходнойДокумент.ВысотаТаблицы + 1, , ВыходнойДокумент.ВысотаТаблицы + 1+(k-i), ));
            i = k + 1;
      КонецЦикла; 
КонецПроцедуры
Показать
m_005; milkers; +2 Ответить
15. ilp06 31.12.10 12:22 Сейчас в теме
Я делал двумя путями.
Первый - перекодирование в бинарный формат уникального идентификатора, иначе картинка штрих-кода слишком длинная.
Второй - специальная перекодировочная табличка (регистр сведений) - объект->код.
Печать в обоих случаях без каких либо компонент шрифтом BarCode.
Естественно, макеты нужно менять. Но у меня не стандартная конфигурация, посему это не вызвало проблем.
17. Ткачев 73 04.10.11 19:21 Сейчас в теме
(0)>3. Модифицируем печатные формы документов следующим образом: Добавим на печатные формы требуемых документов изображение штрихкода как на рисунке с примером макета.
Где взять изображение штрихкода ?
19. vbuots 20 31.01.12 13:47 Сейчас в теме
Помогите разобраться, кусок этого модуля скопировал 1:1. Только, есть одно отличие, модуль находится во внешней обработке.
Ошибка:
{ВнешняяОбработка.ххх.МодульОбъекта(296)}: Поле объекта недоступно для записи (Картинка)
Рисунок.Картинка = Обработки.ПечатьЭтикетокИЦенников.ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода);

Скрин из отладчика:
20. milkers 2467 31.01.12 13:53 Сейчас в теме
(19) Почему Объект - ActiveX? Объект должен же быть просто картинкой.
21. vbuots 20 31.01.12 14:09 Сейчас в теме
(20)
Обработки.ПечатьЭтикетокИЦенников.ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода); - тут возвращается картинка, вот кусок модуля "ПолучитьКартинкуШтрихкода":
	// Сформируем картинку
	ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();
	
	// Если картинка сформировалась
	Если ДвоичныеДанныеКартинки <> Неопределено Тогда
		// Формируем из двоичных данных
		Возврат Новый Картинка(ДвоичныеДанныеКартинки);
	КонецЕсли;
Показать


вот из отладчика

все хорошо, но почему "Рисунок.Картинка " - не доступен для записи?
22. milkers 2467 31.01.12 14:21 Сейчас в теме
(21) Внимательно посмотри тип объекта в шаблоне печатной форме. В режиме управляемых форм activex объекты не используются. Удали объект из шаблона и вставь, как в стандартной конфигурации, просто рисунок. Картинка этого рисунка и создается в Рисунок.Картинка = Обработки.ПечатьЭтикетокИЦенников.ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода);
23. vbuots 20 31.01.12 15:08 Сейчас в теме
(22)
Спасибо большое, я уже отчаялся, подставил обычную картинку, все заработало.
24. msv23 30.05.12 23:15 Сейчас в теме
Рисунок.Картинка = ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, 361, 50, ЗначениеШтрихкода, 3);

Последний параметр тип штрихкода. 3 это тип Code39.
25. pitbul 17.07.12 21:33 Сейчас в теме
А вазможно ли эту доработку реализовать в конфигурации УТ 10.3...
26. milkers 2467 17.07.12 21:37 Сейчас в теме
27. Apostol_Andrey 09.08.12 18:41 Сейчас в теме
при печати документа штрихкод есть, а на предварительном просмотре нет
в чем может быть проблема
28. Arutunov 37 21.12.12 12:29 Сейчас в теме
Конф УТ 10.3 Подскажите пожалуйста не сориентируюсь, как добавить в Общий журнал документов, обработку внешнего события, что-бы начать обрабатывать сигнал от сканера для поиска документа?
29. milkers 2467 21.12.12 12:56 Сейчас в теме
(28) Arutunov, Скопируйте соответствующий код из любого документа или справочника. Например справочник номенклатура.
30. Arutunov 37 21.12.12 14:17 Сейчас в теме
(29)Я правильно понимаю, нужно скопировать процедуру
Процедура ВнешнееСобытие(Источник, Событие, Данные)


ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, );

КонецПроцедуры // ВнешнееСобытие()
Или ещё что-то? И вставить в модуль формы Документа контрагентов или куда?
31. ratinc 22.12.12 05:43 Сейчас в теме
(29) Внешнее событие по какойто причине не срабатывает у журнала документов.
К форме привязано, в любых формах кроме журналов срабатывает.
Не подскажите как отловить событие именно в журнале?
32. Arutunov 37 22.12.12 12:03 Сейчас в теме
33. milkers 2467 22.12.12 12:21 Сейчас в теме
(31)(32) Вы не правы, посмотрите формы списка номенклатуры например. Если будет время посмотрю, но сегодня не успеваю.
34. ratinc 22.12.12 23:47 Сейчас в теме
(33) Я ничего не утверждаю, посему не могу быть неправым. В моем посте содержится вопрос.
По поводу формы списка номенклатуры могу сказать, что наш с товарищем Арутюновым вопрос касается другого объекта конфигурации.
Форма списка номенклатуры относится к справочнику, а мы спрашиваем вас про журнал. Вобщем пока никаие источники информации не позволяют однозначно судить о возможности привязки внешнего события к журналу документов
35. Arutunov 37 25.12.12 16:40 Сейчас в теме
(34)ratinc это мы с тобой тормозим, а не программа. Просто в свойствах формы журнала документов нужно прописать процедуру Внешнее событие и процедуру при открытии, и все пойдет.
36. ratinc 25.12.12 18:08 Сейчас в теме
(35) Я конечно понимаю, что как всегда проблема в какой нибудь галочке.
Но у меня в данный момент воз и не сдвинулся.
Событие формы "Внешнее событие" привязано к одноименной процедуре. А что такого вы добавили в событие "При открытии"?
37. Arutunov 37 26.12.12 12:03 Сейчас в теме
В Процедуру ПриОткрытии надо всего навсего добавить ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
38. Arutunov 37 26.12.12 12:06 Сейчас в теме
А еще нужно добавить в модуль формы Функцию:

Функция ПоддерживаетсяВидТО(Вид) Экспорт

Результат = Ложь;

Если Вид = Перечисления.ВидыТорговогоОборудования.СканерШтрихКода Тогда
Результат = Истина;
КонецЕсли;

Возврат Результат;

КонецФункции // ПоддерживаетсяВидТО()
39. ratinc 28.12.12 13:12 Сейчас в теме
(38) Спасибо за совет.
Реально не хватало
Процедура ПриОткрытии()	
ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
КонецПроцедуры


Я ще вставлю свои пять копеек. Не заморачивайтесь с вариантом создания ШК с кодированием номеров документов. Используйте сразу GUID объекта. Шансов нарваться на кирилический символ в коде объекта очень много. Оно вам надо?
Если вы сильно ограничены областью в которую необходимо выводить ШК, и 36 символов у вас не влезают, то лучше вынести в константы или регистр сведений ту часть гуида, которая повторяется в объектах принадлежащих к одному типу данных. Нужно только помнить, что если вы пересоздадите базу, эти значения изменятся.
40. lesorubka 20 09.04.13 14:02 Сейчас в теме
Спасибо за код. все получилось! Вставляла в БП 2.0
Правда, не понятно, почему, но для толстого клиента функции работают из общего модуля (добавила в РаботаСТорговымОборудованием), а для тонкого клиента почему-то они не видны - Предприятие даже не загружается - сразу выдает ошибку. Пришлось их вставить в модуль менеджера документа, откуда идет печать.
Может я чего-то недопонимаю?
41. Dach 304 09.04.13 14:21 Сейчас в теме
А мы штрихкод документа храним в доп. свойствах. Компонента печати лежит на сервере. Картинка штрихкода вместе с рисунком вставляется на макет печатной формы. Весь код, приведенный автором - просто встраивается в печатную форму. То есть никаких доработок конфигурации не требуется.

А вот как штрихкод попадает в доп. свойства документа и откуда он берется - об этом я, возможно тоже напишу статью.
42. Dach 304 09.04.13 14:26 Сейчас в теме
Перем мКартинкаШтрихкода;
Перем мНадписьТекст;

//Получает данные о штрихкоде объекта. Если у объекта нет штрихкода, он присваивается
//Параметры: 
//			Объект - ссылка на объект, данные о штрихкоде которого собираются
//			ВысотаКартинкиВПроцентах - высота изображения штрихкода в процентах
//Возвращает:
//			структура
//				Штрихкод - значение штрихкода
//				ДвоичныеДанныеИзображенияШК - двоичные данные изображения штрихкода
//				ДвоичныеДанныеФайла - двоичные данные файла, если Объект - это файл
//				НеобходимостьВставкиВместоТэга - влаг, показывающий, что штрихкод только сформирован для файла 
//					и что необходимо выполнить попытку вставить изображение штрихкода вместо тэга в файле
//				ВставкаШКвMSнаСервере - флаг, показывающий, что вставка изображения в файл MS Word выполняется на сервере
//				НастройкиШтрихкода - структура из персональных настроек
//					ПоказыватьФормуНастройкиШтрихкода - показывать форму настройки положения штрихкода
//					ПоложениеШтрихкодаНаСтранице - значение из перечисления ВариантыРасположенияШтрихкода
//					СмещениеПоГоризонтали - расстояние от левого края страницы
//					СмещениеПоВертикали - расстояние от верха страницы	
//
//			Неопределено, если объект - это файл в папке ШаблоныФайлов
&НаСервере
Функция ПолучитьДанныеДляВставкиШтрихкодаВОбъект(Ссылка,НеобходимоПередаватьСодержимоеФайла = Истина)
	
	ДанныеШК = Новый Структура;	
	ДанныеШК.Вставить("ДвоичныеДанныеИзображенияШК", Неопределено);
	
	НеобходимостьВставкиВместоТэга = Ложь;
	Штрихкод = Неопределено;
	
	//Пытаемся найти штрихкод у объекта
	ЗначениеШтрихкода = ПолучитьШтрихКод(Ссылка);			
	
	Если ЗначениеШтрихкода = Неопределено ИЛИ ПустаяСтрока(ЗначениеШтрихкода) Тогда
		Сообщить("Штрихкод для данного документа не сформирован");		
	Иначе
		Штрихкод = ЗначениеШтрихкода;
	КонецЕсли;
	
	Если НЕ Штрихкод = Неопределено Тогда
		
		//Вставим значение ШК
		ДанныеШК.Вставить("Штрихкод", Штрихкод);		
		
		//получаем изображение штрихкода
		ДвоичныеДанныеИзображенияШК = ПолучитьКартинкуШтрихкода(Штрихкод,,21,Истина);
		ДанныеШК.ДвоичныеДанныеИзображенияШК = ДвоичныеДанныеИзображенияШК;
		
		Возврат ДанныеШК;
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
КонецФункции

&НаСервере
Функция ПолучитьШтрихКод(Ссылка)
	
	НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Объект.Установить(Ссылка);
	НаборЗаписей.Отбор.Свойство.Установить(ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Штрихкод"));
    НаборЗаписей.Прочитать();
	Для Каждого Запись Из НаборЗаписей Цикл
		Возврат Запись.Значение;
	КонецЦикла;
	Возврат Неопределено;
	
КонецФункции //ПолучитьШтрихКод()

//Получает изображение штрихкода
//Параметры:
//			Код - значение штрихкода
//			ТипКода - формат штрихкода. По умолчанию EAN-13
//			ВысотаВПроцентах - высота штрихкода в процентах
//Возвращает:
//			Картинка с изображением штрихкода
&НаСервере
Функция ПолучитьКартинкуШтрихкода(Код, ТипКода = 1, ВысотаВМиллиметрах, ВставлятьЦифры) Экспорт
	
	// В зависимости от типа платформы подключим соответствующую внешнюю компоненту
	ИнформацияОСистеме = Новый СистемнаяИнформация;
	Если ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда		
		
		СтрокаАдресаКомпонентыПечатиШК = "\\192.168.0.18\tmplts\ExternalComponentOfThePressOfBarcode\КомпонентаПеч­атиШтрихкодовВин32.dll";
						
	ИначеЕсли ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
		
		СтрокаАдресаКомпонентыПечатиШК = "\\192.168.0.18\tmplts\ExternalComponentOfThePressOfBarcode\КомпонентаПеч­атиШтрихкодовВин32.dll";	
		
	КонецЕсли;
	
	ПодключитьВнешнююКомпоненту(СтрокаАдресаКомпонентыПечатиШК, "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
	
	// Создадим объект внешней компоненты
	Компонент = Новый("AddIn.КартинкаШтрихкода.Barcode");
	
	Компонент.ОтображатьТекст = ВставлятьЦифры;
	
	// Если нет возможности рисовать
	Если НЕ Компонент.ГрафикаУстановлена Тогда
		// То картинку сформировать не сможем
		Возврат Неопределено;
	КонецЕсли;
	
	Если ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Linux_x86
		ИЛИ ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда
		Если Компонент.НайтиШрифт("DejaVu-Serif-Book") = Истина Тогда
			Компонент.Шрифт = "DejaVu-Serif-Book";
		Иначе
			Возврат Неопределено;
		КонецЕсли;
	Иначе	
		// Если в системе установлен шрифт Arial
		Если Компонент.НайтиШрифт("Arial") Тогда
			// Выбираем его как шрифт для формирования картинки
			Компонент.Шрифт = "Arial";
		Иначе
			// Шрифт Arial в системе отсутствует
			// Обойдем все доступные компоненте шрифты
			Для Сч = 0 По Компонент.КоличествоШрифтов -1 Цикл
				// Получим очередной шрифт, доступный компоненте
				ТекущийШрифт = Компонент.ШрифтПоИндексу(Сч);
				// Если шрифт доступен
				Если ТекущийШрифт <> Неопределено Тогда
					// Они и будет шрифтом для формирования штрихкода
					Компонент.Шрифт = ТекущийШрифт;
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
	// Установим размер шрифта
	Компонент.РазмерШрифта = 12;
	Компонент.ОриентацияТекста = 3;
	// Зададим размер картинки
	Если НЕ ЗначениеЗаполнено(ВысотаВМиллиметрах) Тогда
		ВысотаВМиллиметрах = 21;
	КонецЕсли;
	Компонент.Высота = Число(Формат((ВысотаВМиллиметрах/35.3) * 100, "ЧДЦ=0"));
	
	//EAN-13 по умолчанию
	Компонент.ТипКода = ТипКода;
	
	// Если код содержит контрольный символ, обязательно указываем
	Компонент.СодержитКС = Истина;
	
	// Формируем картинку штрихкода
	Компонент.ЗначениеКода = Код;
	
	Компонент.Ширина = Компонент.МинимальнаяШиринаКода + 5;
		
	// Сформируем картинку
	ДвоичныеДанныеКартинки = Компонент.ПолучитьШтрихкод();
	// Если картинка сформировалась
	Если НЕ ДвоичныеДанныеКартинки = Неопределено Тогда
		// Формируем из двоичных данных
		Картинка = Новый Картинка(ДвоичныеДанныеКартинки);
		Возврат Картинка;
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

____________________________________________________________­_______________________________________

а вот этот кусочек встроить там, где выводится область с рисунком ШК:

ДанныеОШтрихкоде = ПолучитьДанныеДляВставкиШтрихкодаВОбъект(ВыборкаПоШапке.Ссылка, Ложь);
		Если ДанныеОШтрихкоде <> Неопределено
			И ДанныеОШтрихкоде.Свойство("ДвоичныеДанныеИзображенияШК") Тогда
			КартинкаШтрихкода = ПолучитьКартинкуШтрихкода(ДанныеОШтрихкоде.Штрихкод,,21,Истина);
			
			Если ДанныеОШтрихкоде.Свойство("СообщениеОбОшибке") Тогда
				ВызватьИсключение(ДанныеОШтрихкоде.СообщениеОбОшибке);
			КонецЕсли;
			
			Если НЕ КартинкаШтрихкода = Неопределено Тогда
				ОриентацияПортрет = Истина;
				ОриентацияПортрет = Истина;				
				
				Рисунок = Шапка.Область("Картинка");
				Рисунок.Высота = 19;		
				Рисунок.Ширина = 37;
				Рисунок.Картинка = КартинкаШтрихкода;
				
				Надпись = Шапка.Область("НадписьЗаголовок");				
				Надпись.Текст = ВыборкаПоШапке.ОрганизацияПолучатель.Наименование;
				
				//Расположение элементов штампа относительно друг друга
				Надпись.Лево = Рисунок.Лево;
				Надпись.Верх = Рисунок.Верх - Надпись.Высота;
				
				мНадписьТекст = ВыборкаПоШапке.ОрганизацияПолучатель.Наименование;
				мКартинкаШтрихкода = КартинкаШтрихкода;
				
			КонецЕсли;
Показать
43. markgenuine 03.10.13 16:41 Сейчас в теме
Как данный код подстроить под Code39? Как данный код Code39 уменьшить в длинну?
44. lesenoklenok 23 26.02.14 14:41 Сейчас в теме
Спасибо за статью, очень много интересного узнала.
45. sweety-twetty 26.02.15 17:23 Сейчас в теме
Подскажите, пожалуйста, при попытке печати внешней печ. формы со штрих-кодом в управляемых формах, получаю ошибку "Значение не является значением объектного типа (Сообщение)" из строки

ОбластьМакета.Рисунки.ШтрихКод.Объект.Сообщение = ВРег(СокрЛП(СсылкаНаОбъект[0].Ссылка.УникальныйИдентификатор()))


В обычном приложении печ.форма формируется правильно(в об.приложении ОбластьМакета.Рисунки.ШтрихКод.Объект=ActiveX, а в управл.приложении ОбластьМакета.Рисунки.ШтрихКод.Объект=Null). Подскажите,в чем может быть проблема? Заранее спасибо
46. odineskin2 324 26.06.16 12:10 Сейчас в теме
решение рабочее, но для более "мудреного" использования штрих-кодирования предлагаю попробовать наш модуль http://infostart.ru/public/527954/
встраивание штрих-кодов идёт не через стандартный функционал, а через более функциональную библиотеку.
47. Antimyslitel 35 05.01.18 15:26 Сейчас в теме
ВнешняяКомпонента = ИМЯОБЩЕГОМОДУЛЯ.ПодключитьВнешнююКомпонентуПечатиШтрихкода();

Перед выводом макета области со штрихкодом:

ИМЯОБЩЕГОМОДУЛЯ.ВывестиШтрихкодДокументаВОбластьМакета(ВнешняяКомпонента,ОбластьМакета,"PER"+СтрЗаменить(Формат(Шапка.Дата,"ДФ=dd.MM.yy"),".","")+Шапка.Номер);


Куда это вставлять можно более детально?
48. Antimyslitel 35 05.01.18 15:32 Сейчас в теме
{Документ.РеализацияТоваровУслуг(43,38)}: Неопознанный оператор
ПередВыводомМакетаОбластиСоШтрихкодом<<?>>: (Проверка: Толстый клиент (обычное приложение))


Дает что неопознанный оператор
49. Antimyslitel 35 05.01.18 15:33 Сейчас в теме
{Документ.РеализацияТоваровУслуг(43,8)}: Неопознанный оператор
Перед <<?>>Выводом Макета Области Со Штрихкодом: (Проверка: Толстый клиент (обычное приложение))

Точнее так!
50. EvgeniyNP 14.11.18 10:07 Сейчас в теме
Здравствуйте!
Пробую сделать как в статье, но в печатной форме выводится как на скрине.
В переменную "ЗначениеШтрихкода" я передаю строку ГУИДа документа.
На макете картинка как у вас. Код не трогал.
Что я делаю не так?
UPD
Изменил ТипКода на 4 (тип кода - CODE128), выводится ШК
Прикрепленные файлы:
51. milkers 2467 14.11.18 11:03 Сейчас в теме
(50) На картинке написано - неправильный штрихкод. Текущий формат штрихкода не может закодировать такую длинную последовательность.
52. EvgeniyNP 14.11.18 11:18 Сейчас в теме
(51) сменил тип и вывелось.
Еще вопрос, чтобы выводился текст под ШК, нужно проставить
ВнешняяКомпонента.ОтображатьТекст = Истина;

?
53. milkers 2467 14.11.18 12:42 Сейчас в теме
(52) ОтображатьТекст (TextVisible) Булево + + Свойство указывает необходимость отображать текст штрихкода на его поверхности. Актуально только для тех типов штрихкодов, которые предусматривают вывод данной строки
EvgeniyNP; +1 Ответить
54. EvgeniyNP 14.11.18 14:28 Сейчас в теме
(53)Понял, спасибо.
я так понимаю EAN8,EAN13,EAN128 могут это?
57. Serg_1C(M) 03.09.19 10:51 Сейчас в теме
Типов печати штрихкодов много:
// Параметры:
// ТипКода число от 0 до 16
// 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

Нужно было посмотреть как оно работает и как выглядит (в частности мне нужен был PDF417)

написал обработку для демонстрации возможностей всех типов штрихкодов (во вложении)
так же можно посмотреть по ссылке
My Webpage

в конфигурации обязательно должен быть компонент ОбщийМакет.КомпонентаПечатиШтрихкодов (можно загрузить в свою конфу из указанной папки)
Прикрепленные файлы:
Печати_ШК -версия 1.3 (+)- 16 типов.epf
ОбщийМакет_КомпонентаПечатиШтрихкодов
58. Suxar 29.01.20 16:18 Сейчас в теме
(57)
(в частности мне нужен был PDF417)

Сам его использую. После последнего обновления БПО с 2.1.1.12 на 2.1.1.32 штрихкод стал нечитабельным. 1С заявляет что проблема с
	Компонент.Высота = Компонент.МинимальнаяВысотаКода+50;
	Компонент.Ширина = Компонент.МинимальнаяШиринаКода;

Собственно если раньше ШК состоял из 7 строк, а остальное было забито пустыми символами, то теперь компонента забивает его целиком. Непойму как корректно высчитывать высоту и ширину, если не указывать то получаешь ошибку.
59. Serg_1C(M) 12.02.20 11:39 Сейчас в теме
Доброго дня
я не совсем понял в чем проблема (нечитабильность сканером?)


я использую PDF417, с ним следующие нюансы:

1) много проблем было при использовании внешнего компонента 1cbarcode_8.0... подбирал опытным путем:
						ОбластьБирка.Рисунки.ШтрихКод_PDF417.Объект.ТипКода			=	6;
			ОбластьБирка.Рисунки.ШтрихКод_PDF417.Объект.Сообщение			=	Парам_ДанныеДляПечати.СерийныйНомер;
			ОбластьБирка.Рисунки.ШтрихКод_PDF417.Объект.Пропорции			=	"1:4";
			ОбластьБирка.Рисунки.ШтрихКод_PDF417.Объект.УровеньКоррекции	=	4;
			ОбластьБирка.Рисунки.ШтрихКод_PDF417.Объект.ВыравниваниеКода	=	2;

вариативность была для Пропорции, УровеньКоррекции, ВыравниваниеКода
(проверял телефоном считывание, сканер почти всегда читал)

2) при использовании компонент ОбщийМакет.КомпонентаПечатиШтрихкодов проблем не было, сразу как-то пошло (но проверял только сканером, на телефоне нет автофокуса, а тот что раньше проверял "ушел")
параметры высоты и ширины целесообразно рассчитывать с использованием эталонного рисунка (Макет "Эталон"), это подобранный рисунок (100пикселей вроде в 10х10 мм, но точно уже не помню), брал из конфы УТ, можно взять из моей обработки (см. рисунок и комментарий раньше)


        #Область Рис_Штрихкода
        	м_КоличествоМиллиметровВПикселе=Получить_КоличествоМиллиметр­овВПикселе();
            
            Рисунок_ШК=ОбластьБирка.Рисунки.Рис_ШК_Партии;
            ПараметрыШтрихкода = Новый Структура;
            ПараметрыШтрихкода.Вставить("Ширина",          Окр( 180 / м_КоличествоМиллиметровВПикселе));
            ПараметрыШтрихкода.Вставить("Высота",          Окр(  20 / м_КоличествоМиллиметровВПикселе));
            ПараметрыШтрихкода.Вставить("Штрихкод",        СокрЛП(Парам_ДанныеДляПечати.Серия_Номер));
            ПараметрыШтрихкода.Вставить("ТипКода",         6);  // Штрихкод PDF417
            ПараметрыШтрихкода.Вставить("ОтображатьТекст", Ложь);
            ПараметрыШтрихкода.Вставить("РазмерШрифта",    12);
            
            м_Картинка = МенеджерОборудованияВызовСервера_ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
            
            Если  ЗначениеЗаполнено(м_Картинка) Тогда
                Рисунок_ШК.Картинка = м_Картинка ;
                Рисунок_ШК.ВыводитьНаПечать = Истина;                
            иначе
                Рисунок_ШК.ВыводитьНаПечать = Ложь;                
            КонецЕсли;    
        #КонецОбласти 


//..............

    Функция Получить_КоличествоМиллиметровВПикселе()

    	Эталон = ПолучитьМакет("Эталон");
    	Возврат Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;

    КонецФункции // ()


Показать


P.S. Редко захожу, так что ответы обычно с задержкой :(
Прикрепленные файлы:
60. kirillkr 28 21.12.20 21:01 Сейчас в теме
Эту компоненту возможно заставить печатать в формате png, а не jpeg?
В связи с последними оптимизациями 8.3.18 при сохранении печатной формы в PDF, картинка заменяется на черный прямоугольник. При замене картинки на изображение png сохранение происходит корректно.
Оставьте свое сообщение

См. также

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

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

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

28.12.2020    4361    comol    22    

Базовые вещи БСП, которые облегчат жизнь программисту 1С

Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Россия Бесплатно (free)

В данной публикации я опишу полезные процедуры и функции модуля общего назначения библиотеки стандартных подсистем, обязательные к использованию любым программистом 1С.

30.08.2020    10876    quazare    33    

Форма выбора (подбор) в управляемых формах

Практика программирования v8 v8::УФ 1cv8.cf Россия Бесплатно (free)

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

08.05.2020    35552    user5300    16    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    39109    ids79    26    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    38445    unichkin    74    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    30523    John_d    22    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    23221    kuzyara    38    

30 задач. Странных и не очень

Практика программирования v8 Бесплатно (free)

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    18816    YPermitin    60    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    32049    tormozit    104    

Как передать IP адрес, который вызвал HTTP запрос в 1C (для веб-сервера Apache)

Практика программирования v8 Бесплатно (free)

Столкнулся с задачей получения IP адреса, который вызывает http сервис 1С. Итак, решение:

22.11.2019    9840    Sibars    19    

Полезные процедуры и функции для программиста

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

Все мы пишем программный код и часто используем процедуры, облегчающие его написание. Ниже приведена выборка таких полезных процедур и функций.

07.10.2019    33163    HostHost    41    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    40155    Yashazz    50    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012    79300    tormozit    131    

О программе Postman для тестирования API и для чего она нужна 1С-нику

Практика программирования Программное обеспечение (software) v8 Бесплатно (free)

Для чего нужна программа Postman для тестирования API и какая от него польза для 1С-программиста.

24.09.2019    14579    budidich    28    

[Шпаргалка] Программное создание элементов формы

Практика программирования Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    67124    rpgshnik    68    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    58217    ids79    55    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    50056    tormozit    48    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    33206    YPermitin    24    

Три костыля. Сказ про фокусы в коде

Практика программирования v8 Бесплатно (free)

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    27055    YPermitin    80    

Отслеживание выполнения фонового задания

Практика программирования Универсальные функции Разработка v8 1cv8.cf Бесплатно (free)

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    35250    ids79    16    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    46735    tormozit    74    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    106815    ids79    63    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    43942    avalakh    26    

Разбираемся с параметрами редактирования СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    29163    json    15    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    16420    m-rv    2    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    75894    ids79    14    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    39914    ids79    27    

Регистры сведений. За кулисами

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    28342    YPermitin    14    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    20957    m-rv    17    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    20406    SeiOkami    50    

Работа с настройками системы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Варианты отчетов, работа с настройками вариантов: структура группировок, поля отчета, отборы, сортировка, условное оформление, другие настройки, настройки отображения диаграмм.

02.07.2019    59153    ids79    17    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    60391    ids79    26    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    32304    m-rv    21    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    27022    dmurk    146    

Регистры накопления. Структура хранения в базе данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    49644    YPermitin    30    

О расширениях замолвите слово...

Практика программирования Разработка v8 Бесплатно (free)

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    37837    ellavs    126    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Вариант решения задач с проведением по типовым регистрам нетиповыми регистраторами. Зачем - чтобы при сравнении конфигурации не обращать внимание на свойства регистров и исключить вероятность допущения горькой оплошности при обновлении информационных баз, заменив типы регистраторов основной конфигурации типами конфигурации поставщика. Для программных продуктов, имеющих в своем составе метаданных документ "Корректировка регистров"("Корректировка записей регистров").

05.12.2017    28841    itriot11    34    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Практика программирования v8 Бесплатно (free)

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    28604    ellavs    90    

Трюки с внешними источниками данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    34479    YPermitin    53    

Ошибки при работе с хранилищем конфигурации и способы их решения

Практика программирования v8 Бесплатно (free)

В статье собраны наиболее распространенные ошибки при работе с хранилищем конфигурации и способы их обхода и решения.

01.03.2019    48474    Смешной 1С    31    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    78372    Serginio    113    

Разработка и сценарное тестирование с Vanessa-ADD. Отчетность Allure. Автоматизация запуска сценариев

Практика программирования Vanessa Automation v8 Россия Бесплатно (free)

Формируем отчетность о результатах выполнения сценариев. Автоматизируем запуск.

26.02.2019    24138    Vladimir Litvinenko    28    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    37385    ids79    40    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

Практика программирования БСП (Библиотека стандартных подсистем) Роли и права v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    46328    ids79    11    

EnterpriseData – часть 2. Процесс выгрузки данных

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Основные этапы выгрузки данных через ED, обработчики событий выгрузки, правила обработки данных, правила конвертации объектов, конвертация свойств первого и второго этапов, процедуры БСП, используемые при выгрузке данных, структура «КомпонентыОбмена».

26.12.2018    28978    ids79    31    

Тестер: частые вопросы Промо

Практика программирования v8 Бесплатно (free)

Ошибкам бой - тесты норма жизни!

25.07.2018    30134    grumagargler    31    

Новый подход к обмену данными EnterpriseData

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Хочу предложить Вашему вниманию цикл статей, посвященных обмену данными через универсальный формат (EnterpriseData или ED).

14.12.2018    45725    ids79    75