Имя: Пароль:
1C
1C 7.7
v7: Вывод на печать ШК EAN13Addon5 (EAN13+5)
0 kis111
 
07.08.24
14:24
Добрый день. Озадачили меня сейчас печатью этикеток на коробки, с выводом в т.ч. данного ШК (раньше печатали кодами принтера, сейчас переходим на печать этикеток через USB).
ян13, ян8, даже GS1 - нашел, как вывести на печать. Как вывести ян13+5 - ХЗ.
Последний Formex скачал, в документации есть только ян13.
Есть еще StrokeScribe - но для нее не могу найти документации, а офсайт, чтобы эту документацию скачать, недоступен..
Второй день гуглю, ничего найти подходящего не могу...Застрял...
1 Garykom
 
07.08.24
14:31
"Zint 1С 7.7"
https://www.activebarcode.com/codes/ean5_ean2
фактически два ШК, сначала EAN13 затем EAN5
2 uno-group
 
07.08.24
14:30
баркода 128 чем не устраивает?
Используешь столько символов сколько нужно
3 uno-group
 
07.08.24
14:31
//*********формирование баркода 128**********
//Если параметр цифра возвращает 1
Функция ТипСимв(КодСмв)
    Если КодСмв < 32 Тогда
        Возврат(1); //Команда
    ИначеЕсли (48 <= КодСмв) и (КодСмв<=57) Тогда
        Возврат(3); //Цифра
    Иначе
        Возврат(2); //Буква, знак
    КонецЕсли;    
КонецФункции

Функция Мод(Ч,З)
    Возврат(Ч-Цел(Ч/З)*З);
КонецФункции

Функция БарКод(Вход,БазаМодеС=6)
    АскиБар =                                      
//     0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
    "155515551449485845458494854548584944056416452065425461560506542164524212245605641254614650"+ //29
    "11919191108980988109881889018890898001:0928120290:18212211829021281:0122209281:01218290:10"+ //59
    "2305<0;0004=0<540=4<1<05<4105<0=441<4=0<14<50=4050<320=04830047407443074434470344704740113"+ //89
    "13131100;0838030380;0308380023032203302";//102

    ВыхТ = СоздатьОбъект("ТаблицаЗначений");
    ВыхТ.НоваяКолонка("А",,,,"Аск",4); //Аски код

    //Фильтр пустого входа
    Если Вход = "" Тогда Возврат(""); КонецЕсли;
    
    //Очищаем выход
    ВыхТ.УдалитьСтроки();
    
    Дл = СтрДлина(СокрЛП(Вход));
    
    //Разборки со стартовым кодом
    //Принимаем решение о смене подсистемы кодирования "моде" (А-1, В-2, С-3)
    //Анализируем тип двух первых символов
    ТекСимв = КодСимв(Сред(Вход,1,1));
    ТипТекСимв = ТипСимв(ТекСимв);
    Если Дл > 1 тогда
        СлСимв  = КодСимв(Сред(Вход,2,1));
        ТипСлСимв = ТипСимв(СлСимв);
    Иначе
        ТипСлСимв = 2;
    КонецЕсли;
    Моде = ТипТекСимв;
    Если (ТипТекСимв = 3) и (ТипСлСимв = 3) тогда Моде = 3; КонецЕсли;
    
    //В выходную таблицу добавляем символ старта подсистемы
    ВыхТ.НоваяСтрока();
    ВыхТ.А = 102 + Моде;
    Вых = Симв(64 + Моде);    
    //Анализируем входные символы
    Для Сч = 1 по  Дл Цикл
        ТекСимв = КодСимв(Сред(Вход,Сч,1));
        Если ТекСимв > 127 тогда
            Сообщить("Символ № "+Сч+ " со значением="+ ТекСимв+" не разрешен в штрихкоде");
            Продолжить;
        КонецЕсли;    
        ТипТекСимв = ТипСимв(ТекСимв);
        
        //Принимаем решение о смене подсистемы кодирования (моде).
        Если ТипТекСимв <> Моде тогда
            Если ТипТекСимв < 3 Тогда
                //Нужно менять моде либо с А на В, либо с В на А
                ВыхТ.НоваяСтрока();
                Если Моде = 1 тогда
                    ВыхТ.А = 100;   //Переключаемся из А в В
                Иначе    
                    ВыхТ.А = 101;    //Переключаемся из В в А
                КонецЕсли;
                Моде = ТипТекСимв;
            Иначе
                //Находимся в моде А или В, встретили цифру.
                //Прикидываем, стоит ли переключаться в МодеС
                //Смотрим на БазаМодеС знаков вперед.
                //Оптимально, БазаМодеС = 6 (См. описание)
                ДлМ = ?(Дл < Сч+БазаМодеС-1, Дл, Сч+БазаМодеС-1);
                СчЦ = 0;
                Для СчМ = Сч по ДлМ Цикл
                    МодМ = ТипСимв(КодСимв(Сред(Вход,СчМ,1)));
                    
                    //Если цифра - смотрим дальше
                    Если МодМ = 3 тогда
                        СчЦ = СчЦ+1;
                        Продолжить;
                    Иначе
                        СчЦ = 0;
                        Прервать;
                    КонецЕсли;
                КонецЦикла;
                //Если нужно переключится в С
                Если СчЦ - БазаМодеС = 0 тогда
                    Моде = 3;
                    ВыхТ.НоваяСтрока();
                    ВыхТ.А = 99;   //Переключаемся из А или В в С
                КонецЕсли;
            КонецЕсли;        
        КонецЕсли;        
        
        //Добавляем очередной символ
        
        //Если символ в МодеС
        Если Моде = 3 тогда
            СлСимв  = КодСимв(Сред(Вход,Сч+1,1));
            ТипСлСимв = ТипСимв(СлСимв);
            //Если входная строка кончается на первой цифре, или
            //конец входной строки цифра+не цифра
            Если (Сч = Дл) или (ТипТекСимв <> 3) или (ТипСлСимв <> 3) тогда
                //Переключаемся из режима С в режим В
                Моде = 2;
                ВыхТ.НоваяСтрока();
                ВыхТ.А = 100;  
            Иначе
                //Добавляем символ в МодеС
                Если (ТипТекСимв <> 3) или (ТипСлСимв <> 3) тогда
                    Сообщить("Ош."+ Сч+" "+ ТекСимв+" "+СлСимв);
                Иначе    
                    ВыхТ.НоваяСтрока();
                    ВыхТ.А = Число(Симв(ТекСимв)+Симв(СлСимв));
                    Сч = Сч+1;
                    Продолжить;
                КонецЕсли;
            КонецЕсли;    
        КонецЕсли;
        
        //Добавляем символ в МодеА, или МодеВ
        ВыхТ.НоваяСтрока();
        Если Моде = 1 тогда
            ВыхТ.А = ТекСимв+64;
        Иначе
            ВыхТ.А = ТекСимв-32;
        КонецЕсли;    
    КонецЦикла;
    //Считаем контрольную сумму и формируем баркод
    ВыхТ.ВыбратьСтроки();
    Сум = 0;
    Ном = 0;
    Пока ВыхТ.ПолучитьСтроку() = 1 Цикл
        Если Ном > 0 тогда
            Сум = Мод(Сум+ВыхТ.А*Ном,103);
            Вых = Вых+Сред(АскиБар,(ВыхТ.А+1)*3-2,3);
        Иначе    
            Сум = Мод(ВыхТ.А,103);
        КонецЕсли;
        Ном = Ном+1;
    КонецЦикла;
    Возврат(Вых+Сред(АскиБар,(Сум+1)*3-2,3)+"@");
КонецФункции
//*******************************************
БарКодСтр=БарКод(СокрЛП(ШКод),6);
4 kis111
 
07.08.24
14:40
(1) хм. А barcode.ocx - это не оно?
(2) тем, что клиентам надо ян13+5.
5 Garykom
 
07.08.24
14:45
(4) barcode.ocx - это древняя штука
проверь умеет ли оно EAN5
и делай две картинки рядом
6 MWWRuza
 
07.08.24
16:07
(0) Как вывести ян13+5 - ХЗ.

Пресса - ?
В смысле, газеты-журналы?
Там такое, тоже пришлось столкнуться... В ЕАН13 содержится ссылка на издание - например, "Газета "Спид-Инфо"", а в части ЕАН5 - конкретно "выпуск 7 за 2024 год"...
Или у Вас что-то другое, похожее?
7 big
 
07.08.24
16:11
(3) barcode.ocx делает это в штатном режиме. Отключить автоопределение и подобрать параметр для вывода конкретного вида штрихкода.
8 big
 
07.08.24
16:11
(5) Оооочень много видо ШК выводит. Как ни странно )))
9 kis111
 
07.08.24
16:59
(5) попробовал для начала ее. Скопировал объект из ТиС, из печати этикеток для номенклатуры.
Что странно, по пкм говорит, что это объект ActiveBarCode.
Добавку 5 распечатать удалось.
ХЗ, понимает ли вообще (настроен ли на это) ТСД одномерный (именно мой экземпляр), он не взял (точнее, прочитал только ян13. Но, скорее всего, он не был настроен. Уточню у админов).
двумерный ТСД - прочитал сразу, причем пролностью.
Вроде все ок. Но хотелось бы избежать именно barcode.ocx, читал, что с ней много глюков, да и начальник мой это подтвердил.
Хотелось бы через strokeScribe сделать, или через formex, но в них не нашел варианта типа ШК ян5. Возможно, можно сделать какими-то настройками это? В том же объекте штрихкода StrokeScribe их столько!... но я хз что они значат...
10 kis111
 
07.08.24
17:00
(6) у нас надо этикетки на батоны и на коробки. мясокомбинат.
11 Arbuz
 
07.08.24
17:49
В чём проблема? Вот формекс.

12 kis111
 
08.08.24
09:34
(11) это какая версия? я скачал свежую 2.0.5.197, в als из комплекта написано
@Возможные типы кода:
...
EXCODE39    9
EANX        13
EANX_CHK    14
EAN128        16
....

что за eanX я ХЗ.
13 kis111
 
08.08.24
09:54
(11) попробовал. Не работает...
вот код
в глМодуле
глСервис = создатьобъект("Сервис");

в обработке печати
Результат = глСервис.НарисоватьШтрихкод(Объект,ТипШК,ШК,,,,,,);

Объект это картинка. ТипШК=13. сам ШК="251390003002523324"
выводится пуская картинка, без ШК....
14 vladmenleo
 
08.08.24
12:50
(13) ШК="2513900030025+23324"
И будет тебе счастье
15 kis111
 
08.08.24
13:15
(14) Урааа! Сработало! Спасибо тебе, добрый человек!
А где-то про это можно было прочитать? Или инфа тоже так передается - по форумам?
16 vladmenleo
 
08.08.24
13:26
(15) На скриншоте из (11) видно :)
17 serpentt
 
08.08.24
13:26
(10) Странный у Вас комбинат, у нас все колбасники работают с  GS1-128
18 kis111
 
08.08.24
13:49
(16) мне не очень :( Или вы посмотрели на ян8+5?
Но вообще откуда этот скриншот? при скачивании с офсайта получаем библиотеку и als файл, там никаких скриншотов :(

(17) это требование сети.
GS1 у нас, кстати, есть, но на коробке (там же и ян13+5 еще вдобавок). а на батон GS1 тупо не помещается, этикетка небольшая.
19 victuan1
 
12.08.24
06:01
(15) В формекс для печати ШК встроена Zint.
Значит, нужно курить описание к Zint и пытаться его применить для формекс.
20 АгентБезопасной Нацио
 
12.08.24
09:20
(0) а почему EAN (European Article Number) = "ян"?
(18) а что за сетка? Я лет 15 назад пытался в сети протолкнуть EAN13A5 - там в ужасе шарахались "от таких страшных слов"...
21 NorthWind
 
13.08.24
17:32
(20) да все крупные хотят. Х5, Тандер. В хвосте (который +5) хранится конечная дата реализации в формате день года-год. Как раз 5 цифр. И в принципе, это очень разумный вариант: кто не умеет читать хвост, читает обычный EAN, который вообще никак не теряет читаемости из-за использования хвоста. А кто умеет - читает хвост и работает с датой. Вдобавок это очень компактный код в отличие от GS1-128 или Databar, не требуется конского места на этикетке.
22 Garykom
 
13.08.24
17:38
(21) QR компактней
Простых линейных сканеров уже почти нет
23 NorthWind
 
13.08.24
19:44
(22) пока стандартом для идентификации является EAN13. Схватывается сканером моментально, а печатать можно практически на любом дерьме и любым оборудованием, хоть каплеструйным принтером, как вон на грани карандашей наносят.
24 NorthWind
 
13.08.24
19:50
(20) 15 лет назад это был 2009 год, что ли? Тогда еще EDI-то далеко не везде был, его массовое внедрение в крупных сетях произошло только спустя три года. Интерес к кодированию сложными кодами у сетей появился примерно со вводом в эксплуатацию Меркурия, это примерно 2015-2018 годы.
25 АгентБезопасной Нацио
 
13.08.24
20:27
(21) не видел ни в пятерке, ни в магните. Либо локальные, либо зарегистрированные в ГС/ЮНИСКАН. Я в конце нулевых пытался совместить зарегистрированный ШК+вес в граммах в аддоне
(24) 2008, скорее. EDI уже появлялся, в 2009 первое внедрение (вот в упор не помню, что за частично зарубежная сетка была, у нас было 3 магазина в городе). В 2010 уже был в одной из федеральных сетей.
Ну а в 12-18 годах я не в дистрибуции работал
26 NorthWind
 
13.08.24
22:06
(25) на мясопродуктах в пятерке у меня в городе уже почти на всех EAN13 addon 5 под дату реализации, они крайне настойчиво всех переводили на это дело в последние годы. В первую очередь это пачки, куда клеят стикер - сосиски, сардельки. Обычно практикуется следующее - на индивидуальной упаковке EAN13 addon 5, на групповой GS1-128, если место позволяет или GS1-Databar, если места меньше. Сети волнуют в первую очередь даты производства/реализации. Речь про мясопродукты и продукты его переработки, насчет всего остального не знаю, не интересовался.
// Я в конце нулевых пытался совместить зарегистрированный ШК+вес в граммах в аддоне
Ну правильно, вы им голову хотели забить, а им это не надо. Обычно когда печатают юнискановский EAN13 на упаковке - это значит фиксированный вес. Зачем им с какими-то граммами голову себе греть? Это ваш вопрос сделать точный вес как вы сами зарегистрировали. Можете сделать чуть больше для надежности, скажем, по факту набить батон 410 г, а продавать его как 400 - они возражать не будут :)
27 АгентБезопасной Нацио
 
14.08.24
09:44
(26) > Обычно когда печатают юнискановский EAN13 на упаковке - это значит фиксированный вес.
Строго говоря, это не регламентируется. Я тогда долго обзванивал этих, из GS1...
А товар у меня был с сильно переменным весом, от 230до 370 граммов.
Пришлось тогда делать рабочие места по перевешиванию, и маркировке локальным кодом под каждую сеть.
28 NorthWind
 
14.08.24
12:30
(27) Да. Возможен вариант, когда вы ставите упаковке весовой тип в юнискане, я про это знаю. Но вариант с идентификацией по такому коду + чтение веса стало рассматриваться значительно позже, точно не в 2008-2009 годах, и потребовало использования GS1-кодов и идентификаторов применения (01, 310х). В основном же участники рынка до сих пор предпочитают в таких случае использовать внутренние EAN13-коды, которые начинаются с двойки, и вес в качестве последних 5 цифр перед контрольной. К чему вы в итоге и пришли... А addon5 оказался более нужным для хранения конечной даты реализации, хотя это тоже не стандарт. Да и потом, даже если бы они согласились на вес в addon - вам бы это жизнь никак не облегчило - все равно весовые посты и печать уникального аддона в конце каждого кода...
29 АгентБезопасной Нацио
 
14.08.24
13:07
(28) > В основном же участники рынка до сих пор предпочитают в таких случае использовать внутренние EAN13-коды, которые начинаются с двойки, и вес в качестве последних 5 цифр перед контрольной.

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

>А addon5 оказался более нужным для хранения конечной даты реализации, хотя это тоже не стандарт.

Угу. Но если для аддона упоминалось,"например, вес товара", то КСР вообще там не упоминался...

>Да и потом, даже если бы они согласились на вес в addon - вам бы это жизнь никак не облегчило - все равно весовые посты и печать уникального аддона в конце каждого кода...

нет, весы CAS (500 или 5000) прекрасно печатали вес в аддоне...
30 NorthWind
 
14.08.24
14:08
(29) так их можно точно также настроить и на печать внутреннего кода с весом во второй половине. Я думаю, что весов, которые это умеют, гораздо больше чем тех что умеют вес в аддон пихать. Тут загвоздка может быть только в том, что вам на одно и то же изделие придется хранить/загружать количество PLU в весах по числу ваших получателей-сетей... Но это обычно тоже реализуемо. Мне было попроще, потому что у меня была BIZERBA.
31 АгентБезопасной Нацио
 
14.08.24
15:19
(30) ну в том и была проблема (точнее, геморрой), что локальные коды у каждой сети свои, а цех выпускает продукцию, не зная, куда она пойдет... поэтому вместо единообразной печати еан13а5 (и затем стандартного отбора в заказ) приходилось отбирать из готовой продукции примерно заказанное количество, и маркировать под каждую сеть отдельно. Да, АРМ перемаркировки как раз был с более простыми весами, и зЁброй.