Имя: Пароль:
1C
1C 7.7
v7: Печать штрихкодов - код 1234567890128. Продолжение
,
0 e200420
 
12.06.19
15:56
Приветствую! Итак, в продолжение темы Печать штрихкодов - код 1234567890128.
Стандартная компонента "1С.V8.Печать штрих кодов" Печатает штрихкод с номером 1234567890128, вместо 2000001559261, например, в моем случае. И этот случай не единственный. Примерно 1 позиция из 100 печатается именно так криво. Дополнительно иногда пользуюсь шрифтом EAN13. Так вот со шрифтом штрих печатает, но не читает ничем, вообще. Загнал число 2000001559261 в несколько онлайн генераторов штрихкода. Выдает ошибку. Выходит, что именно создание 13 символьного кода происходит неверно.
Получается, что компонента 1с распознает неправильную кодировку и выдает номер 1234567890128, а шрифтом печать проходит без проблем, на первый взгляд.
1 Garykom
 
гуру
12.06.19
16:18
И вот таким еще наверно и зарплату платят, которые ссылку на ветку приводят а ответа на свой тупой вопрос там прочитать не могут в (7)
2 Злопчинский
 
12.06.19
16:19
Продолжайте наблюдения!
3 Garykom
 
гуру
12.06.19
16:21
Загоняешь 200000155926 в калькулятор https://www.gs1.org/services/check-digit-calculator и внимание правильный ответ
200000155926 0

Не 1 а 0! Так что у вас не EAN13 а какая то левая хрень, поэтому и не печатается стандартной компонентой.
4 Злопчинский
 
12.06.19
16:21
(3) ты, блина, умный!
5 Garykom
 
гуру
12.06.19
16:23
(4) Я обычный, просто некий прописные истины типа того что "шрифтами печатает же" пишут.
Сцуко ну нет при печати шрифтами проверки, если ее самим не написать, логично же. Науй об этом писать?
6 dmitryds
 
12.06.19
16:35
(5) кодеры не знают стандартов, а если бы могли прочитать документацию по формированию ШК, были бы программистами и не задавали бы таких вопросов)
7 MWWRuza
 
гуру
12.06.19
16:48
Так, это... ТопикСтартеру, на заметку... Если уж очень хочется напечатать ШК с помощью шрифта, фрагмент из моей рабочей конфы(алгоритм честно скомуниздил у кого-то, давно, уже и не помню где):

// Функция для печати ШК шрифтом EanGnivc. ВК баркоде.осх, иногда, особенно если ШК мелкий, не работает...
Функция СформироватьСтрокуEanGnivc(ШтрихкодСтрокойСимволов) Экспорт
    Перем СпособыКодированияЛевойЧасти[10];
    СимволыСпособовКодирования = "#$%&'()*+,";
    ЛевыйЗащитныйШаблон = "!";
    СреднийЗащитныйШаблон = "-";
    ПравыйЗащитныйШаблон = "!";
    СимволыШрифтаПоТипамКодов = СоздатьОбъект("ТаблицаЗначений");
    СимволыШрифтаПоТипамКодов.НоваяКолонка("Ключ");
    СимволыШрифтаПоТипамКодов.НоваяКолонка("Значение");
    СимволыШрифтаПоТипамКодов.НоваяСтрока();
    СимволыШрифтаПоТипамКодов.Ключ         = "L";
    СимволыШрифтаПоТипамКодов.Значение     = "0123456789";
    СимволыШрифтаПоТипамКодов.НоваяСтрока();
    СимволыШрифтаПоТипамКодов.Ключ         = "G";
    СимволыШрифтаПоТипамКодов.Значение     = "ABCDEFGHIJ";
    СимволыШрифтаПоТипамКодов.НоваяСтрока();
    СимволыШрифтаПоТипамКодов.Ключ         = "R";
    СимволыШрифтаПоТипамКодов.Значение     = "abcdefghij";
    СпособыКодированияЛевойЧасти[1]     = "LLLLLL";
    СпособыКодированияЛевойЧасти[2]     = "LLGLGG";
    СпособыКодированияЛевойЧасти[3]     = "LLGGLG";
    СпособыКодированияЛевойЧасти[4]     = "LLGGGL";
    СпособыКодированияЛевойЧасти[5]     = "LGLLGG";
    СпособыКодированияЛевойЧасти[6]     = "LGGLLG";
    СпособыКодированияЛевойЧасти[7]     = "LGGGLL";
    СпособыКодированияЛевойЧасти[8]     = "LGLGLG";
    СпособыКодированияЛевойЧасти[9]     = "LGLGGL";
    СпособыКодированияЛевойЧасти[10]     = "LGGLGL";
    СпособКодированияПравойЧасти         = "RRRRRR";
    Если СтрДлина(ШтрихкодСтрокойСимволов)     = 13 Тогда
        КоличествоСимволовВГруппе             = 6;
    ИначеЕсли СтрДлина(ШтрихкодСтрокойСимволов) = 8 Тогда
        КоличествоСимволовВГруппе     = 4;
        СимволыСпособовКодирования     = "";
        ШтрихкодСтрокойСимволов     = "0" + ШтрихкодСтрокойСимволов;
    Иначе
        Предупреждение("Поддерживаются только штрихкоды длиной 13 и 8 символов");
        Возврат "";
    КонецЕсли;
    ИндексСпособаКодирования = Число(Лев(ШтрихкодСтрокойСимволов,1));
    ЛеваяЧастьКода         = "";
    ПраваяЧастьКода     = "";
    Для ИндексСимвола     = 1 По КоличествоСимволовВГруппе Цикл
        СпосКодЛевЧаст    = СпособыКодированияЛевойЧасти[ИндексСпособаКодирования + 1];
        СимвКодКлюч        = Сред(СпосКодЛевЧаст,ИндексСимвола,1);
        Стр = "";
        Если СимволыШрифтаПоТипамКодов.НайтиЗначение(СимвКодКлюч,Стр,"Ключ") = 1 Тогда
            СимвПоТипу    = СимволыШрифтаПоТипамКодов.ПолучитьЗначение(Стр,"Значение");    
        КонецЕсли;
        ЛеваяЧастьКода     = ЛеваяЧастьКода     + Сред(СимвПоТипу,Число(Сред(ШтрихкодСтрокойСимволов,(ИндексСимвола+1),1))+1,1);
        Стр = "";
        СимвКодПравКлюч    = Сред(СпособКодированияПравойЧасти,ИндексСимвола,1);
        Если СимволыШрифтаПоТипамКодов.НайтиЗначение(СимвКодПравКлюч,Стр,"Ключ") = 1 Тогда
            СимвПоТипуПрав    = СимволыШрифтаПоТипамКодов.ПолучитьЗначение(Стр,"Значение");    
        КонецЕсли;
        ПраваяЧастьКода = ПраваяЧастьКода     +     Сред(СимвПоТипуПрав,Число(Сред(ШтрихкодСтрокойСимволов,(ИндексСимвола
                                            +    КоличествоСимволовВГруппе+1),1))+1,1);
    КонецЦикла;
    Результат = ""  + Сред(СимволыСпособовКодирования,ИндексСпособаКодирования+1,1)
                    + ЛевыйЗащитныйШаблон
                    + ЛеваяЧастьКода
                    + СреднийЗащитныйШаблон
                    + ПраваяЧастьКода
                    + ПравыйЗащитныйШаблон;
    Возврат Результат;
КонецФункции
8 MWWRuza
 
гуру
12.06.19
16:52
+(7) Нужна была для печати очень "узенького" ШК на ценнике, когда стандартная осх-сина, отказывалась ШК выводить, а с помощью шрифта получается, совсем узенький, миллиметра 4-5 свободно.
9 Злопчинский
 
12.06.19
16:54
(8) это не по пацански
шк можно вообще безо всего напечатать. имея только моксель.
без шрифтов, без букв, без ВК.
вообще без всего.
10 e200420
 
12.06.19
17:02
(3) спасибо, Кэп.
Про неверно сгенерированный код я и писал выше. Судя по вашему взорванному пукану, как раз такие как вы и пишут этот говнокод в самописных конфах, который приходится без конца переделывать. В прошлой ветке нет конкретного решения вопроса. А тут мы все и подытожим ))
11 e200420
 
12.06.19
17:06
(7) спасибо за помощь. Со шрифтом все работает, надо лишь сделать проверку EAN13.
(8) есть ссылка на этот шрифт? я пока используя Code EAN 13. Он крупный. Мелкого пока не встречал, но пригодится.
12 e200420
 
12.06.19
17:10
(6) согласен, если бы все все знали и читали все документации, то и форум не нужен был. А так, обиженные мужчинки типа Garykom могут позасирать ветку матами и своим негодованием. Придет новичек и будет читать эту срань часами вместо помощи в решении своего вопроса.
13 Garykom
 
гуру
12.06.19
17:48
(12) В курсе что "кодер" это ты?

Нафуя ты пытаешься упорно напечатать кривой ШК с помощью шрифтов, если один фуй 99% сканеров (в которых есть проверка на КС) его не прочитают?

Чтоб було?
14 Злопчинский
 
12.06.19
18:49
(13) ты чего в заповеднике расшумелся?
15 Garykom
 
гуру
12.06.19
19:32
(14) За профессию обидно.
16 MWWRuza
 
гуру
12.06.19
20:38
(11) есть ссылка на этот шрифт?
Зачем Вам ссылка? Он есть в папке регламентированной отчетности 7.7, за любой квартал и любой год, начиная примерно с 2005 и по сей день...
17 BalBess
 
13.06.19
07:30
Мы сейчас используем formex для печати штрихкодов (спасибо Альфу), в том числе и qr коды
Как-то сравнивал скорость печати через шрифт и через formex, через шрифт гораздо медленнее (не помню точных цифр)
Представьте нужно напечатать 1000 ценников и 1000 раз будет вызываться СформироватьСтрокуEanGnivc, сколько это займет времени.. и подогнать под размеры можно лучше, через шрифт не всегда подгоняется как надо
18 Сияющий в темноте
 
13.06.19
08:44
Чего вы все,как дети?
ну хочет человек штрихкод.с неверной контрольной суммой,так пусть печатает,и code39 и code93,его напечатают и любой сканер прочитает.
можно и другие,но большинство любят четное число цифр.
а топикстартеру нужно понять одно-его цифры штрих-кода не являются правильным штрихкодом EAN.
19 e200420
 
13.06.19
08:51
(13) печатал ибо уверяли, что проблема в чем угодно, только не в коде. В споре истина и появилась.
(15) вы даже не знаете какой я программист и какого масштаба вопросы умею решать. И программист ли я вообще. А вам уже обидно. Что-то я не наблюдал ваших пылких речей в действительно сложных и необычных вопросах на форуме. Разобрались в одной теме и теперь самоутверждаетесь за чужой счет. Ну, так себе занятие. Хотя, в (3) для меня было полезно узнать нечто новое. Я с торговым оборудованием сталкиваюсь редко.

(16) я понял о каком шрифте речь. Работал с таким.

(17) спасибо за инфу. Через formex обязательно попробую. Кстати, formex обновился до версия: 2.0.5.143 от 21.05.2019.
20 e200420
 
13.06.19
08:57
(18) да я к этому выводу и пришел, что печатает не EAN. Это били следствие и вывод. Ну пошел я не таким путем как остальные, все, конец света. Проблему же выявил быстро и при помощи подручных средств ))
Описал лишь симптомы, остальным "на заметку".
21 tgu82
 
13.06.19
09:00
(20) Там есть проверка: 12 символов а последняя цифра - контрольная сумма. И вроде проблем и нет
22 e200420
 
13.06.19
09:02
(21) где там?
23 tgu82
 
13.06.19
09:10
не там, неправильно выразился, но как-то так:
Функция глКонтрольныйСимволEAN(ШтрКод, Тип) Экспорт
    
    Четн = 0;
    Нечетн = 0;
    
    Если Тип = 13 Тогда
        КолвоИтераций = 6;
    Иначе
        КолвоИтераций = 4;
    КонецЕсли;
    
    Для Индекс = 1 По КолвоИтераций Цикл
        Четн = Четн + Сред(ШтрКод, 2 * Индекс, 1);
        Нечетн = Нечетн + Сред(ШтрКод, 2 * Индекс - 1, 1);
    КонецЦикла;
    
    Если Тип = 13 Тогда
        Четн = Четн * 3;
    Иначе
        Нечетн = Нечетн * 3;
    КонецЕсли;
    
    КонтЦифра = 10 - (Четн + Нечетн) % 10;
    
    Возврат ?(КонтЦифра = 10, "0", Строка(КонтЦифра));
    
КонецФункции // глКонтрольныйСимволEAN()
24 e200420
 
13.06.19
09:13
а вот что написано у меня в ГМ.

Function CreateBarcode(Code) Export
    Code = TrimAll(Code);
    
    Ч1 = 2;
    Ч2 = 0;
    Ч3 = 0;
    Ч4 = 0;
    Ч5 = 0;
    Ч6 = 0;
    Ч7 = Number(Mid(Code,1 ,1));
    Ч8 = Number(Mid(Code,2 ,1));
    Ч9 = Number(Mid(Code,3 ,1));
    Ч10= Number(Mid(Code,4 ,1));
    Ч11= Number(Mid(Code,5 ,1));
    Ч12= Number(Mid(Code,6 ,1));
    Ч13= 0;
    
    // Составим четные и умножим на 3
    Четн = Ч2 + Ч4 + Ч6 + Ч8 + Ч10 + Ч12;
    Четн3 = Четн*3;
    
    // Составим нечетные, отличные от контрольной цифры
    НеЧт = Ч1 + Ч3 + Ч5 + Ч7 + Ч9 + Ч11;
    
    // Составим полученные цифры
    Рез = Четн3 + НеЧт;
    
    // Возьмем последнюю цифру числа и вычтем ее от 10
    Ч13 = 10 - Right(Рез,1);
    
    Barcode = String(Ч1)+ String(Ч2)+ String(Ч3)+ String(Ч4)+ String(Ч5)+ String(Ч6)+
                String(Ч7)+ String(Ч8)+ String(Ч9)+ String(Ч10)+ String(Ч11)+ String(Ч12)+ String(Ч13);
    
    Return Barcode;
EndFunction
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.