Получить в 1с данные из внешней компоненты #387721


#0 by lvi15
Необходимо получить набор данных (DataSet) из внешней закрытой базы. Для этого используется специальнsq dll-модуль, который должен получить данные и затем передать их в 1с (8.0/1). Получается что надо использовать Внешнюю компоненту и все, что с ней связано. Как вариант - хотя бы просто получить что-то из внешней компоненты. Вопрос - как эту самую компоненту оформлять (желательно на VisBasic.Net)??? Может у кого есть заготовки?? То что нашел в интернете, на этом сайте в статьях и в той же Технологии создания внешних компонент - бред какой-то (очень оторванно от жизни). Как должны быть описаны интерфейсы IInitDone и пр. для такой "простой" задачи. С Уважением = Л.Владимир
#1 by Kashemir
Как вариант - поискать на ИТСах
#2 by lvi15
Все - с помощью "завмага-товароведа и пр" разобрался как писать ВК, если кому надо - спрашивайте... Но остался вопрос с получением данных - из ВК я должен получить DataSet. В ВК написано -    Sub CallAsFunc(.... ByRef pvarRetValue As Object,...  Возвращаемое значение             pvarRetValue = GetDataSet ..... В 1c пишу -           РекордСет=Компонента.GetRecordSet; Оно возвращает COMОбъект - ну как его раскручивать??? Например в таблицу значений. Есть ли что нибудь вообще, а в идеале стандартное??
#3 by hhhh
командами самой компоненты и раскручивай.
#4 by lvi15
А писать то как надо? Ну пишу стандарт для DataSet (в продолжении вышеприведенного текста) Для   Каждого tbl Из  РекордСет.Tables Цикл КонецЦикла;     Оно говорит, что у РекордСета нету таких методов и пр. И как их увидеть??
#5 by H A D G E H O G s
Чего то я не помню такого
#6 by EasyRider
А компонента зарегистрирована в системе?
#7 by lvi15
Да - regasm..., без этого оно не работает DataSet возвращает пару записей из простенькой таблицы, как xml-файл я его вижу через web-сервис... Может возвращать надо не DataSet, а DataTable, как более простой объект
#8 by v77
Передай в свою ВК таблицу значений и там заполняй. И не ворчи.
#9 by lvi15
А какая тогда наиболее предпочтительная технология передачи данных-массивов между 1с и ВК?
#10 by H A D G E H O G s
Стандарт - ComSafeArray
#11 by H A D G E H O G s
Собственно оно так и передается, ну вы же видите.. Али не видите? :-)
#12 by lvi15
Все - с помощью "завмага-товароведа и пр" разобрался как получить табличные данные - использовал механизм передать-получить таблицу значений: Примеры кода взяты из примеров vb_XmlTextReaderWriter и vb_OLE, которые можно скачать на этом сайте. Код в 1с/8.1:                тз=Компонента.GetRecordSet(тз); //<--Передаю-получаю ТЗ... Код во внешней компоненте:             ...Case Methods.methGetRecordSet                  obj1C = paParams.GetValue 'получить ТЗ из 1с                  newRow = obj1C.Добавить    '--здесь усе как в 1с, заполняем                  newRow.Наименование = "Тест"                  pvarRetValue = obj1C         'возвращаю заполненное значение Усе работает, но нет предела совершенству - таблицу значений приходится создавать в 1с и потом ганять туда-сюда, а вроде как можно создать и в самой внешней компоненте и гнать только сюда, пример кода такой (из vb_OLE):                    If g_flagInit = False Then                    obj0 = obj1C.CreateObject("ТаблицаЗначений") ДИАГНОСТИКА: Общий член "CreateObject" для типа "_ComObject" не найден.. И вот здесь засада - пример, похоже, дан для 1с7.7, а как тогда оно будет выглядеть в 8.0/1??? Или стоит обратиться к ComSafeArray???
#13 by lvi15
Подскажет кто?
#14 by lvi15
~
#15 by H A D G E H O G s
Не знаю, как тама в ваших Визуалах, а у нас в Дельфи есть интерфейс IInitDone с методом Init(pConnection), который самовызывается 1С-кой при подключении библиотеки и передает параметр pConnection Вот этот pConnection имеет свойство AppDispatch, - фактически контекст 1С- ки: Однако AppDispatch - доступен ТОЛЬКО после полного выполнения процедуры Init, например в CallAsFunc. Поэтому значение pConnection храним в глобальной переменной типа IDispatch
#16 by H A D G E H O G s
Не знаю, как у вас там в Визуалах ссылки считаются, и кто ответственнен за уничтожение, у нас в методе Done надо счетчик уменьшать, иначе 1С-ка будет висеть после закрытия.
#17 by lvi15
H A D G E H O G s- спасибо за помощь - у меня все как и у Вас, но как обычно "дьявол" кроется в мелочах. Может кому интересно, поэтому отпишусь. Итак, во внешней компоненте (dll) на VB.net проверялось-писалось: obj0 = obj1C.CreateObject("ТаблицаЗначений") - так ругается obj0 = obj1C.NewObject   ("ТаблицаЗначений") - а вот так работает, далее  obj0.Колонки.Добавить("Код") - так ругается  obj0.Columns.Add("Код")      - а вот так работает, Ну а дальше все работает и с русскими названиями методов 1с:   newRow.Наименование = "Имя"   pvarRetValue = obj0 - здесь идет возврат в 1с и все получаю... Еще раз спасибо! P.S. Со счетчиками ссылок особых проблем нет, так как в исходных примерах все это было неплохо отписано. С Уважением = Л.Владимир
#18 by H A D G E H O G s
Это для 7.7, млин
#19 by lvi15
Еще вопрос в эту же тему. Чтобы усе было совсем хорошо, пытаюсь заполнять табл знач через названия столбцов в переменных, в 1с это выглядит так: А вот в проге на Vb.Net - "хрен" знает как это делать пробовал варианты:   newRow["Код"]       =  "001"       ' так вообще не работает /ошибка синтакс   newRow.(Код")       =  "001"       ' тоже не работает Может кто сталкивался, причем способ обращения скорее всего не зависит в среде какого языка Net это делать (vb или cs)???
#20 by lvi15
~
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С