Имя: Пароль:
1C
 
Диапазон идентификаторов (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) По моему, где-то тут такое обсуждение было.