Excel и 1С 8.3: загрузка, выгрузка и обмен данными через COM и OData

· 9 мин

Содержание

Подключить Excel к 1С можно четырьмя путями, и программировать нужно только в двух. Бухгалтеру хватит встроенных средств: кнопка «Загрузить» в списке номенклатуры и в табличных частях документов принимает данные из Excel, а любой список или отчёт сохраняется в .xlsx через команду сохранения табличного документа. Для регулярного обмена используют COM-соединение (V83.COMConnector), стандартный интерфейс OData или внешнюю обработку .

Всё ниже относится к платформе 8.3 с интерфейсом «Такси» и типовым конфигурациям вроде «Бухгалтерии предприятия 3.0». Механизм загрузки из файла есть во всех современных конфигурациях на БСП, отличается только набор справочников и документов, где он подключён.

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

Сначала определитесь с задачей. От неё зависит, понадобится ли программист.

СпособКогда подходитКто настраиваетРиски
Загрузка из файла (встроенная)разово завести товары, строки накладной, ценыпользовательдубли номенклатуры при плохом сопоставлении
Выгрузка списка или отчёта в xlsxотдать данные аналитику, сверить вручнуюпользовательформулы и итоги в файле не пересчитываются
Внешняя обработка загрузкинестандартный формат файла, регулярный импортпрограммист 1Собработку нужно проверять после обновлений
COM-соединениеExcel сам забирает данные из базы по кнопкепрограммист, администраторзанимает сеанс, работает только в Windows
OData + Power Queryживая аналитика в Excel без кода на VBAадминистраторнужна публикация базы на веб-сервере

💡 Если нужно один раз перенести 300 строк — не стройте интеграцию. Встроенной загрузки хватит, и это займёт 10–15 минут.

Загрузка данных из Excel в 1С встроенными средствами

Подготовка файла

Большинство ошибок загрузки появляется из-за файла, а не из-за 1С. Приведите таблицу в порядок до того, как открывать базу:

  • 📄 одна строка — один объект, первая строка — заголовки колонок;
  • 🧹 уберите объединённые ячейки, промежуточные итоги и пустые строки посередине;
  • 🔢 артикулы и ИНН храните как текст, иначе Excel срежет ведущие нули;
  • 📅 даты — настоящими датами Excel, а не текстом вида «05.03.24г.»;
  • 💰 суммы — числом, без пробелов-разделителей и без «руб.» в ячейке.

Загрузка справочника номенклатуры

  1. Откройте Справочники → Товары и услуги → Номенклатура.
  2. В командной панели списка нажмите «Загрузить». Откроется форма загрузки данных из файла.
  3. Скопируйте диапазон в Excel (Ctrl+C) и вставьте его в таблицу формы (Ctrl+V). Второй вариант — выбрать файл на диске.
  4. Проверьте сопоставление колонок: каждая колонка файла должна попасть в своё поле — наименование, артикул, единица измерения, ставка НДС.
  5. На шаге сопоставления программа покажет, какие строки она узнала как существующие элементы, а какие создаст заново. Просмотрите список «новых» — именно там прячутся дубли.
  6. Завершите загрузку и откройте пару созданных карточек, чтобы проверить реквизиты.

Если в базе уже есть «Бумага А4», а в файле «Бумага A4» с латинской буквой, программа создаст второй элемент. Сопоставляйте по артикулу, а не по наименованию, когда артикулы заполнены.

Загрузка строк в документ

В документах с табличной частью «Товары» (поступление, реализация, перемещение) команда «Загрузить» стоит над таблицей; в части форм её прячут в меню «Ещё». Порядок тот же: вставили данные, сопоставили колонки «Номенклатура», «Количество», «Цена», загрузили. Суммы и НДС документ пересчитает сам.

Так удобно переносить счёт поставщика на 200 позиций: вместо ручного подбора — две минуты на сопоставление.

Выгрузка из 1С в Excel: списки, отчёты, печатные формы

Любой список

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

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

Оборотно-сальдовая ведомость, карточка счёта, печатная форма накладной — всё это табличные документы. У каждого в командной панели есть кнопка сохранения; формат выбирается в окне сохранения. Для печатных форм там же можно сразу отправить файл по почте.

💡 Для быстрой проверки не нужен даже файл: выделите область отчёта мышью, нажмите Ctrl+C и вставьте в Excel. Колонки лягут как в отчёте.

Выгруженный отчёт — это снимок. Формул и связей с базой в нём нет: если в 1С перепровели документ, файл об этом не узнает.

COM-соединение: Excel и 1С без ручного переноса

Это вариант для программиста. COM работает только в Windows и в двух направлениях.

Направление 1. 1С читает файл Excel

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

&НаКлиенте
Процедура ПрочитатьФайл(ИмяФайла)
    Excel = Новый COMОбъект("Excel.Application");
    Книга = Excel.Workbooks.Open(ИмяФайла);
    Лист = Книга.Worksheets(1);
    // -4162 = xlUp: ищем последнюю заполненную строку в колонке A
    ПоследняяСтрока = Лист.Cells(Лист.Rows.Count, 1).End(-4162).Row;
    Для НомерСтроки = 2 По ПоследняяСтрока Цикл
        Артикул = Лист.Cells(НомерСтроки, 1).Text;
        Наименование = Лист.Cells(НомерСтроки, 2).Text;
        Цена = Лист.Cells(НомерСтроки, 3).Value;
        Сообщить(СтрШаблон("%1 | %2 | %3", Артикул, Наименование, Цена));
    КонецЦикла;
    Книга.Close(Ложь);
    Excel.Quit();
КонецПроцедуры

Строка Excel.Quit() обязательна. Без неё в диспетчере задач копятся процессы EXCEL.EXE, и следующий запуск получает заблокированный файл.

Если Excel на сервере не установлен, обойдитесь без COM: табличный документ платформы умеет сам читать .xlsx. Метод Прочитать выполняется на сервере, поэтому файл сначала передают туда через временное хранилище:

&НаСервере
Процедура ПрочитатьБезExcel(АдресФайла)
    ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
    ПолучитьИзВременногоХранилища(АдресФайла).Записать(ИмяФайла);
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать(ИмяФайла);
    Для НомерСтроки = 2 По ТабДок.ВысотаТаблицы Цикл
        Артикул = ТабДок.Область(НомерСтроки, 1, НомерСтроки, 1).Текст;
        Наименование = ТабДок.Область(НомерСтроки, 2, НомерСтроки, 2).Текст;
        Сообщить(Артикул + " | " + Наименование);
    КонецЦикла;
    УдалитьФайлы(ИмяФайла);
КонецПроцедуры

Этот вариант надёжнее для серверных баз: он не зависит от офисного пакета и не оставляет зависших процессов.

Направление 2. Excel забирает данные из 1С

Здесь работает внешнее соединение через V83.COMConnector. Макрос VBA подключается к базе и выполняет запрос:

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

Для серверной базы строка подключения выглядит так: Srvr="имя_сервера";Ref="имя_базы";Usr="...";Pwd="...". Формат "@" во второй колонке нужен, чтобы ИНН не превратился в число.

Что знает практик и о чём молчат инструкции:

  • 🔌 Компонента comcntr.dll должна быть зарегистрирована. Запустите командную строку от имени администратора и выполните regsvr32 "C:\Program Files\1cv8\<версия>\bin\comcntr.dll".
  • 🧩 Разрядность компоненты совпадает с разрядностью Excel, а не Windows. Для 32-разрядного Office регистрируют comcntr.dll из C:\Program Files (x86)\1cv8\.
  • 👤 Внешнее соединение — полноценный сеанс. Он виден в списке активных пользователей и требует лицензии. Заведите для макроса отдельного пользователя с правами только на чтение.
  • 🔐 Пароль в тексте макроса видит любой, кто откроет файл. Защитите проект VBA паролем или храните учётные данные отдельно.

Внешние обработки и расширения для импорта из Excel

Когда файл поставщика приходит в своём формате и каждый раз с одинаковой шапкой, разумно один раз заказать внешнюю обработку. Она открывается через Файл → Открыть (файл .epf) или подключается в справочнике дополнительных обработок: Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки.

Классический инструмент из комплекта обработок ИТС — универсальная обработка «Загрузка данных из табличного документа». Она умеет загружать в любой справочник, документ или регистр сведений , но требует аккуратного сопоставления реквизитов и права на администрирование.

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

Сопоставление полей
Артикул поставщика→Номенклатура (поиск по артикулу)
Наименование→Номенклатура (если артикул не найден)
Кол-во→Количество
Цена с НДС→Цена
Ставка→Ставка НДС
Ед.→Единица измерения

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

Ошибки при обмене данными Excel и 1С

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

Отдельно про даты. Если в файле дата записана текстом, загрузка либо пропустит её, либо подставит пустую. Проверка простая: в Excel дата выравнивается по правому краю ячейки, текст — по левому.

Другие способы связать таблицы и 1С без программирования

OData и Power Query

В типовых конфигурациях есть стандартный интерфейс OData. Его включают в разделе Администрирование → Синхронизация данных, ссылка на настройку интерфейса OData находится там же. В настройке отмечают, какие справочники и регистры отдавать наружу.

Дальше базу публикуют на веб-сервере (IIS или Apache), а в Excel выбирают Данные → Получить данные → Из других источников → Из канала OData и указывают адрес публикации. Таблица обновляется кнопкой «Обновить все», без макросов.

Для OData удобно завести отдельного пользователя с минимальными правами: адрес публикации и логин часто оказываются в файлах, которые пересылают по почте.

CSV и обмен через буфер

Если Excel недоступен (например, на Linux-сервере), сохраняйте таблицу в CSV с разделителем «;». Такой файл читают и встроенная загрузка, и любая самописная обработка. Для разовых задач буфер обмена остаётся самым быстрым мостом: Ctrl+C в Excel, Ctrl+V в форму загрузки.

Облачные таблицы

Google Таблицы и Яндекс Таблицы с 1С напрямую не связаны. Рабочая схема — скачать файл в .xlsx и загрузить штатно, либо настроить обмен через HTTP-сервис 1С силами программиста.

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

Можно ли загрузить в 1С файл формата .xls, а не .xlsx?
Да, встроенная загрузка и табличный документ понимают оба формата. Если старый .xls читается с ошибками, пересохраните его в Excel как .xlsx.
Нужна ли лицензия Excel на сервере 1С?
Только если обработка работает через COMОбъект на сервере. Чтение файла методом табличного документа обходится без офисного пакета.
Можно ли обновлять отчёт 1С в Excel автоматически?
Да, через OData и Power Query или через макрос с COM-соединением. Выгруженный вручную файл сам не обновляется.
Подойдёт ли способ для файловой базы на сетевом диске?
Подойдёт. В строке COM-соединения укажите путь к папке базы в параметре File; у пользователя должны быть права на запись в эту папку.
Почему загрузка из Excel недоступна у бухгалтера?
Для загрузки в справочники нужны права на добавление элементов. Проверьте профиль группы доступа пользователя в разделе «Администрирование».