Имя: Пароль:
1C
1С v8
Как лучше всего сохранить ссылку на объект в текстовом реквиззите? 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-ы для ключей регистров сведений получить можно и таким же макаром сохранить в строку/развернуть обратно? Если нет, то тогда такой подход не годится.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс