![]() |
![]() |
![]() |
|
Формирование штрих-кода | ☑ | ||
---|---|---|---|---|
0
Владимир1С
08.07.10
✎
15:28
|
Киньте, плиз, ссалку на методику формирования штрихкодов. Установил баркоде, вношу число в печатную форму, печатаю - сканер не пикает. Что и как добавлять при печати?
|
|||
1
ДенисЧ
08.07.10
✎
15:31
|
Возьми типовую ТиС, там есть функция...
|
|||
2
Владимир1С
08.07.10
✎
15:32
|
по кнопочке "->" ?
|
|||
3
ДенисЧ
08.07.10
✎
15:33
|
ага
|
|||
4
Владимир1С
08.07.10
✎
15:36
|
Как раз по этой кнопке генерю, вставляю в печ форму, хоть "текст", хоть "выражение", сканер не пикает.
|
|||
5
Irbis
08.07.10
✎
15:37
|
Контрольная цифра не соответствует типу штриха, скорее всего. Поищи алгоритм формирования, запикает.
|
|||
6
Tatitutu
08.07.10
✎
15:38
|
Функция КонтрольныйСимволШК(ШтрКод) Экспорт
Чет = 0; Нечет = 0; х = 0; ДлинаШК = СтрДлина(ШтрКод); Пока х < ДлинаШК Цикл Символ = Сред(ШтрКод, ДлинаШК-х, 1); Если х%2 = 0 тогда // четный символ Чет = Чет+ Число(Символ) Иначе Нечет= Нечет+ Число(Символ) КонецЕсли; х = х + 1; КонецЦикла; КонтЦифра= 10- (Нечет+ Чет*3)%10; Возврат ?(КонтЦифра=10, "0", Строка(КонтЦифра)); КонецФункции // глКонтрольныйСимволШК() Функция NumberToUpperChar( Num ) UpperCharSet = "ABCDEFGHIJ"; Num = Число(Прав(Num,1)); Стр = Сред(UpperCharSet, Num + 1, 1); Возврат Стр; КонецФункции Функция NumberToLowerChar( Num ) LowerCharSet = "abcdefghij"; Num = Число(Прав(Num,1)); Стр = Сред(LowerCharSet, Num + 1, 1); Возврат Стр; КонецФункции Функция СформироватьКодEAN13(код) // Проверки Если ТипЗначения(код) <> 1 Тогда Сообщить("Код для EAN13 должен числовым."); Возврат ""; КонецЕсли; Если СтрДлина(код) > 13 Тогда Сообщить("Код для EAN13 должен быть длинной не более 12 символов."); Возврат ""; КонецЕсли; // Разбор строки ПервыйФлаг = Число(Сред(код,1,1)); левстр = Сред(код,2,6); правстр = Сред(код,8,6); правкод = ""; Для Поз = 1 По 6 Цикл правкод = правкод + NumberToLowerChar(Сред(правстр,Поз,1)); КонецЦикла; // Формирование левой части кода зависит от значениа ПервыйФлаг Если ПервыйФлаг = 0 Тогда // 0 A A A A A левкод = "#!" + Лев(левстр,1) + Сред(левстр,2,1) + Сред(левстр,3,1) + Сред(левстр,4,1) + Сред(левстр,5,1) + Сред(левстр,6,1); ИначеЕсли ПервыйФлаг = 1 Тогда // 1 A A B A B B левкод = "$!" + Лев(левстр,1) + Сред(левстр,2,1) + NumberToUpperChar(Сред(левстр,3,1)) + Сред(левстр,4,1) + NumberToUpperChar(Сред(левстр,5,1)) + NumberToUpperChar(Сред(левстр,6,1)); ИначеЕсли ПервыйФлаг = 2 Тогда // 2 A A B B A B левкод = "%!" + Лев(левстр,1) + Сред(левстр,2,1) + NumberToUpperChar(Сред(левстр,3,1)) + NumberToUpperChar(Сред(левстр,4,1)) + Сред(левстр,5,1) + NumberToUpperChar(Сред(левстр,6,1)); ИначеЕсли ПервыйФлаг = 3 Тогда // 3 A A B B B A левкод = "&!" + Лев(левстр,1) + Сред(левстр,2,1) + NumberToUpperChar(Сред(левстр,3,1)) + NumberToUpperChar(Сред(левстр,4,1)) + NumberToUpperChar(Сред(левстр,5,1)) + Сред(левстр,6,1); ИначеЕсли ПервыйФлаг = 4 Тогда // 4 A B A A B B левкод = "'!" + Лев(левстр,1) + NumberToUpperChar(Сред(левстр,2,1)) + Сред(левстр,3,1) + Сред(левстр,4,1) + NumberToUpperChar(Сред(левстр,5,1)) + NumberToUpperChar(Сред(левстр,6,1)); ИначеЕсли ПервыйФлаг = 5 Тогда // 5 A B B A A B левкод = "(!" + Лев(левстр,1) + NumberToUpperChar(Сред(левстр,2,1)) + NumberToUpperChar(Сред(левстр,3,1)) + Сред(левстр,4,1) + Сред(левстр,5,1) + NumberToUpperChar(Сред(левстр,6,1)); ИначеЕсли ПервыйФлаг = 6 Тогда // 6 A B B B A A левкод = ")!" + Лев(левстр,1) + NumberToUpperChar(Сред(левстр,2,1)) + NumberToUpperChar(Сред(левстр,3,1)) + NumberToUpperChar(Сред(левстр,4,1)) + Сред(левстр,5,1) + Сред(левстр,6,1); ИначеЕсли ПервыйФлаг = 7 Тогда // 7 A B A B A B левкод = "*!" + Лев(левстр,1) + NumberToUpperChar(Сред(левстр,2,1)) + Сред(левстр,3,1) + NumberToUpperChar(Сред(левстр,4,1)) + Сред(левстр,5,1) + NumberToUpperChar(Сред(левстр,6,1)); ИначеЕсли ПервыйФлаг = 8 Тогда // 8 A B A B B A левкод = "+!" + Лев(левстр,1) + NumberToUpperChar(Сред(левстр,2,1)) + Сред(левстр,3,1) + NumberToUpperChar(Сред(левстр,4,1)) + NumberToUpperChar(Сред(левстр,5,1)) + Сред(левстр,6,1); ИначеЕсли ПервыйФлаг = 9 Тогда // 9 A B B A B A левкод = ",!" + Лев(левстр,1) + NumberToUpperChar(Сред(левстр,2,1)) + NumberToUpperChar(Сред(левстр,3,1)) + Сред(левстр,4,1) + NumberToUpperChar(Сред(левстр,5,1)) + Сред(левстр,6,1); КонецЕсли; // Получение строки - результата кодстр = левкод + "-" + правкод + "!"; Возврат кодстр; КонецФункции // СформироватьКодEAN13() //******************************************* Функция СимволыВЦифры(СтрСимв) Экспорт СтрЦифр = ""; Для х= 1 По СтрДлина(СтрСимв) Цикл ТекСимв = Сред(СтрСимв, х, 1); Если Найти("1234567890", ТекСимв)= 0 Тогда // преобразуем символ в цифру ТекСимв = Строка(КодСимв(ТекСимв) % 10); КонецЕсли; СтрЦифр = СтрЦифр + ТекСимв; КонецЦикла; Возврат СтрЦифр; КонецФункции // СимволыВЦифры() //******************************************* Функция глСформироватьШтрихкод(Префикс, ПредвКод, ТипКода=13) Экспорт Если ТипКода = 13 Тогда ИспКолво = 10; Иначе ИспКолво = 6; КонецЕсли; Штрихкод = СимволыВЦифры(Прав(СокрЛП(ПредвКод), ИспКолво)); Штрихкод = Префикс + СтрЗаменить(Формат(Штрихкод, "С"+ИспКолво), " ", "0"); Штрихкод = СформироватьКодEAN13(Число(СокрЛП(Штрихкод) + КонтрольныйСимволШК(Штрихкод))); Возврат Штрихкод; КонецФункции // СформироватьШтрихкод() |
|||
7
Владимир1С
08.07.10
✎
15:41
|
(6) пошёл разбирать. Спасибо!
|
|||
8
andrewalexk
08.07.10
✎
15:49
|
(5) :) не у всех ШК есть КС...
|
|||
9
Irbis
08.07.10
✎
15:51
|
(8) Это тоже верно. Но такие ШК и не проходят аппаратную проверку, кстати тоже отключаемую, и сканер пищит после окончания считывания.
|
|||
10
andrewalexk
08.07.10
✎
15:53
|
:) ну не знаю...вот только что тестировал считывание сканером настроенным на еан-13 3 других систем шкодирования в 2 вариантах каждая - шк или сканируется или сканируется частично или не сканируется вообще
|
|||
11
Владимир1С
08.07.10
✎
17:21
|
(6) Вопрос: какой шрифт нужен для Этого алгоритма? На выходе - Буквы и символы, цифр нет.
|
|||
12
Kreont
08.07.10
✎
17:34
|
(11) EAN13.ttf
|
|||
13
Kreont
08.07.10
✎
17:35
|
(6) Странно, но у меня код по переводу компактнее в N-раз, щас найду
|
|||
14
Kreont
08.07.10
✎
17:41
|
// ======================================
// Вертає текстом контрольну цифру для ЕАН13 function EANGetCRCDigit(S) export var x, y, z; if (strlen(S) <> 12) then return "-"; endif; x = Number(Mid(s,1,1))+Number(Mid(s,3,1))+Number(Mid(s,5,1))+Number(Mid(s,7,1))+Number(Mid(s,9,1))+Number(Mid(s,11,1)); y = Number(Mid(s,2,1))+Number(Mid(s,4,1))+Number(Mid(s,6,1))+Number(Mid(s,8,1))+Number(Mid(s,10,1))+Number(Mid(s,12,1)); z = x + 3*y; return Right(String(10 - (z % 10)),1); endfunction // ====================================== // Вертає стрічку для друку коду ЕАН13 шрифтом EAN function EANGetFontCode(S) export var i,t; Result = ""; if (strlen(S) <> 13) then return Result; endif; Result = Result + Left(S,1); if Left(S,1) = "0" then t = "AAAAAA"; elsif Left(S,1) = "1" then t = "AABABB"; elsif Left(S,1) = "2" then t = "AABBAB"; elsif Left(S,1) = "3" then t = "AABBBA"; elsif Left(S,1) = "4" then t = "ABAABB"; elsif Left(S,1) = "5" then t = "ABBAAB"; elsif Left(S,1) = "6" then t = "ABBBAA"; elsif Left(S,1) = "7" then t = "ABABAB"; elsif Left(S,1) = "8" then t = "ABABBA"; elsif Left(S,1) = "9" then t = "ABBABA"; endif; for i = 1 to 6 do if Mid(t,i,1) = "A" then Result = Result + Симв(Number(Mid(s,i+1,1))+КодСимв("A")); endif; if Mid(t,i,1) = "B" then Result = Result + Симв(Number(Mid(s,i+1,1))+КодСимв("K")); endif; enddo; Result = Result + "*"; for i = 1 to 6 do Result = Result + Симв(Number(Mid(s,i+7,1))+КодСимв("a")); enddo; Result = Result + "+"; return Result; endfunction |
|||
15
Kreont
08.07.10
✎
17:44
|
+(14)Вызов: КодЕАННомер - на вход
КодЕАННомер = EANGetFontCode(КодЕАННомер + EANGetCRCDigit(КодЕАННомер)); П.С. Сори что код на английском 1С, переделывал из делфи :)) |
|||
16
Касандер72
08.07.10
✎
18:15
|
Можно для вычисления контрольной (13-ой) цифрры использовать сию процедуру:
Функция глКонтрольныйСимволEAN(ШтрКод, Тип) Экспорт Четн = 0; Нечетн = 0; КолвоИтераций = ?(Тип=13,6,4); Для Индекс = 1 По КолвоИтераций Цикл Четн = Четн + Сред(ШтрКод, 2 * Индекс, 1); Нечетн = Нечетн + Сред(ШтрКод, 2 * Индекс - 1, 1); КонецЦикла; Если Тип = 13 Тогда Четн = Четн * 3; Иначе Нечетн = Нечетн * 3; КонецЕсли; КонтЦифра = 10 - (Четн + Нечетн) % 10; Возврат ?(КонтЦифра = 10, "0", Строка(КонтЦифра)); КонецФункции // глКонтрольныйСимволEAN() и потом вызывать её: Штрихкод12 = МояФормулаПолучения12знаков; Штрихкод13 = Штрихкод12 + глКонтрольныйСимволEAN13(Штрихкод12); |
|||
17
Владимир1С
08.07.10
✎
18:53
|
Господа, есть у кого нибудь руководство по MetroSelect на русском языке?
|
|||
18
Владимир1С
08.07.10
✎
20:45
|
Откопал на русском языке - в Украине. :)
http://www.ics-market.com.ua/ru_ruhn_lazer_odnolin_svetodiod_scaner.phtml?ai=ru_voyager_ms9520_40 |
|||
19
Владимир1С
09.07.10
✎
11:01
|
Код всё равно не читается. Формируется верно, печатается верно. Может 5 нулей в коде не принимает? . Или к нему надо что добавлять ещё? Опытные коллеги, подскажите, плиз?
|
|||
20
Владимир1С
09.07.10
✎
15:29
|
(6) up! плиз!!!
Код формирует, но он всё равно не считывается. Код товара : 191919 , код по EAN13 : %!00BJ1J-bjaa . Сканер не читает. |
|||
21
Владимир1С
09.07.10
✎
15:32
|
Шрифт : EanBvrP36Tt(западный)
|
|||
22
Strogg
09.07.10
✎
15:54
|
(20) - EANGnivc попробуй.
--- Ну и, как тут стало модно :-)... Функция СимволыВЦифры(СтрСимв) СтрЦифр = ""; Для Индекс = 1 По СтрДлина(СтрСимв) Цикл ТекСимв = Сред(СтрСимв, Индекс, 1); Если Найти("1234567890", ТекСимв) = 0 Тогда // преобразуем символ ТекСимв = Строка(КодСимвола(ТекСимв) % 10); КонецЕсли; СтрЦифр = СтрЦифр + ТекСимв; КонецЦикла; Возврат СтрЦифр; КонецФункции // СтрокаВЦифры() Функция глКонтрольныйСимволEAN(ШтрКод, Тип) Четн = 0; Нечетн = 0; Если Тип = 13 Тогда КолвоИтераций = 6; Иначе КолвоИтераций = 4; КонецЕсли; Для Индекс = 1 По КолвоИтераций Цикл Четн = Четн + Сред(ШтрКод, 2 * Индекс, 1); Нечетн = Нечетн + Сред(ШтрКод, 2 * Индекс - 1, 1); КонецЦикла; Если Тип = 13 Тогда Четн = Четн * 3; Иначе Нечетн = Нечетн * 3; КонецЕсли; КонтЦифра = 10 - (Четн + Нечетн) % 10; Возврат ?(КонтЦифра = 10, "0", Строка(КонтЦифра)); КонецФункции // глКонтрольныйСимволEAN() Функция глДополнитьСтрокуЛ(Стр,Чем,Длина) Добавить=Длина-СтрДлина(Стр); Добавок=""; Для Сч = 1 По Добавить Цикл Добавок=Добавок+Чем; КонецЦикла; Возврат Добавок+Стр; КонецФункции //глДополнитьСтрокуЛ() Функция глДополнитьСтрокуП(Стр,Чем,Длина) Добавить=Длина-СтрДлина(Стр); Добавок=""; Для Сч = 1 По Добавить Цикл Добавок=Добавок+Чем; КонецЦикла; Возврат Стр+Добавок; КонецФункции //глДополнитьСтрокуП() Функция глСформироватьШтрихкод(Префикс , Код, ТипКода=13) Если ТипКода = 13 Тогда ИспКолво = 11; Иначе ИспКолво = 6; КонецЕсли; Штрихкод = СимволыВЦифры(Прав(СокрЛП(Код), ИспКолво)); Штрихкод = Префикс + глДополнитьСтрокуЛ(Штрихкод, "0", ИспКолво); Возврат Штрихкод + глКонтрольныйСимволEAN(Штрихкод, ТипКода); КонецФункции // глСформироватьШтрихкод() |
|||
23
Владимир1С
09.07.10
✎
16:02
|
Как здесь картинку вставить?
|
|||
24
Владимир1С
09.07.10
✎
17:31
|
Уважаемые участники форума! У кого работает штрихкодирование с вояджером, дайте, плиз, характеристики печатных форм: Шрифт + тип кода , + есть ли доп обрамление звёздочками?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |