|
Найти документ по гуиду | ☑ | ||
---|---|---|---|---|
0
alexei366
03.12.12
✎
15:55
|
Народ, есть гуид элемента документа. В базе есть к примеру 3 типа документов, они объедененны в общий журнал. Вопрос такой как зная гуид выцепить ссылку на документ, предварительно не зная что это за документ.
Как я понимаю таблица всех документов едина (номер дата и т.д), есть доп тпблицы по типам доков согласно их реквизитов, и соответственно в главной таблице (по которой и строиться журнал) в единой колонке прописаны гуиды всех документов в независимости от типов. Но как запрос на родном языке сделать? |
|||
1
Aleksey
03.12.12
✎
15:56
|
нет общего журнала в 8-ке
|
|||
2
Kashemir
03.12.12
✎
15:57
|
Если только гуид - то придется перебирать все виды документов
|
|||
3
alexei366
03.12.12
✎
15:58
|
в смысле нет, как тогда реализация журнала происходит (я думал как в 77)
|
|||
4
Maxus43
03.12.12
✎
15:58
|
(1) Журнал в 8-ке - отдельная таблица в БД.
Не зная тип - не вытащить имхо |
|||
5
alexei366
03.12.12
✎
15:59
|
Ну у кого какие идеи?
|
|||
6
sapphire
03.12.12
✎
15:59
|
(0) Так чего куда есть?
|
|||
7
alexei366
03.12.12
✎
16:01
|
?
|
|||
8
sapphire
03.12.12
✎
16:03
|
(7) Выражай свои мысли яснее.
Уникальный идентификатор в таблице без типа? |
|||
9
Kashemir
03.12.12
✎
16:05
|
Для каждого Док из Метаданные.ЖурналыДокументов.ДокументыКонтрагентов.РегистрируемыеДокументы Цикл
Если Найти(Документы[Док.Имя].ПолучитьСсылку(Новый УникальныйИдентификатор("f869770e-5e1a-11e1-a1ec-2c41388785b0")), "Объект не найден") = 0 Тогда // подходит КонецЕсли; КонецЦикла; |
|||
10
alexei366
03.12.12
✎
16:06
|
Вспомним 77.
Таблица 1SJOURN есть колонка IDJOURNAL (на новый лад должна быть УникИд) и колонка DNPREFIX (Тип дока), ну и другие |
|||
11
sapphire
03.12.12
✎
16:06
|
(2) Перебрать все документы создать ссылку по каждому с нужным UUID и запихать в массив и выбрать {чего надо} из {таблица} где {колонка c ссылками} В (&МассивСсылок)
|
|||
12
alexei366
03.12.12
✎
16:06
|
Я то без цикла хотел
|
|||
13
sapphire
03.12.12
✎
16:07
|
(10) Забудь про клюшки
|
|||
14
sapphire
03.12.12
✎
16:07
|
(12) Не выйдет, хотя можно и без цикла
|
|||
15
alexei366
03.12.12
✎
16:09
|
Вот фигня, а я так надеелся что зная гуид определим и ссылку и тип и т.д не ищя в каждом доке этот гуид.
|
|||
16
Kashemir
03.12.12
✎
16:09
|
(14) Массив ссылок все равно в цикле будет собираться
|
|||
17
Kashemir
03.12.12
✎
16:09
|
(15) В гуиде нет типа. Тип есть в ссылке :)
|
|||
18
s03
03.12.12
✎
16:09
|
(15) а если по данному ГУИДу будет две ссылки на разные типы документов?
|
|||
19
hhhh
03.12.12
✎
16:10
|
(17) а как же оно сортирует по виду документа?
|
|||
20
Kashemir
03.12.12
✎
16:10
|
(17) В ссылке есть тип. По нему и сортирует. Потом уже по гуиду
|
|||
21
alexei366
03.12.12
✎
16:12
|
Я думаю что таблица всех ссылок и других общих реквизитов документов для всех документов одна, и поэтому гуиды там не повторяться
|
|||
22
s03
03.12.12
✎
16:12
|
чтобы не искать этот ГУИД в каждом доке - подцепи таблицу журнала документов как внешний источник данных и ищи уже по этой таблице. найдёшь все ссылки, соответствующие твоему ГУИДу, а там (если их несколько встретиться) уже сам разбирайся, какая именно тебе будет нужна
|
|||
23
Kashemir
03.12.12
✎
16:12
|
(21) Гуиды могут повторяться для разных типов.
|
|||
24
alexei366
03.12.12
✎
16:13
|
Все нафиг щаз залезу в SQLServer и проверю
|
|||
26
Kashemir
03.12.12
✎
16:13
|
(21) В восьмерке все обстоит несколько по другому.
|
|||
27
Mikeware
03.12.12
✎
16:13
|
(10) взялся за снеговика - забывай про клюшки...
|
|||
28
Mikeware
03.12.12
✎
16:15
|
Кстати, можно получить структуру хранения, сгенерить вьюху для "общего журнала", и искать по ней
|
|||
29
Serg_1960
03.12.12
✎
16:17
|
"Нельза лепить снеговика с клюшками в голове"(классика)
|
|||
30
alexei366
03.12.12
✎
16:18
|
В журнале есть колонки _DocumentTRef (тип) и _DocumentRRef (гуид). Так что моя теория была правильной, только в отличии от 77 доки объедененны в общию таблицу не изначально, а при помощи журнала.
|
|||
31
s03
03.12.12
✎
16:18
|
лучший способ получить структуру хранения - непосредственно в SQL, ибо даже встроенная команда не даёт всех полей, которые там есть, да и имена у тех, которые она предоставляет не совсем соответствуют истинным именам, что хранятся в самом SQL
|
|||
32
s03
03.12.12
✎
16:20
|
(30) да, сочетание Тип+ГУИД=Уникальность. А одного ГУИДа для уникальности маловато, потому и определить ссылку только по нему можно если других типов документов с аналогичным ГУИДом не встретишь
|
|||
33
alexei366
03.12.12
✎
16:22
|
В SQL вообще ограничений нет в этой таблице, походу на уровне 1С изначально проверяется.
|
|||
34
Serg_1960
03.12.12
✎
16:22
|
"щаз залезу в SQLServer и проверю"(24)
"Так что моя теория была правильной"(30) Жду продолжения саморазоблачения :) |
|||
35
alexei366
03.12.12
✎
16:23
|
Я не так выразился, имелось в виду что гуид и тип лежат в отдельных колонках.
|
|||
36
Мыш
03.12.12
✎
16:25
|
(32) > сочетание Тип+ГУИД=Уникальность
Неверное утверждение. ГУИД сам по себе уникален в принципе в неограниченных пределах. ) |
|||
37
Мыш
03.12.12
✎
16:29
|
(23) Тоже неверно. ГУИДы не могут повторяться.
|
|||
38
Kashemir
03.12.12
✎
16:31
|
(37) Да запросто - вопрос не раз уже поднимался. Возьми установи ссылку нового с одним ид разным документам и убедись.
|
|||
39
Maxus43
03.12.12
✎
16:32
|
(37) Могут. Сделать это самому легко, дождаться пока платформа выкинет такой фокус - сложно
|
|||
40
Kashemir
03.12.12
✎
16:33
|
(35) Все верно. Тип+ГУИД = Ссылка в терминах 1С.
|
|||
41
Мыш
03.12.12
✎
16:34
|
(38) Это можно сделать только преднамеренно. Ну а специально можно сделать что угодно. )
|
|||
42
Мыш
03.12.12
✎
16:34
|
(40) Это только для составных полей. Не надо путать.
|
|||
43
Kashemir
03.12.12
✎
16:34
|
(41) Вероятность такая есть всегда и отбрасывать ее нельзя.
|
|||
44
Kashemir
03.12.12
✎
16:36
|
(42) Что значит путать ? Для простых ссылочных полей тип заранее определен что не противоречит Ссылка = Тип+ГУИД.
|
|||
45
Мыш
03.12.12
✎
16:36
|
(43) Отбрасывать её можно, потому что она крайне низкая.
|
|||
46
Kashemir
03.12.12
✎
16:36
|
(45) Нельзя отбрасывать - ложка дегтя портит бочку меда.
|
|||
47
Мыш
03.12.12
✎
16:37
|
(44) Ссылка есть ссылка. Тип добавлен для определения таблицы поиска. Вы смешиваете сущности.
|
|||
48
Мыш
03.12.12
✎
16:38
|
(46) Вы каску носите? Ведь есть вероятность падения метеорита и он может попасть в голову )
|
|||
49
Kashemir
03.12.12
✎
16:39
|
(47) Что ты мне вообще доказываешь? Что ссылка на уровне платформы не содержит тип ? Или что при хранении в таблицах не содержит тип ?
|
|||
50
Maxus43
03.12.12
✎
16:39
|
(47) по ссылке можно определить ТИП, по ГУИДу нельзя, это же аксиомы, что тут спорить? 1с не отбрасывает никакие даже маловероятные события, из-за чего отказываются от хороших механизмов, например v8: РАУЗ. Ключи Аналитики. РИБ. посты 116-117
|
|||
51
Kashemir
03.12.12
✎
16:40
|
(48) Если хожу по стройке - обязательно одену.
|
|||
52
Мыш
03.12.12
✎
16:40
|
(49) Я доказываю, что ГУИД сам по себе уникален. Ссылка в себе не содержит тип. Тип хранится в отдельном поле и только для составных полей.
|
|||
53
Maxus43
03.12.12
✎
16:41
|
(52) Он уникален в пределах одной Таблицы (читай Типа)
|
|||
54
Kashemir
03.12.12
✎
16:43
|
(52) ГУИД ни разу не уникален, он лишь стремится к уникальности.
(52) Платформа оптимизирует хранение для простых ссылочных. Не более того. При этом есть четкое понимание о типе. |
|||
55
Мыш
03.12.12
✎
16:43
|
(53) Да что же вы блин. Это же основы. Рамки уникальности шире всех баз. За это собственно 1С и критиковали при выходе 8-ки.
|
|||
56
Мыш
03.12.12
✎
16:44
|
(54) Статистически уникален. 2 в степени 128.
|
|||
57
alexei366
03.12.12
✎
16:45
|
Так ладно, буду искать другой способ, где входными данными будет являться не только гуид но и тип.
|
|||
58
Kashemir
03.12.12
✎
16:46
|
(56) Удачи тебе с таким подходом. Наступишь на грабли - не говори что был непредупрежден.
|
|||
59
Maxus43
03.12.12
✎
16:50
|
(55) ГУИДу 8-ки далеко до тех же сидов винды. в 1с берётся значение и инкреминируется на 1, что само собой может породить дубли чаще чем кажется
|
|||
60
alexei366
03.12.12
✎
16:51
|
нифига из гуида в 1с можно время записи вычислить
|
|||
61
Мыш
03.12.12
✎
16:51
|
(58) Спасибо за одолжение )
(57) Из-за особенностей реализации получения ГУИДа по его части можно с достаточно высокой долей вероятности определить тип ссылки. Но предварительно надо проанализировать ГУИДы существующих ссылок. |
|||
62
Maxus43
03.12.12
✎
16:51
|
(60) точность фиговая
|
|||
63
Kashemir
03.12.12
✎
16:52
|
(60) Для какой из распределенных баз, с учетом что они могут находится на разных серверах с разным системным временем ?
|
|||
64
Serg_1960
03.12.12
✎
16:57
|
"Попкорн приготовил"(с)
|
|||
65
Maxus43
03.12.12
✎
16:57
|
(64) кинь свою долю в общий котёл лучше
|
|||
66
alexei366
03.12.12
✎
16:59
|
||||
67
Serg_1960
03.12.12
✎
17:00
|
(65) Нет, не буду. Много "вкидывать" придется - к каждому топику этой ветки :)
|
|||
68
Kashemir
03.12.12
✎
17:00
|
(66) Хех, ты так и не понял смысла вопроса в (63)
|
|||
69
Maxus43
03.12.12
✎
17:03
|
(66) на партнёрсом форуме САМ главный 1сник отвечал, что ГУид используется для того, для чего его придумали, и тянуть оттуда время есть моветон и всех отлучат от 1с за такое
|
|||
70
alexei366
03.12.12
✎
17:09
|
Чо не понятного, время высчитывает служба Администратор Сервера 1С, берёт она с компа где находится.
|
|||
71
Bober
03.12.12
✎
17:10
|
(66) см. (59)
если не веришь, запусти СообщитьНовый уникль |
|||
72
Bober
03.12.12
✎
17:10
|
(71)
Сообщить(Новый уникальныйИдентификатор); Сообщить(Новый уникальныйИдентификатор); Сообщить(Новый уникальныйИдентификатор); |
|||
73
GANR
03.12.12
✎
17:11
|
Функция ДокументПоGUID(УникальныйИдентификаторДокумента)
РегистрируемыеДокументы = Метаданные.ЖурналыДокументов.СкладскиеДокументы.РегистрируемыеДокументы; Для каждого ОбъектМетаданных из РегистрируемыеДокументы Цикл МенеджерДокументов = Документы[ОбъектМетаданных.Имя]; СсылкаНаОбъект = МенеджерДокументов.ПолучитьСсылку(УникальныйИдентификаторДокумента); ОбъектПоСсылке = СсылкаНаОбъект.ПолучитьОбъект(); Если ОбъектПоСсылке <> Неопределено Тогда Возврат СсылкаНаОбъект; КонецЕсли; КонецЦикла; Возврат Неопределено; КонецФункции |
|||
74
Maxus43
03.12.12
✎
17:12
|
(73) 1с не одобряет, нет 100% вероятности :)
|
|||
75
Serg_1960
03.12.12
✎
17:12
|
(кинул свою долю) Посмотрите в своей конфе на процедуру ПриНачалеРаботыСистемы() и вызов ПроверкаРазницыВремениКлиент.ВыполнитьПроверку()... и скажите хором - "Время - понятие относительно"(с)
|
|||
76
GANR
03.12.12
✎
17:19
|
Пусть идентификаторы делают уникальней ]:->.
|
|||
77
GANR
03.12.12
✎
17:19
|
(76) to (74)
|
|||
78
Kashemir
03.12.12
✎
17:22
|
(73) Метод в (9) будет быстрее, ибо не создается лишний объект. Единственно - привязан к языку :)
|
|||
79
Maxus43
03.12.12
✎
17:23
|
Найти и "Объект не найден" - быдлокод)
|
|||
80
Maxus43
03.12.12
✎
17:24
|
(79) + у нас так сделали проверку на справочники, и вот веть - были элементы и с таким названием, Объект не найден :)
|
|||
81
Kashemir
03.12.12
✎
17:25
|
(79) Привязка к ИД в любом случае будет быдлокодом. На ней серьезные вещи строит не стоит. А для всякой некритичной ерунды - пусть будет то что быстрее.
|
|||
82
Maxus43
03.12.12
✎
17:26
|
(81) в РИБ базах иногда нужно к ИД привязыватся, не вижу быдлокода, от задачи зависит
|
|||
83
Kashemir
03.12.12
✎
17:33
|
(82) Помимо прочего метод в (72) имеет и другой минус - не все типы имеют метод ПолучитьОбъект. Например перечисления.
|
|||
84
Serginio1
03.12.12
✎
17:45
|
Вообще через УстановитьСсылкуНового можно установить, что угодно, хоть свой вариает Гуида.
Если пользоваться генератором Гуида, то он будет уникальным так как например зависит от сетевой карты, времени. http://cppclub.newmail.ru/articles/insidecom09.html wiki:GUID GUID хорош прежде всего при обмене данными без всяких суффиксов префиксов и может объединяться с любыми учетными системами. |
|||
85
Maxus43
03.12.12
✎
17:49
|
(84)>(59), гуид 1с это не совсем гуид
|
|||
86
GANR
03.12.12
✎
17:54
|
Если GUID генерируется инкрементом на 1 - это, скорее, недочет разработчиков платформы, а не тех, кто на ней программирует. Уникальный идентификатор, должен быть уникальным и точка.
|
|||
87
Serginio1
03.12.12
✎
18:15
|
(85) То есть ты утверждаешь что гуид для ссылок отличен от Новый уникальныйИдентификатор? Дай ссылку на алгоритм и особенно для распределенных баз.
|
|||
88
Bober
03.12.12
✎
18:27
|
(86) а он и уникален, никто не говорил, как платформа реализует это условие.
|
|||
89
Serginio1
03.12.12
✎
18:31
|
87+ Да проверил действительно увеличивают на единицу.
v8: ГУИД 1С8 Но здесь есть смысл, в том, если привязка к компьютеру будет уникальной, а значит и будет уникальна на другом компьютере. Надо смотреть алгоритм. С другой стороны смешно экономить на формировании гуида |
|||
90
Serginio1
03.12.12
✎
18:35
|
89+ Функция ДатаСозданияСсылки(Ссылка)
ГУИД = Ссылка.УникальныйИдентификатор(); Строка16 = Сред(ГУИД, 16, 3) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8); Разрядность = СтрДлина(Строка16); ЧислоСек = 0; Для Позиция = 1 По Разрядность Цикл ЧислоСек = ЧислоСек + Найти("123456789abcdef",Сред(Строка16,Позиция,1))*Pow(16,Разрядность - Позиция); КонецЦикла; ЧислоСек = ЧислоСек / 10000000; Возврат Дата(1582, 10, 15, 04, 00, 00) + ЧислоСек; КонецФункции Генерация Гуида 1С 531923ce-3d55-11e2-8afe-c86000c70663 531923cf-3d55-11e2-8afe-c86000c70663 |
|||
91
GANR
03.12.12
✎
18:40
|
(59) ГЫЫЫЫ...
Инкремент - экскримент. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |