Из базы 1С 8.3 в таблицу Excel: от кнопки «Сохранить» до OData
Содержание
Чтобы вывести данные из 1С в Excel, сформируйте отчёт или список, нажмите в его командной панели кнопку сохранения (значок дискеты) и выберите тип файла Лист Microsoft Excel 2007 (*.xlsx). Для справочника или журнала документов сначала выполните Ещё → Вывести список…: программа соберёт таблицу, которую сохраняют тем же способом.
Частое заблуждение — что выгрузить можно только «печатные» отчёты, а остальное придётся перепечатывать руками. На деле в 1С 8.3 в Excel уходит почти всё: любой список, результат запроса, остатки, обороты. Вопрос лишь в том, нужна выгрузка один раз, каждый день по расписанию или в автоматическом режиме для другой системы. От этого зависит способ.
Сохранение отчёта или списка из 1С в Excel вручную
Этот способ работает в любой конфигурации на платформе 8.3: Бухгалтерии 3.0, ЗУП 3.1, УТ 11. Он не требует прав администратора и программирования.
Отчёт
- Откройте отчёт, например
Отчеты → Стандартные отчеты → Оборотно-сальдовая ведомость. - Задайте период, организацию и нажмите
Сформировать. - В командной панели над таблицей нажмите значок дискеты «Сохранить как». Если кнопки не видно, откройте главное меню программы (☰ в левом верхнем углу) и выберите
Файл → Сохранить как…. - В поле
Тип файлавыберитеЛист Microsoft Excel 2007 (*.xlsx). - Укажите папку и имя файла, нажмите
Сохранить.
Формат xls (Excel 97) держит не больше 65 536 строк на листе, xlsx — 1 048 576. Для больших ведомостей и списков всегда выбирайте xlsx.
Список справочника или журнал документов
- Откройте нужный список:
Справочники → Контрагенты, журналПродажи → Реализация (акты, накладные, УПД)и т. п. - Если нужны не все строки — поставьте отбор или выделите строки мышью с зажатым
CtrlилиShift. - Нажмите
Ещё → Вывести список…. - В открывшемся окне отметьте колонки, которые нужны в файле. Флажок «Только выделенные» оставит в таблице выбранные строки.
- Нажмите
ОК— откроется табличный документ. Сохраните его вxlsx, как отчёт выше.
Колонки, которых нет в форме списка, сюда не попадут. Их сначала добавляют в список через Ещё → Изменить форму… или через настройку колонок списка.
Копирование через буфер
Для 20–30 строк проще скопировать. Выделите ячейки в табличном документе, нажмите Ctrl+C, перейдите в Excel и вставьте Ctrl+V. Числа, как правило, переносятся числами. Если Excel принял их за текст — способ исправления описан в разделе про ошибки ниже.
Выгрузка данных из 1С через универсальный отчёт и внешние обработки
Когда стандартного отчёта с нужным набором колонок нет, используют конструкторы. Писать код при этом не нужно.
Универсальный отчёт в Бухгалтерии 3.0
Отчёт находится в Отчеты → Стандартные отчеты → Универсальный отчет. Он строит таблицу по любому объекту базы:
- 📁 справочнику (номенклатура со всеми реквизитами, контрагенты с ИНН и КПП);
- 📄 документу (все реализации за квартал с суммами и ответственными);
- 📊 регистру накопления или сведений (остатки, цены, обороты).
Выберите тип и имя объекта, нажмите Настройки, отметьте нужные поля и отборы, сформируйте отчёт и сохраните его в xlsx. Настройку можно сохранить под своим именем и в следующий раз получить ту же выгрузку в два клика.
Для выгрузки, которую потом будут фильтровать и сортировать, отключите в настройках группировки и итоги. Тогда в Excel получится ровная таблица «одна строка — одна запись», без объединённых ячеек.
Внешние обработки
Обработка — файл .epf, который делает выгрузку по заданному алгоритму. Её пишет программист под задачу или берут готовую, например консоль запросов.
Как подключить:
- Разовый запуск —
Файл → Открытьв главном меню и выбор файла.epf. Платформа покажет предупреждение о безопасности: открывайте только обработки из надёжного источника. - Постоянное подключение —
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки, кнопкаДобавить из файла…. После регистрации обработка появится в списке разделов, которые вы для неё укажете.
Консоль запросов удобна бухгалтеру, который знает язык запросов хотя бы на уровне «ВЫБРАТЬ … ИЗ …». Результат выводится в табличный документ и сохраняется в 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С — источник.
Подготовка:
- Зарегистрируйте COM-компоненту от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\comcntr.dll"
Номер версии в пути замените на установленный у вас.
- Разрядность должна совпадать: 64-битный Excel работает с 64-битной платформой, 32-битный — с 32-битной.
- Заведите в 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.
- Опубликуйте базу на веб-сервере (Apache или IIS) с включённым флажком публикации стандартного интерфейса OData.
- Укажите, какие объекты доступны. В Бухгалтерии 3.0 настройка находится в разделе
Администрирование → Синхронизация данных, ссылка на настройку стандартного интерфейса OData. Там же создаётся пользователь для внешнего доступа. - В Excel откройте
Данные → Получить данные → Из других источникови выберите источник OData. Адрес вида:
http://server/buh/odata/standard.odata/Catalog_Контрагенты
- Введите логин и пароль пользователя 1С (способ проверки — «Обычный»), выберите поля, загрузите.
Дальше кнопка Данные → Обновить все перечитывает свежие данные из 1С. Добавьте ?$format=json к адресу — и тот же поток можно забирать любым скриптом.
HTTP-сервис и JSON
Когда OData не подходит (нужны вычисления, сложные отборы, права по организациям), программист делает HTTP-сервис в расширении конфигурации. Сервис отвечает JSON с готовой выборкой, а Excel или Python забирают его по адресу. Сериализацию выполняют ЗаписьJSON и ЗаписатьJSON(). Работа под одну задачу, зато без доработки типовой конфигурации и с полным контролем над составом полей.
Какой способ выгрузки в Excel выбрать
| Способ | Когда подходит | Кто делает | Ограничения |
|---|---|---|---|
| Сохранить как / Вывести список | Разовая выгрузка отчёта или списка | Любой пользователь | Только то, что видно на экране |
| Универсальный отчёт | Нужны свои колонки по объекту базы | Бухгалтер | Есть не во всех конфигурациях |
| Внешняя обработка, консоль запросов | Сложная выборка, повторяемая задача | Пользователь + программист | Нужны права на внешние обработки |
| Табличный документ в коде | Регулярная выгрузка по расписанию | Программист | Память на очень больших объёмах |
| COM из Excel | Книга с макросами тянет данные сама | Программист | Windows, совпадение разрядности, лицензия |
| ADODB | Сотни тысяч строк | Программист | Драйвер ACE нужной разрядности |
| OData / HTTP-сервис | Автообновление, интеграции | Администратор, программист | Публикация базы на веб-сервере |
Как довести выгруженную таблицу до рабочего вида
Файл из 1С редко готов к анализу сразу. Пять действий в Excel, которые занимают пару минут:
- Снимите объединение ячеек. Выделите шапку, на вкладке
Главнаяотожмите кнопку «Объединить и поместить в центре». С объединёнными ячейками не работают сортировка и фильтр. - Превратите диапазон в таблицу.
Ctrl+T— появятся фильтры, а формулы будут ссылаться на имена колонок. - Закрепите шапку.
Вид → Закрепить области → Закрепить верхнюю строку. - Проверьте числа. Выделите колонку с суммами: если в строке состояния нет «Сумма», Excel считает их текстом.
- Уберите строки итогов и групп, если таблица пойдёт в сводную. Иначе суммы задвоятся.
Для регулярной работы удобнее Power Query: Данные → Получить данные → Из файла → Из книги. Шаги очистки записываются один раз, а следующая выгрузка из 1С обрабатывается кнопкой «Обновить».
Ошибки при выгрузке из 1С в Excel и их решение
Ещё одна неочевидная причина — даты. 1С сохраняет их как даты, но если в отчёте дата выводилась строкой вместе с временем или номером документа («Реализация 00-000123 от 12.03»), Excel получит текст. Разделите колонку через Данные → Текст по столбцам.