|
Диапазон идентификаторов (GUID) элементов справочника | ☑ | ||
---|---|---|---|---|
0
IKSparrow
28.06.09
✎
19:57
|
В ТЗ задачи сказано "обеспечить отбор элементов справочника где уникальные идентификаторы входят в диапазон указанный пользователем". Чего то не вкурю - как такой отбор реализовать (на примере справочника контрагенты)? Это ж не числовое значение и не диапазон дат.
|
|||
1
а лю 427
28.06.09
✎
20:02
|
гуиды элементов справочника, даже у созданных последовательно друг за другом элементов, в 8-ке рядом не стоят и отбирать их по диапазону смысла нет.
P.S. какой урод составил такое задание |
|||
2
ДенисЧ
28.06.09
✎
20:02
|
фигня какая-то. гуиды не составляют последовательностей...
|
|||
3
IKSparrow
28.06.09
✎
20:05
|
(1)
(2) Вот я тоже так подумал. Но на всякий случай решил уточнить у коллективного разума, типа вдруг чего забыл или не знаю. |
|||
4
H A D G E H O G s
28.06.09
✎
20:06
|
(1) Уот дятл.
Еще как составляют. Если контры последовательно вводились, и только они.. В течении одного сеанса. |
|||
5
H A D G E H O G s
28.06.09
✎
20:07
|
Запрос=Новый Запрос;
Запрос.Текст= "ВЫБРАТЬ | Контрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Ссылка > &Низ | И Контрагенты.Ссылка < &Верх"; Запрос.УстановитьПараметр("Низ",Справочники.Контрагенты.ПолучитьСсылку(УИДНиз)); Запрос.УстановитьПараметр("Верх",Справочники.Контрагенты.ПолучитьСсылку(УИДВерх)); Запрос.Выполнить().Выгрузить().ВыбратьСтроку(); |
|||
6
H A D G E H O G s
28.06.09
✎
20:08
|
УниНиз -
УникальныйИдентификатор() не Строка!!! |
|||
7
IKSparrow
28.06.09
✎
20:08
|
(5) Век живи - век учись. Спасибо.
|
|||
8
Garkin
28.06.09
✎
20:08
|
(0) GUID - это уникальный идентификатор
Только обязательно ли "уникальный идентификатор" - это GUID ? |
|||
9
H A D G E H O G s
28.06.09
✎
20:08
|
(1) Пит, я конечно подозревал..
Но Вот и подозрения оправдались. |
|||
10
H A D G E H O G s
28.06.09
✎
20:09
|
Вообще, тема формирования ИДа из ГУИДа в восьмерке - страшный баян.
Питу - в поиск. |
|||
11
IKSparrow
28.06.09
✎
20:10
|
(8) Как в глаза бросилась эта строчка в ТЗ так сразу и уточнил - сказали, что да именно уникальный идентификатор. Только учитывая пример в (6) надо как-то такой выбор реализовать в форме верха и низа.
|
|||
12
Garkin
28.06.09
✎
20:11
|
(11) сказали "уникальный идентификатор" или "GUID" ?
|
|||
13
IKSparrow
28.06.09
✎
20:12
|
(12) Уникальный идентификатор
|
|||
14
H A D G E H O G s
28.06.09
✎
20:13
|
(11) Пеши их строками в поле ввода. В формате xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx
Потом УидНиз=Новый УникальныйИдентификатор(УидНизСтрокой); |
|||
15
а лю 427
28.06.09
✎
20:13
|
(4) и кто это придумал? тогда это не гуиды, а хрен знает что....
|
|||
16
H A D G E H O G s
28.06.09
✎
20:14
|
(15) Это придумала 1С.
Зачем - не скажу. Еще 1С придумала отображать УИДы не так, как она их хранит. Зачем - не скажу. |
|||
17
а лю 427
28.06.09
✎
20:15
|
(11) наверное, писали ТЗ, основываясь на знании семерки. В семерке это просто нарастающий номер.
|
|||
18
Пеппи
28.06.09
✎
20:15
|
)
|
|||
19
H A D G E H O G s
28.06.09
✎
20:16
|
(15) Это УИДы, сформированные на основе GUID-ов.
CoCreateGUID() там наверное точно есть. Можно конечно проверить - написав ВК и просплайсить CoCreateGUID(), но лень. |
|||
20
Pashkaa
28.06.09
✎
20:16
|
(17) А в 8-ке это нарастающая дата + еще какая то хрень
|
|||
21
а лю 427
28.06.09
✎
20:16
|
(15) тогда особого смысла в использовании этих идентификаторов нет, кроме как идентификации элемента и для ссылок...
|
|||
22
IKSparrow
28.06.09
✎
20:16
|
(16) Моисей завещал: "Надо делиться!" :)
(17) Вполне возможно кстати, эта идея не пришла мне в голову. А в организации до фига семёрки. Может под её влиянием и писали. Восьмёрка тока-тока внедряется. |
|||
23
Garkin
28.06.09
✎
20:16
|
(13) Уточни, что у справочника в ТЗ является уникальным идентификатором? Ставлю рупль что это не GUID.
|
|||
24
а лю 427
28.06.09
✎
20:17
|
(20) нарастающая дата + ХХХХХ ну это еще икнется
|
|||
25
Pashkaa
28.06.09
✎
20:17
|
(24) ты о чём?
|
|||
26
IKSparrow
28.06.09
✎
20:18
|
(24) Ага, нарастающая дата плюс последовательность сгенерированная по счётчику случайных чисел с диапазоном на сессию :)
|
|||
27
а лю 427
28.06.09
✎
20:19
|
ладно - бум знать, что идентификатор смысловой информации не несет...
(25) да так... просто кое какие вещи вспомнил.... из теории |
|||
28
Pashkaa
28.06.09
✎
20:19
|
(23) > Уточни, что у справочника в ТЗ является уникальным идентификатором?
нет такого понятия Уникальный идентификатор ТЗ. Есть уникальный идентификатор объекта который хранит база |
|||
29
а лю 427
28.06.09
✎
20:20
|
ладно - просвещайте до конца...
как отличаются идентификаторы разных справочников? как отличаются идентификаторы при миграции? |
|||
30
IKSparrow
28.06.09
✎
20:21
|
(23) Уточню только в понедельник :(
|
|||
31
Garkin
28.06.09
✎
20:22
|
(28) ТЗ насколько я понял (0) - это тех. задание.
и понятия составителя ТЗ не обязательно совпадают с твоими понятиями :) |
|||
32
Pashkaa
28.06.09
✎
20:23
|
(29) > как отличаются идентификаторы разных справочников?
ни как, по крайней мере я ни разу не видел что бы из GUID можно было установить объект какого справочника срывается за GUID. Максимум дату создания с точностью до суток, при условии что GUID для объекта не задавался кодом в модуле. > как отличаются идентификаторы при миграции? о какой миграции идёт речь? |
|||
33
а лю 427
28.06.09
✎
20:25
|
(32) когда объекты мигрируют в другую распределенную базу....
|
|||
34
Pashkaa
28.06.09
✎
20:26
|
(31) в задании нет ни какой двусмысленности. Единственно не понятно какой практический смысл несёт задание. Откуда пользователь может знать GUID объеков и зачем вообще ему это.
|
|||
35
H A D G E H O G s
28.06.09
✎
20:27
|
Пит ваще не в теме.
В основе "типового" GUID-а - дата (до миллисекунд)+ MAC-адрес+ алгоритм (обратимый) преобразования. Потом на Мелкософт наехали - типа MAC можно из ГУИда экстрагировать. Появился MAC-озаменитель. 1С при начале работы берет и генерит GUID. При записи нового объекта записывает этот объект с этом ГУИД-ом. Дальше он инкрементирует GUID. В области времени. ВСЁ! |
|||
36
H A D G E H O G s
28.06.09
✎
20:28
|
(33) Мигрирует. УИДы- сохраняются
|
|||
37
Pashkaa
28.06.09
✎
20:28
|
(33) Если база распределённая GUID одних и тех же объектов в разных базах идентичны.
Если выгрузка такая как УТ в БП или иные, то там есть регистр в котором настраивается соответствие объектов двух баз. |
|||
38
H A D G E H O G s
28.06.09
✎
20:28
|
УИДы распределенных баз - одинаковы
|
|||
39
ДенисЧ
28.06.09
✎
20:28
|
(35) Ежик, ты, наверное, не в курсе, но МС от маков в гуидах отказалась давно.
|
|||
40
IKSparrow
28.06.09
✎
20:28
|
(34) Меня посетила шальная мысль, что может как-то получить полный их список этих ГУИДов в рамках справочника, отсортировать по возрастанию и пользователю в двух выпадающих списках предоставить возможность указания диапазона.
|
|||
41
H A D G E H O G s
28.06.09
✎
20:29
|
(39) Я те там и написал
|
|||
42
Pashkaa
28.06.09
✎
20:30
|
(38) :) ни кто и не спорит.
> а - дата (до миллисекунд) А вот на счет этого. У тебя есть алгоритм преобразования? Т.к. тот который есть у меня я проверял и он получает дату с точностью только до суток, дальше время получается какое попало :( |
|||
43
а лю 427
28.06.09
✎
20:31
|
как они могут быть идентичны?
В базе 1 создали контрагента А В базе 2 создали контрагента Б миграция из 1 в 2. Понятно, если в 2 нет идентификатора А, его можно использовать. А если есть? "Если выгрузка такая как УТ в БП или иные, то там есть регистр в котором настраивается соответствие объектов двух баз" ну, идея древней г а в н а мамонта... При большом числе баз и большом количестве эл-тов размеры неслабые получаются. Таскать все соответсвия для всех баз... |
|||
44
Pashkaa
28.06.09
✎
20:32
|
(40) Да можно и так сделать, но ты мне скажи, что пользователь может ассоциировать с GUID? Ну есть отбор по характеристикам я понимаю (желный, синий, красный) то какой физический смысл давать пользователю GUID.
|
|||
45
H A D G E H O G s
28.06.09
✎
20:32
|
(40)
Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | Контрагенты.Ссылка КАК Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты | |УПОРЯДОЧИТЬ ПО | Ссылка"; Список=Новый СписокЗначений; Выборка=Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Список.Добавить(Строка(Выборка.Ссылка.УникальныйИдентификатор())); КонецЦикла; |
|||
46
H A D G E H O G s
28.06.09
✎
20:33
|
(43)
<<как они могут быть идентичны? В базе 1 создали контрагента А В базе 2 создали контрагента Б миграция из 1 в 2. Понятно, если в 2 нет идентификатора А, его можно использовать. А если есть? >> Я в шоке!!! |
|||
47
Garkin
28.06.09
✎
20:33
|
(31) В задании двусмысленности нет. Это типичное горе от ума. Постановщик ТЗ скорее всего и слова такого не знает "GUID"
|
|||
48
H A D G E H O G s
28.06.09
✎
20:34
|
Ладно, вы тут порассуждайте.
Явось Пит в поиск сходит. А я пойду, некогда мне. P.S. Тема терлась несколько раз. В Поиск!!! |
|||
49
Pashkaa
28.06.09
✎
20:34
|
(43) "как они могут быть идентичны?
В базе 1 создали контрагента А В базе 2 создали контрагента Б миграция из 1 в 2. Понятно, если в 2 нет идентификатора А, его можно использовать. А если есть?" +1 я тоже. Вероятность создания одинаковых идентификаторах уже обсуждалась, ветку не найду. Она конечно есть но была менее 1 миллиардной. |
|||
50
а лю 427
28.06.09
✎
20:36
|
(46) в шоке? Тогда убейся ап с т е н у ....
P.S. в описанном алгоритме создания идентов теоретически можно создать одинаковые. Пусть с вероятностью одна стомиллионная - но учитывая большое количество объектов - это когда то произвойдет. И тогда два разных объекта в разных базах будут неразличимы при обмене. Хрен найдешь эту ошибку.... |
|||
51
IKSparrow
28.06.09
✎
20:37
|
(49) Цитата: "Шанс генерации двух одинаковых GUIDs ничтожно мал. Подсчитано, что используемый сейчас алгоритм генерации GUID начнет выдавать повторяющиеся значения в 3400 году."
|
|||
52
а лю 427
28.06.09
✎
20:37
|
даже если одна миллиардная... она не нулевая....
|
|||
53
Pashkaa
28.06.09
✎
20:37
|
(47) ну почему же составитель не знает что такое GUID
"УникальныйИдентификатор (UUID) Конструкторы: Из строки Описание: Предназначен для создания и хранения глобального уникального идентификатора GUID. Возможен обмен с сервером. XML-сериализация. Поддержка отображения в XDTO; пространство имен: {http://v8.1c.ru/8.1/data/core}. Имя типа XDTO: UUID." |
|||
54
а лю 427
28.06.09
✎
20:38
|
(51) не путай - это написано про ГУИДы виндов... Здесь - другой алгоритм...
|
|||
55
Pashkaa
28.06.09
✎
20:39
|
(52) Не нулевая. Но даже самый навороченный генератор не может обеспечить 100% уникальности. Лишь отдельные платы которые используют фотонные элементы в своей схеме могут генерировать уникальные числа с великой долей вероятности не совпадения.
|
|||
56
H A D G E H O G s
28.06.09
✎
20:40
|
(55) *** заинтересовался фотонными элементами.
|
|||
57
Garkin
28.06.09
✎
20:42
|
(53) Ждем понедельника.
|
|||
58
а лю 427
28.06.09
✎
20:44
|
(55) отдельный генератор не сможет. А вот если запустишь параллельно 50 тыс генераторов (или сколько там восьмерок продано) - вероятность события резко повысится...
|
|||
59
Immortal
28.06.09
✎
20:47
|
могу питу сказать,что вероятность гораздо больше стомиллионной. так как вопросы дублей при РИБ по гуидам уже обсуждались.
|
|||
60
Лефмихалыч
28.06.09
✎
20:48
|
(0) пользователей, которые моглы бы врукопашную задать диапазон GUIDов, в природе не существует. постановщик решил поразить тебя невдолбенностью глубины своих знаний и жидко обделался.
|
|||
61
Pashkaa
28.06.09
✎
20:50
|
Так что если автоматизируем стратегически важные объекты нашей Родины, то надо переходить на другие платформы, языки, базы данных и т.д..... где GUID имеют другую длину, алгоритм формирования и меньший процент совпадения.
|
|||
62
а лю 427
28.06.09
✎
20:52
|
(59) я видел начало обсуждения, но просто пропустил - как то неактуально было. А тут просто стало интересно.
В этом свете - засаду придумали разработчики классную... Потом хрен поймаешь ошибку... |
|||
63
Pashkaa
28.06.09
✎
20:52
|
Просто видимо когда надо было составлять задание обычный специалист заболел и задание отдали админу баз данных, для которого наша 1С это набор таблиц со всякой хернёй и единственная понятная для него надпись это GUID объекта.
|
|||
64
Pashkaa
28.06.09
✎
20:54
|
(62) Не ну а на 7.7 ты часто жаловался на совпадение GUID в распределенных базах? Ой простите в 7.7 и распределенными то их называть было сложно. А в 8-ке для нашего же блага разрядность GUID значительно увеличили
|
|||
65
H A D G E H O G s
28.06.09
✎
20:55
|
(64) А че, в 77 - ГУИДы??? O_O
|
|||
66
Pashkaa
28.06.09
✎
20:55
|
1С-у надо было в каждую коробку вкладывать по вот такой железке наверно :) (одной из них)
http://images.yandex.ru/yandsearch?text=Аппаратные%20генераторы%20случайных%20чисел&stype=image |
|||
67
Pashkaa
28.06.09
✎
20:57
|
(65) Простите ну а как их называть? ID, UUID, или как?
|
|||
68
а лю 427
28.06.09
✎
20:59
|
(65) нет, не гуиды...
просто целые числа, последовательные... номера, так сказать при миграции впереди пристраивается префикс базы - уникальный при РИБ |
|||
69
а лю 427
28.06.09
✎
21:03
|
и идент несет доп инфу - по префиксу можно назвать место создания элемента, а по последовательности - примерно время создания...
|
|||
70
mselling_ru
28.06.09
✎
21:22
|
GUID - это число binary(8), насчет разрядности могу соврать. лень в восьмерку лезть смотреть
|
|||
71
rs_trade
28.06.09
✎
21:28
|
(0)В ТЗ про коды скорей всего речь идет..
|
|||
72
NewNick
28.06.09
✎
21:33
|
>>"Шанс генерации двух одинаковых GUIDs ничтожно мал. Подсчитано, что используемый сейчас алгоритм генерации GUID начнет выдавать повторяющиеся значения в 3400 году."
это писал человек - теоретик слабо знакомый с особенностями мышления индусов работающих в мелкософте. он наверно свято верил что индус писавший процедуры генерации GUID в винде слышал что то о мьютексах. кстати вопрос питу - в 7ке 1с конечно же предусмотрела эту проблему ?) |
|||
73
H A D G E H O G s
28.06.09
✎
21:37
|
(70) binary(16)
|
|||
74
а лю 427
28.06.09
✎
21:52
|
(72) в семерке сам алгоритм даже теоретически не допускает дублей - за исключением одного случая - номер достигнет максимума и перевернется в 1. Но номер длинный и пишется в 36-ричной системе, что еще увеличивает диапазон номеров.
Так что в семерке быстрее сдохнет сама платформа, чем закончатся номера... |
|||
75
NewNick
28.06.09
✎
22:01
|
(74) я не про размер номера писал(это как раз менее критично), а про семафоры в момент инкрементации номера.
после отказа от мак адреса мс поменяла алгоритм генерации гуида и новый гуид стал базироваться на выборке предыдущих 8ми гуидов. но вот при расчете номера гуида на который будет опираться генератор мьютекс поставить забыли )). при работе генератора в нескольких потоках можно получить одновременно два идентичных гуида. |
|||
76
Immortal
28.06.09
✎
22:03
|
(75)то есть в многопоточном приложении вполне реально получить дубль. лихо.
|
|||
77
а лю 427
28.06.09
✎
22:03
|
Идент устанавливается в момент записи вновь созданного элемента в базу, дублей быть не может - база то лочится вся... Не быстро - это да, но простенько и со вкусом...
|
|||
78
а лю 427
28.06.09
✎
22:04
|
(75) ну лоханулись... по полной схеме...
|
|||
79
NewNick
28.06.09
✎
22:31
|
(76)(78) интересно будет создать две идентичные ссылки в восмерке и посмотреть как себя будет вести база ;)
но восмерка использует несколько другой алгоритм для ссылок если ссылку генерит сам. генерит некий гуид при старте сессии и потом просто инкрементирует его. сейчас проверю могут ли они перекрыться |
|||
80
NewNick
28.06.09
✎
22:32
|
(79) + кстати ответ на вопрос почему не смог получить правильное время по ссылке.(кто то тут спрашивал)
|
|||
81
Serg_1960
29.06.09
✎
00:38
|
Что-то я не въехал про время и Гуид :(
Функция ДатаСозданияСсылки(Ссылка) ГУИД = Ссылка.УникальныйИдентификатор(); Строка16 = Сред(ГУИД, 16, 3) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8); Разрядность = СтрДлина(Строка16); ЧислоСек = 0; Для Позиция = 1 По Разрядность Цикл ЧислоСек = ЧислоСек + Найти("123456789abcdef",Сред(Строка16,Позиция,1))*Pow(16,Разрядность - Позиция); КонецЦикла; ЧислоСек = ЧислоСек / 10000000; Возврат Дата(1582, 10, 15, 04, 00, 00) + ЧислоСек; КонецФункции |
|||
82
IKSparrow
30.06.09
✎
10:26
|
Короче, выяснилось, что постановщик задания имел ввиду под "уникальными идентификаторами" коды элементов справочника.
|
|||
83
Sammo
30.06.09
✎
10:33
|
(82) :)))
(78) Кстати, не обсуждена еще тема про присвоение УникальногоИдентификатора руками и возможность иметь в разных справочниках элементы с одинаковым идентификатором (в случае ручного присвоения, естественно ;) |
|||
84
IKSparrow
30.06.09
✎
12:33
|
(83) По моему, где-то тут такое обсуждение было.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |