powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Как в проге на Visual C++ 6.0 через COM работать с БД 1С 8.2?
6 сообщений из 6, страница 1 из 1
Как в проге на Visual C++ 6.0 через COM работать с БД 1С 8.2?
    #38044518
_Ildar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток, Уважаемые!

Опыта мало, прошу помощи, не пинайте сильно.
Есть БД 1C в которой данные конфигурации CRM 2.0
Пишу прогу в Visual C++ 6.0.

Помогите пожалуйста найти работающий пример на Visual C++ 6.0 подключения к БД и выполнения различных действий?

Заранее Спасибо!

Best regards, Ildar
...
Рейтинг: 0 / 0
Как в проге на Visual C++ 6.0 через COM работать с БД 1С 8.2?
    #38044564
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подключение к СУБД исключено лицензией 1С, рекомендован Сом:

Конфигуратор 1С:Предприятие 8
Внешнее соединение (External connection)
Внешнее соединение (External connection)
Методы:

NewObject (NewObject)
String (String)

Описание:

В общем и целом работа с 1С:Предприятием 8 через внешнее соединение подобна работе с 1С:Предприятием в режиме Automation сервера. Основные отличия заключаются в следующем:
В случае Automation сервера запускается полноценное приложение 1С:Предприятия 8, а в случае внешнего соединения запускается относительно небольшой внутрипроцессный COM-сервер.
При работе через внешнее соединение не доступны функциональные возможности, так или иначе связанные с организацией пользовательского интерфейса 1С:Предприятия 8;
При работе внешнего соединения не используется модуль управляемого приложения (модуль обычного приложения) конфигурации 1С:Предприятия 8. Его роль при работе с внешним соединением играет модуль внешнего соединения.
При использовании внешнего соединения имеются следующие преимущества по сравнению с использованием Automation сервера:
Более быстрая установка соединения, так как не требуется создания отдельного процесса операционной системы, а все действия производятся в рамках вызывающего процесса;
Более быстрое обращение к свойствам и методам объектов 1C:Предприятия, так как для организации обращения не требуется организации межпроцессной коммуникации;
Меньший расход ресурсов операционной системы.
Для организации доступа к данным 1С:Предприятия 8 через внешнее соединение, выполняется следующая последовательность действий:
создается менеджер COM-соединений, с помощью которого производится установка соединения;
производится обращение к методу Connect менеджера COM-соединений. Метод Connect возвращает внешнее соединение с информационной базой 1С:Предприятия 8;
через внешнее соединение производится обращение к допустимым методам, свойствам и объектам информационной базы, с которой установлено соединение.
Важно! В связи с отсутствием пользовательского интерфейса не все объекты, а также свойства и методы можно использовать во внешнем соединении.
Внешнее соединение предоставляет полный доступ к своему глобальному контексту. Поэтому внешнее соединение в качестве своих методов может иметь: системные константы, значения заданных в конфигураторе объектов, доступ к которым осуществляется с помощью менеджеров (например, константы, перечисления, справочники, документы, журналы документов, отчеты, обработки, планы видов характеристик, планы счетов, планы видов расчета, регистры), а также переменные, объявленные в модуле внешнего соединения с ключевым словом Экспорт.

Доступность:

Интеграция.
Пример:

// Создание объекта-коннектора
cntr = Новый COMObject("V82.COMConnector");
// создается объект COM-соединение
connection = cntr.Connect("File=""c:\InfoBases\Trade"";Usr=""Director"";");
СпрКонтрагенты = connection.Справочники.Контрагенты;
Выборка = СпрКонтрагенты.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;

// Пример на языке MS Visual Basic
Sub Excel_to_trade()
Dim cntr As Object
Dim trade As Object
Dim Товар As Object
Set cntr = CreateObject("V82.COMConnector")
Set trade = cntr.Connect("File=""c:\InfoBases\Trade""; Usr=""Director"";")
Set Товар = trade.Справочники.Товары
Группа = Товар.СоздатьГруппу()
Группа.Наименование = "***** Экспорт из Excel ******"
Группа.Записать()
N = 100 'Количество строк в документе
For Count = 1 To N
Элемент = Товар.СоздатьЭлемент()
Элемент.Наименование = Application.Cells(Count, 2).Value
Элемент.Розн_Цена = Application.Cells(Count, 3).Value
Элемент.Мел_Опт_Цена = Application.Cells(Count, 4).Value
Элемент.Опт_Цена = Application.Cells(Count, 5).Value
Элемент.Родитель = Группа.Ссылка
Элемент.Записать()
Next Count
End Sub


См. также:

Соединение с рабочим процессом, метод Connect
Менеджер COM-соединений, метод Connect
Глобальный контекст, метод ПолучитьСообщенияПользователю



--------------------------------------------------------------------------------

© 1996-2010 1C. Все права защищены.
...
Рейтинг: 0 / 0
Как в проге на Visual C++ 6.0 через COM работать с БД 1С 8.2?
    #38044978
chatm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот странное дело. На форуме постоянно поднимаются такие вопросы - как считать данные из базы 1С напрямую. Почему разработчики на не-1С системах пытаются "влезть" в 1С через "альтернативные" ходы?

Почему нет аналогичных попыток в SAP или Oracle?

Почему в том же SAP все работают через BAPI, а в 1С использовать "родные" механизмы считается неприемлемым (неудобным, нелогичным etc)?
...
Рейтинг: 0 / 0
Как в проге на Visual C++ 6.0 через COM работать с БД 1С 8.2?
    #38045039
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chatmВот странное дело. На форуме постоянно поднимаются такие вопросы - как считать данные из базы 1С напрямую. Почему разработчики на не-1С системах пытаются "влезть" в 1С через "альтернативные" ходы?

Почему нет аналогичных попыток в SAP или Oracle?

Почему в том же SAP все работают через BAPI, а в 1С использовать "родные" механизмы считается неприемлемым (неудобным, нелогичным etc)?
Тоже интересует вопрос. Сталкивался с таким вот мнением (интеграция 1С с сайтом): "у меня сайт работатет на SQL и у тебя 1С работатет на SQL давай интеграцию сделаем средствами скуля"
...
Рейтинг: 0 / 0
Как в проге на Visual C++ 6.0 через COM работать с БД 1С 8.2?
    #38045168
_Ildar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shuhard,

Нашел пример, но пока не получается его использовать.
Подлючение через COM.
Код: sql
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.
86.
87.
88.
	// Под.ключаемся к 1С
	//для начала инициализируем COM
	VARIANT varRet;

	HRESULT hr = CoInitialize(NULL);
	if(FAILED(hr))
	{
		AfxMessageBox("Невозможно инициализировать COM!");
		return FALSE;
	}

	/*
	Прежде всего, нам необходимо получить
	ID сервера OLE Automation 1С Предприятия.
	*/
 
	/*
	Используем универсальный ключ 1С Предприятия 
 
	Подробнее см. КЖК – если у Вас установлена единственная 
	версия 1С – то этого достаточно, если несколько разных, 
	то нужно загрузить нужный. Вот краткий список возможных значений:
 
	V1CEnterprise.Application - версия независимый ключ;
	V82.Application - версия зависимый ключ;
	V82S.Application - версия зависимый ключ, SQL-версия;
	V82L.Application - версия зависимый ключ, локальная-версия;
	V82M.Application - версия зависимый ключ, сетевая-версия.
	*/

	hr = CLSIDFromProgID(L"V82.Application", &cls82); 
	if(FAILED(hr))
	{
		AfxMessageBox("Переустановите 1С Предприятие!");
		CoUninitialize();
		return FALSE;
	}

	//pv82 - это основной интерфейс, за который мы будем "дёргать"
	pv82 = NULL;
 
	/*
	Создаём инстанцию 1С Предприятия. 
 
	CLSCTX_LOCAL_SERVER – это значит, что 1С Предприятие 
	будет запущено в виде отдельного процесса – по другому оно не умеет.
	*/

	hr = CoCreateInstance(cls82, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&pv82);
 
	if(FAILED(hr) || !pv82)
	{
		AfxMessageBox("Невозможно инициализировать интерфейс 1С Предприятия"); 
		CoUninitialize();
		return FALSE;
	}

	/*
	пока всё было понятно и очевидно, дальше начинаются сложности… 
	1С предоставляет для запуска приложения функцию Initialize. 
	Вызов этой функции выглядит в VB элементарно
 
	V82.Initialize(V82.CRM,"\\путь\CRM /N"+Пользователь ,"NO_SPLASH_SHOW");
 
	- мы практически забываем, что же происходит внутри.
	Но занимающиеся С++ люди хладнокровные, трудностей не боятся. 
	Во-первых: мы должны помнить, что аргументы необходимо заталкивать задом наперёд…
	Во-вторых: мы должны помнить, что CRM - это тоже IDispatch интерфейс.. и его сперва нужно получить.
	*/

	VARIANT       vRet;
	DISPID dispIDCRM, dispIDInitialize = 0;
	DISPPARAMS args = {0, 0, 0, 0};
	VARIANT vars[3];  // Параметры для вызова Initialize
 
	//Мы получим IDispatch интерфейс от CRM сразу в vars[2]
	_bstr_t bstr1(_T("CRM"));
	BSTR rmCRM = bstr1.copy();

	hr = pv82->GetIDsOfNames(IID_NULL, &rmCRM, 1, 0, &dispIDCRM);
 
	if (FAILED(hr))
	{
		AfxMessageBox("Невозможно получить ID от CRM");
		if (pv82) pv82->Release();
		CoUninitialize();
		return FALSE;
	}


В hr код ошибки 0x80020006.
Что в программе неправильно?
...
Рейтинг: 0 / 0
Как в проге на Visual C++ 6.0 через COM работать с БД 1С 8.2?
    #38045229
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Ildar_ Что в программе неправильно?
всё
начиная с того, что вместо "V82.COMConnector" использована гуя через "V82.Application"
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Как в проге на Visual C++ 6.0 через COM работать с БД 1С 8.2?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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