Интеграция Creatio с 1С 8 с помощью COM-коннектора

Существуют различные способы интеграции Creatio CRM и 1С 8. Наиболее распространенный и технологичный - через протокол ODATA. Единственный недостаток этого способа - необходимо публиковать базу 1С 8.

Если не хочется заморачиваться с программированием, то можно приобрести задорого готовые модули интеграции Creatio с 1С на Terrasoft Marketplace.

Наиболее быстродействующий способ интеграции - средствами SQL-сервера, минуя сервер 1С Предприятия. В этом случае обычно не контролируются права доступа пользователей.

В данной статье рассматривается довольно-таки старый способ интеграции через COM-коннектор, который использовался еще во времена ламповой Terrasoft CRM 3.x. Способ простой, но требует предварительной настройки COM-коннектора для 1С.

Ниже приведен код сценария C# (можно использовать в бизнес-процессе Creatio), который позволяет подключиться к базе 1С 8 и записать реквизиты контрагента.

string AccountCode = Get<string>("ProcessSchemaParameterAccountCode"); //код контрагента
int AccountSum = Get<int>("ProcessSchemaParameterAccountSum"); // значение некоего параметра контрагента

string connectionString = "Srvr='ServerName';Ref='BD1SName';Usr='User1SName';Pwd='User1SPassword';";
Type oType = Type.GetTypeFromProgID("V83.COMConnector");
if (oType != null) {
object V8 = Activator.CreateInstance(oType);
object connection;
try {
connection = oType.InvokeMember("Connect", BindingFlags.Public | BindingFlags.InvokeMethod, null, V8, new object[] { connectionString });
}
catch (Exception e) {
//Сформировать сообщение об ошибке подключения к 1С. Сообщение выводится логикой бизнес-процесса, в зависимости от параметра ниже.
Set<bool>("ProcessSchemaParameterConnectionTo1SIsOK", false);
return true;
}

object Dictionaries1C = connection.GetType().InvokeMember("Справочники", BindingFlags.GetProperty, null, connection, null);
object Accounts1C = connection.GetType().InvokeMember("Контрагенты", BindingFlags.GetProperty, null, Dictionaries1C, null);
object FindAccount1S = connection.GetType().InvokeMember("НайтиПоРеквизиту", BindingFlags.InvokeMethod, null, Accounts1C, new object[] { "КодПоЕДРПОУ", AccountCode });

bool Account1CIsNotExist = Convert.ToBoolean(connection.GetType().InvokeMember("Пустая", BindingFlags.InvokeMethod, null, FindAccount1S, new object[] {}));

if (Account1CIsNotExist == true) {

//Контрагент не найден в 1С
Set<bool>("ProcessSchemaParameterAccount1SIsOK", false);

} else {

object GetAccount1S = connection.GetType().InvokeMember("ПолучитьОбъект", BindingFlags.InvokeMethod, null, FindAccount1S, null);

connection.GetType().InvokeMember("Сумма", BindingFlags.SetProperty, null, GetAccount1S, new object[] { AccountSum });
connection.GetType().InvokeMember("Записать", BindingFlags.InvokeMethod, null, GetAccount1S, null);

}
}

return true;

Добавить комментарий

Ваш e-mail не будет опубликован.

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: