|
Штрихкодирование документов. Дубли штрихкодов. | ☑ | ||
---|---|---|---|---|
0
St-Anger
18.04.19
✎
12:55
|
Добрый день.
В подписке на событие документов ПередЗаписью записывается штрихкод в РС Штрихкоды. Формируется шк путем поиска последнего + 1. Документы формируются несколькими операторами. И если одновременно (разница может быть до 2х секунды) записываются документы, то формируются одинаковые штрихкоды. Как этого можно избежать? |
|||
1
Йохохо
18.04.19
✎
12:57
|
формировать ШК из номера документа
|
|||
2
Черный маклер
18.04.19
✎
12:59
|
(0) ускорить ...путем поиска последнего + 1...
|
|||
3
Darych
18.04.19
✎
12:59
|
Функцию напиши из номера/даты/времени создания - веселись)
|
|||
4
shuhard
18.04.19
✎
12:59
|
(0) в типовых это уже сделано через номер, в чем смысл дублирования БСП ?
|
|||
5
St-Anger
18.04.19
✎
13:56
|
Номер/дата/время создания хорошо, но хотелось бы засунуть в EAN13
(4) в УПП 8.3 я не нашел |
|||
6
Darych
18.04.19
✎
14:00
|
(5) ну я же не сказал, что бери и лей туда это))))))))) ... я на выбор)
|
|||
7
NorthWind
18.04.19
✎
14:01
|
(5) во-первых, в чем проблема засунуть в ean13, во-вторых, в чем проблема применить старый как какашка мамонта code128, который тоже читают все сканеры и у которого нет ограничения на 13 символов?
|
|||
8
yzimin
18.04.19
✎
14:04
|
делаем блокировку, получаем последний номер, записываем, разблокируем.
|
|||
9
St-Anger
18.04.19
✎
14:05
|
(8) можно поподробнее?блокировку РС?
|
|||
10
yzimin
18.04.19
✎
14:09
|
(9) да пожалуйста
https://its.1c.ru/db/metod8dev#content:5839:hdoc |
|||
11
St-Anger
18.04.19
✎
14:13
|
Еще такой нюанс,штрихкод записывается до того, как номер документа будет известен (ПередЗаписью). Сделано это для того, чтобы можно было записать штрихкод в реквизит документа. Понимаю, что это немного неправильно, но так удобно просматривать штрихкоды (сразу его видно в документе).
Поэтому, лучше было бы исправить задвоение штрихкодов, а не переписывать весь алгоритм. |
|||
12
Darych
18.04.19
✎
14:14
|
РС ШК пофиг
|
|||
13
igork1966
18.04.19
✎
14:16
|
(11) Без блокировки не получится правильно получить следующий номер.
|
|||
14
Darych
18.04.19
✎
14:17
|
(13) а когда ты его собираешься блочить?
|
|||
15
igork1966
18.04.19
✎
14:18
|
(14) Эксклюзивная блокировка до чтения.
|
|||
16
Darych
18.04.19
✎
14:20
|
(15) беда...
|
|||
17
igork1966
18.04.19
✎
14:21
|
(15) только нужно наверное константу сделать как вариант, на нее ставить блокировку увеличивать и отпускать.
Только в таком варианте если документ не сохранят, а другой успеет записать следующий, будут дырки в нумерации |
|||
18
Darych
18.04.19
✎
14:25
|
(17) у них 2 мадам работают)).. истерика 1 обеспечена
|
|||
19
Йохохо
18.04.19
✎
14:28
|
(11) добавь передзаписью что если ЭтоНовый() То установитьссылкунового() установитьновыйномер() запилитьшк()
ссылкунового мб не надо |
|||
20
Darych
18.04.19
✎
14:30
|
(19) толку-то
|
|||
21
d4rkmesa
18.04.19
✎
14:35
|
(0) В УПП есть такой код, можно сделать аналогично:
УстановитьПривилегированныйРежим(Истина); НачатьТранзакцию(); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ЖурналСобытийЭД"); ЭлементБлокировки.УстановитьЗначение("ПрисоединенныйФайл", СсылкаНаЭД); Блокировка.Заблокировать(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЕСТЬNULL(МАКСИМУМ(ЖурналСобытийЭД.НомерЗаписи), 0) + 1 КАК НомерЗаписи |ИЗ | РегистрСведений.ЖурналСобытийЭД КАК ЖурналСобытийЭД |ГДЕ | ЖурналСобытийЭД.ПрисоединенныйФайл = &ПрисоединенныйФайл"; Запрос.УстановитьПараметр("ПрисоединенныйФайл", СсылкаНаЭД); НомерЗаписи = Запрос.Выполнить().Выгрузить()[0].НомерЗаписи; МенеджерЗаписи = РегистрыСведений.ЖурналСобытийЭД.СоздатьМенеджерЗаписи(); МенеджерЗаписи.ПрисоединенныйФайл = СсылкаНаЭД; МенеджерЗаписи.НомерЗаписи = НомерЗаписи; МенеджерЗаписи.ВладелецЭД = СсылкаНаЭД.ВладелецФайла; МенеджерЗаписи.СтатусЭД = СсылкаНаЭД.СтатусЭД; МенеджерЗаписи.Дата = ТекущаяДатаСеанса(); МенеджерЗаписи.Пользователь = ПараметрыСеанса.ТекущийПользователь; МенеджерЗаписи.Ответственный = СсылкаНаЭД.Ответственный; МенеджерЗаписи.Комментарий = СсылкаНаЭД.Описание; МенеджерЗаписи.Записать(); ЗафиксироватьТранзакцию(); |
|||
22
Garykom
гуру
18.04.19
✎
14:37
|
(0)(5) Ничего не напоминает Обжать GUID до 9 символов? ?
|
|||
23
St-Anger
18.04.19
✎
14:39
|
(21) Вот,это уже интересно))
|
|||
24
St-Anger
18.04.19
✎
14:46
|
(22) Я так и не понял, можно или нет? В обсуждении ответа не нашел.
|
|||
25
Йохохо
18.04.19
✎
14:47
|
(20) ну номер надо было, вот он номер, делай из него шк, пиши в реквизит
|
|||
26
Rema Dan
18.04.19
✎
15:01
|
(24) Вполне возможно. GUID ужимается до 20-ти символов по маске подходящей к code 128. Ещё +1 символ на префикс обозначающий тип документа. Я делал такое в прошлом году по мотивам этой статьи: http://ethicorum.ru/?p=161&lang=ru
|
|||
27
St-Anger
18.04.19
✎
15:06
|
(26) до 20 может,а мне нужно влезть в EAN13
|
|||
28
Rema Dan
18.04.19
✎
15:08
|
(27) Не нужно. Если поиск документов идёт по GUID, то ничего дополнительного в регистре сведений хранить не нужно, т.к. все документы в базе уже "проштрихкодированы".
|
|||
29
lodger
18.04.19
✎
15:09
|
(27) дался вам этот еан13. давно уже одномерные сканеры читают все подряд.
|
|||
30
lodger
18.04.19
✎
15:13
|
вы еще скажите, что одномерный штрихкод вы печатаете отдельно от самой ПФ на принтере этикеток.
|
|||
31
St-Anger
18.04.19
✎
15:14
|
(30) нет,штрихкод печатается с печатной формой
|
|||
32
lodger
18.04.19
✎
15:15
|
https://stackoverflow.com/questions/31696296/most-efficient-barcode-to-store-a-guid
пример прямой конвертации гуида в шк. |
|||
33
Darych
18.04.19
✎
15:16
|
(30) казалось бы причем здесь сабж?
|
|||
34
lodger
18.04.19
✎
15:16
|
но еще проще открыть какую-нибудь конфу с ШК для ПФ и скопировать там. УТ какой-нибудь или УНФ.
|
|||
35
St-Anger
18.04.19
✎
15:19
|
(34) да в том то и дело, что уже все настроено в ПФ под еан13. Подогнаны размеры. ПФ самописная, в принципе можно переделать, но хочется свести изменения к минимуму.
|
|||
36
Garykom
гуру
18.04.19
✎
15:26
|
(35) Ну так и в 12 символов тоже можно УИД документа успешно ужать.
|
|||
37
St-Anger
18.04.19
✎
15:29
|
(36) как?
|
|||
38
St-Anger
18.04.19
✎
15:30
|
И будет ли он уникальным?
|
|||
39
Garykom
гуру
18.04.19
✎
15:31
|
(38) От количества документов зависит
|
|||
40
shuhard
18.04.19
✎
15:31
|
(5)[в УПП 8.3 я не нашел]
открыть УТ 11 что-то мешает ? |
|||
41
Rema Dan
18.04.19
✎
15:35
|
(36) Тут же не просто до 12-ти символов. Тут до 12-ти символов, в которые умеет EAN13, а он вроде как умеет только в цифры. Т.е. сжатия без потерь не получиться.
(35) Если пренепременно нужен EAN13, то тут лучше забыть про сжатие GUID'ов и додумывать блокировки вокруг одновременных записей в регистр сведений. |
|||
42
Garykom
гуру
18.04.19
✎
15:39
|
(41) Пофиг и в 12 цифр можно, если кол-во документов за все время меньше и делаются они на одном сервере.
|
|||
43
St-Anger
18.04.19
✎
15:44
|
Решил проблему так:
Получаем номер УстановитьНовыйНомер() до записи документа. Формируем штрихкод из номера и времени создания, ну и форму еще включил (1-я или 2-я) Получается такой вид: НомерДокумента = Прав(СокрЛП(ДокОбъект.Номер),5); ДатаДокумента = Формат(ДокОбъект.Дата,"ДФ=ЧЧммсс"); ДокФорма = "0"; Если Найти(ДокОбъект.Номер,"-") > 0 Тогда ДокФорма = "1"; КонецЕсли; Если СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(НомерДокумента, Истина) Тогда Штрихкод = "2" + ДокФорма + НомерДокумента + ДатаДокумента; Если СтрДлина(Штрихкод) = 13 Тогда Возврат Штрихкод; КонецЕсли; КонецЕсли; |
|||
44
Garykom
гуру
18.04.19
✎
15:45
|
(42) "Можно ли вытащить время из гуида?" + добавляем нечто.
http://catalog.mista.ru/public/635159/ |
|||
45
St-Anger
18.04.19
✎
15:47
|
Считаю, что вероятность одинакового номера и времени создания (часы-минуты-секунды) ничтожно мала.
|
|||
46
St-Anger
18.04.19
✎
15:48
|
Даже с периодичностью номера документа - месяц.
|
|||
47
Йохохо
18.04.19
✎
16:04
|
(46) может вероятность изменения периодичности ничтожно мала? и можно бесполезных 6 символов времени потратить на yy и номер
и юзер френдли это наоборот ДатаДокумента + НомерДокумента, а лучше "190" + НомерДокумента |
|||
48
Rema Dan
18.04.19
✎
16:04
|
(44) Выглядит как-то рисковано копаться во внутренностях самих GUID'ов. 1С в любой момент что-нибудь тут поменяет и всё поедет. (45) Не стоит недооценивать 1С. Если дубль может быть, то стоит предусмотреть как это должен будет решать пользователь. Почему бы просто не добавить запрос с ДЛЯ ИЗМЕНЕНИЯ при получении последнего свободного штрихкода? Книга знаний: Ключевое слово ДЛЯ ИЗМЕНЕНИЯ
|
|||
49
Darych
18.04.19
✎
16:05
|
(47) вероятности, сука, такие.. 4 года в покер играл.. может пойти такой стрик)
|
|||
50
Йохохо
18.04.19
✎
16:06
|
кстати СтрДлина(Штрихкод) = 13 косяк, надо РаботаСТорговымОборудованием.КонтрольныйСимволEAN тринадцатым, а то придется сканеры программировать и всё переписывать
|
|||
51
Garykom
гуру
18.04.19
✎
16:13
|
(50) EAN уже давно стал GTIN из 14 цифр
|
|||
52
St-Anger
18.04.19
✎
16:23
|
(50) спасибо, добавил контрольный символ
|
|||
53
St-Anger
18.04.19
✎
16:28
|
(47) вероятность 100% - каждый месяц нумерация начинается заново. Если оставить только дату без времени + номер, то вероятность больше получить такую же комбинацию в следующих месяцах.
"190" + НомерДокумента каждый месяц будет задваиваться. |
|||
54
Darych
18.04.19
✎
16:31
|
(53) хэш и посоли по-своему)))))))))))
|
|||
55
St-Anger
18.04.19
✎
16:35
|
(54) и в банку закатать?)))
|
|||
56
St-Anger
18.04.19
✎
17:52
|
Я тут подумал, а процедура УстановитьНовыйНомер() не выдаст ли мне одинаковые номера при одновременном проведении?
|
|||
57
Йохохо
18.04.19
✎
18:03
|
(56) нет)
|
|||
58
Darych
18.04.19
✎
18:04
|
(56)эта точно не даст)
|
|||
59
St-Anger
18.04.19
✎
20:24
|
ну и отлично)
|
|||
60
Широкий
18.04.19
✎
22:53
|
Я делал по-другому. Тупо генерация случайного штрих-кода и поиск что он еще не занят
|
|||
61
Широкий
18.04.19
✎
22:53
|
От осмысленного номера отказался ибо тупик
|
|||
62
Garykom
гуру
18.04.19
✎
23:00
|
(60) Какова вероятность что два случайных ШК совпадут при одновременной записи например 100 документов?
В базе этого ШК еще нет, сто последовательных (до момента записи) проверок ничего не дадут. Один фуй надо РС блокировать с момента чтения-проверки до записи. |
|||
63
Garykom
гуру
18.04.19
✎
23:05
|
Лично я тупо делаю константу "ПоследнийНомерШК" и использую ее.
С установкой на нее блокировки, тогда вторая блокировка исключительная не пройдет. Или банальной проверкой кто последний писал если к номеру добавить еще идентификатор сеанса. Тогда можно проверить мы ли записали последний номер или другой сеанс. Если не мы то берем новый номер и заново пробуем его +1 и записать со своим идентификатором. |
|||
64
Garykom
гуру
18.04.19
✎
23:08
|
(63)+ Самый плюс этого механизма что можно резервировать себе ШК целыми блоками.
Например в обработке которая документы или другие объекты разом загружает/создает, если известно их количество. |
|||
65
Сияющий в темноте
18.04.19
✎
23:22
|
В чем проблема блокировку на регистр перед плюс 1 поставить,а при записи проверять,а нет ли еще таких,чтобы не перезатирать?
та по сути,сделайте справочник,где ссылка на документ,а код будет для штрихкода использоваться,неуникальность номера только при обмене можно словить. |
|||
66
St-Anger
19.04.19
✎
09:15
|
На самом деле проблема глобальнее, чем я написал. У нас РИБ, и штрихкоды создаются на разные виды документов.Заказы записываются сразу в двух базах, поэтому тут необходимо привязыватья к реквизитам документа.
|
|||
67
Garykom
гуру
19.04.19
✎
09:30
|
(66) Префиксы ШК от префиксов РИБа же
|
|||
68
Йохохо
19.04.19
✎
09:30
|
(66) к префиксу, Ваш Кэп.
|
|||
69
Йохохо
19.04.19
✎
09:31
|
кек
Прав(Организация.Код,2) |
|||
70
Garykom
гуру
19.04.19
✎
09:32
|
(69) Организация может быть и одна а базы в РИБе разные
|
|||
71
St-Anger
19.04.19
✎
10:03
|
Организация одна,префиксы буквенные
|
|||
72
St-Anger
19.04.19
✎
10:07
|
Префиксы РИБ я имею ввиду
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |