Имя: Пароль:
1C
 
.Net: ADO.NET
0 Михайло
 
09.09.05
19:36
А пытались-ли подключать ado.net к 1С, если да то как результат?
1 Волшебник
 
модератор
09.09.05
19:37
Web-расширение для 8.0
2 Волшебник
 
модератор
09.09.05
19:37
3 Михайло
 
09.09.05
19:38
А для 7.7 ?
4 Волшебник
 
модератор
09.09.05
19:38
пардон, спутал с ASP. Но всё равно, одного поля ягоды.
5 Волшебник
 
модератор
09.09.05
19:39
ADO.NET оборачиваются в COM-оболочку.
в 1С 7.7 или 8.0 создается COM-объект. Дальше всё, как обычно.
6 Михайло
 
09.09.05
19:41
Интересно, а как это на практике "оборачивается в com оболочку" ?
7 Волшебник
 
модератор
09.09.05
19:48
(6) Любой NET-объект можно обернуть в COM-оболочку, чтобы он был доступен из unmanaged-кода, и наоборот, любой COM-объект можно обернуть в NET-оболочку, чтобы он был доступен из managed-кода.

Подробнее см. здесь:
http://rsdn.ru/summary/609.xml
8 Михайло
 
09.09.05
19:51
(7)Волшебник, это все понятно, я с этим работаю. Но ведь вопрос-то стоит об "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215\System.Data.dll", что-то я не понял как это ее можно в com запихнуть?
9 Волшебник
 
модератор
09.09.05
19:58
(8) Ты по ссылке ходил?
10 romix
 
10.09.05
09:15
Можно наваять внешнюю компоненту, и в нее "обернуть" вызовы ADO.NET.
Образчик внешней компоненты под .NET поставляет фирма 1С, но он какой-то ... короче, у меня он не запустился. Коробка называется "Технология создания внешних компонент" и стоит 15$. Если надо, могу заслать свой работающий образчик ВК.
11 Михайло
 
10.09.05
16:12
"Спасибо" Волшебнику, на полдня меня запутал, но наконец-то разобрался.
(10) Если ты с этой проблемой знаком, может сталкивался с такой проблемой, как передача объекта из .net в 1с ? Скажем я отработал некоторый запрос к БД, заполнил DataSet, из нее достал DataTable (все это в .net). Теперб хочу передать этот DataTable в 1С - не хочет собака. Дошел до того, что в классе определил Inherits DataSet.DataTable (наследование), а 1с все равно не создает объект. В VS.NET такой подход работает прекрасно.
12 romix
 
10.09.05
18:46
(11) Передавай таблицу построчно, в чем проблема? ВыбратьСтроки() - ПолучитьСтроку() :-) 1С не умеет передавать массивы или таблицы... Да и памяти это может сожрать так, что у клиента головка у жесткого диска отвалится и ты будешь виноват... :-)

Насчет обращаться к метаданным 1С из ВК - ниже пример (с) Соарона для Дельфи:

var
obj : IDispatch;
obj0 : Variant;

begin
obj := OleVariant(pConn).AppDispatch;
obj._AddRef;
obj0 := Variant(obj).CreateObject('Справочник.Сотрудники');
obj0.ВыбратьЭлементы;

К глобальным переменным гл. модуля наверное тоже так можно обращаться (я не пробовал, но наверное можно). Объявить там таблицу и заполнять ее из ВК.
13 romix
 
10.09.05
18:48
Типы VT_DECIMAL, VT_VARIANT, VT_UNKNOWN и VT_ARRAY не поддерживаются.
(с) "Технология создания внешних компонент"
14 romix
 
10.09.05
18:52
Насчет "Волшебник запутал" - простые (не 1С-ные) COM-DLL теоретически тоже должны работать в твоем случае. Если не нужны русские идентификаторы, события, AppDispatch и другие доп. возможности, которые предоставляет технология ВК от 1С.
15 Михайло
 
11.09.05
09:08
(12-14)Понятно, что 1С-ина не поддерживает какие-то типы данных. Но если я делаю в .net библиотеку классов(допустим aaa.dll) и в ней определяю класс (bbb), при сборке определяю com видимость и регистрирую com interop, то при установленных компонентах .net, в 1С я вызываю этот класс простым СоздатьОбъект("aaa.bbb");. Далее мне доступен класс полностью в 1С. Теперь с пространством(классом) Data(где находится DataSet,DataTable) так не проходит, т.к. он не определен разработчиками как com видимый(скорее всего). Что я делаю: я засовываю (наследую) в классе(bbb) этот класс DataTable, делаю его com видимым и собираю. Проверяю в VS.Net, создан класс bbb который полностью совместим с классом DataTable, все ОК. Создаю в 1С объект "aaa.bbb", в полной уверенности что сейчас буду управлять таблицей DataSet... Не тут-то было - "Не могу создать объект!!!".
16 romix
 
11.09.05
18:27
(15) В общем случае 1С может работать только с числами (и то не всеми), строками и датами. Для более сложных объектов надо предусматривать встроенные методы ВК наподобие:

вк.ВыполнитьЗапрос("Select * from Customers");
Пока вк.ПолучитьСледующуюЗапись()=1 Цикл
 зн=вк.ПолучитьЗначениеПоля("CompanyName").
 Сообщить(зн);
КонецЦикла;
AdBlock убивает бесплатный контент. 1Сергей