Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
mr.Ulugbek
Member

Откуда:
Сообщений: 366
Привет всем
У кого нибудь есть процедура для создание Штрих кода последовательном образе?
Заранее благодарен
1 апр 11, 11:03    [10455654]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8569
mr.Ulugbek
У кого нибудь есть процедура для создание Штрих кода последовательном образе?
What is it "последовательном образе"? Это имеет какое-то отношение к ФБ?
1 апр 11, 11:35    [10455907]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
PEAKTOP
Member

Откуда: агломерация Славянск-Краматорск-Дружковка
Сообщений: 1383
mr.Ulugbek
У кого нибудь есть процедура для создание Штрих кода последовательном образе?


Штрих-код - это всего лишь способ записи цифр полосками. Не более.

Для QReport есть TQRBarCode, у FastReport-а тоже есть компонент на подобие.
Выставляешь у компонента свойство DataSource и DataField, а также тип штрих-кода, например, EAN13 - и все.

Если тебе нужно выводить цифры, которые не соответствуют правилам формирования штрих-кода (да-да, этот набор цифр не просто так), например - номер документа для автоматизированного считывания номеров в системе документооборота, то у компонент отображения штрих-кода есть свойство CheckSum. Поставь его в true (или Modulo10, какие там компоненты у тебя) - и штрих-код будет "правильным".
1 апр 11, 13:12    [10456683]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
mr.Ulugbek
Member

Откуда:
Сообщений: 366
Мне надо создать штрих код
Допустим есть товары у которых нет штрих код вот для них я хочу генерировать штрих код сам
1 апр 11, 14:11    [10457035]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
Евгений, Екатеринбург
Member

Откуда:
Сообщений: 654
mr.Ulugbek
Мне надо создать штрих код
Допустим есть товары у которых нет штрих код вот для них я хочу генерировать штрих код сам

Штрихкод не генерируется. Это просто шрифт - как тут уже сказали система отображения текста (не только цифр) полосками.
Соответственно в базе хранится этот текст, а генератор отчетов преобразует этот текст в штрихкод для печати. Для того чтобы содать его в базе, ты должен придумать/принять алгоритм по которому он создается. Если штрихкод чисто для себя (как у нас), то можешь создавать его как хочешь - у нас состоит: первые три цифры - код типа документа (например 201 это альбом с чертежами), последующие это ID в базе - например 201487 означает, что это альбом чертежей с номером 487, он же инвентарный номер в бумажном архиве. 202002 - накладная и т.д.
Если требуется для повсеместного применения, то надо придерживатся общепринятых правил создания этого текста, но это вроде регистрироваться надо.
1 апр 11, 15:21    [10457579]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
rstrelba
Member

Откуда:
Сообщений: 172
mr.Ulugbek,

у меня есть UDF, которая на базе какого-нибудь кода, например id товара
генериреут EAN13.
Если избавиться от константного массива, то можно и хранимую процедуру
сделать


function IntToEAN13(var Value:Int64):PChar; cdecl; export;
var S:String;
    i:Integer;
    _check, _sum, _odd, _even : Integer;
const zArray : array [1..11] of String =
(
'20000000000',
'2000000000',
'200000000',
'20000000',
'2000000',
'200000',
'20000',
'2000',
'200',
'20',
'2'
);

begin
   //
   S := IntToStr(Value);
   S := zArray[Length(S)] + S;
   _odd := 0;
   _even := 0;
   for i:=0 to 11 do
   begin
      if (i div 2)*2=i
      then _even := _even + StrToInt(Copy(S,i+1,1))
      else _odd  := _odd +  StrToInt(Copy(S,i+1,1));
   end;
   _odd := _odd * 3;
   _sum := _odd + _even;
   _check := (_sum div 10)*10;
   if _check=_sum
   then _check := 0
   else _check := _check + 10 - _sum;
   //
   Result := PChar(S + IntToStr(_check));
end;

1 апр 11, 16:09    [10458025]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
miwaonline
Member

Откуда:
Сообщений: 2249
Евгений, Екатеринбург
mr.Ulugbek
Мне надо создать штрих код
Допустим есть товары у которых нет штрих код вот для них я хочу генерировать штрих код сам

Штрихкод не генерируется. Это просто шрифт


Уточняю. Если для ВНУТРЕННИХ нужд надо самостоятельно генерировать коды товаров, то надо только, чтобы они начинались на «2». Ну и последняя, 13-я цифра должна расчитываться по стандартному алгоритму. Остальные 11 цифр - на усмотрение разработчика.

Уточняющий вопрос для ТСа - тебе нужна реализация этого алгоритма на SQL? Или полученных ответов достаточно?
1 апр 11, 16:13    [10458069]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
Евгений, Екатеринбург
Member

Откуда:
Сообщений: 654
miwaonline
Евгений, Екатеринбург
пропущено...

Штрихкод не генерируется. Это просто шрифт


Уточняю. Если для ВНУТРЕННИХ нужд надо самостоятельно генерировать коды товаров, то надо только, чтобы они начинались на «2». Ну и последняя, 13-я цифра должна расчитываться по стандартному алгоритму. Остальные 11 цифр - на усмотрение разработчика.

Это если EAN-13 использовать. Если CODE39, то количество символов может быть и меньше, к тому же в этом стандарте контрольная сумма не обязательный параметр. Мне code39 удобнее показался - проще формировать текст получилось - 201 код товара, просто "склеиваем" с ID этого товара, никакой реализации алгоритма не надо. Ну у меня он так, как фенька для Заказчиков пока используется.
Про первую цифру 2 для внутреннего применения, да забыл написать...
2 апр 11, 10:49    [10460777]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
PEAKTOP
Member

Откуда: агломерация Славянск-Краматорск-Дружковка
Сообщений: 1383
Евгений, Екатеринбург
Это если EAN-13 использовать. Если CODE39, то количество символов может быть и меньше, к тому же в этом стандарте контрольная сумма не обязательный параметр. Мне code39 удобнее показался - проще формировать текст получилось - 201 код товара, просто "склеиваем" с ID этого товара, никакой реализации алгоритма не надо.


Если компонента для отображения штрих-кода "умная" (например, TQRBarCode или компонента из FastReport-а), то этой фигней вообще заморачиваться не надо. В качестве DataField ей присваиваешь 'TMC_ID' (ID товара), а она сама уже дополняет цифрами слева (нолями и первой двойкой) необходимое количество знаков и рассчитывает последний знак после кода, как контрольную сумму.

А после считывания выделяем функцией подстроки ID товара.
2 апр 11, 11:06    [10460793]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8569
Ну и изба говорильня. Тут кода на 5 копеек, а разговоров...

CREATE PROCEDURE ID2EAN13 (
    prefix varchar(10),
    id integer)
returns (
    barcode varchar(13))
as
declare variable n integer;
begin
      barcode = prefix || lpad(id, 12-char_length(prefix), '0');

      n = (cast (substring (barcode from 2 for 1) as integer)+
           cast (substring (barcode from 4 for 1) as integer)+
           cast (substring (barcode from 6 for 1) as integer)+
           cast (substring (barcode from 8 for 1) as integer)+
           cast (substring (barcode from 10 for 1) as integer)+
           cast (substring (barcode from 12 for 1) as integer))*3+
           cast (substring (barcode from 1 for 1) as integer)+
           cast (substring (barcode from 3 for 1) as integer)+
           cast (substring (barcode from 5 for 1) as integer)+
           cast (substring (barcode from 7 for 1) as integer)+
           cast (substring (barcode from 9 for 1) as integer)+
           cast (substring (barcode from 11 for 1) as integer);

      n = mod(n,10);
      if (n>0) then n = 10-n;
      barcode = barcode || cast (n as varchar(20));
  suspend;
end
На входе чиселко, на выходе баркод еан13 с контрольной суммой. желающие кормить оную процедуру мусором могут сами написать эксепшны, на случай переполнения. Проверено на версии сервера 2.1, никаких УДФ не требуется.

Желающие могут пользоваться кодом без ограничений.
2 апр 11, 13:36    [10461073]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
PEAKTOP
Member

Откуда: агломерация Славянск-Краматорск-Дружковка
Сообщений: 1383
Ivan_Pisarevsky
Ну и изба говорильня. Тут кода на 5 копеек, а разговоров...
Желающие могут пользоваться кодом без ограничений.


Думаю, это нужно увековечить =)
2 апр 11, 14:07    [10461136]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
a-phone
Member

Откуда:
Сообщений: 6
Всем привет
у меня сервер бд Firebird 2.5.1

Есть исходник на vb из него хотелось бы сделать хранимую процедуру, но я новичек в этом деле и один не осилю прошу помощи гуру.

вот исходник:
Attribute VB_Name = "Barcode"
Option Explicit
Private Function Code_39_Ch(Ch As String) As String
    Dim S As String
    Select Case Ch
        Case "1": S = "28002"
        Case "2": S = "0:002"
        Case "3": S = "2:000"
        Case "4": S = "08202"
        Case "5": S = "28200"
        Case "6": S = "0:200"
        Case "7": S = "08022"
        Case "8": S = "28020"
        Case "9": S = "0:020"
        Case "0": S = "08220"
        Case Else: S = ""
    End Select
    Code_39_Ch = S
End Function
Public Function CODE_BAR(CARD As String)
    Dim I As Integer
    Dim S As String
    S = ""
    For I = 1 To Len(CARD)
        S = S & Code_39_Ch(Mid(CARD, I, 1))
    Next I
    CODE_BAR = "80220" & S & "80220"
End Function


Сообщение было отредактировано: 19 май 12, 22:02
19 май 12, 20:50    [12582572]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28878
1000 руб.
19 май 12, 21:46    [12582759]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8569
отформатировал тэгами исходник.
"с вас пятьдесят копеек"(с).
19 май 12, 22:03    [12582836]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28878
a-phone
Есть исходник на vb из него хотелось бы сделать хранимую процедуру, но я новичек в этом деле и один не осилю прошу помощи гуру.

мне регулярно вспоминается анекдот про слесаря, канализацию, и практиканта. Соответственно, вопрос - вы нам предоставите в этом г..не плавать, а сами будете только ключи подавать? Или вы предполагаете, что тут собрались спецы по VB? Вы сами что сделали, и что не получилось?
19 май 12, 22:23    [12582932]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
a-phone
Member

Откуда:
Сообщений: 6
kdv,

честно, сам только укоротил vb исходник , но читал книжки и уроки про sql , правда понял мало.решил что моих только что полученных "знаний" не хватит. И пришел к Вам. А на счет ключей и практиканта наверное правда со стороны так смотрится.Сорри.
20 май 12, 00:04    [12583420]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28878
почитайте, как пишутся процедуры
http://www.ibase.ru/devinfo/sp_call.htm
посмотрите примеры в базе employee и в документации. Сопоставьте язык VB и язык PSQL (процедур в ФБ). Перепишите процедуру с VB на FB.
20 май 12, 00:28    [12583490]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
a-phone
Member

Откуда:
Сообщений: 6
Спасибо получилось хоть и криво но работает , код нужен чтобы заменять 7 -ми значный код полученый с штрихсканера обратно в штрихкод в связке с шрифтом:

+
CREATE or alter PROCEDURE BC (
    CARD integer)
returns (
    bartxt varchar(256))
as
declare variable i integer;
declare variable ls varchar(1);
declare variable bartxtl varchar(256);
declare variable CODE0 varchar(5);
declare variable CODE1 varchar(5);
declare variable CODE2 varchar(5);
declare variable CODE3 varchar(5);
declare variable CODE4 varchar(5);
declare variable CODE5 varchar(5);
declare variable CODE6 varchar(5);
declare variable CODE7 varchar(5);
declare variable CODE8 varchar(5);
declare variable CODE9 varchar(5);

begin
   bartxt='80220';
   bartxtl ='';
   CODE1='28002';
   CODE2='0:002';
   CODE3='2:000';
   CODE4='08202';
   CODE5='28200';
   CODE6='0:200';
   CODE7='08022';
   CODE8='28020';
   CODE9='0:020';
   CODE0='08220';

   i = 1;
   while (i < 8 ) do
   begin
   ls= substring (CARD from i for 1);

   if (ls='0') then bartxtl=CODE0;
   if (ls='1') then bartxtl=CODE1;
   if (ls='2') then bartxtl=CODE2;
   if (ls='3') then bartxtl=CODE3;
   if (ls='4') then bartxtl=CODE4;
   if (ls='5') then bartxtl=CODE5;
   if (ls='6') then bartxtl=CODE6;
   if (ls='7') then bartxtl=CODE7;
   if (ls='8') then bartxtl=CODE8;
   if (ls='9') then bartxtl=CODE9;
   bartxt=bartxt||bartxtl;
   i = i+1;
   end
end


С циклами еше не разобрался ,но если кто усовершенствует то заранее благодарен.
Модератор: Поправил и оформил тэгами, ЧИТАТЬ__ВСЕМ,__КТО__ПРИШЕЛ__СЮДА__В__ПЕРВЫЙ__РАЗ!


Сообщение было отредактировано: 21 май 12, 08:17
21 май 12, 00:01    [12585805]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
Exteris
Member

Откуда: Новосибирск
Сообщений: 1000
a-phone
declare variable CODE0 varchar(5);
declare variable CODE1 varchar(5);
declare variable CODE2 varchar(5);
...

Зачем вам эта куча переменных. Писали бы сразу: if (ls='0') then bartxtl='08220' ...
21 май 12, 09:47    [12586362]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8569
Exteris
Зачем вам эта куча переменных. Писали бы сразу: if (ls='0') then bartxtl='08220' ...
Не торопись, человек учится, приятно когда хоть кто-то из студентов что-то делает сам. Там вообще была портянка кода 7 раз длиннее, я ее малёху подрезал. Погоди и следующий шаг будет. Да и нет в переменных ничего такого уж плохого. :)
21 май 12, 10:47    [12586737]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
a-phone
Member

Откуда:
Сообщений: 6
Ivan_Pisarevsky,

надо так - там старт-стоп символ потерялся
конец кода :

+
...
bartxt=bartxt||bartxtl;
   i = i+1;
   end
bartxt=bartxt||'80220';
end


Спасибо за укорочение кода .
21 май 12, 20:32    [12591129]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
a-phone
Member

Откуда:
Сообщений: 6
1.Господа ,хотел спросить Вас ,можно ли малыми усилиями из процедуры которая выше сделать функцию?
чтобы table.field1=function( table.fild2)

я бы field1 так создал
ALTER TABLE UNITS
ADD CODE_BAR GENERATED ALWAYS AS (bc (units.card))

2.Будет ли это работать?
21 май 12, 23:27    [12591563]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8569
a-phone
надо так - там старт-стоп символ потерялся
Я ж писал "прямо из мозга", ты уж сам потестируй. ;)
21 май 12, 23:54    [12591647]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8569
a-phone
можно ли малыми усилиями из процедуры которая выше сделать функцию?

а. УДФ, для этого и не надо было твой код переписывать. скомпилил бы его в виде ДЛЛ (следуя правилам, см. ibase.ru) УДФ имеет свои преимущества и недостатки. Я лично предпочитаю по возможно не использовать УДФ, как повод мне необходима кроссплатформенность, компились УДФ под разные линухи и винды просто лениво.
б. дождаться третьей версии ФБ.
21 май 12, 23:59    [12591653]     Ответить | Цитировать Сообщить модератору
 Re: У кого нибудь есть процедура для создание Штрих кода последовательном образе?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50345

a-phone
можно ли

Попробуй. Раз уж используешь тройку - тебе и эксперименты ставить.

Posted via ActualForum NNTP Server 1.5

22 май 12, 00:03    [12591662]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Firebird, InterBase Ответить