Система 1С позволяет гибко интегрировать приложения,написанные в этой среде с другими приложениями, например Microsoft Office. Имеется возможность как обращаться ко внешним приложениям из кода 1С, так и наоборот, из внешних приложений к 1С. Рассмотрим пример обращения к 1С из эксель с помощью макросов VBA через механизм OLE.
Предположим у нас в Excel есть список городов, который нужно внести в справочник 1С Пункты назначения:
Адлер Краснодарский край
Азов Ростовская область
Александров Владимирская область
Анапа Краснодарский край
Арзамас Нижегородская область
Архангельск Архангельская область
Архипо-Осиповка Краснодарский край
Астрахань Астраханская область
Балахна Нижегородская область
и т.п.
Сначала необходимо создать подключение к нужной базе 1С:
Public v8 As Object Dim v8con As New V82.COMConnector
Public Sub v8connect()
Set v8 = v8con.Connect("Srvr=srv-db10;Ref=holding;Usr=""Алексей Шмуйлович"";pwd=**************")
End Sub
В строку подключения нужно подставить наименование своих сервера, базы, пользователя и пароль. Пользователю 1С, от имени которого происходит подключение, должно быть заранее предоставлено право внешнего подключения. Обратите внимание, для присвоения переменной v8 значения типа V82.COMConnector, как и других агрегатных типов данных системы 1С, использование ключевого слова Set обязательно! Соединение установлено. Переменная v8 предоставляет доступ ко всем свойствам и методам конкретной базы 1С. Правда Вы не получите привычных подсказок VBA с доступными свойствами и методами. Так что для упрощения работы лучше сначала написать код в конфигураторе 1С, а затем уже скопировать его в модуль VBA и лишь немного адаптировать синтаксис и заменить ссылки на абстрактные переменные ссылками на данные Excel. Теперь создадим процедуру заполнения справочника:
Sub ЗаполнитьГорода()
If v8 Is Nothing Then v8connect 'Проверяем, что подключение к 1С установлено
'Получаем ссылку на значение "Россия" справочника Классификатор стран мира, оно понадобится ниже.
Set Россия = v8.Справочники.КлассификаторСтранМира.НайтиПоНаименованию("Россия")
'Начинаем обход строк исходного списка Excel
For Each стр In Sheets("Города").UsedRange.Rows
'Создаем новый элемент справочника и заполняем его свойства
Set спр = v8.Справочники.НКМ_ПунктыНазначения.СоздатьЭлемент
спр.Город = Trim(стр.Cells(1)) 'Функция trim(), помимо того, что удаляет лишние пробелы, преобразует значение к типу Строка.
'Можно было использовать вместо этого конструкцию стр.Cells(1).Value
спр.Регион = Trim(стр.Cells(2))
спр.Страна = Россия
спр.Наименование = спр.Город + ", " + спр.Регион + ", Россия"
спр.Записать
Next
End Sub
Обратите внимание, после выполнения кода переменная v8 все еще содержит ссылку на 1С и занимает сеанс подключения. Чтобы закрыть сеанс нужно либо в коде присвоить переменной пустое значение (set v8 = Nothing), либо вручную нажать Reset, то есть остановить отладку в редакторе VBA. Я не включил в код сброс переменной сознательно. Обычно запуск сеанса 1С занимает некоторое немалое время. Если с базой через удаленное соединение нужно проделать несколько операций, такое построение кода позволит каждый раз использовать уже установленное ранее соединение.
Заполнение справочника из Excel - лишь пример разнообразных возможностей, предоставляемых механизмос OLE Automation. Вы можете получать данные из справочников, создавать и читать документы 1С, считывать проводки, получать данные из запросов и т.п. Следует только учитывать, что внешнее подключение не может использовать свойства, связанные с интерфейсом 1С, так как объект V82.COMConnector запускается в фоновом режиме без отображения на экране.