компьютерный форум
Вернуться   Компьютерный форум > Программирование и вебстроительство > 1C (Все версии) > WEB расширение 1С 8.0


Ответ
 
LinkBack Опции темы Опции просмотра
Старый 15.11.2006, 14:57   #1
Пользователи
 
Регистрация: 12.09.2006
Сообщений: 27
По умолчанию

В топике http://windowsforum.ru/index.php?showtopic=8257, который закрыли, мне так и не ответили как сделать такое:

В C# создать массив, передать его как параметр в функцию 1С, там обработать (там он будет виден тоже как массив), то назад в C# он вернется тоже как массив.

Как это сделать в С# и 1С.
Буду много благодарен!!!




deevil вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
15.11.2006, 14:57
Техник
реклама
По умолчанию

Старый 16.11.2006, 04:23   #2
Пользователи
 
Регистрация: 26.05.2006
Сообщений: 157
По умолчанию

посмотри преобразование типов, может поможет (сам не пробовал)
V8.ConvertValueNetToV8
V8.ConvertValueV8ToNet
:blink:
argiT вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 16.11.2006, 06:53   #3
Пользователи
 
Регистрация: 12.09.2006
Сообщений: 27
По умолчанию

Цитата:
посмотри преобразование типов, может поможет
Дело не в преобразовании типов, а в том какого типа должен быть массив в C#, для этого преобразования.
deevil вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 17.11.2006, 07:46   #4
Пользователи
 
Регистрация: 19.08.2006
Сообщений: 61
По умолчанию

Цитата:
Дело не в преобразовании типов, а в том какого типа должен быть массив в C#, для этого преобразования.
массив в C# вернется в виде 1С ComObject (Точно непомню как тип называется)
его нужно преобразовать Object и работать с ним примерно так

object = (object)_1C.V8.Data.V8.Call(connection, connection.Connection, "Функция возвр. массив", );
decimal = (decimal)_1C.V8.Data.V8.Call(connection, (ComObject), "Количество", new object[] { });
for (int j = 0; j < CountGuid; j++)
{
string ТекЗначениеЭлемента = (string)_1C.V8.Data.V8.Call(connection, (ComObject), "Получить", new object[] {j});

}

smoln вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 24.11.2006, 06:55   #5
Пользователи
 
Регистрация: 12.09.2006
Сообщений: 27
По умолчанию

Твой способ конешно интересен, но одна загвоздка...

Короче обьясню все по порядку:
Делаю Инет-Магазин.
При выводе корзины, активных заказов контрагента и товаров в заказе использую такой метод:
В C# идет запрос в результате которого получается список товаров в корзине (активных заказов или товаров в заказе).
Для каждой полученного результата запроса запускается функция 1С (своя для каждого раздела), которая говорит, что происходит в корзине (активных заказах, товарах в заказе).

Поэтому получается, что если в запросе получено 10 позиций, то функция запуститься 10 раз.
А этот процесс идет очень долго, то бишь с помощью деббагера, я определил что тормаза в функциях.

В силу этого я хотел чтоб делалось так:
Данные полученные в запросе закидываются в массив, этот массив обрабатывается в 1С, данные получаем в C# и выводим так как нам нужно...

Поэтому твой способ, в котором будет запрос который будет закидывать данные в массив, две функции которые будут до цикла и еще 10 функций в цикле не особо исправят ситуацию))))
deevil вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 25.11.2006, 08:44   #6
Пользователи
 
Регистрация: 12.09.2006
Сообщений: 27
По умолчанию

Короче с массивами разобрался частично))

Для будущих поколений обьясню как это делается:
Когда 1С возвращает массив из функции, в C# получается Com объект.
Чтобы получить данные из Com объекта нужно запускать в C# функцию:
string Массив[j] = (string)_1C.V8.Data.V8.Call(connection, (ComObject), "Получить", new object[] {j});
Вместо "Получить" может быть любая функция 1С (Например: "Количество","Очистить" и другие методы над данным объектом), а параметры функции - new object[] {j} - те параметры которые определены в этом методе.

То бишь получается нечто, что предложил smoln.
Наверно также можно сделать и для других структурных типов, но это нужно проверить...

По идее так будет работать несколько быстрее, чем при запуске функции для каждого элемента массива.

Проверял на массиве строк:
В С# создавал string[] strArray = ....
Передавал его в 1С, Если в 1с возвращать, не изменяя полученный массив, то C# его увидит как массив строк, но если в 1С делать изменения над массивом то получится ComObject.

И еще один совет если нужен динамический массив то можно делать ArrayList, у него есть метод Add который добавляет в конец массива данные, а после того как этот массив сформирован можно создать строковый массив и перегнать данные в него.
deevil вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Ответ


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Вкл.



Текущее время: 03:08. Часовой пояс GMT.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot
Content Relevant URLs by vBSEO 3.5.0 RC2