Перенос данных из 1С в Excel: от буфера обмена до COM и ADO

· 9 мин

Содержание

Выгрузить данные из 1С в Excel можно пятью способами, и в большинстве случаев хватает самого простого. Нужна пара строк из списка — выделите их и нажмите Ctrl+C, затем вставьте в Excel. Нужен весь журнал документов или справочник целиком — команда Ещё → Вывести список. Готовый отчёт переносят кнопкой сохранения в формат .xlsx.

Отдельная история — когда перенести данные нужно каждый день по расписанию или выгрузить десятки тысяч строк. Тогда подключают COM или ADO. Разберём каждый способ по очереди: сначала то, что делается мышкой за минуту, потом автоматизацию для регулярных задач.

Скопировать таблицу через буфер обмена

Самый быстрый перенос — через буфер обмена. Подходит, когда нужно вытащить несколько строк из списка или фрагмент готового отчёта.

  1. Откройте список (например, журнал документов Реализация) или сформированный отчёт.
  2. Выделите нужные строки: Ctrl+A — весь список, либо Ctrl + клик по отдельным строкам.
  3. Нажмите Ctrl+C.
  4. Перейдите в Excel и вставьте: Ctrl+V.

В сформированном отчёте (это табличный документ 1С) можно выделить мышкой любой прямоугольный диапазон ячеек и скопировать его — в Excel он ляжет с теми же колонками.

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

У способа один минус: буфер переносит текст и числа, но не стили — объединённые ячейки, цвета и группировки слетают. Для одноразовой выборки это не важно, для красивого отчёта лучше сохранять файл целиком (способ ниже).

Команда «Вывести список»: выгрузить весь журнал или справочник

Когда нужен не фрагмент, а весь список документов, справочник контрагентов или номенклатуру, работает штатная команда. Она есть в любой форме списка.

  1. Откройте нужный список.
  2. На командной панели нажмите Ещё → Вывести список….
  3. В диалоге выберите тип: Табличный документ (чтобы потом сохранить в Excel) или Текстовый документ.
  4. Отметьте галочками колонки, которые нужно выгрузить.
  5. Нажмите ОК — 1С сформирует табличный документ со всем списком.

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

В выгрузку попадут только те колонки, которые вы отметили в диалоге. Если нужной колонки в списке нет вовсе — сначала выведите её в форму через Ещё → Изменить форму, а потом вызывайте «Вывести список».

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

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

Сохранить отчёт или табличный документ в файл Excel

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

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

Кроме xlsx доступны форматы:

  • 📄 Лист Excel (*.xls) — старый формат, читается везде;
  • 📄 Документ ODF (*.ods) — для LibreOffice и OpenOffice;
  • 📄 Табличный документ (*.mxl) — родной формат 1С, открывается только в 1С;
  • 📄 Текстовый документ (*.txt) и CSV — для загрузки в другие программы;
  • 📄 PDF и HTML — для печати и публикации.

Формат .xls вмещает максимум 65 536 строк. Если данных больше — выбирайте .xlsx (до 1 048 576 строк), иначе часть строк молча обрежется.

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

Универсальный отчёт и обработки для сложных выборок

Если готового отчёта под вашу задачу нет, а строить его в буфере обмена долго, помогает универсальный отчёт. В «1С:Бухгалтерии» он лежит в разделе Отчёты → Универсальный отчёт.

Порядок работы:

  1. Выберите источник данных — документ, регистр накопления или справочник.
  2. Задайте группировки (строки), показатели (колонки) и отборы.
  3. Нажмите «Сформировать».
  4. Сохраните результат в 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 для объёма.

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

Типичные ошибки при выгрузке и как их исправить

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

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

Можно ли выгрузить в Excel, если Excel на компьютере не установлен?
Да. Сохранение отчёта или списка в файл .xlsx или .ods — это функция самой платформы 1С, Excel для неё не нужен. А вот программная выгрузка через Excel.Application требует установленного Excel.
Как сделать, чтобы файл в Excel обновлялся автоматически?
Настройте регламентное задание в 1С, которое формирует отчёт и сохраняет файл по расписанию. Другой вариант — забирать данные из базы напрямую в Excel через внешний запрос (ADO/ODBC), тогда таблица обновляется по кнопке «Обновить» уже в Excel.
Почему при копировании через буфер слетает оформление?
Буфер обмена переносит значения ячеек, а не стили. Объединённые ячейки, цвета и группировки теряются. Чтобы сохранить вид отчёта, пользуйтесь не копированием, а командой «Сохранить как» в xlsx.
Сколько строк вообще можно выгрузить?
Формат .xls вмещает 65 536 строк, .xlsx — 1 048 576. На практике раньше упираешься не в лимит строк, а в скорость: построчная запись через COM на больших таблицах идёт очень медленно, поэтому для объёма берут ADO.
Нужны ли права администратора для выгрузки?
Для копирования, «Вывести список» и сохранения отчётов — нет, это доступно обычному пользователю. Права нужны только чтобы разрешить запуск внешних обработок: их включает администратор в настройках.