|
Как лучше всего сохранить ссылку на объект в текстовом реквиззите? 8.2 УИ | ☑ | ||
---|---|---|---|---|
0
wisekat
22.06.12
✎
16:01
|
Задача такая: при операциях с объектами справочника ведётся протоколирование действий в регистре, и при этом одно из полей регистра - ссылка на объект. Это надо в дальнейшем чтобы открыть форму данного объекта.
Но вот проблема: тогда такие объекты справочников вообще нельзя удалить из конфигурации, т.к. на них в базе всегда присутствует хотя бы одна ссылка. Где-то раньше уже встречался с технологией, с помощью которой можно превратить объект в строку и затем "развернуть" эту строку обратно в значение объектного типа (если такой объект ещё пристутствует в базе). Подскажите, как лучше всего это сделать в 8.2 (УИ). |
|||
1
Heckfy
22.06.12
✎
16:05
|
ЗначениеВСтрокуВнутр(<Значение>)
ЗначениеИзСтрокиВнутр(<Строка>) Не оно?? |
|||
2
ssh2006
22.06.12
✎
16:06
|
> с технологией, с помощью которой можно превратить объект в строку и затем "развернуть" эту строку обратно
Строка(Ссылка.УникальныйИдентификатор()), МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаУИД)) |
|||
3
ptiz
22.06.12
✎
16:06
|
(1) +1
|
|||
4
izekia
22.06.12
✎
16:06
|
XMLСтрока
|
|||
5
wisekat
22.06.12
✎
16:08
|
(1),(2),(4) - да, технологий много, но у них есть наверное какие-то отличия. Хочется узнать у практиков - как оно в реальных задачах себя ведёт, на какие грабли нарваться можно.
|
|||
6
wisekat
22.06.12
✎
16:09
|
Например, (4), как мне кажется, лучше не использовать если хочешь на размере базы сэкономить. Т.е. в каждом случае есть свои "+" и "-".
|
|||
7
izekia
22.06.12
✎
16:10
|
(6) с чего бы это? самый быстрый и простой способ получить текстовое представление уид
|
|||
8
izekia
22.06.12
✎
16:11
|
вот так подскажешь и от автора еще и такую куйню в ответ получишь
|
|||
9
wisekat
22.06.12
✎
16:16
|
(7)(8) А чё так резко сразу? Я просто обсуждение начал. Я же говорю что не использовал эти технологии.
Сейчас вот параллельно синтакс-помощник открыл, копаю все эти методы. Если конкретно про XMLСтрока - да, он даёт GUID объекта для справочников, это гуд. Но вот проблема, когда мы будем обратно объект получать. Нам надо XMLЗначение заюзать, а оно требует первым параметром тип объекта, а мы его в общем случае не знаем, т.к. в строке можем сохранить сначение любого типа... |
|||
10
wisekat
22.06.12
✎
16:18
|
Аналогичная проблема и с (2) - типа объекта не знаем-то заранее...
|
|||
11
wisekat
22.06.12
✎
16:19
|
Методом исключения остаётся ЗначениеВСтрокуВнутр. Пока получается, что только (1) для моей задачи подходит.
|
|||
12
wisekat
22.06.12
✎
16:20
|
А в сторону навигационных ссылок (ПолучитьНавигационнуюСсылку) никто не смотрел?
|
|||
13
Азазелло
22.06.12
✎
16:30
|
"Но вот проблема: тогда такие объекты справочников вообще нельзя удалить из конфигурации, т.к. на них в базе всегда присутствует хотя бы одна ссылка."
Почему нельзя? Сделай измерение регистра, хранящее ссылку, ведущим. И удаляй сколько угодно. По сабжу. Юзай XMLСтрока + сохраняй тип объекта. В плане скорости и объема БД, пожалуй, лучшее решение. Кроме, конечно, Ссылки. Получить навигационную ссылку задействует тот же самый механизм получения строкового представления УИДа + дополняет типом. И еще, неизвестно, что будет с сохраненными тобой навигационными ссылками при очередном обновлении релиза платформы. Признай, будет обидно затерять историю. |
|||
14
wisekat
22.06.12
✎
16:36
|
(13) "Почему нельзя? Сделай измерение регистра, хранящее ссылку, ведущим. И удаляй сколько угодно."
Запись об операции с объектом должна остаться в регистре даже после того, как объект удалят из базы. Это протокол работы. Просто тогда уже нельзя будет открыть карточку объекта. А так, пока объект жив, надо иметь возмодность открывать его карточку. |
|||
15
Азазелло
22.06.12
✎
16:39
|
(14) а, ну раз так, тогда конечно...
|
|||
16
wisekat
22.06.12
✎
16:39
|
(13) Юзай XMLСтрока + сохраняй тип объекта.
Как правильно тип объекта тогда получить чтоб в обратно в XMLЗначение подставить? Я Строка(ТипЗнч(<ОбъектСсылка>)) пробовал - немного не то, что надо, выдаёт. |
|||
17
wisekat
22.06.12
✎
16:39
|
(13) В плане скорости и объема БД, пожалуй, лучшее решение.
Лучше чем ЗначениеВСтрокуВнутр, которое в одной строке всё хранит? |
|||
18
wisekat
22.06.12
✎
16:40
|
Предчувствую, что ещё и операции с документами в скором времени протоколировать надо будет. (13) для этого также подойдёт?
|
|||
19
Heckfy
22.06.12
✎
16:43
|
ТвояСтрока=Строка(СокрЛП(Объект.Ссылка));
:)::) |
|||
20
Азазелло
22.06.12
✎
16:43
|
(18) не, походу и в правду ЗначениеВСтрокуВнутр оптимальнее будет
|
|||
21
H A D G E H O G s
22.06.12
✎
16:48
|
Чем мешает тупо ссылку хранить в ХранилищеЗначений?
|
|||
22
H A D G E H O G s
22.06.12
✎
16:50
|
Чем мешает тупо сделать Измерение УникальнымИдентификатором и в нем хранить Ссылку (чтобы контроль логической целостности не засекал ее), и еще реквизит в котором - Тип.
|
|||
23
H A D G E H O G s
22.06.12
✎
16:51
|
ПланыВидовХарактеристик вам для чего даны?
|
|||
24
Азазелло
22.06.12
✎
16:55
|
Да там задача вообще какая-то экзотическая. Из разряда Горе от ума. ТС почему-то пугают битые ссылки, которые могут возникнуть после удаления объектов из БД (что само по себе как-бы настораживаем, зачем удалять из БД объекты, да еще и с сохранением по ним истории изменений)
|
|||
25
wisekat
22.06.12
✎
16:59
|
(24) Все вопросы к начальству - мы только исполняем его прихоти, а исполнить их надо.
|
|||
26
wisekat
22.06.12
✎
16:59
|
(23) А ПВХ каким боком тут?
|
|||
27
wisekat
22.06.12
✎
17:00
|
И никто так и не сказал как из объекта его тип получить в виде типа "СправочникСсылка.Номенклатура".
|
|||
28
Азазелло
22.06.12
✎
17:03
|
(27) ну, вроде через медатанные можно. вопрос в скорости
|
|||
29
Heckfy
22.06.12
✎
17:05
|
(27)
Оно: Встроенные функции языка.ТипЗнч (Script functions.TypeOf) Встроенные функции языка (Script functions) ТипЗнч (TypeOf) Синтаксис: ТипЗнч(<Значение>) Параметры: <Значение> (обязательный) Тип: Произвольный. Значение, тип которого необходимо получить. Возвращаемое значение: Тип: Тип. Описание: Получает тип значения. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. Пример: Если ТипЗнч(ТекОбъект) = Тип("СправочникСсылка.Номенклатура") Тогда ... КонецЕсли; ??? |
|||
30
wisekat
22.06.12
✎
17:16
|
(29) Вот нахера здесь флудить, копи-пасты хелпа делать - тем более, что оно не работает. По крайней мере, в 8.2. В (16) я написал, что ТипЗнч не работает. Строка(ТипЗнч()) выдаёт тупо синоним.
|
|||
31
wisekat
22.06.12
✎
17:25
|
(27),(28),(29) Походу вот так правильно тип получать:
ОбъектСсылка.Метаданные().ПолноеИмя(); |
|||
32
H A D G E H O G s
22.06.12
✎
17:28
|
||||
33
H A D G E H O G s
22.06.12
✎
17:28
|
Вот вся твоя задача.
|
|||
34
H A D G E H O G s
22.06.12
✎
17:30
|
Конечно пичально, что ПустойСсылке нельзя задать UID, либо получить ее менеджер справочника, поэтому приходиться немного извращаться.
|
|||
35
wisekat
22.06.12
✎
18:49
|
(33) Сенкс за пример. Ещё бы описалово какое к нему что там делать надо. Ну на свежую голову уже не сегодня смотреть буду.
У меня сейчас протоколируются также операции с регистрами сведений, и в дальнейшем документы будут протоколироваться. Такое Ваш подход потянет?? |
|||
36
wisekat
22.06.12
✎
18:53
|
(32) Всё-таки не понял при чём тут ПВХ.....?
|
|||
37
wisekat
25.06.12
✎
17:06
|
(32) Посмотрел Вашу конфу. UID-ы для ключей регистров сведений получить можно и таким же макаром сохранить в строку/развернуть обратно? Если нет, то тогда такой подход не годится.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |