Выгрузка из 1С 8.3 в Excel: от Ctrl+C до COM и ADO

· 10 мин

Содержание

Чтобы перенести данные из 1С в Excel, откройте отчёт или список, выделите нужное и нажмите Ctrl+C, а в Excel — Ctrl+V. Если нужен файл целиком, сохраните отчёт кнопкой с дискетой (или Ctrl+S) и выберите тип «Лист Excel 2007-… (*.xlsx)». Для списков документов и справочников сначала выполните Ещё → Вывести список, а уже потом копируйте или сохраняйте.

Частое заблуждение — думать, что для выгрузки из 1С в Excel нужна специальная обработка или программист. Для 90% задач хватает встроенных средств платформы. Обработки, COM и ADO нужны, когда выгрузку надо повторять по расписанию, собирать данные из нескольких баз или переносить сотни тысяч строк.

Какой способ переноса выбрать

Способ зависит от того, что вы копируете и как часто.

СпособКогда подходитОграничения
📋 Буфер обмена (Ctrl+C)Кусок отчёта, несколько строкТолько то, что видно на экране; форматирование может «поехать»
💾 Сохранить как .xlsxГотовый отчёт, печатная форма, вывод спискаОбъединённые ячейки и группировки переходят как есть
🧰 Внешняя обработка, консоль запросовДанные, которых нет ни в одном отчётеНужны права на открытие внешних обработок
🔌 COM (Excel.Application, V83.COMConnector)Регулярная выгрузка, отчёт в Excel по кнопкеТолько Windows, нужен Excel или регистрация компоненты
⚡ ADO / запись XLSX из кодаДесятки и сотни тысяч строкНужен программист, для ADO — драйвер ACE OLEDB

Перед любым способом проверьте лимиты Excel: в .xlsx помещается 1 048 576 строк и 16 384 столбца, в старом .xls — 65 536 строк и 256 столбцов. Оборотка по всем контрагентам за год в .xls может просто не влезть.

Копирование из 1С в Excel через буфер обмена

Это самый быстрый способ, когда нужна часть таблицы.

Из отчёта

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

Отчёт вставится с шрифтами, заливкой и границами. Если оформление не нужно, в Excel используйте «Специальная вставка» (Ctrl+Alt+V) → «Значения» или «Текст».

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

В обычном списке 1С 8.3 строки выделяются через Shift или Ctrl и копируются Ctrl+C, но в Excel попадёт только текст видимых колонок, без заголовков. Надёжнее так:

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

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

Из табличной части документа

У табличной части накладной, авансового отчёта или ведомости тоже есть Ещё → Вывести список.... Это удобный способ скинуть поставщику спецификацию на 200 позиций, не перепечатывая их.

Сохранение отчёта из 1С в файл Excel

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

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

Кроме .xlsx платформа сохраняет в .xls, .ods, .pdf, .docx, .html, .txt и собственный формат .mxl.

Как получить «чистую» таблицу без группировок

Отчёт с группировками и итогами в Excel превращается в лесенку из объединённых ячеек. Чтобы с данными можно было работать фильтрами и сводными таблицами:

  • 🔧 в настройках отчёта переключитесь на расширенный вид и уберите лишние группировки строк;
  • 🔧 отключите вывод заголовка, параметров и отборов — тогда таблица начнётся с первой строки;
  • 🔧 в универсальном отчёте выводите детальные записи без итогов;
  • 🔧 разверните все группы перед сохранением, иначе свёрнутые строки сохранятся скрытыми.

Печатные формы и отправка по почте

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

Выгрузка из 1С в Excel через обработки и консоль запросов

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

Консоль запросов

Консоль запросов — внешняя обработка (.epf), которую используют администраторы и внедренцы.

  1. Откройте её через главное меню → Файл → Открыть....
  2. Подтвердите предупреждение безопасности (появляется для внешних файлов).
  3. Напишите запрос или соберите его конструктором.
  4. Выполните запрос и выведите результат в табличный документ.
  5. Сохраните таблицу в .xlsx, как обычный отчёт.

Пример запроса для выгрузки справочника номенклатуры:

ВЫБРАТЬ
    Номенклатура.Код КАК Код,
    Номенклатура.Артикул КАК Артикул,
    Номенклатура.Наименование КАК Наименование,
    Номенклатура.ЕдиницаИзмерения КАК Единица
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    НЕ Номенклатура.ЭтоГруппа
    И НЕ Номенклатура.ПометкаУдаления

Готовые обработки выгрузки

Обработки «выгрузка в Excel» с настройкой колонок, шаблонами и сохранением по расписанию продаются и распространяются бесплатно.

Открывайте только обработки из проверенного источника: внешний файл выполняет код с вашими правами и может изменить или удалить данные. Перед первым запуском на рабочей базе проверьте обработку на копии.

В типовых конфигурациях на БСП права на интерактивное открытие внешних обработок по умолчанию есть только у администратора. Обычному пользователю обработку лучше подключить через Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.

Программный перенос данных: COM-соединение с Excel

COM подходит, когда выгрузку делают постоянно и хотят получить готовую книгу Excel с формулами, ширинами колонок и листами. Работает только в Windows.

Вариант 1. 1С сама управляет Excel

Код выполняется на клиенте, на компьютере должен стоять Microsoft Excel.

&НаКлиенте
Процедура ВыгрузитьВExcel(Команда)

    Данные = ПолучитьДанныеНаСервере(); // массив структур с полями Код, Наименование

    Excel = Новый COMОбъект("Excel.Application");
    Excel.ScreenUpdating = Ложь;
    Книга = Excel.Workbooks.Add();
    Лист = Книга.Worksheets(1);

    Лист.Cells(1, 1).Value = "Код";
    Лист.Cells(1, 2).Value = "Наименование";

    НомерСтроки = 1;
    Для Каждого Строка Из Данные Цикл
        НомерСтроки = НомерСтроки + 1;
        Лист.Cells(НомерСтроки, 1).NumberFormat = "@"; // код как текст, без потери нулей
        Лист.Cells(НомерСтроки, 1).Value = Строка.Код;
        Лист.Cells(НомерСтроки, 2).Value = Строка.Наименование;
    КонецЦикла;

    Лист.Columns("A:B").AutoFit();
    Excel.ScreenUpdating = Истина;
    Excel.Visible = Истина;

КонецПроцедуры

Каждое обращение к ячейке — отдельный вызов COM. На 1 000 строк это незаметно, на 50 000 выгрузка растянется на минуты. Для больших объёмов смотрите следующий раздел.

Вариант 2. Excel забирает данные из 1С

Здесь наоборот: макрос VBA в Excel подключается к базе через V83.COMConnector и сам выполняет запрос.

Sub LoadFrom1C()
    Dim Connector As Object, Base As Object, Q As Object, R As Object, i As Long
    Set Connector = CreateObject("V83.COMConnector")
    Set Base = Connector.Connect("File=""D:\Bases\Buh"";Usr=""Выгрузка"";Pwd=""пароль""")
    ' для серверной базы: "Srvr=""srv1c"";Ref=""buh"";Usr=..."

    Set Q = Base.NewObject("Query")
    Q.Text = "SELECT Code, Description FROM Catalog.Контрагенты WHERE NOT IsFolder"
    Set R = Q.Execute().Select()

    i = 2
    Do While R.Next()
        Cells(i, 1).Value = R.Code
        Cells(i, 2).Value = R.Description
        i = i + 1
    Loop
End Sub

Что проверить, если не подключается:

  • 🔹 компонента comcntr.dll зарегистрирована командой regsvr32 из папки bin установленной платформы, от имени администратора;
  • 🔹 разрядность платформы совпадает с разрядностью Excel: 32-битный Office не видит 64-битную компоненту;
  • 🔹 у пользователя в строке подключения есть право внешнего соединения;
  • 🔹 свободна лицензия — внешнее соединение занимает её так же, как обычный сеанс.

Не храните пароль в макросе книги, которую пересылаете коллегам. Заведите в 1С отдельного пользователя только с правами на чтение нужных данных.

Большие объёмы: ADO и запись XLSX без Excel

Когда строк сотни тысяч, построчная запись через COM слишком медленная.

Табличный документ → файл (без Excel вообще)

Самый надёжный вариант для выгрузки из 1С: собрать ТабличныйДокумент на сервере и записать его методом Записать с типом ТипФайлаТабличногоДокумента.XLSX. Excel на компьютере не нужен, код работает и на сервере под Linux, и в веб-клиенте.

&НаСервере
Функция СформироватьФайлНаСервере()

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

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

    ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
    ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
    Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла));
    УдалитьФайлы(ИмяФайла);
    Возврат Адрес;

КонецФункции

