Имя: Пароль:
1C
1С v8
Создать уникальный идентификатор для документа в виде строки из 8 или 9 символов.
,
0 new_hope
 
16.11.18
13:39
Прошу совет.

Имею 2 разных документа в разных абсолютно базах.
Есть необходимость, для документа создать уникальный идентификатор длинной не более чем 9 символов, что-бы можно было проследить свзяь между этими документами. (Структуру базы менять не особенно удачно в моем случае - решил использовать готовый неиспользуемый реквизит из 9-ти символов)

Или есть способы умнее? Какие?

Может я дурость выдумываю и можно еще какимто образом задать связь?
1 exwill
 
16.11.18
13:41
(0) А номер+дата разве не уникальны?
2 Timon1405
 
16.11.18
13:41
А= Прав(Строка(Новый УникальныйИдентификатор),9);
3 PR
 
16.11.18
13:43
(0) Не идиотствуй
У меня вот в Почте России была необходимость сократить ГУИД, потому что его нужно было печатать на конверте и он должен уместиться в окно на конверте определенной ширины
А тут высосанная из пальца пурга
Используй ГУИД и делай новый реквизит, возможно доп, а не конфигураторский
4 PR
 
16.11.18
13:44
(2) Рукалицо
5 exwill
 
16.11.18
13:45
(2) Дубли будут.
6 exwill
 
16.11.18
13:46
(0) Фактическая длина номера документа какая?
7 Garykom
 
гуру
16.11.18
13:47
(0) Этот реквизит есть в обеих базах или только в одной?

Если только в одной то придумывай Хеш-функцию
8 new_hope
 
16.11.18
14:06
(6) Номер документа могут поменять вручную, как и дату... Реквизит в 9-ть символов есть только в одной базе, в которой будут создаваться документы, и туда будут присваиваться "уникальное значение". То-есть эти уникальные значения в первой базе будут создаваться на лету каждый раз, и каждый раз они должны быть ФИКСИРОВАННО-уникальными
9 new_hope
 
16.11.18
14:09
(3) Я это уже обдумал. Очень затруднительно сделать новый реквизит по некоторым причинам. Пока ищу вариант с имеющимся реквизитом.

Но это как крайний вариант - новый реквизит.

Я так понимаю, GUID - он всегда фиксированный и уникальный, пока есть документ в базе (в любом состоянии реквизитов, помечен на удаление или проведен?)
10 exwill
 
16.11.18
14:10
(8) 8 символов номера + 1 символ для года. Вот тебе и уникальность. Если номер документа длиннее 8 - задай префикс.
11 new_hope
 
16.11.18
14:13
(10) Да, спасибо. Так уже работает. Я именно подобным образом и сделал. НО - беспокоит, что могут вручную изменить номер документа. И это вызвало у меня этот вопрос.
А так как документ связан с платежом денег - то меня это вдвойне озадачило
12 new_hope
 
16.11.18
14:15
А вопрос - минимизировать ошибку..

То-есть самый верный вариант - использовать GUID и новый реквизит.

Ведь нельзя присвоить GUID документа одной базы - Новому документу другой базы в момент его создания?
13 exwill
 
16.11.18
14:15
(11) А зачем тебе этот реквизит вообще? Номер в документе хранится, дата тоже.
14 Йохохо
 
16.11.18
14:17
(9) на гуид соль, имя базы например, sha16 и прав 9. Кусок хеша тоже хеш
15 АгентБезопасной Нацио
 
16.11.18
14:18
(1) ты не поверишь...
16 new_hope
 
16.11.18
14:19
(13) Проверять, что в базе №2 уже существуе документ, который соответствует документу в Базе №1. Если в базе №2 такого документа нет - создать его, но создать только один!!! раз.
17 new_hope
 
16.11.18
14:19
(14) Да... сейчас почитаю что и как
18 PR
 
16.11.18
14:29
(11) Нет слов
Беги оттуда, пока у них не стрельнула твоя говноподелка
Или делай ГУИД, хоть на допсвойствах, но только не строй здание из говна и палок
Стрельнет же, голову оторвут и собакам выкинут и будут сто раз правы, таких говноподелочников так и надо учить, гнать отовсюду ссаными тряпками
19 АгентБезопасной Нацио
 
16.11.18
14:30
а что мешает хранить там уникальный порядковый номер объекта в системе? присавивая последовательно при записи.
и что мешает сделать соотвествие (регистр сведений) номер - ГУИД дока?
а напрямую, подъемом основания системы счисления, до 9 байт штатный ГУИД не уменьшить. Если только до юникодной 8-символьной строки (16 байт)
20 PR
 
16.11.18
14:30
(12) Можно, но не нужно
Хотя по сравнению с твоей свистоперделкой — даже этот вариант просто эталон качества, надежности и инженерной мысли
21 palsergeich
 
16.11.18
14:31
(1) До первого Обменданными.Загрузка = Истина
22 palsergeich
 
16.11.18
14:35
Есть решение, но оно не самое красивое:
Создаете пустой справочник.
Длина номера = 9
И пользуетесь нумератором справочника....
23 palsergeich
 
16.11.18
14:37
(22) Ну и делаете подписку на событие в любой транзакционной процедуре, где создаете новый элемент справочника, и его код используете как уникальный нумератор.
(14) не совсем
24 1Сергей
 
16.11.18
14:38
Если это восьмёрка, то лучше РС, а не справочник
25 palsergeich
 
16.11.18
14:39
(24) В РС надо будет получать текущее значение, ставить упр блокировки и делать запись.
Далеко не факт что будет быстрее.
А тут менеджер клатера Вам дает уникальный код. Платформенная проверка на дубли.
26 АгентБезопасной Нацио
 
16.11.18
14:40
(25) заодно в справочник писать ссылку на док. "чтоб два раза не вставать"
27 new_hope
 
16.11.18
14:41
Я все понял. Буду делать реквизит, с длинной 32 символа, и туда писать GUID из первой базы. Это самый верный и 100% вариант.
28 palsergeich
 
16.11.18
14:41
(26) Что бы 2 раза не вставить - только при создании нового и в транзакции. Все ок будет.
29 palsergeich
 
16.11.18
14:43
(27) На уровне документации гарантируется только то что в одной таблице ссылочных данных не может быть 2 записи с одинм ГУИД.
То что ГУИД TimeBased и то что процедура Вам 2 раза не выплюнет одно значение - не гарантируется
30 Garykom
 
гуру
16.11.18
14:43
Если кроме как для обмена это нахрен не надо то я бы выкинул пары УИД-УИД во внешнюю базу или просто в отдельный регистр/справочник в одну из баз.

А еще лучше при обмене создавать документы с тем же УИД для парных доков ))
31 palsergeich
 
16.11.18
14:44
(30) Поздравляю, Вы изобрели MDM
32 АгентБезопасной Нацио
 
16.11.18
14:44
(28) "не вставАть".
чтоб по "микрогуиду" сразу найти документ.
33 palsergeich
 
16.11.18
14:46
(32) То что будет дальше меня мало интересует - архитектурное решение которое будет удовлетворять задаче я предложил, дальше мне она не интересна
34 АгентБезопасной Нацио
 
16.11.18
14:46
(33)ага.. "я стратегией занимаюсь"©
35 new_hope
 
16.11.18
14:47
(29) Так мне нужно GUID уже готового документа. Он может поменяться с течениев времени в пределах одной базы?
36 palsergeich
 
16.11.18
14:47
(35) Если ну очень захотеть - то может
37 palsergeich
 
16.11.18
14:48
При нормальном развитии событий - нет
38 1Сергей
 
16.11.18
14:48
(35) нет
39 new_hope
 
16.11.18
14:49
(36) (37) Значит это то, что мне нужно. Если при нормальной работе - это константа - то это то,что мне надо!


(38) Спасибо!
40 palsergeich
 
16.11.18
14:50
(38) Я залезу в SQL и поменяю.
По этому и говорю, что теоретически - возможно, но это уже не нормальный сценарий
41 1Сергей
 
16.11.18
14:51
(39) но, помни, что запросом уид не достать
42 Seriy_Volk
 
16.11.18
14:53
(22) при высокой нагрузке платформа легко создаст два элемента справочника с одинаковыми кодами или два документа с одинаковыми номерами. Проверено на MS SQL + платформа 8.3.10.2252. Из за этого создание нужного уникального идентификатора вынесли на уровень СУБД.
43 new_hope
 
16.11.18
14:53
(41) ... О... так я его по ссылке определяю как: XMLСтрока(Док.Ссылка)
44 youalex
 
16.11.18
14:54
(40) это будет уже другой документ
45 Йохохо
 
16.11.18
14:55
(39) ты же не изобрел РС СоответствияОбъектовИнформационныхБаз?
46 palsergeich
 
16.11.18
14:56
(42) Это как правило когда rmmanager у плохо.
Такие случаи надо исследовать.
Из того что видел я - какой нибудь г...но отчет без отборов запускаешь, но там не только нумератор летит.
47 new_hope
 
16.11.18
15:00
(45) Нет
48 Seriy_Volk
 
16.11.18
15:01
(46) я к тому, что данная ситуация не является чем то фантастическим и при активном внесении данных в один и тот же объект со многих рабочих мест рано или поздно выстрелит.
49 palsergeich
 
16.11.18
15:03
(48) По крайней мере это мониторится простейшим запросом.
Выбрать
Сумма(Ссылка),
Код
Из Справочник.ИмяСправочника
СгрпуппироватьПо
Код
Имеющие Сумма(Ссылка)>1
50 palsergeich
 
16.11.18
15:04
Но при нормальной работе сервера 1с такого быть не должно. Если эта ситуация есть - то есть проблемы которые надо искать и устранять.
51 palsergeich
 
16.11.18
15:05
Выбрать
Количество(Ссылка),
Код
Из Справочник.ИмяСправочника
СгрпуппироватьПо
Код
Имеющие Сумма(Ссылка)>1
Конечно же количество)))
52 palsergeich
 
16.11.18
15:05
Выбрать
Количество(Ссылка),
Код
Из Справочник.ИмяСправочника
СгрпуппироватьПо
Код
Имеющие Количество(Ссылка)>1

Тьфу)
53 Seriy_Volk
 
16.11.18
15:07
(49) зачем запускать в работу инструмент, требующий постоянного контроля, если можно использовать штатные механизмы СУБД для генерации уникальных значений?
54 palsergeich
 
16.11.18
15:09
(53) Вопрос больше риторический.
Это всего лишь один из вариантов.
А зачем использовать лагучее 1с если есть что то.
55 palsergeich
 
16.11.18
15:17
я делал эту задачу как и на справочниках так и на регистрах.
250+ активных юзеров, единственное что за сервером следили. Проблем не было.
Но действительно коллизии возможны, если хочется железобетона - или РС с упр блокировками или SQL
56 PR
 
16.11.18
15:45
(45) О, прозвучала дельная мысль, если нельзя делать новый реквизит :))
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан