Простой, элегантный, в соответствии со всеми правилами "Чистого Кода", класс для соединения с базой 1С через V3 COMConnector.

Исходный код тут: https://github.com/amizerov/Confa1Cv3
				
					using V83;

namespace Confa1Cv3;

public class Com1C
{
    public static event Action<string>? OnConnect;
    public static event Action<string>? Progress;
    public static event Action<string>? 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
Tagged on:         

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.