Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / Работа с 1С 8 через COM / 24 сообщений из 24, страница 1 из 1
19.01.2009, 13:22
    #35764544
litvik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
Всем добрый день.

Необходимо для одной BI-системы сделать конектор к 1С через COM. Эта BI-система может работать и на прямую с БД через ODBC, но не всегда 1С стоит на MSSQL.

Интересуют такие вопросы:
1) скорость получение данных больших объемов из 1С через СОМ.
2) примеры кода работы с 1С через СОМ.
3) возможность увидеть все типы справочников, документов (подобно тому как таблицы в БД)

Буду очень благодарен и признателен за ответы.
...
Рейтинг: 0 / 0
19.01.2009, 13:23
    #35764550
Господин ПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
1С она разная бывает...
...
Рейтинг: 0 / 0
19.01.2009, 13:28
    #35764565
litvik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
Я понимаю что разная.
Интересует именно универсальный механизм к 1С вер. 8.Х не привязанный к модификациям (склад, производство, торговля и т.д.)
...
Рейтинг: 0 / 0
19.01.2009, 13:31
    #35764578
Господин ПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
litvik,

что-то типа этого: http://www.gotdotnet.ru/Forums/Common/171726.aspx

а вообще http://www.google.ru/search?hl=ru&newwindow=1&client=firefox-a&rls=org.mozilla:en-US:official&hs=ldr&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=1%D1%81+comconnector&spell=1
...
Рейтинг: 0 / 0
19.01.2009, 13:52
    #35764674
kiruha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
litvik,

Примеров масса. infostart.ru, itland.ru...(поиск по "Application" например)
По скорости - через com в 1С все работает достаточно тормознуто.
По структуре см например
http://infostart.ru/projects/2432/
...
Рейтинг: 0 / 0
19.01.2009, 15:35
    #35765016
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
kiruhaдостаточно тормознуто.
Голословное утверждение?
...
Рейтинг: 0 / 0
19.01.2009, 16:04
    #35765113
kiruha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
XenoX,

Нет.
Простите - ликбезом не занимаюсь.
...
Рейтинг: 0 / 0
19.01.2009, 16:11
    #35765144
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
kiruhaликбезом не занимаюсь.
очень напрасно, иначе бы знали, что ответы такого рода надо аргументировать.
у меня работает достаточно быстро, чтобы не считать тормознутым.
...
Рейтинг: 0 / 0
19.01.2009, 16:40
    #35765271
litvik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
Извините что мешаю вашей ссоре....
Но по моему форум чтоб делится опытом, а не обзываться что у кого-то руки кривые. Выложите примеры кода и каждый поймет свои ошибки.
...
Рейтинг: 0 / 0
19.01.2009, 16:43
    #35765279
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
litvikВыложите примеры кода
Вам извините на чему нужны примеры?
...
Рейтинг: 0 / 0
19.01.2009, 16:51
    #35765313
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
P.S. язык какой...
...
Рейтинг: 0 / 0
19.01.2009, 16:55
    #35765326
