Связь Excel и 1С:Предприятия 8.3: от сохранения отчёта до живого подключения к базе

· 10 мин

Содержание

Подключить Excel к 1С 8.3 можно четырьмя способами. Разовая выгрузка: любой отчёт или список сохраняется в .xlsx через Главное меню → Файл → Сохранить как. Загрузка из книги в 1С: команда загрузки в табличной части документа или код на ТабличныйДокумент.Прочитать(). «Живые» данные в Excel: стандартный интерфейс OData и Power Query. Автоматизация в обе стороны: COM-соединение V83.COMConnector или объект Excel.Application.

Выбор зависит от того, как часто нужен обмен данными и кто его настраивает. Бухгалтеру хватит первых двух вариантов. Сводная таблица, которая сама обновляется из базы каждое утро, — это уже OData или ODBC, и тут нужен администратор.

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

Любая печатная форма, отчёт или список в 1С — это табличный документ. Его можно сохранить в формате Excel за пару кликов.

Отчёт или печатная форма

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

💡 Для быстрого переноса без файла выделите область в отчёте, нажмите Ctrl+C и вставьте в Excel через Ctrl+V. Форматирование и объединённые ячейки обычно сохраняются.

Список документов или справочника

Списки (журнал документов , справочник «Номенклатура») напрямую не сохраняются. Сначала их выводят в табличный документ:

  1. Откройте список, при необходимости настройте отбор.
  2. Нажмите Ещё → Вывести список....
  3. Отметьте нужные колонки, нажмите «ОК».
  4. Сохраните получившийся документ в .xlsx, как отчёт выше.

⚠️ Выводятся только колонки, которые есть в форме списка. Если нужного реквизита нет — сначала добавьте его через Ещё → Изменить форму.

Когда вывода списка мало

Для выборки с условиями и группировками удобнее «Универсальный отчёт» (есть в типовых на БСП, ищется через Все функции или поиск по меню) или конструктор отчёта на СКД. Отчёт на СКД тоже сохраняется в Excel тем же способом.

Загрузка данных из Excel в 1С

Обратное направление сложнее: 1С должна понять, какая колонка что значит, и найти ссылки на справочники.

Штатная загрузка в типовых конфигурациях

В 1С:Бухгалтерии 3.0 и УТ 11 у табличных частей документов поступления и реализации, а также в списке номенклатуры есть команда Загрузить (в некоторых формах она спрятана в меню Ещё). Работает так:

  1. Нажмите Загрузить — откроется окно с пустой таблицей.
  2. Скопируйте строки из Excel и вставьте в это окно через Ctrl+V.
  3. На следующем шаге сопоставьте колонки: «Номенклатура», «Количество», «Цена».
  4. Программа покажет, какие позиции нашлись, какие нет. Ненайденные можно создать или сопоставить вручную.

💡 Сопоставление по артикулу надёжнее, чем по наименованию. «Бумага А4 Снегурочка» и «Бумага А4, Снегурочка» для 1С — разные строки.

Загрузка кодом через табличный документ

Платформа 8.3 сама читает .xlsx в табличный документ, Excel на компьютере не нужен. Это основа большинства внешних обработок загрузки. Пример серверной процедуры: файл передан через временное хранилище, из второй строки читаются артикул и количество.

&НаСервере
Функция ПрочитатьКнигуExcel(АдресФайла)

	ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла);
	ДвоичныеДанные.Записать(ИмяФайла);

	ТабДок = Новый ТабличныйДокумент;
	ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);

	Результат = Новый ТаблицаЗначений;
	Результат.Колонки.Добавить("Артикул", Новый ОписаниеТипов("Строка"));
	Результат.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));

	Для НомерСтроки = 2 По ТабДок.ВысотаТаблицы Цикл
		Артикул = СокрЛП(ТабДок.Область(НомерСтроки, 1, НомерСтроки, 1).Текст);
		Если ПустаяСтрока(Артикул) Тогда
			Продолжить;
		КонецЕсли;
		ТекстКоличества = СтрЗаменить(ТабДок.Область(НомерСтроки, 2, НомерСтроки, 2).Текст, " ", "");
		НоваяСтрока = Результат.Добавить();
		НоваяСтрока.Артикул = Артикул;
		Попытка
			НоваяСтрока.Количество = Число(СтрЗаменить(ТекстКоличества, ",", "."));
		Исключение
			НоваяСтрока.Количество = 0;
		КонецПопытки;
	КонецЦикла;

	УдалитьФайлы(ИмяФайла);
	Возврат Результат;

КонецФункции

Дальше по артикулу ищут номенклатуру (Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", ...)) и заполняют документ. Значение СпособЧтенияЗначенийТабличногоДокумента.Значение важно: так читаются сами числа и даты, а не их отображение с форматом ячейки.

Прямое подключение Excel к базе 1С через ODBC

Встроенного ODBC-драйвера у платформы 1С 8.3 нет. Прямой доступ возможен только для клиент-серверной базы: Excel подключается не к 1С, а к СУБД под ней — MS SQL Server или PostgreSQL.

Как это настраивается

  • 🗄️ MS SQL Server. В Excel: Данные → Получить данные → Из базы данных → Из базы данных SQL Server. Укажите сервер и имя базы.
  • 🐘 PostgreSQL. Установите драйвер psqlODBC, создайте источник в «Администраторе источников данных ODBC» Windows (odbcad32) и подключитесь через Данные → Получить данные → Из других источников → Из ODBC.
  • 🔐 Учётная запись. Заведите в СУБД отдельного пользователя только с правом чтения. Не давайте Excel логин, под которым работает сервер 1С.

Почему это последний вариант

Таблицы в СУБД называются не «Контрагенты», а _Reference45, поля — _Fld1234. Сопоставление имён возвращает функция встроенного языка ПолучитьСтруктуруХраненияБазыДанных(). После обновления конфигурации номера могут поменяться, и запросы в книге сломаются.

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

Для файловой базы (1Cv8.1CD) ODBC-подключения нет. Для неё используйте OData или регулярную выгрузку.

Microsoft Query, Power Query и OData: данные из 1С, которые обновляются сами

Microsoft Query — старый мастер Excel для запросов к ODBC-источнику. В современных версиях Excel он скрыт: включите Файл → Параметры → Данные → Показать устаревшие мастера импорта данных, после чего появится Данные → Получить данные → Устаревшие мастера → Из Microsoft Query. Он работает с тем же ODBC-источником, что и в предыдущем разделе, и позволяет написать SQL-запрос с параметром из ячейки.

Для 1С удобнее связка OData + Power Query. Она работает и с файловой, и с клиент-серверной базой и отдаёт данные в понятных именах объектов конфигурации.

Шаг 1. Публикация базы с интерфейсом OData

  1. На компьютере с веб-сервером (IIS или Apache) запустите Конфигуратор от имени администратора Windows.
  2. Откройте Администрирование → Публикация на веб-сервере.
  3. Отметьте флажок «Публиковать стандартный интерфейс OData» и нажмите «Опубликовать».

Шаг 2. Состав интерфейса

По умолчанию через OData не доступен ни один объект. Состав задаётся в самой базе. В типовых конфигурациях на БСП это делается в разделе Администрирование → Синхронизация данных, по ссылке настройки стандартного интерфейса OData (название ссылки может отличаться в зависимости от релиза). Отметьте нужные справочники, документы и регистры.

Шаг 3. Пользователь для Excel

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

Шаг 4. Подключение в Excel

  1. Данные → Получить данные → Из других источников → Из канала OData.
  2. Адрес вида http://server/buh/odata/standard.odata/ (здесь buh — имя публикации).
  3. Способ входа «Базовый», логин и пароль пользователя 1С из шага 3.
  4. В навигаторе выберите сущность, например Catalog_Контрагенты или AccumulationRegister_ТоварыНаСкладах.
  5. Нажмите «Преобразовать данные», уберите лишние колонки и загрузите на лист.

Для автообновления откройте Данные → Запросы и подключения, свойства запроса, и включите «Обновлять при открытии файла» или «Обновлять каждые N минут».

💡 Тянуть таблицу документа целиком на десятки тысяч строк долго. Добавьте фильтр по дате в Power Query на первом шаге: фильтр уходит в запрос к 1С, и сервер отдаёт только нужный период.

COM-соединение: автоматизация обмена между Excel и 1С

COM подходит, когда обмен нужно запускать кнопкой или по расписанию. Работает только в Windows. Направлений два.

Из Excel в 1С: V83.COMConnector

Макрос VBA открывает базу и выполняет запрос. Компонента comcntr.dll ставится вместе с платформой. Если её нет в реестре, зарегистрируйте от имени администратора:

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

Номер платформы подставьте свой. Разрядность компоненты должна совпадать с разрядностью Excel: для 32-битного Office регистрируйте comcntr.dll из C:\Program Files (x86)\1cv8\....

Sub ЗагрузитьКонтрагентов()
    Dim Connector As Object, Base As Object, Query As Object, Sel As Object
    Dim r As Long
    Set Connector = CreateObject("V83.COMConnector")
    Set Base = Connector.Connect("File=""D:\Bases\Buh"";Usr=""Excel"";Pwd=""123"";")
    Set Query = Base.NewObject("Query")
    Query.Text = "ВЫБРАТЬ Наименование КАК Name, ИНН КАК INN " & _
                 "ИЗ Справочник.Контрагенты ГДЕ НЕ ЭтоГруппа"
    Set Sel = Query.Execute().Select()
    Columns(2).NumberFormat = "@"
    r = 2
    Do While Sel.Next()
        Cells(r, 1).Value = Sel.Name
        Cells(r, 2).Value = Sel.INN
        r = r + 1
    Loop
    Set Sel = Nothing: Set Query = Nothing: Set Base = Nothing
End Sub

Для клиент-серверной базы строка соединения выглядит так: Srvr="server1c";Ref="buh";Usr="Excel";Pwd="123";. Псевдонимы КАК Name нужны, чтобы обращаться к полям выборки латиницей. Текстовый формат второй колонки сохраняет ведущие нули ИНН.

⚠️ COM-соединение — полноценный сеанс в базе. Учитывайте его при подсчёте лицензий и не держите соединение открытым дольше, чем идёт выгрузка.

Из 1С в Excel: Excel.Application

Обратный путь — 1С управляет Excel. Нужен установленный Excel, код выполняется на клиенте под Windows:

&НаКлиенте
Процедура ПрочитатьЧерезExcel(ПутьКФайлу)
	Excel = Новый COMОбъект("Excel.Application");
	Excel.DisplayAlerts = Ложь;
	Книга = Excel.Workbooks.Open(ПутьКФайлу);
	Данные = Книга.Worksheets(1).UsedRange.Value.Выгрузить();
	Книга.Close(Ложь);
	Excel.Quit();
	// Данные — массив колонок: Данные[0][0] — ячейка A1
КонецПроцедуры

Главный приём: не читайте ячейки по одной через Cells(...). Каждое обращение — межпроцессный вызов, и 10 000 строк читаются минутами. UsedRange.Value отдаёт весь диапазон одним вызовом как COMSafeArray, а .Выгрузить() превращает его в массив 1С.

Сегодня этот способ нужен редко: для чтения .xlsx хватает ТабличныйДокумент.Прочитать(). COM к Excel оставляют для макросов, формул и форматирования, которых нет в табличном документе.

Какой способ подключения Excel к 1С выбрать

СпособКогда подходитКто настраиваетОграничения и риски
Сохранить как .xlsxРазовая выгрузка отчёта или спискаПользовательДанные устаревают сразу после выгрузки
Команда «Загрузить»Заполнить документ строками из файлаПользовательТолько объекты, где команда есть
ТабличныйДокумент.Прочитать()Регулярная загрузка прайсов, остатковПрограммистНужна внешняя обработка
OData + Power QueryСводные и дашборды, обновляемые из базыАдминистраторВеб-сервер, настройка состава, нагрузка на базу
ODBC к СУБДТяжёлая аналитика по клиент-серверной базеАдминистратор СУБДВнутренние имена таблиц, только чтение
COM (V83.COMConnector)Макрос, кнопка в Excel, обмен по расписаниюПрограммистТолько Windows, разрядность, лицензия на сеанс

Простое правило: нужно один раз — сохраняйте файл. Нужно каждый день — OData. Нужно писать в базу из Excel — только через COM или обработку, где запись идёт объектами 1С, а не SQL.

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

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

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

Можно ли редактировать данные 1С прямо в Excel, как в таблице базы?
Нет. Excel получает копию данных. Изменения возвращаются в 1С только загрузкой файла или макросом через COM, который записывает объекты средствами 1С.
Нужна ли отдельная лицензия 1С для OData или COM-подключения?
Каждое подключение открывает сеанс в базе. Если свободных лицензий нет, Excel получит ошибку подключения. Планируйте выгрузки на время, когда пользователей меньше.
Работает ли OData с базой в облаке 1С:Фреш?
Да, если сервис разрешает включить интерфейс OData для вашего приложения. Адрес публикации и пользователя для подключения выдаёт сам сервис, веб-сервер настраивать не нужно.
Почему при сохранении в Excel получается `.xls`, а не `.xlsx`?
В окне сохранения выбран старый формат «Лист Excel 97». Выберите вариант с *.xlsx в списке типов файла: он лучше переносит длинные таблицы и не ограничен 65 536 строками.
Можно ли подключить Excel к 1С на Mac?
COM на macOS не работает. Остаются сохранение файлов и OData: Power Query в Excel для Mac поддерживает не все источники, поэтому проверьте пункт «Из канала OData» в своей версии.