Как открыть 1С и форму элемента справочника из Excel с помощью VBA?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При автоматизации бизнес-процессов часто возникает задача связать таблицы Excel с платформой 1С. Например, кликая по ФИО сотрудника в таблице Excel, необходимо запустить 1С (если она еще не открыта) и автоматически отобразить форму элемента справочника Сотрудники или ФизическиеЛица.

В этой статье мы подробно разберем все доступные способы реализации этой задачи, проанализируем нюансы работы с COM-соединением, навигационными ссылками и параметрами командной строки.

Вариант 1. Открытие формы через Automation-сервер V83.Application

Разберем классический подход с использованием программного кода VBA. Очень часто разработчики совершают ошибку, пытаясь использовать объект V83.COMConnector. Важно понимать разницу между типами подключений:

  1. V83.COMConnector — предназначен только для работы с данными в фоновом режиме. Он не имеет пользовательского интерфейса, поэтому с его помощью не получится открыть форму на экране. Кроме того, этот объект требует наличия установленной платформы 1С на клиентском ПК.
  2. V83.Application — полноценный Automation-сервер, который запускает клиенскую часть 1С с графическим интерфейсом и позволяет манипулировать окнами и формами.

Посмотрим на пример кода на VBA, который подключается к базе 1С, ищет сотрудника по наименованию и открывает его форму:


Sub Open1CEmployee()
    Dim v83 As Object
    Dim connectionString As String
    Dim employeeRef As Object
    
    ' Формируем строку подключения к информационной базе
    connectionString = "File=""C:\Bases\DemoBase"";Usr=""Администратор"";Pwd=""123"";"
    
    On Error Resume Next
    Set v83 = CreateObject("V83.Application")
    On Error GoTo 0
    
    If v83 Is Nothing Then
        MsgBox "Не удалось создать объект V83.Application. Проверьте установку 1С.", vbCritical
        Exit Sub
    End If
    
    ' Подключаемся к базе
    If v83.Connect(connectionString) Then
        ' Делаем окно 1С видимым
        v83.Visible = True
        
        ' Выполняем поиск элемента в справочнике
        Set employeeRef = v83.Справочники.Сотрудники.НайтиПоНаименованию("Иванов Иван Иванович")
        
        If Not employeeRef.IsEmpty() Then
            ' Открываем форму найденного объекта
            employeeRef.ПолучитьФорму().Открыть()
        Else
            MsgBox "Сотрудник не найден в базе 1С!", vbExclamation
        End If
    Else
        MsgBox "Ошибка подключения к базе 1С!", vbCritical
    End If
End Sub

Важное замечание о разрядности (32-bit vs 64-bit): Если при выполнении CreateObject("V83.Application") возникает ошибка «Класс не зарегистрирован», проанализируем разрядность программ. Разрядность Microsoft Excel и платформы 1С должна совпадать. Если Excel установлен в 64-разрядной версии, а 1С — в 32-разрядной, COM-объект не создастся, даже если выполнить регистрацию библиотеки comcntr.dll через regsvr32.

Вариант 2. Использование навигационных ссылок (протокол e1cib)

Рассмотрим более современный и быстрый способ, подходящий для конфигураций на управляемых формах. При установке платформы 1С в операционной системе автоматически регистрируются протоколы e1c и e1cib.

Каждый объект информационной базы имеет уникальную внешнюю навигационную ссылку. Формат ссылки выглядит следующим образом:

e1cib/data/Справочник.Сотрудники?ref=8b333abfaf8d323149e126f75af65a86

Если база опубликована на веб-сервере, ссылка принимает вид стандартного URL:

http://АдресСервера/ИмяБазы#e1cib/data/Справочник.Сотрудники?ref=8b333abfaf8d323149e126f75af65a86

Разберем преимущества этого метода:

  1. Переход по такой ссылке из Excel автоматически открывает объект в уже запущенном сеансе 1С или инициирует запуск тонкого клиента.
  2. Не требуется писать сложные макросы VBA для инициализации COM-соединения, что экономит до 30–40 секунд при каждом вызове.
  3. Не возникает проблем с разрядностью приложений.

Ограничение: Для формирования прямой ссылки из Excel необходимо заранее знать уникальный идентификатор (GUID) объекта в базе 1С.

Вариант 3. Запуск 1С из командной строки с параметром /C

Проанализируем еще один подход — запуск 1С через командную строку Windows из VBA с помощью функции Shell или объекта WScript.Shell с передачей параметра запуска /C.

Шаг 1. Код VBA в Excel запускает исполняемый файл 1С и передает наименование или код сотрудника:


Sub Launch1CWithParameter()
    Dim ShellPath As String
    Dim ExecCmd As String
    Dim EmployeeName As String
    
    EmployeeName = "Иванов Иван Иванович"
    
    ' Формируем команду запуска
    ExecCmd = """C:\Program Files\1cv8\8.3.23.1865\bin\1cv8.exe"" ENTERPRISE /F ""C:\Bases\DemoBase"" /N ""Администратор"" /C """ & EmployeeName & """"
    
    Shell ExecCmd, vbNormalFocus
End Sub

Шаг 2. В конфигурации 1С в модуле управляемого приложения обрабатываем параметр запуска в событии ПриНачалеРаботыСистемы:


Процедура ПриНачалеРаботыСистемы(Отказ)
    Параметр = ПараметрЗапуска;
    Если ЗначениеЗаполнено(Параметр) Тогда
        СотрудникСсылка = Справочники.Сотрудники.НайтиПоНаименованию(Параметр);
        Если ЗначениеЗаполнено(СотрудникСсылка) Тогда
            ПараметрыФормы = Новый Структура("Ключ", СотрудникСсылка);
            ОткрытьФорму("Справочник.Сотрудники.ФормаОбъекта", ПараметрыФормы);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Вариант 4. Получение данных без установки 1С (OData / REST API)

Если на компьютере пользователя не установлена платформа 1С, использовать COM-соединение или Automation-сервер невозможно. В таком случае выясним, как решить задачу с помощью веб-технологий.

Если база 1С опубликована на веб-сервере и включен интерфейс OData, то из VBA можно отправлять обычные HTTP-запросы (MSXML2.ServerXMLHTTP), получать данные о сотруднике в формате JSON или XML и генерировать гиперссылку для открытия элемента в веб-клиенте через браузер.

Резюме

Выясним, какой способ выбрать для вашей задачи:

  1. Если требуется открыть полноценный интерфейс 1С прямо с ПК пользователя и установлена совпадающая разрядность — используйте V83.Application в VBA.
  2. Если конфигурация работает на управляемых формах и важна скорость открытия — применяйте навигационные ссылки e1cib.
  3. Если на компьютере нет установленной платформы 1С — организуйте работу через веб-клиент и REST API (OData).
← На главную