Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Штрихкодирование документов. Дубли штрихкодов.

Штрихкодирование документов. Дубли штрихкодов.
Я
   St-Anger
 
18.04.19 - 12:55
Добрый день.
В подписке на событие документов ПередЗаписью записывается штрихкод в РС Штрихкоды.
Формируется шк путем поиска последнего + 1.
Документы формируются несколькими операторами. И если одновременно (разница может быть до 2х секунды) записываются документы, то формируются одинаковые штрихкоды.
Как этого можно избежать?
 
 
   Йохохо
 
1 - 18.04.19 - 12:57
формировать ШК из номера документа
   Черный маклер
 
2 - 18.04.19 - 12:59
(0) ускорить ...путем поиска последнего + 1...
   Darych
 
3 - 18.04.19 - 12:59
Функцию напиши из номера/даты/времени создания - веселись)
   shuhard
 
4 - 18.04.19 - 12:59
(0) в типовых это уже сделано через номер, в чем смысл дублирования БСП ?
   St-Anger
 
5 - 18.04.19 - 13:56
Номер/дата/время создания хорошо, но хотелось бы засунуть в EAN13 

(4) в УПП 8.3 я не нашел
   Darych
 
6 - 18.04.19 - 14:00
(5) ну я же не сказал, что бери и лей туда это))))))))) ... я на выбор)
   NorthWind
 
7 - 18.04.19 - 14:01
(5) во-первых, в чем проблема засунуть в ean13, во-вторых, в чем проблема применить старый как какашка мамонта code128, который тоже читают все сканеры и у которого нет ограничения на 13 символов?
   yzimin
 
8 - 18.04.19 - 14:04
делаем блокировку, получаем последний номер, записываем, разблокируем.
   St-Anger
 
9 - 18.04.19 - 14:05
(8) можно поподробнее?блокировку РС?
   yzimin
 
10 - 18.04.19 - 14:09
   St-Anger
 
11 - 18.04.19 - 14:13
Еще такой нюанс,штрихкод записывается до того, как номер документа будет известен (ПередЗаписью). Сделано это для того, чтобы можно было записать штрихкод в реквизит документа. Понимаю, что это немного неправильно, но так удобно просматривать штрихкоды (сразу его видно в документе).
Поэтому, лучше было бы исправить задвоение штрихкодов, а не переписывать весь алгоритм.
   Darych
 
12 - 18.04.19 - 14:14
РС ШК пофиг
   igork1966
 
13 - 18.04.19 - 14:16
(11) Без блокировки не получится правильно получить следующий номер.
   Darych
 
14 - 18.04.19 - 14:17
(13) а когда ты его собираешься блочить?
   igork1966
 
15 - 18.04.19 - 14:18
(14) Эксклюзивная блокировка до чтения.
   Darych
 
16 - 18.04.19 - 14:20
(15) беда...
   igork1966
 
17 - 18.04.19 - 14:21
(15) только нужно наверное константу сделать как вариант, на нее ставить блокировку увеличивать и отпускать.
Только в таком варианте если документ не сохранят, а другой успеет записать следующий, будут дырки в нумерации
   Darych
 
18 - 18.04.19 - 14:25
(17) у них 2 мадам работают)).. истерика 1 обеспечена
   Йохохо
 
19 - 18.04.19 - 14:28
(11) добавь передзаписью что если ЭтоНовый() То установитьссылкунового() установитьновыйномер() запилитьшк()
ссылкунового мб не надо
   Darych
 
20 - 18.04.19 - 14:30
(19) толку-то
   d4rkmesa
 
21 - 18.04.19 - 14:35
(0) В УПП есть такой код, можно сделать аналогично:

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

Один фуй надо РС блокировать с момента чтения-проверки до записи.
   Garykom
 
63 - 18.04.19 - 23:05
Лично я тупо делаю константу "ПоследнийНомерШК" и использую ее.

С установкой на нее блокировки, тогда вторая блокировка исключительная не пройдет.

Или банальной проверкой кто последний писал если к номеру добавить еще идентификатор сеанса.
Тогда можно проверить мы ли записали последний номер или другой сеанс.

Если не мы то берем новый номер и заново пробуем его +1 и записать со своим идентификатором.
   Garykom
 
64 - 18.04.19 - 23:08
(63)+ Самый плюс этого механизма что можно резервировать себе ШК целыми блоками.
Например в обработке которая документы или другие объекты разом загружает/создает, если известно их количество.
   Сияющий в темноте
 
65 - 18.04.19 - 23:22
В чем проблема блокировку на регистр перед плюс 1 поставить,а при записи проверять,а нет ли еще таких,чтобы не перезатирать?

та по сути,сделайте справочник,где ссылка на документ,а код будет для штрихкода использоваться,неуникальность номера только при обмене можно словить.
   St-Anger
 
66 - 19.04.19 - 09:15
На самом деле проблема глобальнее, чем я написал. У нас РИБ, и штрихкоды создаются на разные виды документов.Заказы записываются сразу в двух базах, поэтому тут необходимо привязыватья к реквизитам документа.
 
 Рекламное место пустует
   Garykom
 
67 - 19.04.19 - 09:30
(66) Префиксы ШК от префиксов РИБа же
   Йохохо
 
68 - 19.04.19 - 09:30
(66) к префиксу, Ваш Кэп.
   Йохохо
 
69 - 19.04.19 - 09:31
кек
Прав(Организация.Код,2)
   Garykom
 
70 - 19.04.19 - 09:32
(69) Организация может быть и одна а базы в РИБе разные
   St-Anger
 
71 - 19.04.19 - 10:03
Организация одна,префиксы буквенные
   St-Anger
 
72 - 19.04.19 - 10:07
Префиксы РИБ я имею ввиду


Список тем форума
Рекламное место пустует  Рекламное место пустует
Ошибка? Это не ошибка, это системная функция.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.