AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.10.2008, 16:59   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
«Обрезание» длинных штрих-кодов
Помимо какого-нить EAN13 зачастую используют "длинные" штрих-коды (типа EAN128 или Code128), позволяющие закодировать в штрих-коде самую различную информацию, используемую организацией во внутреннем документо- и товарообороте: номер документа, сумму, количество, общий вес, etc. Так вот, в Аксапте столкнулись с тем, что такие длинные штрих-коды почему-то обрезались и, как следствие, ни в какую не читались сканерами. Поначалу грешили на dll-ку, генерирующую штрих-коды, но все оказалось проще: у строкового EDT BarcodeString, используемого в семействе классов Barcode для переменной, хранящей перекодированную в штрих-код информацию, оказалась установлена недостаточная длина - всего 60 символов (в 4-ке - уже целых 70 ), при том что для EAN128 нужно, насколько я понимаю, порядка 400. После изменения длины этого EDT штрих-коды стали отображаться и печататься нормально.
За это сообщение автора поблагодарили: Logger (5).
Старый 17.10.2008, 17:05   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Prove it!
В смысле то, что для EAN128 нужно 400 символов.

ЗЫ
Почитал wikipedia. Насколько я понял, здесь используется ASCII кодировка, и выводится 128 символов, соответственно, 128 и нужно. Или я неправильно понял?

Последний раз редактировалось kashperuk; 17.10.2008 в 17:09.
Старый 17.10.2008, 17:19   #3  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
В зависимости от того, какой длины строки кодируете, такой длины EAN128 и нужен. Для названия номенклатуры нам 100 символов хватало, но может быть как меньше, так и больше.
Старый 17.10.2008, 17:22   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от EVGL Посмотреть сообщение
В зависимости от того, какой длины строки кодируете, такой длины EAN128 и нужен. Для названия номенклатуры нам 100 символов хватало, но может быть как меньше, так и больше.
Интересует верхний предел. Больше какой длины не нужно?
Старый 17.10.2008, 17:24   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Prove it! В смысле то, что для EAN128 нужно 400 символов.
Если честно, я не силен в знании особенностей того, как bcfont32.dll кодирует информацию в виде штрих-кодов, и как вообще информация кодируется этими штрих-кодами. Я где-то как-то слышал, что на один десятичный разряд уходит порядка 3-х этих... палочек, плюс служебная информация (контрольные суммы всякие) - вот и подумал, что нужно 128*3 ? 400. Ну уж явно никак не 60 и даже не 70.
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Почитал wikipedia. Насколько я понял, здесь используется ASCII кодировка, и выводится 128 символов, соответственно, 128 и нужно. Или я неправильно понял?
Неправильно. Если провести небольшой эксперимент и закодировать в Code128 строку из 128 цифр 123..890123..7890123..678, то получается строка в 202 символа.
Код:
12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678
%"*!&*#!'+!%(!"%-%!&*#!'+!%(!"%-%!&*#!'+!%(!"%-%!&*#!'+!%(!"%-%!&*#!'+!%(!"%-%!&*#!'+!%(!"%-%!&*#!'+!%(!"%-%!&*#!'+!%(!"%-%!&*#!'+!%(!"%-%!&*#!'+!%(!"%-%!&*#!'+!%(!"%-%!&*#!'+!%(!"%-%!&*#!'+!%(!"""'')!1
Т.е. кодировка-то используется ASCII, но число символов явно возрастает.

Старый 17.10.2008, 17:29   #6  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
128 - это не максимальная длина, а емкость одного "блока". Code128 позволяет тем самым кодировать первую половину таблицы ASCII. Сама строка может быть какой угодно длины, лишь бы бумаги и размаха луча хватило.

