Выгрузка из 1С 8.3 в Excel: от Ctrl+C до COM и ADO
Содержание
Чтобы перенести данные из 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 через буфер обмена
Это самый быстрый способ, когда нужна часть таблицы.
Из отчёта
- Сформируйте отчёт (ОСВ, анализ счёта, универсальный отчёт — любой).
- Выделите мышью диапазон ячеек. Весь отчёт выделяется
Ctrl+A. - Нажмите
Ctrl+C. - В Excel встаньте в ячейку
A1и нажмитеCtrl+V.
Отчёт вставится с шрифтами, заливкой и границами. Если оформление не нужно, в Excel используйте «Специальная вставка» (Ctrl+Alt+V) → «Значения» или «Текст».
Из списка документов или справочника
В обычном списке 1С 8.3 строки выделяются через Shift или Ctrl и копируются Ctrl+C, но в Excel попадёт только текст видимых колонок, без заголовков. Надёжнее так:
- Откройте список, например
Продажи → Реализация (акты, накладные, УПД)или справочник «Номенклатура». - Установите отбор и сортировку, чтобы в списке осталось только нужное.
- Нажмите
Ещё → Вывести список.... - В окне отметьте галочками колонки и оставьте вывод в табличный документ.
- Нажмите «ОК» — откроется таблица, которую можно скопировать или сохранить в файл.
«Вывести список» выводит то, что загружено в динамический список. Если колонки нет в форме, её не будет и в выгрузке. Добавьте колонку заранее: Ещё → Изменить форму... или через настройку списка.
Из табличной части документа
У табличной части накладной, авансового отчёта или ведомости тоже есть Ещё → Вывести список.... Это удобный способ скинуть поставщику спецификацию на 200 позиций, не перепечатывая их.
Сохранение отчёта из 1С в файл Excel
Когда нужен файл, а не вставка в чужую книгу, сохраняйте отчёт напрямую.
- Сформируйте отчёт или откройте печатную форму документа.
- Нажмите кнопку «Сохранить» (дискета) в командной панели или
Ctrl+S. Альтернатива — главное меню (значок с тремя полосками слева вверху) →Файл → Сохранить как.... - В поле «Тип файла» выберите «Лист Excel 2007-… (*.xlsx)».
- Укажите папку и имя, нажмите «Сохранить».
Кроме .xlsx платформа сохраняет в .xls, .ods, .pdf, .docx, .html, .txt и собственный формат .mxl.
Как получить «чистую» таблицу без группировок
Отчёт с группировками и итогами в Excel превращается в лесенку из объединённых ячеек. Чтобы с данными можно было работать фильтрами и сводными таблицами:
- 🔧 в настройках отчёта переключитесь на расширенный вид и уберите лишние группировки строк;
- 🔧 отключите вывод заголовка, параметров и отборов — тогда таблица начнётся с первой строки;
- 🔧 в универсальном отчёте выводите детальные записи без итогов;
- 🔧 разверните все группы перед сохранением, иначе свёрнутые строки сохранятся скрытыми.
Печатные формы и отправка по почте
Счёт, акт или УПД сохраняются тем же способом из окна печати. Если файл нужно сразу отправить контрагенту, в окне печати есть команда отправки по почте — при ней спрашивается формат вложения, и можно выбрать Excel.
Выгрузка из 1С в Excel через обработки и консоль запросов
Встроенных отчётов не хватает, когда нужно, например, выгрузить номенклатуру со всеми реквизитами, ценами и штрихкодами одной таблицей.
Консоль запросов
Консоль запросов — внешняя обработка (.epf), которую используют администраторы и внедренцы.
- Откройте её через главное меню →
Файл → Открыть.... - Подтвердите предупреждение безопасности (появляется для внешних файлов).
- Напишите запрос или соберите его конструктором.
- Выполните запрос и выведите результат в табличный документ.
- Сохраните таблицу в
.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.