Выгрузка из 1С в Excel: от кнопки «Сохранить» до COM и внешней обработки

· 10 мин

Содержание

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

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

СпособКогда выбиратьНужен программистОграничения
Сохранить отчёт или формуразовая выгрузка готового отчётанеттолько то, что показал отчёт
Вывести списокреестр документов, справочникнеттолько колонки списка
Табличный документ в кодерегулярная выгрузка своего форматаданужна обработка
COM (Excel ↔ 1С)Excel-модель, которая тянет данные из базыдатолько Windows, Excel на машине
CSV / XMLпередача в другую программу, большие объёмыдабез оформления

1. Сохраняем отчёт или печатную форму в Excel

Любой отчёт в 1С 8.3 строится в виде табличного документа. Платформа умеет записывать его в формат Excel без сторонних программ — Excel на компьютере для этого даже не нужен.

Отчёт

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

Формат *.xls (Excel 97) тоже есть в списке, но берите его только для очень старых программ. В нём предел — 65 536 строк, в xlsx — 1 048 576.

Печатная форма

Счёт, накладная, акт открываются в окне печати. В его командной панели тоже есть кнопка с дискетой: она предлагает список форматов, отмечаете галочкой xlsx и указываете папку. Если выделить несколько документов в списке и нажать «Печать», в один заход сохранятся все формы.

Кусок отчёта через буфер обмена

Нужны три строки, а не весь отчёт? Выделите ячейки мышью, нажмите Ctrl+C, перейдите в Excel и вставьте Ctrl+V. Формат ячеек частично перенесётся. Для чистых значений в Excel используйте «Специальная вставка → Значения».

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

2. Выгрузка списка документов и справочников в Excel

Список документов — это не отчёт, кнопки сохранения в нём нет. Зато есть команда, которая превращает любой список в табличный документ.

  1. Откройте нужный список: например, Продажи → Реализация (акты, накладные, УПД) или справочник Номенклатура.
  2. Установите отбор и сортировку, если нужна не вся база.
  3. Выполните Ещё → Вывести список….
  4. В окне снимите галочки с лишних колонок, выберите вывод «Табличный документ» и нажмите «ОК».
  5. Сохраните полученную таблицу в xlsx, как в разделе выше.

Колонок в выгрузке будет столько, сколько видно в списке. Если не хватает, например, ИНН контрагента или артикула, добавьте поле командой Ещё → Изменить форму… и повторите вывод.

Для справочника с иерархией (группы номенклатуры) переключите список в режим «Список» вместо «Дерево» — иначе выгрузятся только элементы текущей группы.

3. Как выгрузить данные из 1С в Excel программно через табличный документ

Когда выгрузку нужно повторять, проще один раз написать обработку. Основа та же — объект ТабличныйДокумент и его метод Записать. Шаблон оформления (шапка, ширина колонок, жирный шрифт) кладут в макет обработки, а данные выводят по строкам.

Пример без макета: таблица значений из запроса пишется в файл xlsx на сервере.

&НаСервере
Функция ВыгрузитьВExcelНаСервере()

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Контрагенты.Наименование КАК Наименование,
    |    Контрагенты.ИНН КАК ИНН
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |    НЕ Контрагенты.ЭтоГруппа";
    Таблица = Запрос.Выполнить().Выгрузить();

    ТабДок = Новый ТабличныйДокумент;

    // Шапка
    Для НомерКолонки = 1 По Таблица.Колонки.Количество() Цикл
        ТабДок.Область(1, НомерКолонки).Текст = Таблица.Колонки[НомерКолонки - 1].Имя;
    КонецЦикла;

    // Данные
    НомерСтроки = 1;
    Для Каждого СтрокаТаблицы Из Таблица Цикл
        НомерСтроки = НомерСтроки + 1;
        Для НомерКолонки = 1 По Таблица.Колонки.Количество() Цикл
            ТабДок.Область(НомерСтроки, НомерКолонки).Текст = СтрокаТаблицы[НомерКолонки - 1];
        КонецЦикла;
    КонецЦикла;

    ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
    ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);

    Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла), УникальныйИдентификатор);
    УдалитьФайлы(ИмяФайла);
    Возврат Адрес;

КонецФункции

&НаКлиенте
Процедура ВыгрузитьВExcel(Команда)
    Адрес = ВыгрузитьВExcelНаСервере();
    ПолучитьФайл(Адрес, "Контрагенты.xlsx", Истина);
КонецПроцедуры

Почему файл сначала пишется на сервере, а потом передаётся: в клиент-серверной базе сервер 1С не видит диск пользователя. Временное хранилище и ПолучитьФайл доставляют файл в браузер или тонкий клиент.

Где ИНН может начинаться с нуля, присваивайте ячейке строку, а не число — тогда Excel не обрежет ноль. В примере ИНН и так строка, поэтому проблемы нет.

Шаблон с оформлением

Чтобы не задавать шрифты в коде, добавьте в обработку макет типа «Табличный документ». Нарисуйте в нём область «Шапка» и область «Строка» с параметрами [Наименование], [ИНН]. В коде получайте область Макет.ПолучитьОбласть("Строка"), заполняйте Область.Параметры и выводите ТабДок.Вывести(Область). Ширина колонок, рамки и форматы чисел из макета перейдут в Excel.

4. Выгрузка через COM-соединение: два направления

COM работает только в Windows и в двух вариантах. Не путайте их.

1С управляет Excel

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

&НаКлиенте
Процедура ЗаполнитьExcel()
    Excel = Новый COMОбъект("Excel.Application");
    Книга = Excel.Workbooks.Add();
    Лист = Книга.Worksheets(1);
    Лист.Cells(1, 1).Value = "Сумма";
    Лист.Cells(2, 1).Value = 1500;
    Лист.Cells(3, 1).Value = 2500;
    Лист.Cells(4, 1).Formula = "=SUM(A2:A3)";
    Книга.SaveAs("C:\Выгрузка\Итог.xlsx");
    Excel.Quit();
КонецПроцедуры

Минусы: на машине должен стоять Excel, а запись по одной ячейке медленная — тысячи строк заполняются минутами. Не запускайте такой код на сервере 1С: офисные приложения не рассчитаны на работу без пользователя и зависают процессами EXCEL.EXE.

Excel забирает данные из 1С

Обратная схема: макрос VBA в Excel подключается к базе через V83.COMConnector и сам читает данные. Так строят управленческие модели, которые обновляются кнопкой.

Sub ЗагрузитьИз1С()
    Dim Коннектор As Object, База As Object
    Set Коннектор = CreateObject("V83.COMConnector")
    Set База = Коннектор.Connect("File=""C:\Bases\Buh"";Usr=""Выгрузка"";Pwd=""пароль"";")
    Dim Запрос As Object, Выборка As Object, i As Long
    Set Запрос = База.NewObject("Запрос")
    Запрос.Текст = "ВЫБРАТЬ Наименование, ИНН ИЗ Справочник.Контрагенты ГДЕ НЕ ЭтоГруппа"
    Set Выборка = Запрос.Выполнить().Выбрать()
    i = 1
    Do While Выборка.Next()
        Cells(i, 1).Value = Выборка.Наименование
        Cells(i, 2).Value = Выборка.ИНН
        i = i + 1
    Loop
End Sub

Для серверной базы строка подключения выглядит так: Srvr="имя_сервера";Ref="имя_базы";Usr=...;Pwd=....

Компонента comcntr.dll регистрируется при установке платформы. Если CreateObject выдаёт ошибку, зарегистрируйте её вручную из командной строки администратора:

regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\comcntr.dll"

Номер версии в пути подставьте свой. Разрядность Excel и платформы должна совпадать: 64-битному Excel нужна 64-битная платформа в Program Files, 32-битному — из Program Files (x86).

Заведите в 1С отдельного пользователя только с правом чтения нужных данных. Пароль в макросе хранится открытым текстом — любой, кто откроет файл, его увидит.

5. Экспорт данных в CSV и TXT

CSV — это текст, где значения разделены точкой с запятой. Excel открывает его без макросов, его понимают банки, маркетплейсы, CRM. Подходит для больших выгрузок: сотни тысяч строк пишутся быстрее, чем в табличный документ.

ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8, , , Символы.ПС);
ЗаписьТекста.ЗаписатьСтроку("Наименование;ИНН;Сумма");
Для Каждого Стр Из Таблица Цикл
    ЗаписьТекста.ЗаписатьСтроку(СтрШаблон("%1;%2;%3",
        СтрЗаменить(Стр.Наименование, ";", ","),
        Стр.ИНН,
        Формат(Стр.Сумма, "ЧРД=,; ЧГ=0")));
КонецЦикла;
ЗаписьТекста.Закрыть();

На что смотреть:

  • 🔤 Кодировка. КодировкаТекста.UTF8 пишет в начало файла метку BOM, и современный Excel распознаёт кириллицу. Для старых программ, которые ждут Windows-1251, используйте КодировкаТекста.ANSI.
  • ➗ Разделитель. Для русских региональных настроек Excel ожидает ;. Запятая сольёт все поля в одну колонку.
  • 💰 Числа. Формат(Сумма, "ЧРД=,; ЧГ=0") убирает пробелы между разрядами и ставит запятую дробной части — Excel поймёт это как число.
  • ✂️ Точка с запятой внутри текста. Заменяйте её или заключайте значение в кавычки, иначе строка разъедется по колонкам.

TXT без разделителей нужен редко — обычно для загрузки в банковские программы с фиксированной шириной полей. Табличный документ тоже сохраняется в текст (ТипФайлаТабличногоДокумента.TXT или ANSITXT), но колонки при этом не разделяются точкой с запятой.

6. XML и универсальные коллекции

XML из 1С — формат обмена между базами, а не для чтения людьми. Excel откроет его как XML-таблицу, но вложенные структуры (документ с табличной частью) превратятся в неудобную плоскую простыню с повторами.

Когда XML всё-таки уместен:

  • 📦 выгрузку принимает не Excel, а другая система, которая требует XML по схеме;
  • 🔁 данные нужно потом загрузить обратно в 1С без потерь типов.

Для Excel промежуточным звеном лучше служит таблица значений — универсальная коллекция, которую возвращает запрос Выгрузить(). Её можно свернуть (Таблица.Свернуть("Контрагент", "Сумма")), отсортировать, отфильтровать в памяти и только потом вывести в табличный документ кодом из раздела 3. Дерево значений перед выводом разворачивайте в плоскую таблицу — Excel не хранит иерархию строк в виде дерева.

Если нужен именно XML для Excel, сохраните табличный документ в xlsx: внутри это тоже набор XML-файлов, но в стандарте, который Excel понимает без настроек.

7. Кодировка, спецсимволы и числа, которые не считаются

Большинство жалоб после выгрузки — не на 1С, а на то, как Excel прочитал файл. Выберите свой симптом:

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

Спецсимволы из наименований — кавычки-«ёлочки», переносы строк внутри комментария — в xlsx переносятся корректно. В CSV перенос строки внутри значения разорвёт запись, поэтому заменяйте Символы.ПС на пробел перед записью.

8. Автоматическая выгрузка: внешняя обработка и рассылка отчётов

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

Код из разделов 3–5 оформляют во внешнюю обработку — файл .epf. Разово её открывают через ☰ → Файл → Открыть. Чтобы обработка была у всех пользователей под рукой, в Бухгалтерии 3.0 и других типовых на БСП её подключают в Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.

Там же для обработки вида «Дополнительная обработка» можно настроить расписание: база сама будет выгружать файл, например, каждый день в 7:00 в сетевую папку. Для этого обработку пишут так, чтобы она работала на сервере без формы и сохраняла файл в каталог, доступный пользователю, от которого запущен сервер 1С.

Подключайте внешние обработки только из проверенного источника. Код в .epf выполняется с правами пользователя и может изменить или удалить данные.

Рассылка отчётов без программиста

Типовой механизм без единой строки кода: Администрирование → Печатные формы, отчеты и обработки → Рассылки отчетов. Создаёте рассылку, добавляете отчёты с нужными настройками, выбираете формат xlsx и способ доставки — в папку, на почту или FTP. Задаёте расписание — и ОСВ или остатки по складам каждое утро лежат в Excel-файле.

Рассылка выполняется регламентным заданием. В файловой базе такие задания работают, только пока кто-то из пользователей держит программу открытой, в клиент-серверной — по расписанию сервера.

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

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