Имя: Пароль:
1C
 
ЕАН13
0 first_may
 
27.10.22
16:50
Добрый день.

Подскажите пож, как вывести штрих код в формате еан13?

Пишу вот так, как в типовой

        Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
        КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
        
        Ширина = Окр(ОбластьШтрихКод.Рисунки.КартинкаШтрихкода.Ширина / КоличествоМиллиметровВПикселе);
        Высота = Окр(ОбластьШтрихКод.Рисунки.КартинкаШтрихкода.Высота / КоличествоМиллиметровВПикселе);
        
        ПараметрыШтрихкода = Новый Структура;
        ПараметрыШтрихкода.Вставить("Ширина",           Высота);
        ПараметрыШтрихкода.Вставить("Высота",           Высота);
        ПараметрыШтрихкода.Вставить("Штрихкод",         EAN13);
        ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 0); // Штрихкод - это строка
        ПараметрыШтрихкода.Вставить("ТипКода",          4); // Code128
        ПараметрыШтрихкода.Вставить("ОтображатьТекст",  Истина);
        ПараметрыШтрихкода.Вставить("РазмерШрифта",     6);
        
        ОбластьШтрихКод.Рисунки.КартинкаШтрихкода.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);


где EAN13 = "0102032212740" (строка). Но это выводится Code128, а если ставлю 1 - EAN13, то выдается ошибка.


Как правильно получить штрихкод?
1 Philix
 
27.10.22
16:55
(0) В "0102032212740" ошибка. Последняя цифра есть контрольная сумма. "0102032212748" пойдет в EAN-13
2 first_may
 
27.10.22
17:22
(1) штрих формируется по определенной схеме..

что то вот так
01 + 02 + 03 + 22 + 12740

01 + 02 + 03 - это служебные
22 - это год документа
12740 - это номер документа

поэтому 12740 никак нельзя менять, а вот 01 можно изменить на 1..

тогда будет
1 + 02 + 03 + 22 + 12740 + контрольная сумма


так?
а как получить контрольную сумму?
3 Йохохо
 
27.10.22
17:28
(2) у тебя в конфигурации уже есть код считающий контрольную, поиск по штрихкод или ean13
4 Philix
 
27.10.22
17:34
(2) Тогда у тебя заняты все 13 разрядов осмысленными данными. Места для контрольной суммы не осталось и EAN-13 тут нельзя использовать.
5 DJ Anthon
 
27.10.22
17:37
сократи год до одного символа )
6 first_may
 
27.10.22
17:39
(4) почему заняты?

1 + 02 + 03 + 22 + 12740 - 12 символов
7 Philix
 
27.10.22
17:42
(6) Мои извинения, не дочитал... Можно просто передать 12 цифр в компоненту, она сама просчитает. Или Вот: https://roskod.ru/info-articles/raschet-kontrolnoj-tsifry-ean-13/
8 Chai Nic
 
27.10.22
18:10
Используйте разные типы штрихкодов по назначению. Для кодификации осмысленных данных лучше использовать EAN-128, в нём возможна любая длина сообщения (главное чтобы сканер брал), в том числе кроме цифр там можно закодировать латинские буквы.
9 first_may
 
27.10.22
18:16
(7) спасибо

(8) согласен


вообщем получилось..

нашел

Функция КонтрольныйСимволEAN(ШтрКод, Тип)
    Четн = 0;
    Нечетн = 0;
    
    Если Тип = 13 Тогда
        КолвоИтераций = 6;
    Иначе
        КолвоИтераций = 4;
    КонецЕсли;
    
    Для Индекс = 1 По КолвоИтераций Цикл
        Четн = Четн + Сред(ШтрКод, 2 * Индекс, 1);
        Нечетн = Нечетн + Сред(ШтрКод, 2 * Индекс - 1, 1);
    КонецЦикла;
    
    Если Тип = 13 Тогда
        Четн = Четн * 3;
    Иначе
        Нечетн = Нечетн * 3;
    КонецЕсли;
    
    КонтЦифра = 10 - (Четн + Нечетн) % 10;
    
    Возврат ?(КонтЦифра = 10, "0", Строка(КонтЦифра));
КонецФункции



и в итоге

EAN13 = "010203221274"
EAN13 = EAN13 + КонтрольныйСимволEAN(EAN13, 13);
10 first_may
 
27.10.22
18:16
Спасибо всем..