powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Два идентификатора в один код
5 сообщений из 5, страница 1 из 1
Два идентификатора в один код
    #32616684
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, люди добрые, подход к решению такой задачи. Есть на данный момент пятизначный код заказа и на данный момент пятизначный артикул. Хранится integer на SQL-сервере. То есть, пока ничего не мешает, чтобы эти значения были существенно длиннее. Скорее всего, за ближайшие года два они не вырастут дальше шестизначных. Хочется получать одновременно оба эти кода на один клик сканера на бар-код. Сейчас можно сделать ЕАН простой конкатенацией строк, но это резко уменьшит резерв роста номеров. Существует ли возможность закодировать оба идентификатора в одну строку, чтобы просле считывания ЕАН разобрать его на номер заказа и артикул товара и с одного клика открыть форму с нужными данными?
...
Рейтинг: 0 / 0
Два идентификатора в один код
    #32618059
Alex Antonoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой EAN то используется ? 13 ?
Лучше сделать таблицу соответствия id (печатаемый на штрих) и № заказа + ид позиции
Либо перейти на другой Ян, скажем 128 (если ваша техника позволяет)
...
Рейтинг: 0 / 0
Два идентификатора в один код
    #32618451
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex AntonoffКакой EAN то используется ? 13 ?
Лучше сделать таблицу соответствия id (печатаемый на штрих) и № заказа + ид позиции
Либо перейти на другой Ян, скажем 128 (если ваша техника позволяет)
Используется 13, все отписано на Access. Единственный технический момент - обычный сканер для считывания штрих-кода, вставляемый в разъем клавиатуры.
Инструмент нужен для внутреннего пользования, для оптимизации обработки заказов на складе, так что может быть вполне использован нестандартный код. Я еще не успела попробовать, может, этому сканеру совсем не обязательно 13 символов читать? Может, я могу сама руками поставить больше?
Что такое 128, я просто не знаю(((
...
Рейтинг: 0 / 0
Два идентификатора в один код
    #32620005
Alex Antonoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению я со сканерами, подключающимися к клавиатурному разьему не встречался, и возмоможностей не знаю.

ean 128 - это 128ми битный штрих код это очень широкий штрих, часто можно видеть его на мониторах и коробках с оборудованием, но использование его в ваших целях может осложниться при отсутствии хорошего оборудования для печати штрих-этикеток. Иначе штрих просто сотрется.

Вообще посетите сайт ean.ru, и другие подобные в различных зонах, там расписывается все вплоть до алгоритмов кодирования.
...
Рейтинг: 0 / 0
Два идентификатора в один код
    #32621778
N_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще штрих коды переменной длинны (содержащий буквы и спец символы)
например Code39
Он вероятно должен распознаваться вашим сканером (т.к. они знают несколько кодов и я проверял в магазине :)
Сканер в разрыв клавиатуры легко проверить на работу с таким кодом.
Найдите и скачайте шрифты с Code39 (C39HrP36DlTt) и в ворде наберите небольшую строку ограниченную звездочками (*).
Печатните и отсканируйте назад в ворд.
Когда-то писал код для паковки-распаковки разных типов Access в буквенно-цифровые строки все зависит от основания штрихкода.
Отчет-этикетка:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Sub ОбластьДанных_Format(Cancel As Integer, FormatCount As Integer)
Dim s As String
s = "0" _
& DataToShtrih([prData], ,  3 ) _
& LongToShtrih([prEtVidProdID],  1 ) _
& LongToShtrih([prEtSortID],  1 ) _
& LongToShtrih([prEtNomer],  2 ) _
& LongToShtrih([prEtVorsID],  1 ) _
& LongToShtrih([prEtKolektID],  1 ) _
& LongToShtrih([prEtColorID],  3 ) _
& FloatToShtrih([prEtDlina],  3 ) _
& FloatToShtrih([prEtShirina],  2 )
s = s & ControlSymbol(s)

Me.ShtrihKod = "*" & s & "*"
End Sub
Модуль:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
Option Compare Database
Option Explicit

Public Function ShtrihToLong(strShtrih As String, Optional osnov As Long =  43 ) As Long
Dim strCode39 As String
Dim i As Long
Dim l As Long
Dim rez As Long
    strCode39 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.$/+%_"
    rez =  0 
    l = Len(strShtrih)
    For i = l To  1  Step - 1 
        rez = rez + osnov ^ (l - i) * (InStr( 1 , strCode39, Mid(strShtrih, i,  1 ), vbBinaryCompare) -  1 )
    Next i
    ShtrihToLong = rez
End Function
Public Function LongToShtrih(lngN As Long, Optional lenShtrih As Long =  1 , Optional osnov As Long =  43 ) As String
Dim strCode39 As String
Dim i As Long
Dim l As Long
Dim rez As String
Dim ost As Long
    strCode39 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.$/+%_"
    rez = ""
    l = lngN
    While l >= osnov
        i = l Mod osnov
        rez = Mid(strCode39, i +  1 ,  1 ) & rez
        l = l \ osnov
    Wend
    i = l
    rez = Mid(strCode39, i +  1 ,  1 ) & rez
    While Len(rez) < lenShtrih
        rez = "0" & rez
    Wend
    LongToShtrih = rez
End Function
Public Function ShtrihToFloat(strShtrih As String, Optional nPoint As Long =  2 , Optional osnov As Long =  43 ) As Double
Dim strCode39 As String
Dim i As Long
Dim l As Long
Dim rez As Double
    strCode39 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.$/+%_"
    rez =  0 
    l = Len(strShtrih)
    For i = l To  1  Step - 1 
        rez = rez + osnov ^ (l - i) * (InStr( 1 , strCode39, Mid(strShtrih, i,  1 ), vbBinaryCompare) -  1 )
    Next i
    
    ShtrihToFloat = rez / ( 10  ^ nPoint)
End Function

Public Function FloatToShtrih(floatN As Double, Optional nPoint As Long =  2 , Optional lenShtrih As Long =  3 , Optional osnov As Long =  43 ) As String
Dim strCode39 As String
Dim i As Long
Dim l As Long
Dim rez As String
Dim ost As Long
    strCode39 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.$/+%_"
    rez = ""
    l = Int(floatN *  10  ^ nPoint)
    While l >= osnov
        i = l Mod osnov
        rez = Mid(strCode39, i +  1 ,  1 ) & rez
        l = l \ osnov
    Wend
    i = l
    rez = Mid(strCode39, i +  1 ,  1 ) & rez
    While Len(rez) < lenShtrih
        rez = "0" & rez
    Wend
    FloatToShtrih = rez
End Function
Public Function DataToShtrih(dataN As Date, Optional dataStart As Date = # 1 / 1 / 2000 #, Optional lenShtrih As Long =  3 , Optional osnov As Long =  43 ) As String
Dim strCode39 As String
Dim i As Long
Dim l As Long
Dim rez As String
Dim ost As Long
    strCode39 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.$/+%_"
    rez = ""
    l = CLng(dataN - dataStart)
    If l <  0  Then DataToShtrih = "": Exit Function
    While l >= osnov
        i = l Mod osnov
        rez = Mid(strCode39, i +  1 ,  1 ) & rez
        l = l \ osnov
    Wend
    i = l
    rez = Mid(strCode39, i +  1 ,  1 ) & rez
    
    While Len(rez) < lenShtrih
        rez = "0" & rez
    Wend
    
    DataToShtrih = rez
End Function

Public Function ShtrihToData(strShtrih As String, Optional dataStart As Date = # 1 / 1 / 2000 #, Optional osnov As Long =  43 ) As Date
Dim strCode39 As String
Dim i As Long
Dim l As Long
Dim rez As Double
    strCode39 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.$/+%_"
    rez =  0 
    l = Len(strShtrih)
    For i = l To  1  Step - 1 
        rez = rez + osnov ^ (l - i) * (InStr( 1 , strCode39, Mid(strShtrih, i,  1 ), vbBinaryCompare) -  1 )
    Next i
    
    ShtrihToData = dataStart + rez
End Function

Public Function ControlSymbol(strShtrih As String, Optional osnov As Long =  43 ) As String
Dim strCode39 As String
Dim i As Long
Dim l As Long
Dim rez As Long
Dim ost As Long
    strCode39 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.$/+%_"
    rez =  0 
    l = Len(strShtrih)
    For i =  1  To l
        rez = rez + ShtrihToLong(Mid(strShtrih, i,  1 ))
    Next i
    ControlSymbol = LongToShtrih(rez Mod osnov)
End Function

Public Function ShtrihValid(strShtrih As String, Optional osnov As Long =  43 ) As Boolean
    If ControlSymbol(Left(strShtrih, Len(strShtrih) -  1 )) = Right(strShtrih,  1 ) Then
        ShtrihValid = True
    Else
        ShtrihValid = False
    End If
End Function
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Два идентификатора в один код
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]