Excel и база 1С 8.3: четыре способа получать и отправлять данные

· 10 мин

Содержание

Подключиться к 1С из Excel можно двумя рабочими способами: макросом VBA через COM-объект V83.COMConnector или через Power Query по протоколу OData, если база опубликована на веб-сервере. Для разовых задач подключение не нужно вовсе: любой список и отчёт 1С сохраняется в .xlsx, а таблицы из Excel загружаются обратно штатными командами.

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

Какой способ связи Excel и 1С вам подходит?

Выгрузка из 1С в Excel и загрузка обратно без программирования

Половина задач «связать Excel и 1С» решается без единой строки кода. Платформа 8.3 сама сохраняет табличные документы в формат Excel.

Как выгрузить список или отчёт в .xlsx

  1. Откройте нужный список: номенклатуру, контрагентов, журнал документов .
  2. Нажмите Ещё → Вывести список..., отметьте нужные колонки и нажмите «ОК». Откроется табличный документ.
  3. Откройте главное меню (кнопка с тремя полосками в заголовке окна) и выберите Файл → Сохранить как....
  4. В поле типа файла выберите «Лист Microsoft Excel 2007-…» с расширением .xlsx.

Отчёты сохраняются так же: сформируйте отчёт, затем Файл → Сохранить как... или кнопка сохранения на панели отчёта. Комбинация Ctrl+S в открытом табличном документе делает то же самое.

Для быстрой вставки в уже открытую книгу выделите ячейки в табличном документе 1С, нажмите Ctrl+C и вставьте в Excel. Форматирование частично сохранится, числа останутся числами.

Как загрузить таблицу из Excel в 1С

  • 📦 Справочники. В БП 3.0, УТ 11 и других конфигурациях на БСП в списке номенклатуры есть команда «Загрузить» (иногда спрятана в «Ещё»). Она открывает форму, куда вставляют колонки из Excel и сопоставляют их с реквизитами.
  • 🧾 Табличные части документов. В поступлении и реализации у таблицы «Товары» есть команда загрузки из файла. Ищите её в меню «Ещё» над табличной частью.
  • 🛠 Нестандартные случаи. Внешняя обработка «Загрузка данных из табличного документа» загружает почти в любой справочник, документ или регистр сведений . Её распространяют вместе с материалами ИТС, открывается через Файл → Открыть.

Перед загрузкой в справочник с тысячами строк сделайте резервную копию базы . Неверно сопоставленная колонка создаст сотни дублей, а удалять их придётся вручную.

Подключение к 1С из Excel через COM-соединение (VBA)

COM-соединение — это «внешнее соединение» с базой. Excel запускает внутри себя движок 1С, входит в базу под указанным пользователем и выполняет запросы на языке 1С. Окно программы при этом не открывается.

Что нужно подготовить

  • 💻 На компьютере установлена платформа 1С той же версии, что и база (для клиент-серверной базы — та же сборка, что на сервере).
  • 🔢 Разрядность платформы совпадает с разрядностью Excel. 64-битный Office работает только с 64-битной компонентой, 32-битный — с 32-битной. Разрядность Office видна в Файл → Учётная запись → О программе Excel.
  • 📝 Компонента comcntr.dll зарегистрирована в Windows.
  • 👤 В базе есть пользователь, у роли которого включено право «Внешнее соединение».

Регистрация компоненты выполняется в командной строке, запущенной от имени администратора:

regsvr32 "C:\Program Files\1cv8\8.3.24.1467\bin\comcntr.dll"

Номер версии в пути замените на свой. Для 32-битной платформы путь начинается с C:\Program Files (x86)\1cv8\. После обновления платформы компоненту регистрируют заново из папки новой версии.

Строка подключения

БазаСтрока для метода Connect
ФайловаяFile="C:\Bases\Buh";Usr="Excel";Pwd="пароль";
Клиент-сервернаяSrvr="srv1c";Ref="buh";Usr="Excel";Pwd="пароль";

Ref — имя базы в кластере, а не её название в списке баз. Если сервер слушает нестандартный порт, его указывают через двоеточие: Srvr="srv1c:2541".

Пример макроса: номенклатура из 1С на лист Excel

Откройте редактор VBA (Alt+F11), вставьте модуль и код:

Sub LoadNomenclatureFrom1C()
    Dim Connector As Object, Base As Object
    Dim Q As Object, Sel As Object
    Dim r As Long

    Set Connector = CreateObject("V83.COMConnector")
    Set Base = Connector.Connect("File=""C:\Bases\Buh"";Usr=""Excel"";Pwd=""пароль"";")

    Set Q = Base.NewObject("Query")
    Q.Text = "ВЫБРАТЬ Н.Код КАК Cd, Н.Наименование КАК Nm, Н.Артикул КАК Art " & _
             "ИЗ Справочник.Номенклатура КАК Н ГДЕ НЕ Н.ЭтоГруппа"
    Set Sel = Q.Execute().Select()

    r = 2
    Sheets(1).Range("A1:C1").Value = Array("Код", "Наименование", "Артикул")
    Do While Sel.Next()
        Sheets(1).Cells(r, 1).Value = Sel.Cd
        Sheets(1).Cells(r, 2).Value = Sel.Nm
        Sheets(1).Cells(r, 3).Value = Sel.Art
        r = r + 1
    Loop

    Set Sel = Nothing: Set Q = Nothing
    Set Base = Nothing: Set Connector = Nothing
End Sub

Полям в запросе даны латинские псевдонимы (Cd, Nm, Art), чтобы в VBA не писать кириллические имена свойств. Сам текст запроса и имя справочника остаются на русском: для этого в Windows должен стоять русский язык для программ, не поддерживающих Юникод (Панель управления → Региональные стандарты → Дополнительно). Иначе кириллица в редакторе VBA превратится в знаки вопроса.

Тяжёлые запросы не стоит гонять в рабочее время. Внешнее соединение — полноценный сеанс в базе, он нагружает сервер так же, как пользователь, формирующий большой отчёт.

OData и ODBC: прямой запрос к данным 1С из Excel

Стандартный интерфейс OData и Power Query

Это самый удобный способ для регулярных отчётов: Excel сам забирает данные по ссылке и обновляет их кнопкой «Обновить всё». Платформа 1С на компьютере пользователя не нужна.

Порядок настройки:

  1. Опубликуйте базу на веб-сервере (IIS или Apache): в Конфигураторе Администрирование → Публикация на веб-сервере, отметьте флажок публикации стандартного интерфейса OData.
  2. Укажите, какие объекты доступны по OData. В БП 3.0 и других конфигурациях на БСП это делается в режиме «Предприятие»: Администрирование → Синхронизация данных → Настройки стандартного интерфейса OData. Там же создаётся отдельный пользователь для внешнего доступа.
  3. В Excel: Данные → Получить данные → Из других источников → Из канала OData.
  4. Введите адрес вида http://server/buh/odata/standard.odata/, выберите обычную (Basic) авторизацию и логин с паролем пользователя из шага 2.
  5. В навигаторе отметьте нужные наборы, например Catalog_Номенклатура или AccumulationRegister_..., и загрузите их на лист или в модель данных.

Имена наборов в OData английские по типу объекта: Catalog_ для справочников, Document_ для документов, InformationRegister_ и AccumulationRegister_ для регистров. Дальше Power Query фильтрует, объединяет и группирует данные без программирования.

ODBC-драйверы и SQL: когда это вообще возможно

Для баз 1С 8.3 нет ODBC-драйвера, который читал бы файловую базу (1Cv8.1CD). Подключение через ODBC возможно только к клиент-серверной базе, и только к самой СУБД: MS SQL Server или PostgreSQL. В Excel это Данные → Получить данные → Из базы данных.

Проблемы у этого пути серьёзные:

  • 🔒 Таблицы в СУБД названы служебными именами вроде _Reference42 и _Document118. Соответствие объектам конфигурации выдаёт метод ПолучитьСтруктуруХраненияБазыДанных(), и после каждого обновления конфигурации оно может измениться.
  • ⚖️ Лицензионное соглашение 1С ограничивает доступ к данным в обход платформы. Прежде чем строить на этом отчётность, уточните условия у своего партнёра 1С.
  • 🧮 В таблицах нет итогов, вычисляемых полей и прав доступа 1С. Остатки и обороты придётся собирать самостоятельно.
СпособКогда подходитПлатформа на ПКЗапись в 1СГлавный риск
Сохранить как .xlsxРазовая выгрузкаНужна (обычный клиент)Через загрузкуРучная работа
COM из VBAРегулярные выгрузки в локальной сетиНужна, той же версииДаПароль в макросе, разрядность
OData + Power QueryОбновляемые отчёты, удалённые сотрудникиНе нужнаВозможна, но редко используетсяПубликация базы в сеть
ODBC к SQLАналитика по большой базеНе нужнаНетЛицензия, нестабильные имена таблиц

Как записать данные из Excel обратно в 1С

Для справочников и документов сначала пробуйте штатную загрузку из первого раздела. Она проверяет данные так же, как ручной ввод.

Макрос нужен, когда надо массово изменить реквизит у существующих элементов. Пример: в колонке A листа — коды номенклатуры, в колонке B — новые артикулы.

Sub UpdateArticlesIn1C()
    Dim Connector As Object, Base As Object
    Dim Ref As Object, Obj As Object
    Dim r As Long

    Set Connector = CreateObject("V83.COMConnector")
    Set Base = Connector.Connect("File=""C:\Bases\Buh"";Usr=""Excel"";Pwd=""пароль"";")

    r = 2
    Do While Sheets(1).Cells(r, 1).Value <> ""
        Set Ref = Base.Catalogs.Номенклатура.FindByCode(CStr(Sheets(1).Cells(r, 1).Value))
        If Ref.IsEmpty() Then
            Sheets(1).Cells(r, 3).Value = "не найден"
        Else
            Set Obj = Ref.GetObject()
            Obj.Артикул = CStr(Sheets(1).Cells(r, 2).Value)
            Obj.Write
            Sheets(1).Cells(r, 3).Value = "записан"
        End If
        r = r + 1
    Loop

    Set Obj = Nothing: Set Ref = Nothing
    Set Base = Nothing: Set Connector = Nothing
End Sub

FindByCode при отсутствии элемента возвращает пустую ссылку, поэтому перед записью проверяется IsEmpty(). В колонку C макрос пишет результат по каждой строке, чтобы после прогона было видно, что не нашлось.

Коды в БП 3.0 строковые, вида 00-00000123. Если Excel превратил их в числа и срезал нули, формат колонки нужно сменить на текстовый до вставки данных.

Запись через COM выполняет модуль объекта и проверки при записи, но не запускает логику формы. То, что программа заполняет при вводе в форме, макрос не заполнит. Сначала прогоните макрос на 5–10 строках в копии базы.

Ошибки подключения Excel к 1С и что с ними делать

Диагностика: выберите симптом

Ещё одна частая ситуация — файловая база открыта в Конфигураторе. Пока там идёт обновление конфигурации или тестирование и исправление, внешнее соединение не установится. Дождитесь окончания операции.

Если COM не заработал совсем, а база файловая и платформу на ПК ставить нельзя, остаётся связка «выгрузка в .xlsx по расписанию». В 1С это делается регламентным заданием или внешней обработкой, которую пишет программист. Excel затем открывает свежий файл из общей папки.

Безопасность связки Excel и 1С

  • 🔑 Отдельный пользователь. Заведите в 1С пользователя только для Excel с ролью на чтение нужных объектов. Права администратора ему не нужны.
  • 🙈 Пароль не в коде. Пароль, записанный в макросе, прочитает любой, кто откроет редактор VBA. Запрашивайте его через InputBox при запуске или защитите проект VBA паролем.
  • 🌐 OData не наружу. Публикацию с OData держите в локальной сети или за VPN. Если доступ из интернета всё-таки нужен, используйте только HTTPS.
  • 🔌 Закрывайте соединение. Присвоение Nothing всем объектам в конце макроса освобождает сеанс. Зависшие сеансы занимают лицензии и мешают обновлению базы.
  • 📋 Запись — только после проверки. Макрос, который пишет в базу, сначала прогоняют на копии.

Частые вопросы

Нужна ли установленная 1С, чтобы получать данные в Excel?
Для COM-соединения нужна платформа той же версии и разрядности. Для OData через Power Query платформа не нужна, достаточно доступа к веб-серверу с опубликованной базой.
Можно ли подключить Excel к 1С в облаке?
COM-соединение к облачной базе не работает. Доступ по OData зависит от провайдера: уточните у него, включена ли публикация стандартного интерфейса.
Как сделать, чтобы данные из 1С обновлялись в Excel сами?
В Power Query откройте свойства подключения и включите обновление при открытии файла или каждые N минут. Для COM-макроса добавьте его вызов в событие открытия книги.
Подойдёт ли способ для LibreOffice Calc?
COM-объект V83.COMConnector можно вызвать из макросов LibreOffice на Windows, но готовых примеров мало. Проще выгрузить .xlsx или использовать OData из другого инструмента.
Занимает ли подключение из Excel лицензию 1С?
Внешнее соединение открывает в базе сеанс, как обычный пользователь. Проверьте его в списке активных пользователей и учитывайте при подсчёте лицензий.