О технологии штрихкодирования
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
О технологии штрихкодирования
Уважаемые разработчики!
Поставили задачу связанную с технологиями, которыми раньше заниматься не приходилось Нужна помощь или советы.
Есть справочник с наименованиями. Каждое наименование имеет уникальный шестизначный код. Нужно реализовать печать (на лазерном принтере например) этих наименований со штрихкодами
так, чтобы в последствии их можно было (используя сканерные устройства) однозначно идентифицировать и выполнить необходимые действия.
Информации в инете по данной технологии очень много. А как конкретно из программы на Clarion for Windows (v.6) напечатать этот штрихкод непонятно. Может быть есть готовая функция или процедура, которая правильно прорисует эту "зебру"?
Ограничений на коды пока нет.
Спасибо
Алик
Alik200563@mail.ru
Поставили задачу связанную с технологиями, которыми раньше заниматься не приходилось Нужна помощь или советы.
Есть справочник с наименованиями. Каждое наименование имеет уникальный шестизначный код. Нужно реализовать печать (на лазерном принтере например) этих наименований со штрихкодами
так, чтобы в последствии их можно было (используя сканерные устройства) однозначно идентифицировать и выполнить необходимые действия.
Информации в инете по данной технологии очень много. А как конкретно из программы на Clarion for Windows (v.6) напечатать этот штрихкод непонятно. Может быть есть готовая функция или процедура, которая правильно прорисует эту "зебру"?
Ограничений на коды пока нет.
Спасибо
Алик
Alik200563@mail.ru
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Не все так просто с шрифтами ... Вопрос решается в три этапа.
1. Номер нужно перекодировать в код EAN-13 или другой, обязательно с расчетом контрольной суммы кода.
(алгоритм простейший, подробно описан на http://www.ean.ru)
Обрати внимание, что для пользовательских кодов отводится
секция 20-22 - иначе могут быть накладки с "настоящими" ш/к.
2. Код EAN должен быть подготовлен для печати - это требование двунапрвленного считывания. Т.е. одни и те же цифры кода имеют различное графическое отображение, в зависимости от своего местоположения в коде. Например так (подготовка строки с EAN13 для печати):
PrintBarCode PROCEDURE (Code_S)
Loc:RetValue STRING(14)
Loc:Count BYTE
Loc:Table BYTE
Loc:LTMP LONG
Loc:CodS STRING(14)
TABLE_EAN13 STRING('0@`pP!')
ORDER_EAN13 STRING(13),DIM(10)
CODE
ORDER_EAN13[1] ='6311111555554'
ORDER_EAN13[2] ='6312122555554'
ORDER_EAN13[3] ='6312212555554'
ORDER_EAN13[4] ='6312221555554'
ORDER_EAN13[5] ='6321122555554'
ORDER_EAN13[6] ='6322112555554'
ORDER_EAN13[7] ='6322211555554'
ORDER_EAN13[8] ='6321212555554'
ORDER_EAN13[9] ='6321221555554'
ORDER_EAN13[10]='6322121555554'
Loc:CodS = Clip(Left(Code_S))
! Дополним строку нулями до полной
Loop While Len(Clip(Left(Loc:CodS))) < 13
Loc:CodS = '0' & Clip(Loc:CodS)
end
Loc:Table = Loc:CodS[1] + 1 ! Определить таблицу кодировки
Clear(Loc:RetValue) ! Обнулить результат
Loop Loc:Count = 1 to 13 by 1
If (Loc:Count = then Loc:RetValue = Clip(Loc:RetValue) & '|'. ! Разделители
Loc:LTmp = Val(table_ean13[Sub(order_ean13Loc:Table], Loc:Count,1)])
Loc:RetValue = Clip(Loc:RetValue) & Chr(Loc:LTmp + Loc:CodS[Loc:Count])
end
Return(Loc:RetValue)
! ------ ВСЕ : будет возвращена строка для печати или отображения
3. Далее, действительно - полно различных по красоте шрифтов (просто зебры, с цифрами и т.д.), которыми можно эту закодированную строку распечатать - и она будет считана любым сканером. Если не сможешь найти, оставь мыло - сброшу несколько вариантов ....
1. Номер нужно перекодировать в код EAN-13 или другой, обязательно с расчетом контрольной суммы кода.
(алгоритм простейший, подробно описан на http://www.ean.ru)
Обрати внимание, что для пользовательских кодов отводится
секция 20-22 - иначе могут быть накладки с "настоящими" ш/к.
2. Код EAN должен быть подготовлен для печати - это требование двунапрвленного считывания. Т.е. одни и те же цифры кода имеют различное графическое отображение, в зависимости от своего местоположения в коде. Например так (подготовка строки с EAN13 для печати):
PrintBarCode PROCEDURE (Code_S)
Loc:RetValue STRING(14)
Loc:Count BYTE
Loc:Table BYTE
Loc:LTMP LONG
Loc:CodS STRING(14)
TABLE_EAN13 STRING('0@`pP!')
ORDER_EAN13 STRING(13),DIM(10)
CODE
ORDER_EAN13[1] ='6311111555554'
ORDER_EAN13[2] ='6312122555554'
ORDER_EAN13[3] ='6312212555554'
ORDER_EAN13[4] ='6312221555554'
ORDER_EAN13[5] ='6321122555554'
ORDER_EAN13[6] ='6322112555554'
ORDER_EAN13[7] ='6322211555554'
ORDER_EAN13[8] ='6321212555554'
ORDER_EAN13[9] ='6321221555554'
ORDER_EAN13[10]='6322121555554'
Loc:CodS = Clip(Left(Code_S))
! Дополним строку нулями до полной
Loop While Len(Clip(Left(Loc:CodS))) < 13
Loc:CodS = '0' & Clip(Loc:CodS)
end
Loc:Table = Loc:CodS[1] + 1 ! Определить таблицу кодировки
Clear(Loc:RetValue) ! Обнулить результат
Loop Loc:Count = 1 to 13 by 1
If (Loc:Count = then Loc:RetValue = Clip(Loc:RetValue) & '|'. ! Разделители
Loc:LTmp = Val(table_ean13[Sub(order_ean13Loc:Table], Loc:Count,1)])
Loc:RetValue = Clip(Loc:RetValue) & Chr(Loc:LTmp + Loc:CodS[Loc:Count])
end
Return(Loc:RetValue)
! ------ ВСЕ : будет возвращена строка для печати или отображения
3. Далее, действительно - полно различных по красоте шрифтов (просто зебры, с цифрами и т.д.), которыми можно эту закодированную строку распечатать - и она будет считана любым сканером. Если не сможешь найти, оставь мыло - сброшу несколько вариантов ....
-
- Ветеран движения
- Сообщения: 78
- Зарегистрирован: 04 Август 2005, 9:35
- Контактная информация:
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
List & Label без проблем работает со штрихкодами. Штука достаточно тяжёлая, но если разобраться - море удовольствия .Игорь Столяров писал(а):Вот именно, что древняя ...
Сейчас - это уже коммерческий продукт.
К тому же работа с фонтами дает большую гибкость при построении приложения и независимость от сторонних библиотек ...
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Никаких сомнений, но опять-таки, это не бесплатная фуська ...
Я все-таки придерживаюсь решений насчет интеграции в программы: либо FreeWare (ZIP, IQXML, SMTP и т.д.), либо писать самому (штрих-коды, экспорт/импорт MS Word, Excel и т.д.). Иначе при каждом патче Clarion'а приходится дергаться - как бы чего не отвалилось ...
Да и вес готовой софтины эти библиотеки не уменьшают.
Я все-таки придерживаюсь решений насчет интеграции в программы: либо FreeWare (ZIP, IQXML, SMTP и т.д.), либо писать самому (штрих-коды, экспорт/импорт MS Word, Excel и т.д.). Иначе при каждом патче Clarion'а приходится дергаться - как бы чего не отвалилось ...
Да и вес готовой софтины эти библиотеки не уменьшают.
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Но ведь перешел ? И я перешел. И здесь есть выбор - можно сильно матерясь, использовать встроенный XML Clarion. Здесь скорее вопрос не в том, что надежней и лучше, а в том, что излишняя, по поводу и без повода интеграция в софт чужих библиотек и шаблонов - не нужна. С печатью штрих-кодов - уж точно все можно решить 20-30 строчками кода, причем без интеллектуального напряга - вся алгоритмика открыта.
За теми кто отстал - не возвращаться. (С) Кодекс
-
- Ветеран движения
- Сообщения: 78
- Зарегистрирован: 04 Август 2005, 9:35
- Контактная информация:
За более чем 7 лет использования табоговской библиотеки (в сырцах) в ее код потребовались залезть только один раз - когда пришлось печатать на спецпринтере для штрихкода с очень низким разрешеним. Больше никаких нареканий не было. Были мутки с шаблонами - но это решилось давно и без проблем.
Насчет увеличения размера приложения за счет библиотеки - тут все как раз с точностью до наоборот. Это фонты (которые нужно поставлять с приложеним) раздуют приложение, а библиотека занимает в скомпилированном виде около 100 кил. Типичный размер одного фонта - несколько поболее...
А вот с фонтами были мутки неоднократно - в результате перешел исключительно на генерацию штриха...
А вообще - каждый сам себе буратина.
Насчет увеличения размера приложения за счет библиотеки - тут все как раз с точностью до наоборот. Это фонты (которые нужно поставлять с приложеним) раздуют приложение, а библиотека занимает в скомпилированном виде около 100 кил. Типичный размер одного фонта - несколько поболее...
А вот с фонтами были мутки неоднократно - в результате перешел исключительно на генерацию штриха...
А вообще - каждый сам себе буратина.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Ну так выложи человеку библиотеку на FTP - пусть сам выбирает, что ему больше нравится ...
А размер "красивого" TTF ш/кода с цифрами - 17 Kb.
То, что генерит фришная табога - смотрится убого (точнее, так как это делалсь 5 лет назад). Современная библиотека - значительно продвинута - но она не бесплатна.
Алаверды: кому и кобыла невеста ...
А размер "красивого" TTF ш/кода с цифрами - 17 Kb.
То, что генерит фришная табога - смотрится убого (точнее, так как это делалсь 5 лет назад). Современная библиотека - значительно продвинута - но она не бесплатна.
Алаверды: кому и кобыла невеста ...
За теми кто отстал - не возвращаться. (С) Кодекс
-
- Ветеран движения
- Сообщения: 78
- Зарегистрирован: 04 Август 2005, 9:35
- Контактная информация: