Имя: Пароль:
1C
 
Уникальное значение реквизита. Методы формирования.
,
0 CAPITALIST
 
02.02.17
09:02
Необходимо создать альтернативный номер документа, уникальный за весь период работы. Стандартный номер может быть не уникальный даже в рамках года - каприз бухов.
Добавил реквизит УникальныйНомер числовой. Написал функцию получения номера. Работает так:
Берет запросом максимальное значение УникальныйНомер и добавляет 1.
УникальныйНомер присваивается ПередЗаписью в модуле объекта для новых документов.
Теперь такая ситуация:
Одновременно записываются два новых документа. Одновременно срабатывает ПередЗаписью и функция получения уникального номера возвращяет для них одно и то же значение.
Как быть? Возможно кому-то приходилось решать такую задачу? Какой может быть другой алгоритм получения уникального значения?
1 Serg_1960
 
02.02.17
09:15
"Другой алгоритм" - чем стандартный механизм платформы, алгоритмы проверенные временем, Вас не устраивает? :)

"Левый" справочник (код, наименование, ссылка на документ) - вот и готов источник "альтернативного номера документа"(цы). Дальше объяснять?
2 FIXXXL
 
02.02.17
09:15
(0) нумератор прикрутить?
РС и блокировку на него на время получения номера?
3 Рэйв
 
02.02.17
09:16
Вот держи и не жалуйся:-)
Уникальнее некуда
УникальныйНомер =Строка(Новый УникальныйИдентификатор);
4 FIXXXL
 
02.02.17
09:16
и зачем еще такой номер нужен? мож УИД проще писать в реквизит?
5 aka AMIGO
 
02.02.17
09:16
(1) В одно и то-же место справочника полезут оба документа.
6 Базис
 
naïve
02.02.17
09:19
Хеш, двухэтапная запись с контролем уникальности на каждом этапе, просто длинная случайная строка, GUID из нескольких инкрементных полей.
7 Serg_1960
 
02.02.17
09:19
(5) Да хоть десять и все сразу. Автонумерация не боится многопользовательского режима :))

Кстати: придумывая алгоритмы, некоторые авторы "забывают" об "Отказ = Истина;" и не продумывают что и как делать во время транзакций и откате её.
8 KishMish
 
02.02.17
09:21
(0) можно использовать совокупность год+номер - гарантировано
уникальная комбинация
9 Serg_1960
 
02.02.17
09:22
Почитал советы... хмм.. зачем плодить сущности? Тогда уж сам уникальный номер документа и использовать.
10 Serg_1960
 
02.02.17
09:24
(8) "Стандартный номер может быть не уникальный даже в рамках года - каприз бухов."(тс)
11 Мимохожий Однако
 
02.02.17
09:28
(0) И рыбку съесть, и .. не получится. Не надо отключать уникальность номера. Заведи им дополнительный и пусть пишут туда, что хотят. ИМХО, не всю правду говоришь.
12 Serg_1960
 
02.02.17
09:29
*(1) PS: я не придумывал ничего нового - адаптация к месту алгоритма РАУЗ (связь "запись регистра" <=> "запись справочника").
13 Serg_1960
 
02.02.17
09:55
(0) "Мой гений дарит вам"(цы) гениальный алгоритм: из уникального идентификатора документа выделяется время создания ссылки, которое используется для генерации "сквозного" номера.
14 CAPITALIST
 
02.02.17
11:16
(1) Не устраивает бухов. Делать в качестве УникальногоНомера ссылку на справочник и каждый раз создавать элемент? Лишние транзакции.
(2) Разве есть возможность прикрутить нумератор к реквизиту? Нумератор прикручивается только к стандартному Номеру.
(3) Нет, номер должен быть читабельный, чтобы люди могли работать. Плюс с него генерится штрихкод
15 FIXXXL
 
02.02.17
12:10
(14) ну тогда закрывай платформенный номер от изменений, транслируй его в реквизит НомерБух, который можно менять
16 FIXXXL
 
02.02.17
12:11
(15) кстати, в процедуре документа ПриУстановкеНовогоНомера есть возможность считать устанавливаемый платформой номер?
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.