Сохранение отчётов, списков и таблиц 1С в XLS и XLSX

· 11 мин

Содержание

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

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

Что проверить до выгрузки

Пять минут подготовки избавляют от переделки файла в Excel.

  • 📌 Формат. XLSX вмещает 1 048 576 строк на листе, старый XLS — только 65 536. Если строк больше 60 тысяч, сразу берите XLSX.
  • 📌 Клиент. В тонком клиенте файл пишется в выбранную папку. В веб-клиенте сохранение идёт через браузер, файл попадёт в папку загрузок.
  • 📌 Права. Для открытия внешней обработки через Файл → Открыть нужно право на интерактивное открытие внешних обработок. Обычному бухгалтеру его часто не дают.
  • 📌 Что именно нужно в Excel. Красивый отчёт «для печати» и таблица для сводной — разные вещи. Для сводной нужны плоские строки без итогов и объединённых ячеек.
  • 📌 Открытый файл. Если файл с тем же именем открыт в Excel, 1С не сможет его перезаписать. Закройте его или сохраните под другим именем.

Выгрузка в Excel штатными кнопками

Отчёт или печатная форма

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

В окне печатной формы БСП при нажатии на дискету открывается своё окно: там галочками отмечаются форматы (XLSX, PDF, DOCX, MXL и другие) и можно сразу сохранить комплект форм. Если в печати несколько документов, каждая форма уйдёт в отдельный файл или в один — это тоже настраивается в этом окне.

Нужна не вся ведомость, а кусок? Выделите мышью диапазон ячеек, нажмите Ctrl+C и вставьте в Excel. Числа вставятся числами, оформление сохранится.

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

Списки (контрагенты, номенклатура, реализации) напрямую не сохраняются, их сначала выводят в табличный документ:

  1. Откройте список, при необходимости наложите отбор: по периоду, организации, поиску.
  2. Нажмите Ещё → Вывести список....
  3. В окне отметьте колонки, которые нужны. Флажок «Только выделенные» выгрузит только строки, выделенные в списке.
  4. Оставьте вывод в табличный документ и нажмите «ОК».
  5. Сохраните результат в XLSX так же, как отчёт.

Порядок колонок в выгрузке повторяет порядок в списке. Поменять его заранее можно через Ещё → Изменить форму....

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

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

ЗадачаСпособОграничения
Разово сохранить отчёт или ведомостьДискета или Ctrl+SСтруктура отчёта переносится как есть, с группировками
Выгрузить справочник или журналЕщё → Вывести список...Только видимые колонки
Таблица для сводной в ExcelВариант отчёта на СКД без итоговНужно один раз настроить вариант
Регулярная выгрузка по расписаниюКод с ТабличныйДокумент.ЗаписатьНужен программист или готовая обработка
Данные в Excel без открытия 1СCOM-соединение из Excel (VBA)Нужна установленная платформа и права

Плоская таблица из отчёта: настройка СКД

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

Пошаговая настройка варианта

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

В результате получается файл, на котором сразу строится сводная таблица или работает автофильтр.

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

Когда СКД не спасает

Часть старых отчётов и некоторые печатные формы собраны макетом вручную, без СКД. У них нет вкладок структуры и полей. Для таких случаев остаётся два пути: выгрузка нужных данных через «Вывести список » из регистра или журнала либо консоль запросов (внешняя обработка), где результат запроса выводится в табличный документ и сохраняется в Excel тем же способом.

Выгрузка в Excel кодом на встроенном языке

Когда выгрузку нужно повторять каждый день или отдавать в другую систему, ручные клики заменяют кодом. Главный инструмент — метод Записать у объекта ТабличныйДокумент. Excel на компьютере для этого не нужен: платформа сама формирует файл.

Сохранение готового отчёта

// ТабДок — табличный документ, например результат отчёта
ИмяФайла = "C:\Выгрузка\Остатки.xlsx";
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);

Для старого формата используйте ТипФайлаТабличногоДокумента.XLS97. Тот же метод пишет PDF, MXL, ODS и другие форматы.

Таблица из запроса прямо в файл

Пример ниже выгружает список контрагентов с ИНН в файл без всякого отчёта. Код выполняется на сервере или в клиенте с доступом к данным.

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	Контрагенты.Наименование КАК Наименование,
|	Контрагенты.ИНН КАК ИНН
|ИЗ
|	Справочник.Контрагенты КАК Контрагенты
|ГДЕ
|	НЕ Контрагенты.ЭтоГруппа
|УПОРЯДОЧИТЬ ПО
|	Наименование";

Результат = Запрос.Выполнить();

ТабДок = Новый ТабличныйДокумент;
ТабДок.Область(1, 1).Текст = "Наименование";
ТабДок.Область(1, 2).Текст = "ИНН";

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

ТабДок.Записать("C:\Выгрузка\Контрагенты.xlsx", ТипФайлаТабличногоДокумента.XLSX);

ИНН здесь пишется текстом, поэтому ведущие нули не потеряются. Если запускаете код на сервере, путь C:\Выгрузка\ должен существовать именно на сервере 1С, а у пользователя, от имени которого работает служба, должны быть права на запись в эту папку.

Excel и 1С через COM

Под словом «COM» скрываются два разных сценария. Важно не путать их, потому что требования у них разные.

Сценарий 1: 1С управляет Excel

Код 1С создаёт объект Excel.Application, открывает книгу и пишет в ячейки. Так делают, когда нужен готовый шаблон с формулами, условным форматированием или несколькими листами.

Excel = Новый COMОбъект("Excel.Application");
Книга = Excel.Workbooks.Add();
Лист = Книга.Worksheets(1);
Лист.Cells(1, 1).Value = "Номенклатура";
Лист.Cells(1, 2).Value = "Остаток";
// ... заполнение строк ...
Книга.SaveAs("C:\Выгрузка\Остатки.xlsx");
Книга.Close();
Excel.Quit();

Ограничения способа:

  • 🖥️ Excel должен быть установлен на том компьютере, где выполняется код. Для серверного кода это значит — на сервере 1С, что Microsoft для серверной автоматизации не рекомендует.
  • 🐢 Каждое обращение к Cells — отдельный вызов COM. 10 000 строк по 10 колонок — это 100 000 вызовов и минуты ожидания.
  • 🧹 Если код упал до Excel.Quit(), в диспетчере задач остаётся висящий процесс EXCEL.EXE. Оборачивайте работу в Попытка ... Исключение и закрывайте Excel в обоих ветках.

Сценарий 2: Excel забирает данные из 1С

Здесь наоборот: макрос VBA в Excel подключается к базе через V83.COMConnector и выполняет запрос. Бухгалтер открывает книгу, жмёт кнопку «Обновить» — данные подтягиваются без запуска 1С.

Dim Connector As Object, Base As Object
Set Connector = CreateObject("V83.COMConnector")
Set Base = Connector.Connect("File=""C:\Bases\Buh"";Usr=""Выгрузка"";Pwd=""пароль""")
' дальше — Base.NewObject("Запрос") и разбор результата

Для клиент-серверной базы вместо File= указывают Srvr=""имя_сервера"";Ref=""имя_базы"".

Что нужно для работы:

  1. Установленная платформа 1С той же разрядности, что и Excel. 64-битный Office не увидит 32-битный comcntr.dll.
  2. Зарегистрированная компонента: regsvr32 "C:\Program Files\1cv8\<версия>\bin\comcntr.dll" из командной строки от имени администратора.
  3. Отдельный пользователь 1С с правом внешнего соединения и правами только на чтение нужных данных.

Не храните пароль администратора базы в макросе. Файл Excel легко уходит по почте, а VBA-код читается любым пользователем. Заведите технического пользователя с минимальными правами.

Внешние обработки и расширения

Если в базе нельзя менять код, выгрузку оформляют внешней обработкой (.epf) или расширением конфигурации (.cfe, механизм есть с платформы 8.3.6).

Как подключить внешнюю обработку

  • Разово: ☰ → Файл → Открыть... и выбрать файл. Сработает при наличии права на интерактивное открытие.
  • Постоянно: Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Включите флажок использования дополнительных отчётов и обработок, затем добавьте файл. После этого обработка появится в нужном разделе для всех, кому её разрешили.

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

Внешняя обработка выполняет код с правами пользователя. Запускайте только файлы из проверенного источника и сначала — на копии базы.

Когда выбрать расширение

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

Большие объёмы: сотни тысяч строк

На маленьких отчётах формат не важен. На 300 тысячах строк выбор способа решает, будет выгрузка идти минуту или час.

Сравнение по скорости

СпособСкорость на больших объёмахКомментарий
Табличный документ → Записать XLSXХорошаяОсновной вариант, Excel не нужен
COM, запись по одной ячейкеОчень низкаяТолько для маленьких шаблонов
COM, запись диапазона массивомХорошаяТребует программиста
CSV через ЗаписьТекстаСамая высокаяБез оформления, Excel откроет как таблицу

Практические приёмы

  • 🔹 Режьте по периодам. Выгрузка проводок за год одним файлом упирается в память клиента. Выгрузка по месяцам — 12 быстрых файлов.
  • 🔹 Убирайте оформление. Цвета, рамки и объединения ячеек увеличивают и время формирования, и размер файла. Для сводной они не нужны.
  • 🔹 Пишите на сервере. Формирование табличного документа на сервере и передача клиенту готового файла быстрее, чем построчная передача данных.
  • 🔹 CSV для гигантов. Если строк больше миллиона, XLSX их не вместит на один лист. CSV можно загрузить в Excel через Power Query, минуя лимит листа.

Пример записи CSV, который Excel откроет без «кракозябр»:

Запись = Новый ЗаписьТекста("C:\Выгрузка\Проводки.csv", КодировкаТекста.UTF8);
Запись.ЗаписатьСтроку("Дата;Сумма;Содержание");
Пока Выборка.Следующий() Цикл
	Запись.ЗаписатьСтроку(
		Формат(Выборка.Дата, "ДФ=dd.MM.yyyy") + ";"
		+ Формат(Выборка.Сумма, "ЧРД=,; ЧГ=0") + ";"
		+ СтрЗаменить(Выборка.Содержание, ";", ","));
КонецЦикла;
Запись.Закрыть();

Разделитель — точка с запятой, как ожидает русский Excel. Формат ЧГ=0 убирает разделитель тысяч: иначе в число попадёт неразрывный пробел, и Excel примет сумму за текст.

Почему файл открывается не так, как ожидалось

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

Ещё две частые ситуации:

  • 📎 Пропали картинки и штрихкоды. Изображения в печатных формах сохраняются в XLSX, но при копировании через буфер обмена теряются. Сохраняйте файлом, а не через Ctrl+C.
  • 📎 Объединённые ячейки мешают сортировке. Печатные формы (счёт, накладная) свёрстаны под бумагу и объединяют ячейки. Для анализа берите не печатную форму, а список документов или отчёт.

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

Можно ли выгрузить из 1С сразу в Google Таблицы?
Напрямую — нет. Сохраните файл в XLSX и загрузите его в Google Диск: таблица откроется без потери данных.
Почему в меню нет команды «Сохранить как»?
В интерфейсе «Такси» она спрятана в главном меню под значком ☰ в разделе «Файл». Если её нет и там, проверьте, что активно окно с табличным документом, а не список или форма документа.
Как выгрузить в Excel сразу несколько отчётов в одну книгу на разные листы?
Штатно каждый отчёт сохраняется отдельным файлом. Несколько листов в одной книге дают пакет табличных документов в коде или COM-выгрузка в шаблон.
Сохранит ли Excel формулы из отчёта 1С?
Нет. В файл попадают значения, формулы отчёта не переносятся. Если в Excel нужны формулы, заполняйте подготовленный шаблон через COM.
Можно ли настроить автоматическую выгрузку каждый день?
Да, через регламентное задание в расширении или внешней обработке: оно формирует отчёт и записывает файл в сетевую папку. Путь к папке должен быть доступен серверу 1С.