|
Передача массива из JavaScript в 1С | ☑ | ||
---|---|---|---|---|
0
Cmyk32
18.07.11
✎
14:11
|
Всем привет!
В JS у меня есть функция getArray(), возвращающая массив. В 1С код: МассивЗаказов = ЭлементыФормы.Карта.Документ.parentWindow.eval("getArray()"); Для каждого Эл Из МассивЗаказов Цикл Сообщить(Эл ); КонецЦикла; Программа выдает ошибку "Итератор для значения не определен". Подскажите, как обработать COMОбъект? |
|||
1
skunk
18.07.11
✎
14:13
|
для х = 1 по размер цикл
сообщить(МассивЗаказов[х]); |
|||
2
H A D G E H O G s
18.07.11
✎
14:14
|
1) По индексу перебирай, если вообще там com объект вернулся
2) Правильнее будет возвратить ComSafeArray - стандартный механизм обмена массивами в COM |
|||
3
H A D G E H O G s
18.07.11
✎
14:14
|
(1) нет
|
|||
4
H A D G E H O G s
18.07.11
✎
14:15
|
(1) Хотяяяя, но нет скорее всего.
для х = 0 по размер-1 цикл сообщить(МассивЗаказов.Get(x)); |
|||
5
Cmyk32
18.07.11
✎
14:16
|
(1), (4) не подходит, пробовала :(
Попробую ComSafeArray |
|||
6
Cmyk32
18.07.11
✎
14:50
|
(4) ComSafeArray используется и для получения массива в 1с, не только для передачи?
|
|||
7
H A D G E H O G s
18.07.11
✎
14:55
|
- "Приветствую вас, Дети Ночи!"
- "Че?" - "Здорово, говорю, упыри..." - "А, ну привет..." По сабжу (6): "Че???" |
|||
8
Cmyk32
18.07.11
✎
14:58
|
(7) :)))))))
Примеры в нете про выгрузку с помощью comSafeArray ИЗ 1С, мне надо В 1С? плохо ищу? |
|||
9
H A D G E H O G s
18.07.11
✎
15:03
|
(8) А не надо искать - надо его тупо получить в 1С и перебрать.
В чем сложность? COMSafeArray (COMSafeArray) COMSafeArray (COMSafeArray) Методы: GetDimensions (GetDimensions) GetLength (GetLength) GetLowerBound (GetLowerBound) GetType (GetType) GetUpperBound (GetUpperBound) GetValue (GetValue) IsResizable (IsResizable) Resize (Resize) SetValue (SetValue) Выгрузить (Unload) Конструкторы: Из COMSafeArray Из массива 1 Из массива 2 По типу элемента 1 По типу элемента 2 Описание: Объектная оболочка над многомерным массивом SAFEARRAY из COM. Позволяет создавать и использовать SAFEARRAY для обмена данными между COM-объектами. Для передачи массива в качестве параметра метода COM-объекта необходимо построить COMSafeArray нужной размерности с нужным типом элемента и указать построенный COMSafeArray в качестве значения входного параметра. Другие объекты 1С:Предприятия можно использовать в качестве значений входных параметров типа Массив только при наличии исчерпывающей информации о типах параметров в библиотеке типа COM-объекта. Результат метода COM-объекта или значение выходного параметра типа Массив всегда представляется объектом COMSafeArray. Доступность: Тонкий клиент, сервер, толстый клиент, внешнее соединение. Пример: Массив = Новый COMSafeArray("VT_I4", 2); Массив.SetValue(0, 23); Массив.SetValue(1, 13.5); COMОбъект = Новый COMObject("ExampleCOMObject.ECOMClass"); COMОбъект.ProcessSafeArray(Массив); См. также: COMSafeArray, конструктор Из COMSafeArray |
|||
10
H A D G E H O G s
18.07.11
✎
15:04
|
||||
11
Serginio1
18.07.11
✎
15:21
|
(0) Попробуй GetValue, он кстати и для массивов Net
|
|||
12
Cmyk32
18.07.11
✎
15:24
|
(9) А как его получить, а не сформировать?
|
|||
13
H A D G E H O G s
18.07.11
✎
15:27
|
(12) откуда я знаю?
Как ты вот его получаешь?: МассивЗаказов = ЭлементыФормы.Карта.Документ.parentWindow.eval("getArray()"); В java-скрипты я - не ездун. |
|||
14
Serginio1
18.07.11
✎
15:29
|
(0) А что отладчик говорит?
|
|||
15
Cmyk32
18.07.11
✎
15:34
|
(14) Тип возвращаемого значения - ComОбъект
http://i057.radikal.ru/1107/bf/c1a9789568ae.jpg (11) не работает |
|||
16
Serginio1
18.07.11
✎
15:36
|
Для интереса посмотри, что возвращает
Метод valueOf Синтаксис: массив.valueOf() Результат: строковое значение Метод valueOf возвращает примитивное значение массива. Для этого все элементы массива преобразуются в строки, и эти строки объединяются в одну строку через запятую. Иными словами, этот метод возвращает тот же результат, что и метод toString. А цикл от 0 |
|||
17
Serginio1
18.07.11
✎
15:37
|
для х = 0 по МассивЗаказов.length-1 цикл
сообщить(МассивЗаказов[х]); |
|||
18
Cmyk32
18.07.11
✎
15:39
|
(16) Так и есть. Результат - значения через запятую.
length - поле объекта не обнаружено. Это может быть связано с тем, что у меня массив неограниченной длины? |
|||
19
Cmyk32
18.07.11
✎
15:40
|
(18) Нет, не помогло
|
|||
20
Cmyk32
18.07.11
✎
15:42
|
В js минимализм:
var adressArray = new Array(); функция по добавлению элемента: function addAdressToArray (NewAdress) { AdressArray[AdressArray.length] = NewAdress;} И функция, возвращающая значение в 1с: function getArray() {return AdressArray;} |
|||
21
AquaKosh
18.07.11
✎
15:45
|
Передача массивов между 1С и js уже 100 раз обсуждалась - в поиск.
|
|||
22
Serginio1
18.07.11
✎
15:47
|
(18) Интересно, что ри этом он показывает элементы 0 и 1.
При этом других свойсв нет. Это может быть только при итераторе. для х = 0 по 1 цикл сообщить(МассивЗаказов[х]); |
|||
23
Cmyk32
18.07.11
✎
15:49
|
(21)
Про это чтоли? v8: Из Javascript? v8: Получение координат из Поле HTML документа в 1с (Google Maps) Здесь нет решения. У меня так не работает. |
|||
24
Fragster
гуру
18.07.11
✎
15:50
|
Для Сч = 0 по Массив.length()-1 Цикл
Сообщить(Массив.item(i)); КонецЦикла; |
|||
25
Fragster
гуру
18.07.11
✎
15:51
|
недавно столкнулся с тем, что по OLE у выборки из результата запроса нет Выборка.Количество(), есть Выборка.Count() только...
|
|||
26
Cmyk32
18.07.11
✎
15:52
|
(24) {Форма.Форма(147)}: Метод объекта не обнаружен (length)
Для Сч = 0 по МассивЗаказов.length()-1 Цикл Как-будто объект вообще никак не обрабатывается |
|||
27
Fragster
гуру
18.07.11
✎
15:53
|
(26) а item(0) работает? я просто давно в яваскрипт не залезал, не помню, что там у него... вроде у массива length, хотя могу ошибаться... а еще оно регистрочувствительное...
|
|||
28
Cmyk32
18.07.11
✎
15:56
|
(27) все верно length. Но не работает) и item
|
|||
29
Serginio1
18.07.11
✎
15:59
|
Судя по 15 должен работать итератор.
Какую ошибку выдает МассивЗаказов[0]? |
|||
30
Serginio1
18.07.11
✎
16:01
|
Кстати и в v8: Из Javascript?
итератор работает. Проверь еще |
|||
31
Serginio1
18.07.11
✎
16:07
|
(20) Вообщето для добавления существует push
|
|||
32
Cmyk32
18.07.11
✎
16:17
|
(29) {Форма.Форма(146)}: Получение элемента по индексу для значения не определено
сообщить(МассивЗаказов[0]); |
|||
33
Cmyk32
18.07.11
✎
16:21
|
(21) ты можешь свой пример еще раз выложить?
|
|||
34
Serginio1
18.07.11
✎
16:22
|
Тое есть перед вызовом, итератора в отладчике показывает два элемента, и при этом заявляет, что итератор неопределен?
МассивЗаказов = ЭлементыФормы.Карта.Документ.parentWindow.eval("getArray()"); Для каждого Эл Из МассивЗаказов Цикл Сообщить(Эл ); КонецЦикла; |
|||
35
Cmyk32
18.07.11
✎
16:23
|
(34)
Да\\ Может у меня каких-то библиотек 1с-их нет? |
|||
36
Cmyk32
18.07.11
✎
16:25
|
(34)
Блииииннн!! Вот так работает: МассивЗаказов["0"] |
|||
37
Cmyk32
18.07.11
✎
16:32
|
(36) Почему?
|
|||
38
Serginio1
18.07.11
✎
16:36
|
видно индексер строковый
|
|||
39
Cmyk32
18.07.11
✎
16:37
|
(38) от чего может зависеть?
по первой придется извращаться: инд = 0; Пока 1 = 1 цикл Попытка сообщить(МассивЗаказов[строка(инд)]); инд = инд + 1; Исключение прервать; КонецПопытки КонецЦикла; |
|||
40
Serginio1
18.07.11
✎
16:38
|
А МассивЗаказов.Количество() что выдает? или Count()
|
|||
41
Cmyk32
18.07.11
✎
16:52
|
А вот и не работает это все (количество, count) с массивом заказов)) У меня уже белочка начинается))))
|
|||
42
smaharbA
18.07.11
✎
17:27
|
ЭлементыФормы.Карта.Документ.script.getArray()
|
|||
43
smaharbA
18.07.11
✎
17:32
|
|
|||
44
Serginio1
18.07.11
✎
19:15
|
(43) Интересно, а как же 1С узнает количество и значение элементов? Явно не так, но на безрыбье ... Спасибо интересно.
|
|||
45
orefkov
19.07.11
✎
08:52
|
(0)
В скрипт передавай пустой массив 1С, и добавляй в него. Скрипт: "function myFunction(result) |{ | result.Add(1) | result.Add(2) | result.Add(3) |}" Вызов из 1С: Результат = Новый Массив; ЭлементыФормы.Карта.Документ.parentWindow.myFunction(Результат); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |