Связь 1С 8.3 и Excel: от сохранения отчёта до живого подключения
Содержание
Привязать 1С к Excel можно четырьмя способами: сохранить отчёт или список в .xlsx, загрузить таблицу Excel в документ или справочник, подключиться к
базе из Excel через COM-объект V83.COMConnector или через стандартный интерфейс OData с Power Query. Первые два способа работают без программиста. Два последних дают «живую» интеграцию: Excel сам забирает свежие данные из 1С по кнопке «Обновить».
Выбор зависит от того, что нужно: разово отдать цифры бухгалтеру, регулярно обновлять сводную таблицу или каждый день загружать прайс поставщика. Ниже каждый вариант разобран с путями меню, кодом и типичными сбоями.
Какой способ интеграции 1С и Excel выбрать
Сначала определите направление и частоту обмена. От этого зависит всё остальное.
| Способ | Направление | Когда подходит | Что нужно |
|---|---|---|---|
| Сохранение в xlsx | 1С → Excel | Разовая выгрузка отчёта, списка | Ничего, кроме 1С |
| Загрузка из файла | Excel → 1С | Прайсы, остатки, номенклатура | Типовая команда или обработка |
| COM-соединение | Excel ↔ 1С | Макросы VBA, регулярные выборки | Зарегистрированный comcntr.dll, VBA |
| OData + Power Query | 1С → Excel | Сводные отчёты, обновляемые по кнопке | Публикация базы на веб-сервере |
| Внешняя обработка | Excel ↔ 1С | Нестандартный формат, расписание | Программист 1С |
Выгрузка данных из 1С в Excel без программирования
Любой отчёт в 1С 8.3 — это табличный документ. Его можно сохранить в формате Excel за три действия.
Сохранение отчёта
- Сформируйте отчёт, например «Оборотно-сальдовая ведомость».
- Нажмите кнопку с дискетой в командной панели отчёта или откройте главное меню (кнопка с тремя полосками)
Файл → Сохранить как. - В поле «Тип файла» выберите
Лист Microsoft Excel 2007-... (*.xlsx). - Укажите папку и имя файла, нажмите «Сохранить».
Форматирование, объединённые ячейки и группировки сохраняются. Расшифровки — нет: в Excel это обычные числа.
Выгрузка любого списка
Справочник, журнал документов или регистр выгружаются через команду Ещё → Вывести список.
- Откройте список, например
Справочники → Товары и услуги → Номенклатура. - Настройте отбор, если нужна только часть строк.
- Нажмите
Ещё → Вывести список, отметьте нужные колонки. - В открывшемся табличном документе сохраните файл в xlsx так же, как отчёт.
В окне «Вывести список» можно выбрать вывод в текстовый документ. Для Excel берите табличный: так колонки не слипнутся.
Почему числа в Excel не суммируются
Частая жалоба: выгрузили ведомость, а СУММ даёт ноль. Причина — разделитель разрядов. 1С выводит 1 250 000,00 с неразрывным пробелом, и Excel иногда принимает это за текст.
Что делать:
- 🔧 выделите столбец,
Данные → Текст по столбцам → Готово— Excel перечитает значения; - 🔧 или замените через
Ctrl+Hнеразрывный пробел (введите его сочетаниемAlt+0160на цифровой клавиатуре) на пустоту; - 🔧 в собственной обработке выводите числа как числа, а не строки с форматом
ЧГ=.
Табличный документ и макеты: Excel внутри 1С
1С умеет не только сохранять, но и открывать файлы Excel. Через главное меню Файл → Открыть выберите .xlsx или .xls — файл откроется как табличный документ. Его можно поправить и сохранить обратно.
Это пригодится в трёх случаях:
- 📄 посмотреть файл на компьютере, где нет Excel;
- 📄 быстро перенести бланк из Excel в макет печатной формы;
- 📄 проверить, как 1С «видит» таблицу перед загрузкой.
Макет печатной формы из файла Excel
Программисту не нужно рисовать бланк с нуля. В конфигураторе откройте файл Excel через Файл → Открыть, выделите нужную область и скопируйте её в макет обработки или расширения. Затем назначьте областям имена и параметры.
Готовый бланк из Excel теряет формулы. В макете остаются только значения и оформление, а расчёт пишется на встроенном языке.
Не правьте макеты типовой конфигурации напрямую. Пользовательский макет меняется в режиме 1С:Предприятие через Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм, а новый — через внешнюю обработку или расширение. Так изменения переживут обновление.
Загрузка из Excel в 1С и обратный обмен
Обратное направление — самое востребованное: прайс поставщика, начальные остатки, список номенклатуры.
Загрузка в табличную часть документа
В 1С:Бухгалтерии 3.0 в документах поступления и реализации над табличной частью «Товары» есть команда «Загрузить». Порядок такой:
- Создайте документ и заполните шапку: контрагента, склад, договор.
- В табличной части нажмите «Загрузить».
- Скопируйте строки из Excel и вставьте их в открывшуюся таблицу или укажите файл.
- Сопоставьте колонки: какая — наименование, какая — количество и цена.
- Проверьте, какие позиции программа нашла в справочнике, а какие предлагает создать.
Сопоставление идёт по наименованию, артикулу или штрихкоду. Чем точнее совпадает наименование, тем меньше ручной работы.
Загрузка справочников целиком
Для массовой загрузки номенклатуры или контрагентов используют универсальную обработку загрузки данных из табличного документа. Она входит в набор стандартных обработок для разработчиков и работает с любым справочником, документом или регистром.
Подготовьте файл заранее:
- ✅ одна строка — один элемент, без объединённых ячеек и промежуточных итогов;
- ✅ первая строка — заголовки, данные начинаются со второй;
- ✅ ИНН, КПП, артикулы и коды хранятся как текст, иначе Excel срежет ведущие нули;
- ✅ единицы измерения и ставки НДС написаны так же, как в 1С.
Перед массовой загрузкой справочника сделайте резервную копию базы. Ошибка сопоставления создаст сотни дублей, а удалять их по одному долго.
Двусторонний обмен
Настоящий двусторонний обмен — когда Excel и 1С постоянно сверяют одни и те же данные — строят на COM-соединении или внешней обработке. Типовая схема: 1С выгружает файл в общую папку, сотрудник правит его, обработка загружает изменения и пишет протокол расхождений.
COM-соединение: Excel берёт данные из 1С напрямую
COM-соединение позволяет макросу VBA подключиться к базе 1С без запуска клиента. Макрос выполняет запрос и раскладывает результат по ячейкам.
Регистрация компоненты
Компонента comcntr.dll лежит в каталоге платформы, например C:\Program Files\1cv8\8.3.24.1342\bin\. Её нужно зарегистрировать от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.24.1342\bin\comcntr.dll"
Подставьте номер своей версии платформы. Разрядность должна совпадать: 32-битному Excel нужна 32-битная платформа из C:\Program Files (x86)\1cv8\, 64-битному — 64-битная.
Макрос VBA для чтения справочника
Sub ЗагрузитьНоменклатуру()
Dim conn As Object, base As Object, q As Object, sel As Object
Dim r As Long
Set conn = CreateObject("V83.COMConnector")
' Файловая база. Для серверной: Srvr=""server1c"";Ref=""buh"";
Set base = conn.Connect("File=""D:\Bases\Buh"";Usr=""Обмен"";Pwd=""пароль"";")
Set q = base.NewObject("Query")
q.Text = "ВЫБРАТЬ Номенклатура.Код, Номенклатура.Наименование " & _
"ИЗ Справочник.Номенклатура КАК Номенклатура " & _
"ГДЕ НЕ Номенклатура.ЭтоГруппа"
Set sel = q.Execute().Select()
r = 2
Do While sel.Next()
Cells(r, 1).Value = sel.Code
Cells(r, 2).Value = sel.Description
r = r + 1
Loop
Set sel = Nothing: Set q = Nothing: Set base = Nothing: Set conn = Nothing
End Sub
Методы объектов 1С через COM можно вызывать по английским именам: Execute, Select, Next. Стандартные реквизиты — тоже: Code вместо «Код», Description вместо «Наименование».
Для подключения заведите в 1С отдельного пользователя с минимальными правами на чтение. Пароль в макросе хранится открытым текстом — не давайте такой файл посторонним.
Обратное направление: 1С управляет Excel
Из 1С тоже можно запустить Excel: Excel = Новый COMОбъект("Excel.Application"). Так раньше заполняли сложные шаблоны с формулами. Минус — Excel должен стоять на том компьютере, где выполняется код. На сервере 1С так делать не стоит: процессы EXCEL.EXE зависают и копятся. Для простого чтения и записи xlsx Excel вообще не нужен — об этом в разделе про автоматизацию.
OData и Power Query: обновляемая привязка без кода
Стандартный интерфейс OData отдаёт данные базы по HTTP. Excel подключается к нему через Power Query, и таблица обновляется одной кнопкой.
Настройка на стороне 1С
- Опубликуйте базу на веб-сервере (IIS или Apache). В конфигураторе:
Администрирование → Публикация на веб-сервере, отметьте флажок «Публиковать стандартный интерфейс OData». - В режиме 1С:Предприятие откройте
Администрирование → Синхронизация данных → Настройка стандартного интерфейса OData. - Создайте пользователя для доступа к интерфейсу и задайте ему пароль.
- Отметьте объекты, которые нужно отдавать: например, справочник «Номенклатура» и регистр «Хозрасчетный».
Адрес интерфейса выглядит так: http://server/buh/odata/standard.odata/.
Подключение в Excel
Данные → Получить данные → Из других источников → Из канала OData.- Вставьте адрес интерфейса.
- Выберите «Обычная» авторизация и введите логин и пароль пользователя OData.
- В навигаторе отметьте нужные таблицы, нажмите «Преобразовать данные», чтобы убрать лишние колонки.
- «Закрыть и загрузить». Обновление —
Данные → Обновить все.
Тяните не всю таблицу проводок, а виртуальные таблицы остатков и оборотов с отбором по периоду. Иначе первая загрузка из базы за несколько лет займёт много времени.
Автоматизация: внешние обработки, расширения и расписание
Когда обмен нужен каждый день, ручные действия заменяют обработкой.
Чтение xlsx средствами платформы
Платформа 8.3 читает и пишет xlsx сама, без установленного Excel. Пример функции, которая читает прайс в таблицу значений:
Функция ПрочитатьПрайс(ИмяФайла) Экспорт
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("Артикул", Новый ОписаниеТипов("Строка"));
Результат.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Для НомерСтроки = 2 По ТабДок.ВысотаТаблицы Цикл
Артикул = СокрЛП(ТабДок.Область(НомерСтроки, 1, НомерСтроки, 1).Текст);
Если ПустаяСтрока(Артикул) Тогда
Продолжить;
КонецЕсли;
ТекстЦены = ТабДок.Область(НомерСтроки, 2, НомерСтроки, 2).Текст;
ТекстЦены = СтрЗаменить(ТекстЦены, Символы.НПП, "");
ТекстЦены = СтрЗаменить(ТекстЦены, " ", "");
ТекстЦены = СтрЗаменить(ТекстЦены, ",", ".");
Строка = Результат.Добавить();
Строка.Артикул = Артикул;
Попытка
Строка.Цена = Число(ТекстЦены);
Исключение
Строка.Цена = 0; // цену не распознали — строку проверит пользователь
КонецПопытки;
КонецЦикла;
Возврат Результат;
КонецФункции
Запись — одной строкой: ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX).
Где разместить такую логику
- 🧩 Внешняя обработка подключается без изменения конфигурации:
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. - 🧩 Расширение конфигурации добавляет кнопку «Загрузить из Excel» прямо в форму документа и переживает обновления.
- 🧩 Регламентное задание выгружает отчёт в xlsx по расписанию в сетевую папку. Файл должен быть доступен учётной записи, под которой работает служба сервера 1С.