Имя: Пароль:
1C
1С v8
Выгрузить колонку из ТЗ
0 Meilleur
 
19.03.13
12:26
Приветствую всех!

Может, кто-нибудь сталкивался. У меня есть ТЗ, полученная через COM соединение с другой базой 1С. Мне необходимо выгрузить колонку из этой ТЗ в отдельный массив. Так как данная ТЗ является COM-объектом, метод "Выгрузить колонку" вызвать не получается, вылетает по ошибке. Или я что-то путаю?

Как можно выгрузить колонку, не прибегая к циклическому перебору строк из ТЗ?

Спасибо!
1 acsent
 
19.03.13
12:27
нужно safearray передавать
2 Галахад
 
гуру
19.03.13
12:38
(0) Как-то так:

массивТам = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ОченьНужнаяКолонка")
МассивТут = ЗначениеИзСтрокиВнутр(Там.ЗначениеВСтрокуВнутр(массивТам))
3 zladenuw
 
19.03.13
12:39
4 Meilleur
 
19.03.13
12:53
(2) Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ОченьНужнаяКолонка")

Именно здесь и вылетает.
5 Meilleur
 
19.03.13
12:55
(1)(3) У меня результат запроса или же выгрузка из него имеют тип COMОбъект. Как мне к COMSafeArray перейти при этом?
6 Галахад
 
гуру
19.03.13
12:56
(4) Может в коде чего?
7 Meilleur
 
19.03.13
13:17
(6) В коде все просто:
Рез = Запрос.Выполнить();
Выгрузка = Рез.Выгрузить();
ДанныеПоКолонке = Выгрузка.ВыгрузитьКолонку("Код");

В результате все переменные: Рез, Выгрузка и ДанныеПоКолонке имеют тип COMОбъект различной структуры. Но выгрузить значения  в массив или список значений ни из одной полученной переменной у меня не получается.
8 Галахад
 
гуру
19.03.13
13:20
Наверное ругается как-то?
9 Reset
 
19.03.13
13:24
(7) Ты (2) проигнорировал?
10 Reset
 
19.03.13
13:25
Колонку с кодом так легко пернести, т.к. тип данных примитивный
11 Defender aka LINN
 
19.03.13
13:25
(7) Вообще-то ДанныеПоКолонке - массив. Просто ты этого понять не можешь.
12 Meilleur
 
19.03.13
13:32
(11) Спасибо за комплимент!
Немного уточню. Не получается выгрузить в массив, который бы я передал на входе в качестве параметра для другого запроса.
13 Reset
 
19.03.13
13:34
(12) Посочувствовать нужно или что?
14 Reset
 
19.03.13
13:34
Ответ дали вроде.
15 Рэйв
 
19.03.13
13:36
(12)Если массив содержит числа,даты или строки  - создай массив местной базе и заполни его перебрав полученный COM массив.

Если содержит ссылки СОМ базы, то тебе придется брать у них код (или что-то еще) и искать локально
16 Reset
 
19.03.13
13:37
(15) Он не хочет перебором (см (0))
17 Рэйв
 
19.03.13
13:37
(0)А...
Ну,мало ли что он не хочет..
18 Meilleur
 
19.03.13
13:45
(2) Да, все правильно! Данные выгружаются без проблем и очень быстро в отличие от перебора.

массивТам = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ОченьНужнаяКолонка")
МассивТут = ЗначениеИзСтрокиВнутр(Там.ЗначениеВСтрокуВнутр(массивТам))

Просто первый оператор необходимо разбить на несколько, как я и сделал. Но второй оператор я ввиду ошибочного первого проигнорировал...
19 Meilleur
 
19.03.13
13:46
(2) Спасибо!
20 skunk
 
19.03.13
13:47
(2)все это хорошо будет работать пока базы индентичны
21 Meilleur
 
19.03.13
13:50
(20) Задача и заключается в том, чтобы синхронизировать один объект в двух базах.
22 skunk
 
19.03.13
13:53
(21)вот и получиш жопу когда будешь синхранизировать объект которого нет в базах
23 Галахад
 
гуру
19.03.13
13:53
(18) "Просто первый оператор необходимо разбить на несколько, как я и сделал." Почему? А как в (2) не работает?

(20) А какая разница для простых типов?
24 Reset
 
19.03.13
13:54
(20) Все будет работать даже в совершенно различных базах и кофигурациях до тех пор, пока в коллекции будут только примитивные типы
25 skunk
 
19.03.13
14:09
(23)а ты уверен, что там простые типы?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан