Имя: Пароль:
1C
1С v8
Проблема с чтением ШК
,
0 pers200590
 
21.09.11
10:55
ЗДравствуйте
Проблема такая: не читаются штрих-коды. Имеется два штрих-кода. Один на тетрадке, второй распечатывал сам. Делал новый табличный документ, вставлял туда цифры, менял шрифт на EanGnivc. В первом случае (с тетрадки) сканер читает, во втором случае даже не пищит. Что это за мистика?
1 Vakhrin
 
21.09.11
10:59
код один и тот же с точностью до последней цифири?
2 Wobland
 
21.09.11
11:00
(1) кстати, о последних цифирях. неверная контрольная цифра как-то влияет?
3 Повелитель
 
21.09.11
11:01
Сканер обычно настраивается на определенный формат штрихкода. Возможно EanGnivc не того формата
4 szhukov
 
21.09.11
11:01
(0) Если сканер читает штрих-кода с каких-нибудь товаров (сигареты, диски и т.п.) то с вероятностью 99% проблема в вашем напечатанном ШК :)
5 Повелитель
 
21.09.11
11:01
(2) Цифра не влияет
6 Wobland
 
21.09.11
11:02
(3) а они разные бывают?
7 Tatitutu
 
21.09.11
11:03
(0)
это совершенно разные вещи
ты просто взал цифры написал ШК и выставил нужный шрифт ? - ню ню - удачи.
Прочитай как нужно, на форуме куча примеров и алгоритмов
8 Tatitutu
 
21.09.11
11:04
(0) посмотри сам внешне взглядом - палочки отличаются
у тебя не штрихкод, а имитации его
9 pers200590
 
21.09.11
11:04
(2) контрольная цифра не влияет
10 pers200590
 
21.09.11
11:05
(4) что проблема в моем штрихкоде я немного стал понимать , может даже проблема в шрифте
11 pers200590
 
21.09.11
11:06
(7) в общем смотри есть конфа УТ 11. В макете этикетки Вставил текст Штрихкод, а не картинку. Далее установил шрифт EanGnivc и запустил ОБработкуПечатиЦенниковИЭтикеток. Распечатал его, а сканер на него не реагирует
12 pers200590
 
21.09.11
11:07
(9) почему имитация он разве не преобразовывает его
13 Tatitutu
 
21.09.11
11:07
(10)
смотри чтобы правильно ШК
сформировалось с этим шрифтом

передаем значение
%!00IJ7A-abaaad!

хотя выглядеть цифрами будет как
2008970010003

попробуй подставь и посмотри что получится
14 Повелитель
 
21.09.11
11:08
(6) Конечно, у нас на фирме используется EAN13 и EAN13 c UPC-A. Сканер переключаем. Есть режим когда совмесно работает и EAN13 и EAN13 c UPC-A но нам этот режим не нужен.
15 Tatitutu
 
21.09.11
11:09
(12)нет

вставь в любом редакторе

%!00IJ7A-abaaad!

и

2008970010003

цифры по шк будут одинаковы (2008970010003) но первый сканер поймет, а второй нет
16 pers200590
 
21.09.11
11:13
(15) не понял
17 Wobland
 
21.09.11
11:15
(16) не цифры надо писать, а вот такую белиберду, чтобы сканер понял. правда, я не понял, откуда Tatitutu такую ерунду получил...
18 Tatitutu
 
21.09.11
11:16
(16) открой EXCEL выбери две ячейки
установи шрифт для них EanGnivc

в одну вставь %!00IJ7A-abaaad!
а в другую 2008970010003

и сравни результат
19 Tatitutu
 
21.09.11
11:17
(17) вот отсюда

Функция КонтрольныйСимволШК(ШтрКод)    Экспорт
   Чет        = 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(Число(СокрЛП(Штрихкод) + КонтрольныйСимволШК(Штрихкод)));    
   Возврат Штрихкод;
КонецФункции    //    СформироватьШтрихкод()
20 pers200590
 
21.09.11
11:21
(18) в итоге да палки разные . ТАм мне как быть прочитай (11)
21 BayoNet
 
21.09.11
11:26
(0) Не берусь утверждать на 100%, но по-моему EanGnivc не читается обычными сканерами.
22 pers200590
 
21.09.11
11:27
(21) а какой шрифт читается обычный сканером?
23 pers200590
 
21.09.11
15:11
где все пропали
24 BayoNet
 
21.09.11
16:57
EanGnivc это наш российский штрих код придуманный для ГНИ. У них там по ходу и сканеры специальные.
25 Любопытная
 
21.09.11
17:03
(0) В аську выйди уже
26 kittystark
 
21.09.11
17:06
заюзать ActiveBarcode.ocx чем не подходит?
27 pers200590
 
22.09.11
03:50
тема продолжается
28 pers200590
 
22.09.11
03:51
какие шрифты считываются сканером штрих-кодов?
29 Злопчинский
 
22.09.11
04:02
гуглим "2 из 5"
30 pers200590
 
22.09.11
04:17
(29)чего гуглим
31 Rie
 
22.09.11
04:54
(30) Какая буква или цифра во фразе "2 из 5" непонятна? :-)

По штрих-коду. Не бери EanGnivc, найди более другой шрифт для EAN-13.
Посмотри на размер штрих-кода и на размеры отдельных палочек. Сделаешь слишком мелко/непропорционально - сканер поймёт, что над ним издеваются и читать не станет.
32 pers200590
 
22.09.11
07:35
кто подскажет (11)
33 Любопытная
 
22.09.11
07:40
(32) Я тебе тут решение проблемы накопала, У тебя на партнерский форум доступ есть?
34 КонецЕсли
 
22.09.11
14:56
Элемент управления "1С: Печать штрихкодов". Должно быть на диске ИТС.