Отчёт из 1С в Excel: меню, табличный документ, OLE и обработки
Содержание
Чтобы выгрузить отчёт из 1С в Excel, сформируйте его и нажмите кнопку с дискетой «Сохранить» в командной панели отчёта (или Ещё → Сохранить как…). В поле «Тип файла» выберите «Лист Microsoft Excel 2007-… (*.xlsx)», укажите папку и имя. Файл сразу открывается в Excel со всеми колонками, итогами и оформлением.
Способ работает в любой конфигурации на платформе 8.3: Бухгалтерии 3.0, ЗУП 3.1, УТ 11, ERP. Отчёт в 1С — это табличный документ, а его платформа умеет сохранять в xlsx сама. Всё остальное — копирование, код, OLE и внешние обработки — нужно, когда стандартной кнопки мало: выгрузка по расписанию, свой формат колонок или выгрузка того, что отчётом не является.
Что проверить до выгрузки, чтобы не переделывать файл
Excel получит ровно то, что вы видите на экране. Поэтому настройку отчёта лучше сделать в 1С, а не чистить таблицу потом.
- 📅 Период и отборы. Задайте их заранее. Отфильтровать 30 000 строк в Excel дольше, чем поставить отбор в 1С.
- 🧱 Группировки. Для сводной таблицы в Excel нужна плоская выгрузка: одна строка — одна запись. Уберите лишние уровни группировки в настройках отчёта (кнопка «Настройки» в форме отчёта).
- 🔢 Детализация. В оборотно-сальдовой ведомости, например, снимите галочки «По субсчетам» и разворот по субконто, если нужны только итоги по счетам.
- 📐 Шапка и подвал. Заголовок отчёта с периодом и подписи занимают первые строки. Для дальнейшей обработки их проще отключить в настройках оформления, если такая опция есть в варианте отчёта.
Если отчёт строится на системе компоновки данных, сохраните настроенный вариант (команда «Сохранить вариант…» в меню «Ещё» формы отчёта). В следующий раз выгрузка займёт два клика.
Выгрузка отчёта в Excel через «Сохранить как»: пошагово
Это основной способ. Он закрывает почти все повседневные задачи и не требует никаких прав, кроме доступа к самому отчёту.
Тонкий клиент и обычная установка
- Откройте отчёт и нажмите «Сформировать».
- Дождитесь, пока табличная часть отчёта заполнится полностью.
- Нажмите кнопку с дискетой в командной панели отчёта. Если её нет —
Ещё → Сохранить как…. - В окне сохранения выберите тип файла «Лист Microsoft Excel 2007-… (*.xlsx)».
- Укажите папку, имя файла и нажмите «Сохранить».
Есть и третий путь: главное меню (кнопка с тремя полосками в левом верхнем углу окна) → Файл → Сохранить как…. Он работает для любого активного табличного документа, даже если кнопки в форме нет.
Какой формат выбрать
| Формат | Когда брать | Ограничения |
|---|---|---|
xlsx (Excel 2007 и новее) | Почти всегда | До 1 048 576 строк и 16 384 колонок на лист |
xls (Excel 97) | Только для старых программ, которые не читают xlsx | До 65 536 строк и 256 колонок, лишнее обрежется |
ods | Если у адресата LibreOffice | Оформление может слегка «поплыть» |
mxl | Передать отчёт другому пользователю 1С | Excel такой файл не откроет |
Веб-клиент и 1С:Фреш
В браузере путь тот же: дискета или Ещё → Сохранить как…. Разница в том, что файл не пишется в выбранную папку, а скачивается браузером. Ищите его в «Загрузках». Если браузер блокирует скачивание, разрешите загрузку для адреса базы.
Окно выбора типа файла запоминает последний выбор. Если кто-то за этим компьютером сохранял в PDF, по умолчанию снова будет PDF — проверьте поле «Тип файла» перед сохранением.
Как перенести в Excel часть отчёта или список документов
Не всегда нужен весь отчёт. Иногда хватает одной таблицы или нескольких строк.
Копирование ячеек
- Выделите мышью диапазон ячеек в сформированном отчёте.
Ctrl+Aвыделяет весь табличный документ. - Нажмите
Ctrl+C. - Перейдите в Excel и нажмите
Ctrl+V.
Числа вставятся как числа, тексты — как тексты. Оформление (жирный шрифт, заливка, границы) переносится частично. Для таблицы на 50–500 строк это самый быстрый способ.
Выгрузка списка документов или справочника
Журнал документов , список контрагентов, номенклатуры — это не отчёт, а динамический список. Сохранить его напрямую нельзя, но можно сначала превратить в табличный документ:
- Откройте нужный список, при необходимости поставьте отбор.
- Нажмите
Ещё → Вывести список…. - Отметьте колонки, которые нужны, и нажмите «ОК».
- 1С сформирует табличный документ. Сохраните его в xlsx, как обычный отчёт.
Чтобы в выгрузку попало нужное поле, сначала добавьте его в список через Ещё → Изменить форму…. Иначе в окне «Вывести список» его не будет.
Отчёты и печатные формы на макетах: что сохранится в Excel
Печатные формы (счёт, накладная, акт) и многие отчёты строятся по макету — заготовке табличного документа в конфигурации. Макет задаёт ширину колонок, объединение ячеек, шрифты и границы. При сохранении в xlsx всё это переходит в Excel.
Как сохранить печатную форму
- В документе нажмите «Печать» и выберите нужную форму.
- В окне печатной формы нажмите кнопку с дискетой «Сохранить».
- Отметьте формат «Лист Microsoft Excel 2007».
- Выберите, куда сохранить: на компьютер или прикрепить к документу.
В этом же окне можно упаковать несколько форм в архив. Это удобно, когда нужно отправить контрагенту счёт и акт одним файлом.
Почему файл неудобно править
Макет рисуют под печать, а не под расчёты. Отсюда типичные проблемы в Excel:
- 🔗 объединённые ячейки мешают сортировке и фильтру;
- 📏 одна колонка таблицы занимает три-четыре колонки листа;
- 🔤 номер документа и дата сидят в одной текстовой ячейке.
Для анализа данных берите отчёт, а не печатную форму. Например, реестр реализаций за месяц удобнее выгрузить из списка документов (Вывести список…) или из универсального отчёта, чем сохранять сто накладных по одной.
Если макет типовой печатной формы нужно изменить, правьте его не в конфигурации, а через пользовательские макеты в режиме предприятия или в расширении. Так правка переживёт обновление.
Выгрузка табличного документа в Excel из кода
Если вы дорабатываете конфигурацию или пишете внешний отчёт, сохранять результат в Excel можно одной строкой. У объекта ТабличныйДокумент есть метод Записать(), а формат задаёт системное перечисление ТипФайлаТабличногоДокумента.
На сервере (обработки, регламентные задания)
&НаСервере
Процедура ВыгрузитьОтчетНаСервере()
ТабДок = Новый ТабличныйДокумент;
// ... заполнение из макета или через СКД ...
ИмяФайла = "D:\Выгрузки\Остатки.xlsx";
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
КонецПроцедуры
Путь здесь — путь на компьютере, где работает сервер 1С. У пользователя службы сервера 1С должны быть права на запись в эту папку.
На клиенте
Для сохранения на компьютер пользователя тот же метод вызывают в клиентской процедуре. В современных типовых конфигурациях синхронные вызовы часто запрещены свойством конфигурации «Режим использования синхронных вызовов…». Тогда используйте асинхронный вариант ЗаписатьАсинх() (платформа 8.3.18 и новее):
&НаКлиенте
Асинх Процедура СохранитьВExcel(Команда)
ИмяФайла = "C:\Выгрузка\Отчет.xlsx";
Ждать Результат.ЗаписатьАсинх(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
ПоказатьПредупреждение(, "Файл сохранён: " + ИмяФайла);
КонецПроцедуры
Здесь Результат — реквизит формы типа «Табличный документ», в который выведен отчёт.
Записать() не требует установленного Excel. Файл формирует сама платформа, поэтому способ работает и на сервере под Linux, и в веб-клиенте.
OLE-автоматизация Excel: когда она нужна и где подводит
OLE (COM) — это управление самим приложением Excel из кода 1С. 1С запускает Excel, создаёт книгу и пишет значения в ячейки. Так делали до появления сохранения в xlsx, и этот способ до сих пор встречается в старых обработках.
Когда OLE оправдана
- 📊 нужно заполнить готовый шаблон заказчика с формулами, сводными таблицами и макросами;
- 🗂 надо дописать данные в существующую книгу, не трогая другие листы;
- 🧮 требуется вызвать функцию самого Excel (пересчёт, сохранение в особом формате).
Для всего остального ТабличныйДокумент.Записать() быстрее и надёжнее.
Пример: выгрузка табличной части документа
&НаКлиенте
Процедура ВыгрузитьТоварыЧерезOLE(Команда)
Попытка
Excel = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Не удалось запустить Excel: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Excel.DisplayAlerts = Ложь;
Книга = Excel.Workbooks.Add();
Лист = Книга.Worksheets(1);
Лист.Cells(1, 1).Value = "Номенклатура";
Лист.Cells(1, 2).Value = "Количество";
Лист.Cells(1, 3).Value = "Сумма";
НомерСтроки = 2;
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
Лист.Cells(НомерСтроки, 1).Value = Строка(СтрокаТЧ.Номенклатура);
Лист.Cells(НомерСтроки, 2).Value = СтрокаТЧ.Количество;
Лист.Cells(НомерСтроки, 3).Value = СтрокаТЧ.Сумма;
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
Книга.SaveAs("C:\Выгрузка\Товары.xlsx");
Книга.Close();
Excel.Quit();
КонецПроцедуры
Технические ограничения
| Ограничение | Что из этого следует |
|---|---|
| Работает только в Windows | На клиенте под Linux или macOS и в веб-клиенте COM недоступен |
| Нужен установленный Excel | На компьютере, где выполняется код, должен стоять Microsoft Excel |
| Запись по одной ячейке медленная | 10 000 строк × 10 колонок — это 100 000 обращений к Excel, выгрузка идёт минуты |
| Excel остаётся в памяти | Если код упал до Excel.Quit(), процесс EXCEL.EXE висит в диспетчере задач |
Не запускайте Excel через OLE на сервере 1С. Microsoft не поддерживает работу Office в серверных службах без интерактивного пользователя. Процессы зависают, а сервер копит «висящие» EXCEL.EXE. Для серверной выгрузки используйте Записать().
Если OLE всё же нужна для большой таблицы, заполните массив значений и запишите его в диапазон одним присваиванием Range(...).Value. Это на порядок быстрее записи по ячейке.
Автоматическая выгрузка отчёта в Excel: обработки и рассылки
Когда один и тот же отчёт нужен каждый день или неделю, выгружать вручную незачем.
Рассылка отчётов
В конфигурациях на Библиотеке стандартных подсистем (БП 3.0, ЗУП 3.1, УТ 11, ERP) есть подсистема рассылки отчётов. Найти её проще всего в меню «Ещё» формы отчёта или поиском по слову «Рассылка» в главном меню. В рассылке задают:
- Какие отчёты и с какими настройками отправлять.
- Формат вложения — xlsx.
- Куда: на электронную почту, в сетевую папку или на FTP.
- Расписание: каждый день, в начале недели, первого числа месяца.
Для рассылки по расписанию в файловой базе должна быть запущена база или настроен запуск регламентных заданий. В клиент-серверной базе задания выполняет сервер.
Внешняя обработка
Если нужен нестандартный формат (определённый порядок колонок для банка, загрузка в чужую программу), пишут внешнюю обработку
.epf. Подключают её так:
Администрирование → Печатные формы, отчеты и обработки.- Включите флажок «Дополнительные отчеты и обработки» и откройте одноимённый список.
- Нажмите «Добавить из файла…» и выберите
.epf. - Для обработки с серверной командой можно настроить расписание прямо в карточке.
Внешняя обработка выполняет любой код с правами пользователя. Подключайте только файлы из проверенного источника. Платформа при открытии показывает предупреждение о безопасности — это нормально, но не повод отключать защиту целиком.