Перенос данных из 1С в Excel: от буфера обмена до COM и ADO
Содержание
Выгрузить данные из 1С в Excel можно пятью способами, и в большинстве случаев хватает самого простого. Нужна пара строк из списка — выделите их и нажмите Ctrl+C, затем вставьте в Excel. Нужен весь журнал документов
или справочник целиком — команда Ещё → Вывести список. Готовый отчёт переносят кнопкой сохранения в формат .xlsx.
Отдельная история — когда перенести данные нужно каждый день по расписанию или выгрузить десятки тысяч строк. Тогда подключают COM или ADO. Разберём каждый способ по очереди: сначала то, что делается мышкой за минуту, потом автоматизацию для регулярных задач.
Скопировать таблицу через буфер обмена
Самый быстрый перенос — через буфер обмена. Подходит, когда нужно вытащить несколько строк из списка или фрагмент готового отчёта.
- Откройте список (например, журнал документов
Реализация) или сформированный отчёт. - Выделите нужные строки:
Ctrl+A— весь список, либоCtrl+ клик по отдельным строкам. - Нажмите
Ctrl+C. - Перейдите в Excel и вставьте:
Ctrl+V.
В сформированном отчёте (это табличный документ 1С) можно выделить мышкой любой прямоугольный диапазон ячеек и скопировать его — в Excel он ляжет с теми же колонками.
Если копируете из списка, а не из отчёта, в буфер попадают только видимые колонки. Добавить колонки можно через Ещё → Изменить форму.
У способа один минус: буфер переносит текст и числа, но не стили — объединённые ячейки, цвета и группировки слетают. Для одноразовой выборки это не важно, для красивого отчёта лучше сохранять файл целиком (способ ниже).
Команда «Вывести список»: выгрузить весь журнал или справочник
Когда нужен не фрагмент, а весь список документов, справочник контрагентов или номенклатуру, работает штатная команда. Она есть в любой форме списка.
- Откройте нужный список.
- На командной панели нажмите
Ещё → Вывести список…. - В диалоге выберите тип:
Табличный документ(чтобы потом сохранить в Excel) илиТекстовый документ. - Отметьте галочками колонки, которые нужно выгрузить.
- Нажмите
ОК— 1С сформирует табличный документ со всем списком.
Дальше получившийся табличный документ сохраняете в файл Excel так же, как любой отчёт.
В выгрузку попадут только те колонки, которые вы отметили в диалоге. Если нужной колонки в списке нет вовсе — сначала выведите её в форму через Ещё → Изменить форму, а потом вызывайте «Вывести список».
Способ удобен тем, что не требует ни отчётов, ни программирования: любой справочник или журнал выгружается в пару кликов. Он же работает внутри документа — например, чтобы выгрузить табличную часть Товары из накладной: откройте документ, встаньте в таблицу и вызовите Вывести список из её командной панели.
Перед выгрузкой список стоит отфильтровать и отсортировать так, как нужно в итоговом файле: в Excel уйдёт ровно то, что вы видите на экране, вместе с применёнными отборами. Это избавляет от лишней чистки данных уже в таблице.
Сохранить отчёт или табличный документ в файл Excel
Результат любого отчёта в 1С — это табличный документ. Его можно сохранить в файл напрямую, с сохранением форматирования.
- Сформируйте отчёт.
- На панели документа нажмите кнопку сохранения (значок дискеты) либо откройте
Главное меню → Файл → Сохранить как…. - В поле «Тип файла» выберите
Лист Excel 2007-…(*.xlsx). - Укажите имя и папку, нажмите «Сохранить».
Кроме xlsx доступны форматы:
- 📄
Лист Excel (*.xls)— старый формат, читается везде; - 📄
Документ ODF (*.ods)— для LibreOffice и OpenOffice; - 📄
Табличный документ (*.mxl)— родной формат 1С, открывается только в 1С; - 📄
Текстовый документ (*.txt)иCSV— для загрузки в другие программы; - 📄
PDFиHTML— для печати и публикации.
Формат .xls вмещает максимум 65 536 строк. Если данных больше — выбирайте .xlsx (до 1 048 576 строк), иначе часть строк молча обрежется.
Этот способ, в отличие от буфера обмена, сохраняет объединённые ячейки, группировки и оформление отчёта. Поэтому для регламентированной и управленческой отчётности используют именно его.
Универсальный отчёт и обработки для сложных выборок
Если готового отчёта под вашу задачу нет, а строить его в буфере обмена долго, помогает универсальный отчёт. В «1С:Бухгалтерии» он лежит в разделе Отчёты → Универсальный отчёт.
Порядок работы:
- Выберите источник данных — документ, регистр накопления или справочник.
- Задайте группировки (строки), показатели (колонки) и отборы.
- Нажмите «Сформировать».
- Сохраните результат в Excel так же, как обычный отчёт.
Простой пример: нужно выгрузить остатки
товаров по складам. В универсальном отчёте источником берут регистр накопления Товары на складах, в строки ставят номенклатуру, в колонки — склады, показатель — конечный остаток. Пара минут настройки, и таблица готова к сохранению в xlsx — без привлечения программиста.
Для нестандартного экспорта применяют внешние обработки — например, консоль запросов или готовые обработки выгрузки, которые пишет 1С-специалист под конкретную структуру файла. Консоль запросов удобна, когда данные лежат в нескольких таблицах и их надо соединить: вы пишете запрос, получаете результат таблицей и выгружаете его в Excel тем же сохранением.
Чтобы запустить внешнюю обработку, администратор сначала включает их в Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки. У рядового пользователя такой возможности по умолчанию нет — выгрузка списков и типовых отчётов ему доступна, а запуск сторонних файлов обычно закрыт по правам.
Программная выгрузка в Excel через COM
Когда выгрузку нужно повторять регулярно и формировать файл сложной структуры, задачу решают кодом. Классический приём — управлять Excel из встроенного языка 1С через COM-объект Excel.Application.
Эксель = Новый COMОбъект("Excel.Application");
Книга = Эксель.Workbooks.Add();
Лист = Книга.Worksheets(1);
Лист.Cells(1, 1).Value = "Контрагент";
Лист.Cells(1, 2).Value = "Сумма";
Лист.Cells(2, 1).Value = "ООО Ромашка";
Лист.Cells(2, 2).Value = 12500;
Книга.SaveAs("D:\Выгрузка\otchet.xlsx");
Эксель.Quit();
Этот способ работает только там, где на компьютере установлен Microsoft Excel. На сервере без Excel код упадёт с ошибкой вызова метода контекста.
Минус подхода — скорость: каждая запись в ячейку — отдельный COM-вызов, и на десятках тысяч строк файл формируется минутами. Поэтому для больших таблиц COM-управление Excel не используют.
Часто проще собрать данные в табличный документ внутри 1С и записать его одной строкой: ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX). Это быстрее, чем построчное заполнение Excel через COM, и не требует самого Excel на машине.
Чтобы выгрузка шла по расписанию, код оформляют отдельной обработкой и запускают регламентным заданием. Регламентное задание на сервере выполняется без Excel — поэтому в фоновой выгрузке надёжнее формировать табличный документ и писать его методом Записать, а не поднимать Excel.Application. Если же файл всё-таки собирается через Excel, задание запускают на компьютере с установленным Excel, а не на сервере приложений.
Отдельно стоит V83.COMConnector — через него уже внешняя программа (например, макрос Excel на VBA) подключается к базе 1С и забирает данные сама. ProgID для платформы 8.3 — именно V83.COMConnector; версия в имени должна совпадать с версией платформы. Так делают, когда ведущая программа — Excel, а 1С выступает источником: пользователь нажимает кнопку в книге, макрос подключается к базе и подтягивает свежие цифры.
Выгрузка через ADO для больших объёмов
Когда строк действительно много, построчная запись в Excel через COM становится узким местом. Тогда применяют ADO (ActiveX Data Objects): файл Excel открывается не как приложение, а как база данных, и строки добавляются SQL-запросом INSERT. Это в разы быстрее и не требует установленного Excel.
Подключение задаётся строкой через провайдер Microsoft.ACE.OLEDB:
Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=D:\Выгрузка\big.xlsx;
Extended Properties="Excel 12.0 Xml;HDR=YES";
Дальше вставка данных идёт обычным SQL по имени листа: INSERT INTO [Лист1$] (Контрагент, Сумма) VALUES (?, ?). Параметры передаются пакетами, поэтому миллион строк записывается заметно быстрее, чем через Excel.Application.
Ограничения, о которых стоит помнить:
- 🔧 на машине должен быть установлен компонент Microsoft Access Database Engine (ACE) — именно он даёт провайдер OLEDB;
- 🔧 длинные текстовые поля через этот провайдер иногда обрезаются, тип колонки Excel определяет по первым строкам;
- 🔧 ADO хорош для «плоских» таблиц; сложное оформление с объединёнными ячейками так не сделать.
ADO применяют именно ради скорости на больших выгрузках. Для красивого отчёта с группировками он не нужен — там выигрывает сохранение табличного документа в xlsx.
Сравнение способов: что выбрать
| Способ | Когда применять | Объём | Что нужно |
|---|---|---|---|
| Буфер обмена | Пара строк на лету | До сотен строк | Ничего |
| «Вывести список» | Весь журнал/справочник | Тысячи строк | Ничего |
| Сохранить как xlsx | Готовый отчёт с оформлением | До 1 млн строк | Ничего |
| Универсальный отчёт | Своя выборка без готового отчёта | Тысячи строк | Навык построения отчёта |
COM (Excel.Application) | Регулярный файл сложной структуры | До нескольких тысяч | Excel на машине, код |
| ADO | Массовая выгрузка по расписанию | Сотни тысяч строк | Провайдер ACE, код |
Если коротко: руками — буфер, «Вывести список » и «Сохранить как»; программно и регулярно — COM для оформления, ADO для объёма.
Ctrl+C, вставьте в Excel.Ещё → Вывести список, затем сохраните табличный документ в xlsx.Лист Excel 2007-…(*.xlsx).Excel.Application) или запись табличного документа кодом.Microsoft.ACE.OLEDB — он пишет xlsx как базу данных.Типичные ошибки при выгрузке и как их исправить
Данные → Из текста с указанием типа колонки «Текстовый»..xls с пределом 65 536 строк. Пересохраните в .xlsx.ТабДок.Записать.Ещё → Изменить форму.Частые вопросы
Можно ли выгрузить в Excel, если Excel на компьютере не установлен?
.xlsx или .ods — это функция самой платформы 1С, Excel для неё не нужен. А вот программная выгрузка через Excel.Application требует установленного Excel.Как сделать, чтобы файл в Excel обновлялся автоматически?
Почему при копировании через буфер слетает оформление?
Сколько строк вообще можно выгрузить?
.xls вмещает 65 536 строк, .xlsx — 1 048 576. На практике раньше упираешься не в лимит строк, а в скорость: построчная запись через COM на больших таблицах идёт очень медленно, поэтому для объёма берут ADO.