Промежуточная строка, генерируемая bcfont32.dll, зависит, очевидно, от используемого шрифта. Если взять больше "букв", то символов станет нужно меньше. Получается, что максимальную длину промежуточной строки надо вычислять эмпирически.
Старый 17.10.2008, 18:02   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от EVGL Посмотреть сообщение
128 - это не максимальная длина, а емкость одного "блока". Сама строка может быть какой угодно длины, лишь бы бумаги и размаха луча хватило.
Тем более непонятно ограничение длины упомянутого EDT...
Цитата:
Сообщение от EVGL Посмотреть сообщение
Промежуточная строка, генерируемая bcfont32.dll, зависит, очевидно, от используемого шрифта. Если взять больше "букв", то символов станет нужно меньше. Получается, что максимальную длину промежуточной строки надо вычислять эмпирически.
Я попробовал закодировать в Code128 строку из 96 печатных символов 1-й половины ASCII-таблицы, получилась "промежуточная строка" уже из 284 символов.
Код:
 !@#$%^&*-_+=,./\'<>?:;\\[]`~|{}()0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
%"$&%&'%%""'"#&#"&/!!"&#&#""%*!"('""*&!!&*"&)!*&)-!"'"*%"%%'%'%*"%)&")-!)-!+%!&$!!$&?v?-%%!#-#&"&"#!)-&%&)%)!)'$!&%%-!-)"!("$%$!&$"%!&$!(""%$"(!$%"$&!("!&!$-)!(!"#-!!"."!.""-!.""-"".!-"".!"."!%%-%-%!#'#!'##%!'##%##'!%##'!#'#!!%+!')#%)!)'!+%#)%))%%#)'!)%)#%+!%)))!')#%+!%)%#)'!)#%')!1
В общем, мне кажется, моя оценка в 400 символов для EDT BarcodeString, конечно, не является гарантированно достаточной с учетом неограниченности длины исходной перекодируемой строки, но по крайней мере, для большинства случаев этого должно хватить.
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Интересует верхний предел. Больше какой длины не нужно?
Как уже упоминалось, в общем случае гарантированно достаточной длины нет; с другой стороны, в таблицах этот EDT вроде бы не используется, так что увеличивать его длину можно относительно безболезненно.

PS. Особенности кодирования информации в том же Code128 можно, к примеру, посмотреть здесь
Старый 17.10.2008, 18:16   #8  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Code128 это алфавит. Этот алфавит используют различные алгоритмы штрихкодирования, например, EAN128 или HIBS. Алгоритм EAN128 предполагает наличие в нем не более 128 закодированных символов.
Вот тут подробнее http://cleverence.ru/site.aspx?page=...ing-01&lang=ru
Цитата:
В отличие от EAN13, у кода EAN128 уникальный только словарь. Для построения EAN128 используется алфавит CODE128. Т.е. если кто-то говорит «CODE128», то он имеет в виду алфавит (какие цифры и буквы какими черточками обозначаются). А если кто-то говорит «EAN128», то он имеет в виду систему кодирования свойств конкретного товара или груза на основе кодировки CODE128. Число 128 в EAN128 не означет, что в нем подряд должно стоять 128 цифр. Число 128 попало в EAN128 из CODE128, а в CODE128 оно обозначает количество символов, которое способен отобразить данный алфавит, т.е. все 128 символов стандартного ASCII.
отношения между EAN128 и CODE128 такие же, как между формой Торг-12 и русским языком. Используя русский язык можно писать о чем угодно, но Торг-12 имеет свой формат, и не все, что написано по-русски, является формой Торг-12.
EAN128 является, по-видимому, вторым по распространенности кодом на планете, и вот почему: это код для обмена информацией о товарах и грузах между производственными, транспортными и торговыми компаниями

Последний раз редактировалось _scorp_; 17.10.2008 в 18:25.
Теги
документация, печать, штрихкод, ax2009, ax3.0, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Подвисает сканер штрих-кодов KingPeas DAX: Программирование 0 10.10.2008 09:01
AX 4.0 + сканеры штрих кодов Vitals DAX: Прочие вопросы 11 20.06.2008 17:35
Еще раз про сканеры штрих кодов doo DAX: Программирование 14 22.12.2006 15:47
Нужен совет по сканеру штрих-кодов slava09 DAX: Программирование 5 27.01.2005 03:11
Еще раз о подключении сканнера штрих кодов Alks DAX: Программирование 43 20.08.2004 15:04
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:18.