![]() |
#1 |
Пользователи
Регистрация: 12.09.2006
Сообщений: 27
|
![]()
В топике http://windowsforum.ru/index.php?showtopic=8257, который закрыли, мне так и не ответили как сделать такое:
В C# создать массив, передать его как параметр в функцию 1С, там обработать (там он будет виден тоже как массив), то назад в C# он вернется тоже как массив. Как это сделать в С# и 1С. Буду много благодарен!!! |
![]() |
![]() |
15.11.2006, 15:57 | |
Техник
реклама
|
![]() |
![]() |
#2 |
Пользователи
Регистрация: 26.05.2006
Сообщений: 157
|
![]()
посмотри преобразование типов, может поможет (сам не пробовал)
V8.ConvertValueNetToV8 V8.ConvertValueV8ToNet :blink: |
![]() |
![]() |
![]() |
#3 | |
Пользователи
Регистрация: 12.09.2006
Сообщений: 27
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#4 | |
Пользователи
Регистрация: 19.08.2006
Сообщений: 61
|
![]() Цитата:
его нужно преобразовать 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}); } |
|
![]() |
![]() |
![]() |
#5 |
Пользователи
Регистрация: 12.09.2006
Сообщений: 27
|
![]()
Твой способ конешно интересен, но одна загвоздка...
Короче обьясню все по порядку: Делаю Инет-Магазин. При выводе корзины, активных заказов контрагента и товаров в заказе использую такой метод: В C# идет запрос в результате которого получается список товаров в корзине (активных заказов или товаров в заказе). Для каждой полученного результата запроса запускается функция 1С (своя для каждого раздела), которая говорит, что происходит в корзине (активных заказах, товарах в заказе). Поэтому получается, что если в запросе получено 10 позиций, то функция запуститься 10 раз. А этот процесс идет очень долго, то бишь с помощью деббагера, я определил что тормаза в функциях. В силу этого я хотел чтоб делалось так: Данные полученные в запросе закидываются в массив, этот массив обрабатывается в 1С, данные получаем в C# и выводим так как нам нужно... Поэтому твой способ, в котором будет запрос который будет закидывать данные в массив, две функции которые будут до цикла и еще 10 функций в цикле не особо исправят ситуацию ![]() |
![]() |
![]() |
![]() |
#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 который добавляет в конец массива данные, а после того как этот массив сформирован можно создать строковый массив и перегнать данные в него. |
![]() |
![]() |
![]() |
Опции темы | |
Опции просмотра | |
|
|