Как перенести списки, отчёты и печатные формы 1С в Excel без потерь
Содержание
Выгрузка из 1С в Excel настраивается без программиста: откройте список, отчёт или печатную форму, нажмите Ctrl+S и выберите тип файла «Лист Microsoft Excel 2007-…» (*.xlsx). Для журналов и справочников сначала выполните Ещё → Вывести список, и сохраняйте уже получившуюся таблицу.
Код нужен в двух случаях: когда выгрузка повторяется каждый день по одному шаблону и когда в Excel требуется особое оформление — формат столбцов, формулы, несколько листов. Ниже — все способы по нарастанию сложности, на платформе 8.3 с интерфейсом «Такси». Механизм общий для платформы, поэтому работает в Бухгалтерии, ЗУП, УТ и других типовых конфигурациях.
Встроенные способы: сохранить в Excel любую таблицу 1С
Всё, что 1С показывает в виде табличного документа, сохраняется в Excel штатно. Это отчёты, печатные формы, результат команды «Вывести список ».
Отчёт или печатная форма
- Сформируйте отчёт (например, оборотно-сальдовую ведомость) или откройте печатную форму документа.
- Нажмите
Ctrl+Sили кнопку с дискетой на панели формы. Тот же пункт есть в главном меню:☰ → Файл → Сохранить как…. - В поле «Тип файла» выберите «Лист Microsoft Excel 2007-…» (
*.xlsx). - Укажите папку и имя файла, нажмите «Сохранить».
В окне печати документов есть ещё кнопка «Сохранить» со списком форматов. Там можно отметить xlsx и сразу сохранить несколько печатных форм отдельными файлами.
Список документов или справочник
Список в форме — это не табличный документ, сохранить его напрямую нельзя. Сначала его нужно «вывести»:
- Откройте журнал, например «Реализация (акты, накладные)».
- Отберите нужное: период, контрагент, организация. Выводится то, что видно после отбора.
- Выполните
Ещё → Вывести список…. - В окне отметьте нужные колонки. Флажок «Только выделенные» выгрузит только выделенные строки.
- Нажмите «ОК». Откроется табличный документ, его сохраняйте через
Ctrl+Sв xlsx.
Сначала добавьте нужные колонки в сам список через Ещё → Изменить форму…. Тогда в «Вывести список» они появятся автоматически, и не придётся собирать выгрузку из двух файлов.
Копирование через буфер
Для пары десятков строк проще всего выделить ячейки в табличном документе мышью, нажать Ctrl+C и вставить в Excel. Минус в том, что числа иногда вставляются как текст, а объединённые ячейки ломают структуру. Для регулярной работы этот способ не подходит.
Какой формат выбрать
| Формат | Когда брать | Ограничения |
|---|---|---|
xlsx | Почти всегда | До 1 048 576 строк на листе |
xls (Excel 97) | Получатель работает в очень старом Excel | До 65 536 строк, файл крупнее |
ods | LibreOffice, «МойОфис» | В Excel открывается, но оформление может съехать |
mxl | Передать таблицу другому пользователю 1С | Excel его не открывает |
Обработка «Универсальный обмен данными в формате XML»: когда она нужна
Эту обработку часто называют способом выгрузить данные из 1С «куда угодно». Для Excel она почти бесполезна, и важно понимать почему.
Обработка выгружает объекты (документы, справочники, остатки) в XML-файл по правилам обмена. Правила готовят в конфигурации «Конвертация данных ». Файл рассчитан на загрузку той же обработкой в другую базу 1С. Внутри — вложенная структура: объект, его реквизиты, табличные части, ссылки на другие объекты.
Excel умеет открыть XML
(Файл → Открыть → «Как XML-таблицу»), но такой файл превратится в сотни столбцов с повторами. Анализировать его неудобно.
| Задача | Чем пользоваться |
|---|---|
| Перенести справочники и документы в другую базу 1С | Универсальный обмен данными в формате XML |
| Отдать таблицу бухгалтеру, аудитору, руководителю | Табличный документ → xlsx |
| Регулярная выгрузка по шаблону | Внешняя обработка или рассылка отчётов |
| Обратное направление: из Excel в 1С | Обработка «Загрузка данных из табличного документа» |
Не запускайте загрузку XML из чужой базы в рабочую «для проверки». Обработка создаёт и перезаписывает объекты. Сначала сделайте копию базы и проверяйте на ней.
Как подготовить отчёт и таблицу к выгрузке в Excel
Чаще всего жалуются не на сам экспорт, а на то, что в Excel «всё кривое». Таблица выгружается ровно такой, какой её построила 1С. Значит, править нужно отчёт до сохранения.
Настройки отчёта
Откройте Настройки… в форме отчёта (переключитесь в расширенный режим, если доступен только простой) и проверьте:
- 📌 Группировки. Многоуровневые группировки дают строки-подытоги вперемешку с данными. Для сводной таблицы в Excel оставьте плоский список: одна группировка или «Детальные записи».
- 📌 Итоги. Отключите промежуточные итоги, если будете считать в Excel. Иначе суммы задвоятся при фильтрации.
- 📌 Заголовок и параметры. Шапку отчёта с периодом и отборами можно не выводить. Тогда первая строка файла сразу станет строкой заголовков столбцов.
- 📌 Развёрнутое сальдо и субсчета. В оборотно-сальдовой ведомости решите заранее, нужны ли субсчета отдельными строками.
Что происходит с ячейками
| Что в 1С | Что будет в Excel | Как поправить |
|---|---|---|
| Сумма в ячейке-значении | Число, суммируется | Ничего |
| Сумма, собранная в текст («1 250,00 руб.») | Текст, формулы не считают | Данные → Текст по столбцам или вывод числа отдельной ячейкой |
| Объединённые ячейки шапки | Объединение сохранится | Мешает сортировке: снимите объединение в Excel |
| Иерархия (+/- группы строк) | Группировка строк Excel | Обычно сохраняется, проверьте уровни |
| ИНН, коды с нулями в начале | Как правило, текст | Если стали числами, верните формат «Текстовый» |
Excel хранит не больше 15 значащих цифр числа. Если штрихкод или номер счёта из 20 цифр попал в Excel как число, хвост превратится в нули без возможности восстановления. Такие поля должны уходить строкой.
Выгрузка в Excel через COM-объект: полный контроль над файлом
COM-объект Excel.Application позволяет из кода 1С открыть сам Excel, заполнить ячейки, задать формат столбцов и сохранить книгу. Это работает только в Windows и только там, где установлен Microsoft Excel. Обычно это клиентский компьютер пользователя.
Пример команды формы обработки, выполняется на клиенте:
&НаКлиенте
Процедура ВыгрузитьЧерезExcel(Команда)
Excel = Новый COMОбъект("Excel.Application");
Excel.DisplayAlerts = Ложь;
Книга = Excel.Workbooks.Add();
Лист = Книга.Worksheets(1);
// Столбец B — текстовый, чтобы ИНН не потеряли нули
Лист.Columns(2).NumberFormat = "@";
Лист.Cells(1, 1).Value = "Контрагент";
Лист.Cells(1, 2).Value = "ИНН";
Лист.Cells(1, 3).Value = "Сумма";
Данные = ПолучитьДанныеНаСервере();
НомерСтроки = 1;
Для Каждого Строка Из Данные Цикл
НомерСтроки = НомерСтроки + 1;
Лист.Cells(НомерСтроки, 1).Value = Строка.Контрагент;
Лист.Cells(НомерСтроки, 2).Value = Строка.ИНН;
Лист.Cells(НомерСтроки, 3).Value = Строка.Сумма;
КонецЦикла;
Лист.Columns("A:C").AutoFit();
Книга.SaveAs("C:\Выгрузка\контрагенты.xlsx");
Книга.Close();
Excel.Quit();
КонецПроцедуры
Здесь ПолучитьДанныеНаСервере() — ваша серверная функция. Она возвращает массив структур с полями «Контрагент», «ИНН», «Сумма», то есть простые значения, а не ссылки.
Что знать перед тем, как выбрать этот путь:
- 🐢 Скорость. Каждое обращение к
Cells— отдельный вызов между процессами. 10 000 строк по 3 колонки — это 30 000 вызовов и минуты ожидания. Для больших объёмов заполняйте диапазон целиком массивом или выбирайте табличный документ. - 🖥 Сервер. На сервере 1С, запущенном как служба, Excel через COM работает нестабильно, и Microsoft такой сценарий не поддерживает. Держите COM на клиенте.
- 🧹 Зависшие процессы. Если код упал до
Excel.Quit(), в диспетчере задач остаётся процесс EXCEL.EXE. Оборачивайте работу вПопытка … Исключениеи закрывайте Excel в обеих ветках.
Кодировка и спецсимволы при выгрузке в CSV
Табличный документ, сохранённый в xlsx, с кодировкой проблем не даёт: формат хранит текст в Юникоде. «Кракозябры» появляются, когда выгрузку делают в CSV или TXT кодом и открывают файл двойным щелчком.
Причина простая. Excel при открытии CSV угадывает кодировку. Без подсказки он читает UTF-8 как Windows-1251, и кириллица превращается в набор знаков вроде Контрагент.
Как выгрузить CSV правильно
Текст = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8, , Ложь);
Текст.ЗаписатьСтроку("Контрагент;ИНН;Сумма");
// ... строки данных ...
Текст.Закрыть();
КодировкаТекста.UTF8 записывает в начало файла метку BOM, и Excel по ней распознаёт UTF-8. Второй вариант — КодировкаТекста.ANSI: в русской Windows это Windows-1251, Excel откроет файл без вопросов. Но символы вне кириллицы (₽, умлауты, иероглифы в названиях) потеряются.
Чек-лист для CSV
- 🔣 Разделитель. В русской локали Excel ждёт точку с запятой, а не запятую. С запятой весь текст ляжет в столбец A.
- 💬 Кавычки. Если в наименовании есть
;или кавычки, поле берут в двойные кавычки, а кавычки внутри удваивают:"ООО ""Ромашка""". - ↩️ Переносы строк. Перенос внутри комментария разорвёт строку CSV. Заменяйте
Символы.ПСна пробел перед записью. - 🔢 Дробные числа. Пишите их с запятой:
1250,50. С точкой русская локаль превратит сумму в дату или текст.
Если файл уже получен и открывается криво, не открывайте его двойным щелчком. В Excel выберите Данные → Из текстового/CSV-файла и задайте кодировку вручную.
Автоматическая выгрузка в Excel через внешнюю обработку
Когда одну и ту же таблицу просят каждый понедельник, логично собрать внешнюю обработку
(.epf). Excel для неё не нужен: табличный документ сам пишет xlsx, и это работает и на клиенте, и на сервере.
Пример: остатки номенклатуры в xlsx
&НаСервере
Функция СформироватьТаблицуНаСервере()
ТД = Новый ТабличныйДокумент;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа
| И НЕ Номенклатура.ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
ТД.Область(1, 1, 1, 1).Текст = "Наименование";
ТД.Область(1, 2, 1, 2).Текст = "Артикул";
НомерСтроки = 1;
Пока Выборка.Следующий() Цикл
НомерСтроки = НомерСтроки + 1;
ТД.Область(НомерСтроки, 1, НомерСтроки, 1).Текст = Выборка.Наименование;
ТД.Область(НомерСтроки, 2, НомерСтроки, 2).Текст = Выборка.Артикул;
КонецЦикла;
Возврат ТД;
КонецФункции
&НаКлиенте
Процедура Выгрузить(Команда)
ТД = СформироватьТаблицуНаСервере();
ТД.Записать("C:\Выгрузка\номенклатура.xlsx", ТипФайлаТабличногоДокумента.XLSX);
КонецПроцедуры
Для числовых колонок не пишите сумму в .Текст. Тогда в Excel она станет текстом. Установите у области СодержитЗначение = Истина, ТипЗначения = Новый ОписаниеТипов("Число") и передайте число в .Значение.
Как запускать по расписанию
- 🗂 Через дополнительные обработки. В типовых конфигурациях на БСП обработку подключают в
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Обработку вида «Дополнительная обработка», написанную под этот механизм, можно запускать по расписанию. - 📧 Рассылка отчётов. Если нужен готовый отчёт, а не своя таблица, проще настроить рассылку отчётов в том же разделе. Отчёт уйдёт на почту или в сетевую папку в xlsx без строчки кода.
- 📁 Права на папку. При запуске на сервере файл пишет пользователь, от имени которого работает служба сервера 1С. Ему нужны права на запись в целевую папку, путь указывайте сетевой (
\\server\obmen\), а не диск пользователя.
В файловой базе регламентные задания выполняются только пока открыт хотя бы один сеанс 1С. Если выгрузка нужна в 7 утра до прихода сотрудников, нужна клиент-серверная база или ручной запуск.
Быстрый способ без своей обработки
Для разовой выборки, которой нет ни в одном отчёте, подойдёт консоль запросов. Напишите запрос, выполните его, выведите результат в табличный документ и сохраните в xlsx через Ctrl+S. Пять минут, и никакой разработки.
Частые ошибки при экспорте из 1С в Excel и их причины
Частые вопросы о выгрузке из 1С в Excel
Можно ли выгрузить из 1С в Excel сразу несколько отчётов на разные листы?
Работает ли выгрузка в Excel в веб-клиенте и в 1С:Фреш?
Нужен ли установленный Excel, чтобы сохранить отчёт в xlsx?
Почему в Excel пропали цвета и рамки отчёта?
Как выгрузить из 1С в Excel табличную часть одного документа?
Ещё → Вывести список…. Получится таблица только с этими строками, её сохраняют в xlsx как обычно.