Простой, элегантный, в соответствии со всеми правилами “Чистого Кода”, класс для соединения с базой 1С через COMConnector.
using V83;
namespace Confa1Cv3;
public class Com1C
{
public static event Action? OnConnect;
public static event Action? Progress;
public static event Action? OnError;
public static bool Connecting { get; private set; }
public static bool IsConnected { get; private set; }
private static string? _connectionString;
private static COMConnector? _con;
private static dynamic? _база1С;
private static string _error = "";
public static string LastError
{
get { return _error; }
set { _error = value; if (_error.Length > 0) { OnError?.Invoke(_error); } }
}
public static void ConnectTo1C(string connectionString)
{
_connectionString = connectionString;
new Thread(Connect).Start();
}
private static void Connect()
{
if (IsConnected) return;
try
{
Progress?.Invoke($"Идет соединение с сервером 1С ({_connectionString}) ...");
Connecting = true;
_con = new COMConnector();
_база1С = _con.Connect(_connectionString);
IsConnected = true;
OnConnect?.Invoke($"Соединение с сервером 1С ({_connectionString}) установлено.");
}
catch (Exception ex)
{
IsConnected = false;
LastError = ex.Message;
}
finally
{
Connecting = false;
}
}
public static void CloseConnection()
{
if (IsConnected && _con != null)
{
try
{
_база1С = _con = null;
Progress?.Invoke($"Соединение с сервером 1С ({_connectionString}) закрыто.");
}
catch (Exception ex)
{
LastError = ex.Message;
}
finally
{
IsConnected = false;
}
}
}
}