litvik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
Да какая разница на каком языке. (С++, С# и тд)
...
Рейтинг: 0 / 0
19.01.2009, 17:40
    #35765489
про герр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
litvik,

а кто этот коннектор вызывать будет? 1С или он через COM будет дергать 1эсовкие интерфейсы?
ЗЫ: проще в 1С вызывать, а в COM сервере описывать всю логику
ЗЫЗЫ: если, что могу помочь
...
Рейтинг: 0 / 0
19.01.2009, 17:50
    #35765527
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
litvikДа какая разница на каком языке. (С++, С# и тд)
На самом деле большая.
Может вам от 1С проще подцепиться к вашей BI-системе...
...
Рейтинг: 0 / 0
19.01.2009, 18:29
    #35765627
litvik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
мне именно необходимо подключится к 1С через СОМ. BI-система может получать данные из DLL (собственный формат). Вот я и хочу в эту длл засунуть взаимодействие с 1С. Необходимо всего лишь получать результаты селектов из 1С.
...
Рейтинг: 0 / 0
20.01.2009, 09:19
    #35766251
про герр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
litvikмне именно необходимо подключится к 1С через СОМ. BI-система может получать данные из DLL (собственный формат). Вот я и хочу в эту длл засунуть взаимодействие с 1С. Необходимо всего лишь получать результаты селектов из 1С.

сложный путь
...
Рейтинг: 0 / 0
20.01.2009, 09:34
    #35766275
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
про геррсложный путь
Это код для работы с 7.7 оно только через OLE может.
В 8 уже используется COM
вот пример работы с COM объектом v8 на VB
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Set Con = CreateObject("v8.ComConnector")
Set ConHandle = Con.Connaect("File=C:\BAZA; Usr=Bukin")

Set Query = ConHandle.NewObject("Запрос")
Query.Text = "ВЫБРАТЬ * ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки()"

Set Result = Query.Execute()
Set DataSet = Result.Choose()
Do While DataSet.Next()
 'что то делаем в цикле
Loop

Сразу хочу предостеречь автора от недайбог выбора ссылок, приводите все к простым типам, строка/число/дата/булево и сатарйтесь в запросе использовать латинские алиасы для колонок
...
Рейтинг: 0 / 0
20.01.2009, 09:37
    #35766281
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
P.S. писал на память, мог ошибиться
...
Рейтинг: 0 / 0
20.01.2009, 10:04
    #35766349
про герр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
XenoX,

а где взять объектную модель 8-ки?
...
Рейтинг: 0 / 0
20.01.2009, 10:08
    #35766366
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
про геррXenoX,
а где взять объектную модель 8-ки?
А вас что конкретно интересует?
У 8-го COM объекта есть бибиотека типов которую например можно запросто импортировать в Delphi а так наскоько мне не отказывает память, все есть в справке по v8
...
Рейтинг: 0 / 0
20.01.2009, 10:31
    #35766430
про герр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
XenoX,

Ну обычно системы, которые предоставляют COM интерфейсы содержат в себе библиотеки *.tlb + вменяемый хелп по всем объектам, свойствам методам и пр. этих объектов.
В справке к 8.0. только внутренний язык описан, если его латинский вариант совпадает с именами объектов и их методами, тогда проще, но об этом нигде ни слова. И *.tlb я не нашел в дистрибутиве.
...
Рейтинг: 0 / 0
20.01.2009, 10:39
    #35766458
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
про геррXenoX,

Ну обычно системы, которые предоставляют COM интерфейсы содержат в себе библиотеки *.tlb + вменяемый хелп по всем объектам, свойствам методам и пр. этих объектов.
В справке к 8.0. только внутренний язык описан, если его латинский вариант совпадает с именами объектов и их методами, тогда проще, но об этом нигде ни слова. И *.tlb я не нашел в дистрибутиве.

У объектов 1С 100% совпадает описание методов латиницей, в этом случае справка вам подойдет.
P.S. на дворе уже почти 3 года как 8.1. а вы все 8.0.

Ну например в Delphi 7
Project->Import type library
И в списвке видим 1CV81 COM Connector Type Library
При условии что 1С81 установлена в системе...
Плохо смотрели...
...
Рейтинг: 0 / 0
20.01.2009, 11:41
    #35766644
про герр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
litvikмне именно необходимо подключится к 1С через СОМ. BI-система может получать данные из DLL (собственный формат). Вот я и хочу в эту длл засунуть взаимодействие с 1С. Необходимо всего лишь получать результаты селектов из 1С.

ИМХО, при таком подходе, ваш модуль будет зависеть целиком и полностью от конфы 1С... изменилась конфа - надо будет перекомпилировать модуль.
легче сделать свой COM сервер (абсолютно не завязанный ни на какую конфу) и его вызывать из самой 1С, при этом открытые методы делать как бы "обезличенными", типа SetValue(BSTR FieldName, VARIANT Value)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
07.09.2010, 14:17
    #36834010
Kipetcoff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с 1С 8 через COM
Как раз столкнулся с проблемой, описываемой в этом вопросе.. Реализовал доступ к данным 1С через V81.COMConnector. Тормозит безбожно!!!
Код метода веб-сервиса

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
[WebMethod]
    public string GetPayrollReportMonths(string sPersId, string sOrgId)
    {
        //sPersId = "0000000008"
        //sOrgId = "000000002"

        object v8 = null;

        Adapter adapter = new Adapter();

        adapter.DBType = DatabaseType.File;
        adapter.FileBase = @"C:\Documents and Settings\Администратор\Рабочий стол\zup";


        try
        {
            v8 = adapter.Connect();
        }
        catch
        {
            adapter.ReleaseObject(ref v8);
        }

        object query = adapter.InvokeMethod(v8, "NewObject", new object[] { "Запрос" });

        string text = @"
            ВЫБРАТЬ РАЗЛИЧНЫЕ
	         	МЕСЯЦ(ВзаиморасчетыСРаботникамиОрганизаций.Период) КАК Месяц,
	         	ГОД(ВзаиморасчетыСРаботникамиОрганизаций.Период) КАК Год
	         ИЗ
	         	РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
	         ГДЕ
	         	ВзаиморасчетыСРаботникамиОрганизаций.Физлицо.Код = &ФизЛицо
	         	И ВзаиморасчетыСРаботникамиОрганизаций.Организация.Код = &Организация
	         
	         ОБЪЕДИНИТЬ
	         
	         ВЫБРАТЬ РАЗЛИЧНЫЕ
	         	МЕСЯЦ(НДФЛРасчетыСБюджетом.Период),
	         	ГОД(НДФЛРасчетыСБюджетом.Период)
	         ИЗ
	         	РегистрНакопления.НДФЛРасчетыСБюджетом КАК НДФЛРасчетыСБюджетом
	         ГДЕ
	         	НДФЛРасчетыСБюджетом.ФизЛицо.Код = &ФизЛицо
	         	И НДФЛРасчетыСБюджетом.Организация.Код = &Организация
	         
	         УПОРЯДОЧИТЬ ПО
	         	Год,
	         	Месяц";
        adapter.SetProperty(query, "Текст", text);

        adapter.InvokeMethod(query, "УстановитьПараметр", new object[] { "ФизЛицо", sPersId });
        adapter.InvokeMethod(query, "УстановитьПараметр", new object[] { "Организация", sOrgId });


        query = adapter.InvokeMethod(query, "Выполнить", null);
        query = adapter.InvokeMethod(query, "Выбрать", null);

        XmlDocument xmlDoc = new XmlDocument();

        xmlDoc.AppendChild(xmlDoc.CreateNode(XmlNodeType.XmlDeclaration, "decl", string.Empty));
        xmlDoc.AppendChild(xmlDoc.CreateNode(XmlNodeType.Element, "Months", string.Empty));

        while ((bool)adapter.InvokeMethod(query, "Следующий", null))
        {
            XmlNode rowElem = xmlDoc.CreateNode(XmlNodeType.Element, "MonthsTable", string.Empty);

            string sYear = adapter.GetProperty(query, "Год").ToString();
            string sMonth = adapter.GetProperty(query, "Месяц").ToString();
            XmlNode column = xmlDoc.CreateNode(XmlNodeType.Element, "Period", "");
            if (!string.IsNullOrEmpty(sYear) && !string.IsNullOrEmpty(sMonth))
            {
                DateTime dt = new DateTime(Convert.ToInt32(sYear), Convert.ToInt32(sMonth),  1 );
                column.InnerText = dt.Year.ToString() + "/" + dt.Month.ToString();
            }

            rowElem.AppendChild(column);

            xmlDoc.ChildNodes[ 1 ].AppendChild(rowElem);
        }
        adapter.ReleaseObject(ref query);
        adapter.ReleaseObject(ref v8);
        adapter.Dispose();
        return xmlDoc.InnerXml;
    }

Дополнительные методы адаптора

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
public object InvokeMethod(object target, string name, object[] args)
    {
        if (target == null) throw new ArgumentNullException();
        BindingFlags flags = BindingFlags.Public | BindingFlags.InvokeMethod;
        return target.GetType().InvokeMember(name, flags, null, target, args);
    }
public void SetProperty(object target, string name, object value)
    {
        if (target == null) throw new ArgumentNullException();
        BindingFlags flags = BindingFlags.Public | BindingFlags.SetProperty;
        target.GetType().InvokeMember(name, flags, null, target, new object[] { value });
    }
public object Connect()
    {
        if (v8 == null)
        {
            Type COM = Type.GetTypeFromProgID("V81.COMConnector", true);
            //V77S.Application V8.ComConnector V81.COMConnector

            connector = Activator.CreateInstance(COM);

            object[] args = { GetConnectionString() };

            v8 = InvokeMethod(connector, "Connect", args);
        }

        return v8;
    }

Написал консольное приложение для тестирования скорости доступа через веб-сервис
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Int64 start = DateTime.Now.Ticks;
            Console.WriteLine("Running ...");
            Console.WriteLine("*************************");


            ServiceSoapClient clClass = new ServiceSoapClient("ServiceSoap");
            clClass.Open();
            string ss5 = clClass.GetPayrollReportMonths("0000000008", "000000002");

            clClass.Close();

            Console.WriteLine("*************************");
            Console.WriteLine("Press any key to exit ...");
            Int64 end = DateTime.Now.Ticks;
            Decimal total = (Decimal)((end - start) /  10000000 );
            Console.WriteLine("Duaration: " + Decimal.Round(total,  2 ).ToString() + " sec.");
            Console.ReadLine();

Результат 5-7 секунд.. Очень плохой на мой взгляд. Тут был спор о скорости через COM. Как раз можно проверить возможности. Как можно оптимизировать доступ.? Или через COM скорости не добиться?
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Работа с 1С 8 через COM / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]