Имя: Пароль:
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 секунд на ноутбуке
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn