Из базы 1С 8.3 в таблицу Excel: от кнопки «Сохранить» до OData

· 11 мин

Содержание

Чтобы вывести данные из 1С в Excel, сформируйте отчёт или список, нажмите в его командной панели кнопку сохранения (значок дискеты) и выберите тип файла Лист Microsoft Excel 2007 (*.xlsx). Для справочника или журнала документов сначала выполните Ещё → Вывести список…: программа соберёт таблицу, которую сохраняют тем же способом.

Частое заблуждение — что выгрузить можно только «печатные» отчёты, а остальное придётся перепечатывать руками. На деле в 1С 8.3 в Excel уходит почти всё: любой список, результат запроса, остатки, обороты. Вопрос лишь в том, нужна выгрузка один раз, каждый день по расписанию или в автоматическом режиме для другой системы. От этого зависит способ.

Сохранение отчёта или списка из 1С в Excel вручную

Этот способ работает в любой конфигурации на платформе 8.3: Бухгалтерии 3.0, ЗУП 3.1, УТ 11. Он не требует прав администратора и программирования.

Отчёт

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

Формат xls (Excel 97) держит не больше 65 536 строк на листе, xlsx — 1 048 576. Для больших ведомостей и списков всегда выбирайте xlsx.

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

  1. Откройте нужный список: Справочники → Контрагенты, журнал Продажи → Реализация (акты, накладные, УПД) и т. п.
  2. Если нужны не все строки — поставьте отбор или выделите строки мышью с зажатым Ctrl или Shift.
  3. Нажмите Ещё → Вывести список….
  4. В открывшемся окне отметьте колонки, которые нужны в файле. Флажок «Только выделенные» оставит в таблице выбранные строки.
  5. Нажмите ОК — откроется табличный документ. Сохраните его в xlsx, как отчёт выше.

Колонки, которых нет в форме списка, сюда не попадут. Их сначала добавляют в список через Ещё → Изменить форму… или через настройку колонок списка.

Копирование через буфер

Для 20–30 строк проще скопировать. Выделите ячейки в табличном документе, нажмите Ctrl+C, перейдите в Excel и вставьте Ctrl+V. Числа, как правило, переносятся числами. Если Excel принял их за текст — способ исправления описан в разделе про ошибки ниже.

Выгрузка данных из 1С через универсальный отчёт и внешние обработки

Когда стандартного отчёта с нужным набором колонок нет, используют конструкторы. Писать код при этом не нужно.

Универсальный отчёт в Бухгалтерии 3.0

Отчёт находится в Отчеты → Стандартные отчеты → Универсальный отчет. Он строит таблицу по любому объекту базы:

  • 📁 справочнику (номенклатура со всеми реквизитами, контрагенты с ИНН и КПП);
  • 📄 документу (все реализации за квартал с суммами и ответственными);
  • 📊 регистру накопления или сведений (остатки, цены, обороты).

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

Для выгрузки, которую потом будут фильтровать и сортировать, отключите в настройках группировки и итоги. Тогда в Excel получится ровная таблица «одна строка — одна запись», без объединённых ячеек.

Внешние обработки

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

Как подключить:

  1. Разовый запуск — Файл → Открыть в главном меню и выбор файла .epf. Платформа покажет предупреждение о безопасности: открывайте только обработки из надёжного источника.
  2. Постоянное подключение — Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки, кнопка Добавить из файла…. После регистрации обработка появится в списке разделов, которые вы для неё укажете.

Консоль запросов удобна бухгалтеру, который знает язык запросов хотя бы на уровне «ВЫБРАТЬ … ИЗ …». Результат выводится в табличный документ и сохраняется в Excel обычной кнопкой.

Внешняя обработка выполняется с вашими правами в базе. Чужой файл .epf может не только читать, но и менять данные.

Программная выгрузка в Excel: код 1С и COM-соединение

Программист решает задачу двумя путями: формирует табличный документ и пишет его в файл средствами платформы либо подключается к базе 1С извне через COM.

Запись табличного документа в xlsx

Это самый надёжный программный способ: Excel на компьютере не нужен, метод Записать() работает и на сервере.

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	Номенклатура.Код КАК Код,
|	Номенклатура.Наименование КАК Наименование
|ИЗ
|	Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|	НЕ Номенклатура.ЭтоГруппа";
Выборка = Запрос.Выполнить().Выбрать();

