Сохранение отчётов, списков и таблиц 1С в XLS и XLSX
Содержание
Любой отчёт или печатную форму в 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 штатными кнопками
Отчёт или печатная форма
- Сформируйте отчёт (например,
Отчёты → Оборотно-сальдовая ведомостьв Бухгалтерии 3.0) или откройте печатную форму документа. - Нажмите кнопку с изображением дискеты в командной панели отчёта либо
Ctrl+S. Тот же пункт есть в главном меню: значок ☰ в левом верхнем углу →Файл → Сохранить как.... - В поле «Тип файла» выберите
Лист Excel 2007-... (*.xlsx). - Укажите папку и имя файла, нажмите «Сохранить».
В окне печатной формы БСП при нажатии на дискету открывается своё окно: там галочками отмечаются форматы (XLSX, PDF, DOCX, MXL и другие) и можно сразу сохранить комплект форм. Если в печати несколько документов, каждая форма уйдёт в отдельный файл или в один — это тоже настраивается в этом окне.
Нужна не вся ведомость, а кусок? Выделите мышью диапазон ячеек, нажмите Ctrl+C и вставьте в Excel. Числа вставятся числами, оформление сохранится.
Список справочника или журнал документов
Списки (контрагенты, номенклатура, реализации) напрямую не сохраняются, их сначала выводят в табличный документ:
- Откройте список, при необходимости наложите отбор: по периоду, организации, поиску.
- Нажмите
Ещё → Вывести список.... - В окне отметьте колонки, которые нужны. Флажок «Только выделенные» выгрузит только строки, выделенные в списке.
- Оставьте вывод в табличный документ и нажмите «ОК».
- Сохраните результат в XLSX так же, как отчёт.
Порядок колонок в выгрузке повторяет порядок в списке. Поменять его заранее можно через Ещё → Изменить форму....
«Вывести список» выгружает только реквизиты, которые есть в колонках списка. Если нужен ИНН контрагента, а колонки ИНН в списке нет, сначала добавьте её через изменение формы.
Какой способ выбрать
| Задача | Способ | Ограничения |
|---|---|---|
| Разово сохранить отчёт или ведомость | Дискета или Ctrl+S | Структура отчёта переносится как есть, с группировками |
| Выгрузить справочник или журнал | Ещё → Вывести список... | Только видимые колонки |
| Таблица для сводной в Excel | Вариант отчёта на СКД без итогов | Нужно один раз настроить вариант |
| Регулярная выгрузка по расписанию | Код с ТабличныйДокумент.Записать | Нужен программист или готовая обработка |
| Данные в Excel без открытия 1С | COM-соединение из Excel (VBA) | Нужна установленная платформа и права |
Плоская таблица из отчёта: настройка СКД
Большинство отчётов типовых конфигураций построено на схеме компоновки данных. Это даёт пользователю возможность самому перестроить отчёт так, чтобы в Excel ушла чистая таблица: одна строка — одна запись, без промежуточных итогов и отступов.
Пошаговая настройка варианта
- Откройте отчёт и нажмите «Настройки». Если видна только упрощённая форма, переключите вид на расширенный (переключатель вида настроек находится в верхней части окна).
- На вкладке структуры удалите вложенные группировки и оставьте одну — «Детальные записи». Тогда каждая запись выведется отдельной строкой.
- На вкладке полей отметьте колонки, которые нужны в Excel, и уберите лишние.
- В дополнительных настройках найдите параметры расположения итогов и общих итогов и выключите их. Пустых строк-итогов в Excel не будет.
- Отключите вывод заголовка и отборов, если они мешают: тогда таблица начнётся с первой строки.
- Сохраните вариант (
Ещё → Сохранить вариант отчета...) под понятным именем, например «Для Excel». - Сформируйте отчёт и сохраните в 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С той же разрядности, что и Excel. 64-битный Office не увидит 32-битный
comcntr.dll. - Зарегистрированная компонента:
regsvr32 "C:\Program Files\1cv8\<версия>\bin\comcntr.dll"из командной строки от имени администратора. - Отдельный пользователь 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. - 📎 Объединённые ячейки мешают сортировке. Печатные формы (счёт, накладная) свёрстаны под бумагу и объединяют ячейки. Для анализа берите не печатную форму, а список документов или отчёт.