Простой, элегантный, в соответствии со всеми правилами "Чистого Кода", класс для соединения с базой 1С через V3 COMConnector.
Исходный код тут: https://github.com/amizerov/Confa1Cv3
Исходный код тут: https://github.com/amizerov/Confa1Cv3
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;
Task.Run(Connect);
}
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;
}
}
}
}
Использование:
namespace Confa1Cv3;
public partial class FrmMain : Form
{
string ConnectionString = "File='D:\\Projects\\1C\\Базы\\МГУ\\Пустая'";
public FrmMain()
{
InitializeComponent();
}
private void btnConnect_Click(object sender, EventArgs e)
{
txtLog.Text = "";
ConnectionString = txtBase.Text;
Com1C.ConnectTo1C(ConnectionString);
}
private void FrmMain_Load(object sender, EventArgs e)
{
Com1C.OnConnect += OnConnect;
Com1C.OnError += OnError;
Com1C.Progress += Progress;
var b = Environment.Is64BitProcess;
txtBase.Text = ConnectionString;
}
void OnConnect(string msg)
{
Invoke(new Action(() =>
{
txtLog.Text += "\r\n-----Connect: \r\n" + msg;
}));
}
void OnError(string msg)
{
Invoke(new Action(() =>
{
txtLog.Text += "\r\n-----Error: \r\n" + msg;
}));
}
void Progress(string msg)
{
Invoke(new Action(() =>
{
txtLog.Text += "\r\n-----Progress: \r\n" + msg;
}));
}
private void btnSelectBase_Click(object sender, EventArgs e)
{
if(baseFolderBrowserDialog.ShowDialog() == DialogResult.OK)
{
ConnectionString = txtBase.Text = "File='" + baseFolderBrowserDialog.SelectedPath + "'";
}
}
private void btnCloseConnection_Click(object sender, EventArgs e)
{
Com1C.CloseConnection();
}
}
Класс доступа к базе 1С на C# через V3 COMConnector