ТабДок = Новый ТабличныйДокумент;
ТабДок.Область("R1C1").Текст = "Код";
ТабДок.Область("R1C2").Текст = "Наименование";

НомерСтроки = 1;
Пока Выборка.Следующий() Цикл
	НомерСтроки = НомерСтроки + 1;
	Строка = Формат(НомерСтроки, "ЧГ=0");
	ТабДок.Область("R" + Строка + "C1").Текст = Выборка.Код;
	ТабДок.Область("R" + Строка + "C2").Текст = Выборка.Наименование;
КонецЦикла;

ТабДок.Записать("C:\Выгрузка\Номенклатура.xlsx", ТипФайлаТабличногоДокумента.XLSX);

Учтите, где выполняется код. На сервере файл ляжет на диск сервера, а не на компьютер пользователя. Для клиент-серверной базы файл пишут во временный каталог сервера и передают пользователю через временное хранилище.

COM-соединение из Excel

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

Подготовка:

  1. Зарегистрируйте COM-компоненту от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\comcntr.dll"

Номер версии в пути замените на установленный у вас.

  1. Разрядность должна совпадать: 64-битный Excel работает с 64-битной платформой, 32-битный — с 32-битной.
  2. Заведите в 1С отдельного пользователя для обмена с минимальными правами на чтение.

Пример макроса VBA:

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

Для серверной базы строка подключения выглядит так: Srvr="имя_сервера";Ref="имя_базы";Usr="...";Pwd="...";. Латинские псевдонимы полей (Name, INN) избавляют от проблем с кириллицей в коде VBA. Формат @ для ИНН сохраняет ведущие нули.

COM-соединение занимает лицензию 1С на время работы. Закрывайте книгу после выгрузки, иначе лицензия останется занятой, пока не освободится сеанс.

Обратный вариант — из кода 1С через Новый COMОбъект("Excel.Application") — работает только на Windows с установленным Excel и медленно заполняет ячейки по одной. Для выгрузки тысяч строк он проигрывает записи табличного документа.

Выгрузка больших объёмов в Excel через ADODB

Когда строк сотни тысяч, табличный документ съедает память, а заполнение ячеек через Excel идёт часами. ADODB пишет в книгу как в базу данных: лист — это таблица, строка — запись.

Нужен драйвер Microsoft Access Database Engine (ACE OLEDB) той же разрядности, что и платформа 1С. Сам Excel на машине не обязателен.

Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.Open("Provider=Microsoft.ACE.OLEDB.12.0;"
	+ "Data Source=C:\Выгрузка\Контрагенты.xlsx;"
	+ "Extended Properties=""Excel 12.0 Xml;HDR=YES"";");

Соединение.Execute("CREATE TABLE [Контрагенты] ([Наименование] TEXT, [ИНН] TEXT, [Долг] DOUBLE)");

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	ВЫРАЗИТЬ(Остатки.Субконто1 КАК Справочник.Контрагенты).Наименование КАК Наименование,
|	ВЫРАЗИТЬ(Остатки.Субконто1 КАК Справочник.Контрагенты).ИНН КАК ИНН,
|	Остатки.СуммаОстаток КАК Долг
|ИЗ
|	РегистрБухгалтерии.Хозрасчетный.Остатки(, Счет = &Счет, , ) КАК Остатки";
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.РасчетыСПокупателями);
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
	Имя = СтрЗаменить(Выборка.Наименование, "'", "''");
	Сумма = Формат(Выборка.Долг, "ЧРД=.; ЧГ=0; ЧН=0");
	Соединение.Execute("INSERT INTO [Контрагенты] VALUES ('" + Имя + "', '"
		+ Выборка.ИНН + "', " + Сумма + ")");
КонецЦикла;

Соединение.Close();

Три детали, на которых спотыкаются:

  • 🔹 апостроф в названии («Магазин O’Key») ломает SQL — его удваивают через СтрЗаменить;
  • 🔹 дробную часть передают точкой и без разделителя групп — для этого строка формата ЧРД=.; ЧГ=0;
  • 🔹 если файл открыт в Excel, запись упадёт с ошибкой доступа.

Если файла нет, драйвер создаст его при выполнении CREATE TABLE.

Выгрузка из 1С в JSON, OData и REST для интеграций

Если таблица в Excel должна обновляться сама, без участия бухгалтера, данные берут из опубликованной базы.

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

Платформа 8.3 отдаёт данные по протоколу OData, а Excel умеет его читать через Power Query.

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

Дальше кнопка Данные → Обновить все перечитывает свежие данные из 1С. Добавьте ?$format=json к адресу — и тот же поток можно забирать любым скриптом.

HTTP-сервис и JSON

Когда OData не подходит (нужны вычисления, сложные отборы, права по организациям), программист делает HTTP-сервис в расширении конфигурации. Сервис отвечает JSON с готовой выборкой, а Excel или Python забирают его по адресу. Сериализацию выполняют ЗаписьJSON и ЗаписатьJSON(). Работа под одну задачу, зато без доработки типовой конфигурации и с полным контролем над составом полей.

Какой способ выгрузки в Excel выбрать

СпособКогда подходитКто делаетОграничения
Сохранить как / Вывести списокРазовая выгрузка отчёта или спискаЛюбой пользовательТолько то, что видно на экране
Универсальный отчётНужны свои колонки по объекту базыБухгалтерЕсть не во всех конфигурациях
Внешняя обработка, консоль запросовСложная выборка, повторяемая задачаПользователь + программистНужны права на внешние обработки
Табличный документ в кодеРегулярная выгрузка по расписаниюПрограммистПамять на очень больших объёмах
COM из ExcelКнига с макросами тянет данные самаПрограммистWindows, совпадение разрядности, лицензия
ADODBСотни тысяч строкПрограммистДрайвер ACE нужной разрядности
OData / HTTP-сервисАвтообновление, интеграцииАдминистратор, программистПубликация базы на веб-сервере
Что вам нужно выгрузить?

Как довести выгруженную таблицу до рабочего вида

Файл из 1С редко готов к анализу сразу. Пять действий в Excel, которые занимают пару минут:

  1. Снимите объединение ячеек. Выделите шапку, на вкладке Главная отожмите кнопку «Объединить и поместить в центре». С объединёнными ячейками не работают сортировка и фильтр.
  2. Превратите диапазон в таблицу. Ctrl+T — появятся фильтры, а формулы будут ссылаться на имена колонок.
  3. Закрепите шапку. Вид → Закрепить области → Закрепить верхнюю строку.
  4. Проверьте числа. Выделите колонку с суммами: если в строке состояния нет «Сумма», Excel считает их текстом.
  5. Уберите строки итогов и групп, если таблица пойдёт в сводную. Иначе суммы задвоятся.

Для регулярной работы удобнее Power Query: Данные → Получить данные → Из файла → Из книги. Шаги очистки записываются один раз, а следующая выгрузка из 1С обрабатывается кнопкой «Обновить».

Ошибки при выгрузке из 1С в Excel и их решение

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

Ещё одна неочевидная причина — даты. 1С сохраняет их как даты, но если в отчёте дата выводилась строкой вместе с временем или номером документа («Реализация 00-000123 от 12.03»), Excel получит текст. Разделите колонку через Данные → Текст по столбцам.

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

Можно ли выгрузить из 1С в Excel сразу несколько отчётов в одну книгу?
Ручным способом — нет: каждый отчёт сохраняется отдельным файлом. Листы потом объединяют в Excel перемещением или через Power Query. В коде можно собрать несколько табличных документов в один пакет и записать их на разные листы.
Выгружается ли оформление отчёта: цвета, шрифты, ширина колонок?
Да, при сохранении в xlsx 1С переносит шрифты, заливку, границы и ширину колонок. Не переносятся расшифровки: двойной щелчок по сумме в Excel ничего не откроет.
Можно ли настроить автоматическую выгрузку в Excel по расписанию?
Да. Обработку, которая пишет табличный документ в xlsx, подключают как регламентное задание или запускают по расписанию на сервере. Файл кладут в общую сетевую папку.
Почему файл открывается с предупреждением о формате?
Так бывает, когда файл сохранён в одном формате, а расширение у него другое — например, выбран тип xls, а имя вручную исправлено на xlsx. Сохраните заново, выбрав нужный тип в списке, а не дописывая расширение.
Можно ли выгрузить данные в Google Таблицы или LibreOffice?
Да. Файл xlsx открывается в обоих. Кроме того, в списке типов при сохранении есть формат электронной таблицы OpenDocument (ods).