Адрес из временного хранилища передаётся на клиент, где файл предлагается сохранить пользователю. В типовых конфигурациях для этого есть процедуры библиотеки БСП в модуле ФайловаяСистемаКлиент.

ADO: запись в книгу как в таблицу базы данных

ADO позволяет обращаться к листу Excel через SQL-команды CREATE TABLE и INSERT INTO. Excel для этого не нужен, но нужен драйвер Microsoft Access Database Engine той же разрядности, что и платформа 1С.

Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ИмяФайла
    + ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";");

Соединение.Execute("CREATE TABLE [Остатки] ([Код] VARCHAR(20), [Наименование] VARCHAR(150), [Количество] DOUBLE)");

Пока Выборка.Следующий() Цикл
    Наименование = СтрЗаменить(Выборка.Наименование, "'", "''");
    Количество = Формат(Выборка.Количество, "ЧРД=.; ЧГ=0; ЧН=0");
    Соединение.Execute(СтрШаблон("INSERT INTO [Остатки] VALUES ('%1', '%2', %3)",
        Выборка.Код, Наименование, Количество));
КонецЦикла;

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

Здесь два обязательных приёма. Апостроф в наименовании удваивается, иначе запрос упадёт на «ООО Д’Арт». Число форматируется с точкой и без разделителя групп, иначе 1 250,5 превратится в синтаксическую ошибку SQL.

Сравнение на объёме 100 тысяч строк

МетодЧто нужно на компьютереСкорость
COM, запись по ячейкеExcelМедленно, минуты
COM, запись массивом в диапазонExcelБыстро
ADOДрайвер ACE OLEDBБыстро
ТабличныйДокумент.ЗаписатьНичегоБыстро, но много памяти на сервере
Текстовый файл CSV через ЗаписьТекстаНичегоБыстрее всех, но без оформления

Что ломается при переносе в Excel и как это исправить

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

Как ускорить выгрузку данных из 1С в Excel

  • ⚡ Отбор до вывода. Ограничьте период и организацию в отчёте, а не удаляйте лишние строки в Excel.
  • ⚡ Только нужные колонки. Каждая лишняя колонка в «Вывести список» или в запросе — это ещё одно разыменование ссылки и время.
  • ⚡ Без экрана. При COM-выгрузке ставьте ScreenUpdating = Ложь и включайте его в конце. Перерасчёт формул на время записи тоже можно отключить.
  • ⚡ Массивом, а не по ячейке. В COM-выгрузке соберите данные в двумерный массив (COMSafeArray) и присвойте его диапазону целиком: это один вызов вместо тысяч.
  • ⚡ Запрос, а не обход объектов. Получайте данные запросом с нужными полями. Обход справочника через Выбрать() с обращением к реквизитам каждого элемента в разы медленнее.
  • ⚡ На сервере. Формируйте файл на сервере и передавайте на клиент готовый результат: так не гоняются тысячи вызовов между клиентом и сервером.
  • ⚡ Без формата .xls. Он упирается в 65 536 строк и весит больше. Для архивов и обмена берите .xlsx.

Если выгрузку нужно получать каждое утро, вынесите её в регламентное задание: оно сформирует .xlsx на сервере ночью и положит в сетевую папку. Пользователю не придётся ждать.

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

Можно ли выгрузить данные в Excel из веб-клиента 1С или 1С:Фреш?
Да. Сохранение отчёта в .xlsx работает в браузере: файл скачивается как обычная загрузка. Не работают только COM и ADO — браузер не даёт доступа к компонентам Windows.
Нужен ли установленный Microsoft Excel, чтобы сохранить отчёт в .xlsx?
Нет. Платформа сама формирует файл. Excel нужен только для его открытия, а вместо него подойдут LibreOffice или «Мой Офис».
Почему выгрузка в Excel пустая, хотя в 1С данные есть?
Чаще всего сохранили отчёт до формирования или со свёрнутыми группами. Нажмите «Сформировать», разверните группы и сохраните снова.
Как выгрузить в Excel сразу несколько отчётов в одну книгу?
Встроенными средствами — никак: каждый отчёт сохраняется отдельным файлом. Объедините листы в Excel вручную или напишите выгрузку через COM, где каждому отчёту назначается свой лист.
Сохраняются ли формулы при переносе отчёта из 1С?
Нет, в Excel попадают готовые значения. Итоги и проценты нужно пересчитывать формулами Excel, если данные будут меняться.