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

23.12.10

Задачи пользователя - Адаптация типовых решений

Эта статья описывает процесс доработки типовых 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С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    4169    14    1    

32

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    5993    14    5    

24

Печатные формы Адаптация типовых решений Бухгалтер Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с установленными именами. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

3000 руб.

07.02.2023    6706    73    10    

30

Адаптация типовых решений Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5267    dimanich70    15    

22

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    6825    dimanich70    9    

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

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

на
Если ВнешняяКомпонента.НайтиШрифт("Tahoma") Тогда
6. artbear 1563 15.12.10 14:52 Сейчас в теме
Лично я юзаю штрихкод "УникальныйИД + сумма документа" для контроля печатной формы, чтобы сразу исключить поддельные печатные формы.
7. milkers 2918 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 148 16.12.10 10:32 Сейчас в теме
Из каких именно типовых конфигураций можно взять макеты КомпонентаПечатиШтрихкодов...? В УТ 11 - нет, в УПП 1.3 - нет, думал в библиотеке стандарных подсистем должны быть - тоже нет.
webfedor16; +1 Ответить
14. milkers 2918 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 148 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.
Естественно, макеты нужно менять. Но у меня не стандартная конфигурация, посему это не вызвало проблем.
16. пользователь 17.08.11 09:02
Сообщение было скрыто модератором.
...
17. Ткачев 74 04.10.11 19:21 Сейчас в теме
(0)>3. Модифицируем печатные формы документов следующим образом: Добавим на печатные формы требуемых документов изображение штрихкода как на рисунке с примером макета.
Где взять изображение штрихкода ?
19. vbuots 20 31.01.12 13:47 Сейчас в теме
Помогите разобраться, кусок этого модуля скопировал 1:1. Только, есть одно отличие, модуль находится во внешней обработке.
Ошибка:
{ВнешняяОбработка.ххх.МодульОбъекта(296)}: Поле объекта недоступно для записи (Картинка)
Рисунок.Картинка = Обработки.ПечатьЭтикетокИЦенников.ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода);

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


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

все хорошо, но почему "Рисунок.Картинка " - не доступен для записи?
22. milkers 2918 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 2918 17.07.12 21:37 Сейчас в теме
27. Apostol_Andrey 09.08.12 18:41 Сейчас в теме
при печати документа штрихкод есть, а на предварительном просмотре нет
в чем может быть проблема
28. Arutunov 38 21.12.12 12:29 Сейчас в теме
Конф УТ 10.3 Подскажите пожалуйста не сориентируюсь, как добавить в Общий журнал документов, обработку внешнего события, что-бы начать обрабатывать сигнал от сканера для поиска документа?
29. milkers 2918 21.12.12 12:56 Сейчас в теме
(28) Arutunov, Скопируйте соответствующий код из любого документа или справочника. Например справочник номенклатура.
30. Arutunov 38 21.12.12 14:17 Сейчас в теме
(29)Я правильно понимаю, нужно скопировать процедуру
Процедура ВнешнееСобытие(Источник, Событие, Данные)


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

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

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

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

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

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

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


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

А вот как штрихкод попадает в доп. свойства документа и откуда он берется - об этом я, возможно тоже напишу статью.
42. Dach 382 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 35 26.02.14 14:41 Сейчас в теме
Спасибо за статью, очень много интересного узнала.
45. sweety-twetty 26.02.15 17:23 Сейчас в теме
Подскажите, пожалуйста, при попытке печати внешней печ. формы со штрих-кодом в управляемых формах, получаю ошибку "Значение не является значением объектного типа (Сообщение)" из строки

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


В обычном приложении печ.форма формируется правильно(в об.приложении ОбластьМакета.Рисунки.ШтрихКод.Объект=ActiveX, а в управл.приложении ОбластьМакета.Рисунки.ШтрихКод.Объект=Null). Подскажите,в чем может быть проблема? Заранее спасибо
46. odineskin2 201 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 2918 14.11.18 11:03 Сейчас в теме
(50) На картинке написано - неправильный штрихкод. Текущий формат штрихкода не может закодировать такую длинную последовательность.
52. EvgeniyNP 14.11.18 11:18 Сейчас в теме
(51) сменил тип и вывелось.
Еще вопрос, чтобы выводился текст под ШК, нужно проставить
ВнешняяКомпонента.ОтображатьТекст = Истина;

?
53. milkers 2918 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
ОбщийМакет_КомпонентаПечатиШтрихкодов
Alex1c; ivan453; +2 Ответить
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 29 21.12.20 21:01 Сейчас в теме
Эту компоненту возможно заставить печатать в формате png, а не jpeg?
В связи с последними оптимизациями 8.3.18 при сохранении печатной формы в PDF, картинка заменяется на черный прямоугольник. При замене картинки на изображение png сохранение происходит корректно.
61. IraNov 27.10.21 15:08 Сейчас в теме
62. IraNov 27.10.21 15:09 Сейчас в теме
(60) Добрый день! Подскажите вы решила как то этот вопрос? Столкнулись сейчас с аналогичной ситуацией...
63. kirillkr 29 28.10.21 09:54 Сейчас в теме
(62) насколько я сейчас вспоминаю, я обновил компоненту из типовой конфигурации и переписал вызов для новой версии. Не помню чем, но чем-то пришлось пренебречь, но работа продолжилась.
64. ivan453 16.12.22 14:04 Сейчас в теме
Оставьте свое сообщение