Сообщение Работа из VC++ с базой 1С83 через V83.COMConnector от 12.02.2015 11:43
Изменено 12.02.2015 11:46 SANblCH_SUN
Прошу помочь дописать программу VC++ 2010 MFC:
соединение с базой 1C выполняется а как дальше, как какие-нибудь данные? как выполнить в базе 1с внешнюю обработку?
соединение с базой 1C выполняется а как дальше, как какие-нибудь данные? как выполнить в базе 1с внешнюю обработку?
void CMy1С_V83_COMConnectorDlg::OnBnClickedButton1()
{
//для начала инициализируем COM
HRESULT hr = CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
if(FAILED(hr))
{
AfxMessageBox(_T("Невозможно инициализировать COM!"));
return;
}
CLSID cls8;
hr = CLSIDFromProgID(L"V83.COMConnector",&cls8);
if(FAILED(hr))
{
AfxMessageBox(_T("Переустановите 1С Предприятие!"));
CoUninitialize();
return;
}
IDispatch *pv8 = NULL;
hr = CoCreateInstance(cls8,NULL,CLSCTX_INPROC_SERVER,IID_IDispatch,(void**)&pv8);
if(FAILED(hr) || !pv8)
{
AfxMessageBox(_T("Невозможно инициализировать 1С Предприятия"));
CoUninitialize();
return;
}
DISPID dispIDInitialize;
OLECHAR * init = L"Connect";
hr = pv8->GetIDsOfNames(IID_NULL,&init,1,LOCALE_SYSTEM_DEFAULT,&dispIDInitialize);
if (FAILED(hr))
{
AfxMessageBox(_T("Не удалось получить ID от Initialize"));
if (pv8) pv8->Release();
CoUninitialize();
return;
}
// Connect принимает только 1 параметр
VARIANT VarResult;//указатель на интерфейс IDispatch
VarResult.vt=VT_EMPTY;
DISPPARAMS args = {NULL,NULL,0,0};
args.rgvarg = new VARIANT[1];
args.cArgs = 1;
VariantInit(args.rgvarg);
args.rgvarg[0].vt = VT_BSTR;
args.rgvarg[0].bstrVal = SysAllocString(L"File=\"C:\\base\";Usr=\"Администратор\"");
hr = pv8->Invoke(dispIDInitialize,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,&args,&VarResult,NULL,NULL);
if (FAILED(hr))
{
AfxMessageBox(_T("Невозможно подключиться к базе 1С Предприятия"));
if (pv8) pv8->Release();
CoUninitialize();
return;
}
VarResult.vt=VT_EMPTY;
pv8->Release();
CoUninitialize();
SysFreeString(args.rgvarg[0].bstrVal);
delete [] args.rgvarg;
}
Работа из VC++ с базой 1С83 через V83.COMConnector
Прошу помочь дописать программу VC++ 2010 MFC:
соединение с базой 1C выполняется а как дальше, как какие-нибудь данные получить? как выполнить в базе 1с внешнюю обработку?
соединение с базой 1C выполняется а как дальше, как какие-нибудь данные получить? как выполнить в базе 1с внешнюю обработку?
void CMy1С_V83_COMConnectorDlg::OnBnClickedButton1()
{
//для начала инициализируем COM
HRESULT hr = CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
if(FAILED(hr))
{
AfxMessageBox(_T("Невозможно инициализировать COM!"));
return;
}
CLSID cls8;
hr = CLSIDFromProgID(L"V83.COMConnector",&cls8);
if(FAILED(hr))
{
AfxMessageBox(_T("Переустановите 1С Предприятие!"));
CoUninitialize();
return;
}
IDispatch *pv8 = NULL;
hr = CoCreateInstance(cls8,NULL,CLSCTX_INPROC_SERVER,IID_IDispatch,(void**)&pv8);
if(FAILED(hr) || !pv8)
{
AfxMessageBox(_T("Невозможно инициализировать 1С Предприятия"));
CoUninitialize();
return;
}
DISPID dispIDInitialize;
OLECHAR * init = L"Connect";
hr = pv8->GetIDsOfNames(IID_NULL,&init,1,LOCALE_SYSTEM_DEFAULT,&dispIDInitialize);
if (FAILED(hr))
{
AfxMessageBox(_T("Не удалось получить ID от Initialize"));
if (pv8) pv8->Release();
CoUninitialize();
return;
}
// Connect принимает только 1 параметр
VARIANT VarResult;//указатель на интерфейс IDispatch
VarResult.vt=VT_EMPTY;
DISPPARAMS args = {NULL,NULL,0,0};
args.rgvarg = new VARIANT[1];
args.cArgs = 1;
VariantInit(args.rgvarg);
args.rgvarg[0].vt = VT_BSTR;
args.rgvarg[0].bstrVal = SysAllocString(L"File=\"C:\\base\";Usr=\"Администратор\"");
hr = pv8->Invoke(dispIDInitialize,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,&args,&VarResult,NULL,NULL);
if (FAILED(hr))
{
AfxMessageBox(_T("Невозможно подключиться к базе 1С Предприятия"));
if (pv8) pv8->Release();
CoUninitialize();
return;
}
VarResult.vt=VT_EMPTY;
pv8->Release();
CoUninitialize();
SysFreeString(args.rgvarg[0].bstrVal);
delete [] args.rgvarg;
}