Имя: Пароль:
1C
 
Получить ссылки из таблицы УИДов
0 SeiOkami
 
01.08.16
11:06
Такое дело. Есть ТЗ с УИДами. Можно ли преобразовать их в ссылки заданного типа как-то помимо цикла по строкам ТЗ? Так сказать, "массово".
1 Ёпрст
 
гуру
01.08.16
11:09
делай, разрешаю.
2 SeiOkami
 
01.08.16
11:10
(1), спасибо!
а не подскажешь как именно?
3 Ёпрст
 
гуру
01.08.16
11:11
(2) обойти ТЗ, получить ссылки
4 Ёпрст
 
гуру
01.08.16
11:13
либо, сделать аналог ЗначениеИзСтрокиВнутр, т.е, создать правильный текст
5 Ёпрст
 
гуру
01.08.16
11:13
хотя, там тоже будет обход, текста
6 hhhh
 
01.08.16
11:20
(4) это теперь называется по-новому: сериализация - десериализация.
7 hhhh
 
01.08.16
11:24
(0) обычно массовая медленнее раза в 3. чем просто обход цикла. Потому что в ней стараются сделать поуниверсальнее.

зачем вам это, просто обход цикла 5 строчек программы. И быстро работает.
8 Fragster
 
гуру
01.08.16
11:32
а откуда взялась ТЗ с уидами?
если из XML, то можно замутить схему, чтобы при засасывании XML там сразу ссылки были
9 SeiOkami
 
01.08.16
11:33
(8), преимущественно из внешнего источника данных
10 SeiOkami
 
01.08.16
11:37
(4), сейчас попробую использовать ЗначениеВСтрокуВнутр(), но кажется мне, что так будет дольше, чем цикл
11 SeiOkami
 
01.08.16
11:37
(7), не хочется делать лишний цикл по ТЗ в несколько миллионов строк
12 Ёпрст
 
гуру
01.08.16
11:39
(9) дык из внешнего источника данных, сразу и получайте ссылки
13 SeiOkami
 
01.08.16
11:40
(12), как из внешнего источника получить ссылку на текущую базу?
14 Ёпрст
 
гуру
01.08.16
11:46
(13) типизации нету что ле там ?
15 hhhh
 
01.08.16
11:46
(11) разбейте это ТЭ на маленькие, тысяч по 20. Миллион - это слишком.
16 SeiOkami
 
01.08.16
11:46
У мне в ВИД есть таблица с колонкой "Идентификатор". Она возвращает УИД. Если есть метод, который мне вернет вместо УИД ссылку на элемент текущей, то это круто. Но я такого не знаю
17 Ёпрст
 
гуру
01.08.16
11:46
Через выразить() нельзя ?
18 SeiOkami
 
01.08.16
11:47
(15), в чем смысл? все равно придется все строки обойти
19 SeiOkami
 
01.08.16
11:47
(17), не, уже пробовал. несовместивые данные.
20 hhhh
 
01.08.16
11:52
(19) вы сделайти в базе пример сериализации

XMLТаблица = ОбщегоНазначения.ЗначениеВСтрокуXML(ТЗ);

потом эту XMLТаблицe посмотрите и сделайте, чтобы ваша новая ТЗ была бы в хмл-файлике точно такой же структуры.

и ее потом загрузите десериализацией

ТЗ = ОбщегоНазначения.ЗначениеИзСтрокиXML(хмлстрока);
21 hhhh
 
01.08.16
11:55
(20) но миллион строк она у вас думаю не потянет, сдохнет.
22 Cyberhawk
 
01.08.16
12:11
Выгрузить колонку, обойти массив, загрузить колонку
23 aleks_default
 
01.08.16
12:11
"Если есть метод, который мне вернет вместо УИД ссылку на элемент текущей"

ДокументМенеджер.<Имя документа> (DocumentManager.<Имя документа>)
ПолучитьСсылку (GetRef)
Синтаксис:

ПолучитьСсылку(<УникальныйИдентификатор>)
Параметры:

<УникальныйИдентификатор> (необязательный)

Тип: УникальныйИдентификатор.
Уникальный идентификатор, из которого будет формироваться ссылка.
Возвращаемое значение:

Тип: ДокументСсылка.

Описание:

Формирует ссылку из значения типа УникальныйИдентификатор.
Данный уникальный идентификатор может быть в дальнейшем получен из ссылки методом УникальныйИдентификатор.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Если параметр не указан или передано значение Неопределено, то будет сформирована новая уникальная ссылка.
См. также:

ДокументСсылка, метод УникальныйИдентификатор
24 SeiOkami
 
01.08.16
12:14
(23), обожаю типов, которые не вчитываясь копипастят СП
25 aleks_default
 
01.08.16
12:28
Во что вчитываться?
Ты написал
"Если есть метод, который мне вернет вместо УИД ссылку на элемент текущей, то это круто. Но я такого не знаю"
Я тебе ответил. Пиши правильно чтобы не было недопонимания.
26 Fragster
 
гуру
01.08.16
12:28
XMLЗначение(Тип, Строка) быстрее (23), кстати, Если еще и тип вне цикла запомнить - будет "почти летать"
27 SeiOkami
 
01.08.16
12:31
(25), читай. читай. а потом ещё раз прочитай. а потом подумай о том, что есть такая интересная вещь как "контекст комментария"
28 SeiOkami
 
01.08.16
12:41
(20), (26)
попробовал. выпало с нехваткой памяти. а ЗначениеВСтрокуВнутр не выпадало)

В общем, как я понял, только цикл.

В добавок только что обнаружил, в запрос нельзя передавать ТЗ с колонкой типа "УникальныйИдентификатор". Что очень странно -_-
29 Fragster
 
гуру
01.08.16
12:46
(28) ты код приведи, а то что-то сомнительно, что (26) падало
30 SeiOkami
 
01.08.16
12:50
(29), я использовал  ОбщегоНазначения.ЗначениеВСтрокуXML(ТЗ)
она выпала
а XMLСтрока() сказала, что неверное значение
31 Fragster
 
гуру
01.08.16
12:51
(30) а в XMLСтрока ты строку передавал, или УИ?
32 SeiOkami
 
01.08.16
12:52
(31), ТЗ я передовал. мне нужно УИДы из ТЗ перевернуть в ссылки
33 hhhh
 
01.08.16
13:03
(30)  у меня работает ОбщегоНазначения.ЗначениеВСтрокуXML(ТЗ) правда там где-то 200 строк в тз.
34 hhhh
 
01.08.16
13:04
(30) так вы наверно туда уникальные идентификаторы засунули, а не надо. Надо ссылки.
35 SeiOkami
 
01.08.16
13:24
(33), у меня сейчас 800 тыс.
36 SeiOkami
 
01.08.16
13:25
(34), так мне как раз ссылки получить и нужно.
37 Fragster
 
гуру
01.08.16
15:42
вот настоящий копрокод:



ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("УИ"    , Новый ОписаниеТипов("УникальныйИдентификатор"));

Стр = ТЗ.Добавить();
Стр.УИ = Заявка.УникальныйИдентификатор();

ЗаписьУзлов = Новый ЗаписьУзловDOM;

ОпределениеТипа = Новый ОпределениеТипаДокументаDOM("ValueTable");
Документ = Новый ДокументDOM("http://v8.1c.ru/8.1/data/core&quot;, "ValueTable", ОпределениеТипа);

ЗаписьУзлов.Открыть(Документ);
СериализаторXDTO.ЗаписатьXML(ЗаписьУзлов, ТЗ);
Документ.ЗаменитьДочерний(ЗаписьУзлов.УзелDOM, Документ.ЭлементДокумента);
ЗаписьУзлов.Закрыть();

КолонкаТип = Документ.ЭлементДокумента.ДочерниеУзлы[0].ДочерниеУзлы[1].ДочерниеУзлы[0];
ПИ = "http://v8.1c.ru/8.1/data/enterprise/current-config&quot;;
Префикс = "abcd";

Текстовый = Документ.СоздатьТекстовыйУзел(Префикс + ":DocumentRef.Заявка");
КолонкаТип.ЗаменитьДочерний(Текстовый, КолонкаТип.ДочерниеУзлы[0]);
КолонкаТип.УстановитьСоответствиеПространстваИмен(Префикс, "http://v8.1c.ru/8.1/data/enterprise/current-config&quot;, Истина);

ЧтениеУзлов = Новый ЧтениеУзловDOM;
ЧтениеУзлов.Открыть(Документ.ЭлементДокумента);
ТЗ2 = СериализаторXDTO.ПрочитатьXML(ЧтениеУзлов);
ЧтениеУзлов.Закрыть();
38 Fragster
 
гуру
01.08.16
15:43
из строк и гуидов переделывает в ссылки
39 Fragster
 
гуру
01.08.16
15:43
значение для ПИ можно получить их XMLТипЗнч()
40 Fragster
 
гуру
01.08.16
15:44
значение, которое ставить вместо "DocumentRef.Заявка"
41 Fragster
 
гуру
01.08.16
16:02
100к строк прожевало достаточно оперативно, 1кк строк походу не смогла засосать в DOM
42 RomanYS
 
01.08.16
19:11
(26) замер показывает что не быстрее если у тебя уже ГУИД, быстрее если строка ГУИДа.

(0) зачем что-придумывать если цикл по массиву 1М значений по (23) выполняется 10 секунд на ноутбуке
Ошибка? Это не ошибка, это системная функция.