Профессиональные приемы работы в  Microsoft Excel

Top.Mail.Ru

Яндекс.Метрика

Система 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 запускается в фоновом режиме без отображения на экране.