Формирование штрих-кода льготного рецепта

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
yuriy
Посетитель
Сообщения: 42
Зарегистрирован: 24 Август 2005, 3:54

Формирование штрих-кода льготного рецепта

Сообщение yuriy »

Добрый день

Помогите пожалуйста решить проблему
Для печать штрих-кода необходимо в соответствии с алгоритмом
Перевести все данные включаемые в штрих-код в битовую последовательность
например:
ОГРН ЛПУ 1022402655159 необходимо перевести в битовую последовательность длиной 50 бит
Источник финансирования 1 в битовую последовательность длиной 2 бита
и так далее

Если кто делал это подскажите пожалуйста как это можно сделать?
Стандартными средствами или сторонними шаблонами или библиотеками?

Clarion 5.5
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Формирование штрих-кода льготного рецепта

Сообщение Admin »

Очень интересен код который 24 байта в 50 бит закодирует :)
Может все таки ID нужно кодировать а не название?
О каком штрихкоде идет речь, агоритм какой?
И вообще немного задачу опишите.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
yuriy
Посетитель
Сообщения: 42
Зарегистрирован: 24 Август 2005, 3:54

Формирование штрих-кода льготного рецепта

Сообщение yuriy »

Кодировать надо только цифры конечно
Необходимо печатать из программы на Clarione бланк льготного рецепта
в нем есть штрих-код в PDF-417
Описание алгоритма формирования во вложенном файле
Как напечатать и закодировать в base64 я знаю не получается создать правильную по битам последовательность
Вложения
shtrih.pdf
(155.38 КБ) 840 скачиваний
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Формирование штрих-кода льготного рецепта

Сообщение Admin »

Ну если двоичный вид то наверное...

Код: Выделить всё

                PROGRAM
                MAP
                  IntToBin(LONG N, LONG Extend),STRING
                END

    CODE
    ! N число для преобразования в биты
    ! Extend - расширить число до Extend бит (дописать нули в начало)
    MESSAGE(IntToBin(32768,50))

IntToBin    FUNCTION(LONG N, LONG Extend)!,STRING
Result      STRING(1024)
P           LONG
  CODE
  P = N
  Result = ''
  LOOP WHILE P > 0
     Result = P % 2 & CLIP(Result)
     P = P / 2
  END
  Result = ALL('0', Extend-LEN(CLIP(Result))) & CLIP(Result)
  RETURN CLIP(Result)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
kreator
✯ Ветеран ✯
Сообщения: 4982
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Формирование штрих-кода льготного рецепта

Сообщение kreator »

Вот здесь внешняя библиотека для формирования pdf-417 - http://forum.clarionlife.net/phpbb/view ... f=1&t=2969. Всё делает сама.
We are hard at work… for you. :)
yuriy
Посетитель
Сообщения: 42
Зарегистрирован: 24 Август 2005, 3:54

Формирование штрих-кода льготного рецепта

Сообщение yuriy »

Спасибо буду бороться дальше
yuriy
Посетитель
Сообщения: 42
Зарегистрирован: 24 Август 2005, 3:54

Формирование штрих-кода льготного рецепта

Сообщение yuriy »

Добрый день

Предложенные варианты не совсем подходят т. к.
в переменную LONG для преобразования можно записать только 10 цифр
а код ОГРН и СНИЛС содержат 13 и 11 цифр
если согласно алгоритма преобразовать дозировку из символов в код ASCII то получается очень длинное число
например гранулы пролонг.п/о кш/раств.1000мг N50
получается 208 179 209 128 208 176 208 189 209 131 208 187 209 139 32 208 191 209 128 208 190 208 187 208 190 208 189 208 179 46 208 191 47 208 190 32 208 186 209 136 47 209 128 208 176 209 129 209 130 208 178 46 49 48 48 48 208 188 208 179 32 78 53 48
Если в функции IntToBin(LONG N , LONG Extend),STRING заменить на IntToBin(DECIMAL N, DECIMAL Extend),STRING
то при компиляции выходит ошибка invalid dta type for value parameter
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Формирование штрих-кода льготного рецепта

Сообщение Admin »

Да. Чисто под LONG написал.
Для STRING и соответственно больших чисел нужно по другому писать.
Гуглить string to bin и разбираться.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Формирование штрих-кода льготного рецепта

Сообщение Admin »

На самом деле нужно функцию BSHIFT для строки.
Но в Clarion она работает только с LONG.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
AlesDales
Активист
Сообщения: 198
Зарегистрирован: 14 Июль 2005, 15:42

Формирование штрих-кода льготного рецепта

Сообщение AlesDales »

Добрый день.

Может это из другой оперы, но могу поделиться – совсем недавно занимался штрих-кодом pdf 417 и тоже из области медицины (штрих код на бумажных полисах обязательного медицинского страхования).
По спецификации shtrih.pdf СНИЛС - 37 бит. В строку включаются только цифры СНИЛС.

Если делать по аналогии с полисом, то СНИЛС – например 166-378-589 22 (последние две цифры это его контрольная сумма) преобразовывается в большое число 16637858922 которое в шестнадцатеричном виде выглядит как 03 DF B1 94 6A соответственно занимает всего 5 байт и если проверить 1111011111101100011001010001101010 – 34 бита.
Буквы в полисе, ф.и.о. например, вообще кодируются 6 битными сегментами по специальной таблице.
в стране слепых правит одноглазый король (c) ...
yuriy
Посетитель
Сообщения: 42
Зарегистрирован: 24 Август 2005, 3:54

Формирование штрих-кода льготного рецепта

Сообщение yuriy »

AlesDales писал(а):Добрый день.

Может это из другой оперы, но могу поделиться – совсем недавно занимался штрих-кодом pdf 417 и тоже из области медицины (штрих код на бумажных полисах обязательного медицинского страхования).
По спецификации shtrih.pdf СНИЛС - 37 бит. В строку включаются только цифры СНИЛС.

Если делать по аналогии с полисом, то СНИЛС – например 166-378-589 22 (последние две цифры это его контрольная сумма) преобразовывается в большое число 16637858922 которое в шестнадцатеричном виде выглядит как 03 DF B1 94 6A соответственно занимает всего 5 байт и если проверить 1111011111101100011001010001101010 – 34 бита.
Буквы в полисе, ф.и.о. например, вообще кодируются 6 битными сегментами по специальной таблице.
Если не трудно пришлите исходники можно в личку.
Спасибо за помощь
yuriy
Посетитель
Сообщения: 42
Зарегистрирован: 24 Август 2005, 3:54

Формирование штрих-кода льготного рецепта

Сообщение yuriy »

Admin писал(а):На самом деле нужно функцию BSHIFT для строки.
Но в Clarion она работает только с LONG.

Если не затруднит объясните пожалуйста, как с помощью функции BSHIFT получить из числа определённое количество бит
Например число 456789 перевести в двоичный вид длинной 25 бит дополнив слева 0 до необходимого размера.
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Формирование штрих-кода льготного рецепта

Сообщение Admin »

yuriy писал(а): Если не затруднит объясните пожалуйста, как с помощью функции BSHIFT получить из числа определённое количество бит
Например число 456789 перевести в двоичный вид длинной 25 бит дополнив слева 0 до необходимого размера.
Ну вот вам пример с BSHIFT

Код: Выделить всё

                PROGRAM
                MAP
                  IntToBin(LONG N, LONG Extend),STRING
                END

LOC:Str         STRING(10)

S LONG

    CODE
    ! N число для преобразования в биты
    ! Extend - до скольки бит расширить число
    MESSAGE(IntToBin(456789,25),,,,,0)

IntToBin    FUNCTION(LONG N, LONG Extend)!,STRING
Result      STRING(1024)
P           LONG
  CODE
  P = N
  LOOP WHILE P > 0
    Result = P % 2 & CLIP(Result)
    P = BSHIFT(P, -1)
  END
  Result = ALL('0', Extend-LEN(CLIP(Result))) & CLIP(Result)
  RETURN CLIP(Result)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Формирование штрих-кода льготного рецепта

Сообщение Admin »

Код: Выделить всё

S LONG(33)
  CODE
  MESSAGE(BSHIFT(S, -1))
  S = S / 2 ! аналогично BSHIFT(S, -1) с учетом того что дробная часть в LONG отбрасывается 
  MESSAGE(S)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
yuriy
Посетитель
Сообщения: 42
Зарегистрирован: 24 Август 2005, 3:54

Формирование штрих-кода льготного рецепта

Сообщение yuriy »

Спасибо
Ответить