Из 1С в таблицу Excel: шесть способов от Ctrl+C до OData
Содержание
Чтобы выгрузить данные из 1С 8.3 в Excel, откройте отчёт или список, нажмите Ctrl+S (или кнопку с дискетой «Сохранить как…») и выберите тип файла «Лист Microsoft Excel 2007-…» (*.xlsx). Для списка документов или справочника сначала выполните Ещё → Вывести список…, а уже полученную таблицу сохраните в xlsx.
Этих двух приёмов хватает бухгалтеру в девяти случаях из десяти. Остальные способы нужны, когда выгрузку надо повторять каждый день, тянуть миллион строк или собирать данные, для которых в программе нет готового отчёта. Ниже все шесть вариантов по возрастанию сложности, с типичными ловушками формата.
Что выбрать и что проверить до выгрузки
Сначала определите, откуда берутся данные. От этого зависит способ.
| Способ | Когда подходит | Кто делает | Ограничения |
|---|---|---|---|
| Копирование ячеек | Нужно 5–50 строк прямо сейчас | Любой пользователь | Теряются форматы, ведущие нули в кодах |
| Сохранение отчёта в xlsx | ОСВ, анализ счёта, любой отчёт | Любой пользователь | Только то, что показано в отчёте |
| «Вывести список» | Журнал документов, справочник | Любой пользователь | Только колонки формы списка |
| «Все функции» + универсальный отчёт | Регистр или таблица без готового отчёта | Опытный пользователь | Нужно право на команду |
| Внешняя обработка | Нестандартная выборка, повторяемая задача | Программист 1С | Нужно разрешение на запуск внешних обработок |
| COM, OData, ODBC | Регулярная автоматическая выгрузка | Программист, администратор | Windows (COM), веб-публикация (OData) |
Перед стартом проверьте три вещи:
- 📌 Период и отбор. Отчёт сохраняется ровно таким, каким он сформирован на экране. Если в нём свёрнута группировка или стоит отбор по одной организации, в файл попадёт то же самое.
- 📌 Версия Excel у получателя. Формат
*.xls(Excel 97–2003) ограничен 65 536 строками и 256 колонками. Формат*.xlsxвмещает 1 048 576 строк. Если получатель работает в LibreOffice, можно сразу выбрать*.ods. - 📌 Права. Команда «Все функции» и запуск внешних обработок в типовых конфигурациях часто закрыты для рядового пользователя. Если их нет в меню, это вопрос к администратору базы, а не поломка.
Быстрый перенос через буфер обмена
Самый короткий путь для небольшого фрагмента. Подходит, когда нужно вставить пару строк в письмо или сверить несколько сумм.
- Сформируйте отчёт.
- Выделите ячейки мышью. Чтобы выделить большой диапазон, щёлкните по первой ячейке, прокрутите вниз и щёлкните по последней с зажатым
Shift. - Нажмите
Ctrl+C. - В Excel встаньте в ячейку A1 и нажмите
Ctrl+V.
Чтобы выделить весь отчёт целиком, щёлкните в любую его ячейку и нажмите Ctrl+A.
При вставке через буфер Excel сам решает, что перед ним: число, дата или текст. Код номенклатуры 00-00000123 останется строкой, а код 000123 превратится в число 123. Суммы с разделителем разрядов иногда вставляются как текст и не суммируются. Как это лечить, разобрано в разделе про ошибки.
Если строк больше сотни или файл пойдёт дальше по цепочке, копированием не пользуйтесь. Сохранение в файл даёт предсказуемый результат.
Сохранение отчёта или списка в файл Excel
Отчёт: ОСВ, анализ счёта, карточка, ведомость
- Сформируйте отчёт с нужным периодом и отборами.
- Нажмите
Ctrl+Sили кнопку с изображением дискеты в командной панели отчёта. - В окне сохранения выберите тип файла «Лист Microsoft Excel 2007-…» (
*.xlsx). - Укажите папку и имя файла, нажмите «Сохранить».
В веб-клиенте файл не сохраняется в выбранную папку, а скачивается браузером, как любая загрузка.
💡 В типовых конфигурациях на базе БСП (БП 3.0, ЗУП 3.1, УТ 11) у отчётов есть ещё команда отправки по почте: файл сразу прикладывается к письму в нужном формате. Удобно, если таблицу просят «скинуть руководителю».
Список документов или справочника
Форма списка не сохраняется напрямую, сначала её превращают в табличный документ.
- Откройте список, например
Продажи → Реализация (акты, накладные, УПД)в БП 3.0 или справочник номенклатуры. - Установите отборы и период. Если нужны дополнительные колонки, добавьте их через
Ещё → Изменить форму…. - Выполните
Ещё → Вывести список…. - В окне выберите «Табличный документ», отметьте нужные колонки. Флажок «Только выделенные» выведет только отмеченные строки.
- Нажмите «ОК». Откроется таблица, которую сохраняют через
Ctrl+Sв*.xlsx.
Иерархический справочник выводится с учётом текущего режима просмотра. Если нужен плоский список без групп, переключите вид списка на «Список» перед выводом.
Печатная форма документа
Счёт, накладную или акт тоже можно сохранить в Excel. Откройте печатную форму через кнопку «Печать» и в окне предварительного просмотра нажмите кнопку сохранения. Там же выбирается формат: xlsx, pdf, docx. Флажок «Упаковать в архив» нужен, если сохраняете сразу пачку форм.
Выгрузка из 1С 8.3 любой таблицы через «Все функции»
Когда нужного отчёта нет, а данные лежат в регистре сведений, регистре накоплений или служебном справочнике, помогает команда «Все функции». Через неё открывается список любого объекта конфигурации.
Как включить команду
- Нажмите кнопку главного меню (значок с тремя полосками в левом верхнем углу).
- Выберите
Сервис и настройки → Параметры. - Установите флажок «Отображать команду “Все функции”» и нажмите «Применить».
После этого в главном меню появится пункт «Все функции».
Как выгрузить объект
- Откройте
Главное меню → Все функции. - Раскройте ветку нужного типа: «Справочники», «Документы», «Регистры сведений», «Регистры накопления».
- Откройте объект двойным щелчком. Например, регистр сведений «Цены номенклатуры» в БП 3.0 даст полную историю цен.
- Выполните
Ещё → Вывести список…и сохраните таблицу в xlsx, как описано выше.
Универсальный отчёт
В БП 3.0 и других конфигурациях на БСП есть «Универсальный отчет
» (раздел Отчеты). В его настройках выбирают тип объекта, сам объект и поля, а результат формируется как обычный отчёт. Значит, его сохраняют через Ctrl+S.
Плюс универсального отчёта перед «Выводом списка»: группировки, итоги и отборы по любому полю, в том числе по реквизитам связанных объектов. Для регистров накопления можно получить остатки и обороты за период.
Своя внешняя обработка для выгрузки
Если выгрузка нестандартная (например, номенклатура с ценами двух видов и остатком в одной строке) и её делают регулярно, программист пишет внешнюю обработку . Она выполняет запрос и выводит результат в табличный документ, который пользователь сохраняет в xlsx.
Подключают такую обработку через Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Разово её можно открыть через Главное меню → Файл → Открыть, если у пользователя есть право на интерактивное открытие внешних обработок.
Пример минимального кода формы. Серверная функция собирает таблицу, клиентская показывает её пользователю:
&НаСервереБезКонтекста
Функция СобратьТаблицу()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ПометкаУдаления
| И НЕ Номенклатура.ЭтоГруппа
|УПОРЯДОЧИТЬ ПО
| Наименование";
ТабДок = Новый ТабличныйДокумент;
ТабДок.Область("R1C1").Текст = "Код";
ТабДок.Область("R1C2").Текст = "Наименование";
НомерСтроки = 1;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НомерСтроки = НомерСтроки + 1;
Стр = "R" + Формат(НомерСтроки, "ЧГ=0");
ТабДок.Область(Стр + "C1").Текст = Выборка.Код;
ТабДок.Область(Стр + "C2").Текст = Выборка.Наименование;
КонецЦикла;
Возврат ТабДок;
КонецФункции
&НаКлиенте
Процедура Выгрузить(Команда)
ТабДок = СобратьТаблицу();
ТабДок.Показать("Номенклатура для Excel");
КонецПроцедуры
Формат(НомерСтроки, "ЧГ=0") нужен, чтобы в адресе ячейки не появился пробел разделителя разрядов: без него строка 1000 превратится в R1 000C1, и код упадёт.
Если файл нужно записывать без участия пользователя (например, по регламентному заданию на сервере), используют метод ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX). Путь в этом случае указывает на диск того компьютера, где выполняется код, то есть сервера 1С.
Для разовой сложной выборки программисты обходятся без отдельной обработки: пишут запрос в консоли запросов, выводят результат в табличный документ и сохраняют его в xlsx.
Автоматическая выгрузка данных из 1С через COM
COM-технология работает только в Windows. Есть два направления, и их часто путают.
1С управляет Excel
Код 1С создаёт объект Excel.Application и заполняет книгу ячейка за ячейкой. Способ даёт полный контроль над оформлением: шрифты, ширина колонок, формулы, несколько листов. Минус в скорости: на десятках тысяч ячеек он заметно медленнее сохранения табличного документа. Excel должен быть установлен на том компьютере, где выполняется код.
На практике сейчас чаще собирают табличный документ и сохраняют его в xlsx, а COM оставляют для случаев, когда нужен готовый шаблон книги с формулами.
Excel забирает данные из 1С
Макрос VBA в Excel подключается к базе через внешнее соединение V83.COMConnector и сам выполняет запрос. Так делают отчёты, которые обновляются кнопкой в книге.
Dim Connector, Base
Set Connector = CreateObject("V83.COMConnector")
Set Base = Connector.Connect("File=""C:\Bases\Buh"";Usr=""Выгрузка"";Pwd=""пароль"";")
Для клиент-серверной базы строка подключения имеет вид Srvr="ИмяСервера";Ref="ИмяБазы";Usr="…";Pwd="…";.
Что нужно для работы:
- Зарегистрировать компоненту
comcntr.dllиз каталогаbinустановленной платформы. Команда выполняется от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.24.1691\bin\comcntr.dll"
Номер версии в пути подставьте свой.
- Совпадение разрядности. 32-битный Excel видит только 32-битную платформу и её
comcntr.dll(каталогProgram Files (x86)), 64-битный — только 64-битную. Это главная причина ошибки «Cannot create ActiveX component» или «ActiveX-компонент не может создать объект». - Отдельный пользователь 1С для выгрузки с минимальными правами. Пароль в макросе хранится открытым текстом, поэтому давать ему права администратора нельзя.
- Лицензия. Каждое COM-соединение занимает клиентскую лицензию, как обычный сеанс.
Прямое подключение Excel к базе: OData и ODBC
OData: актуальный способ
В платформе 8.3 есть стандартный интерфейс OData. Excel умеет читать его через Power Query, и таблица обновляется одной кнопкой без макросов.
- Базу публикуют на веб-сервере (IIS или Apache) с флажком публикации стандартного интерфейса OData.
- В конфигурации включают состав объектов, доступных по OData. В БП 3.0 это делается в разделе
Администрирование → Синхронизация данных, ссылка «Настройка стандартного интерфейса OData». Там же указывают пользователя, под которым идёт подключение. - В Excel:
Данные → Получить данные → Из других источников → Из канала OData. - Адрес вида
http://сервер/ИмяПубликации/odata/standard.odata/, затем логин и пароль пользователя 1С. - В навигаторе выберите нужные наборы (например,
Catalog_Номенклатура), при необходимости отфильтруйте колонки в редакторе Power Query и нажмите «Загрузить».
Дальше данные обновляются командой «Обновить всё» на вкладке «Данные». Публикацию наружу без HTTPS не делают: логин и пароль передаются при каждом запросе.
ODBC для больших баз
У платформы 8.3 нет собственного ODBC-драйвера к файловой базе, как было в 7.7. Через ODBC подключаются только к СУБД клиент-серверной базы (MS SQL, PostgreSQL), минуя 1С.
| Плюсы | Минусы |
|---|---|
| Очень быстро на миллионах строк | Таблицы называются _Reference37, _AccumRg1520, понять их без расшифровки нельзя |
| Не занимает лицензию 1С | Права пользователей 1С и RLS не действуют |
| Удобно для BI-систем | Структура меняется после обновления конфигурации |
Расшифровку имён даёт функция платформы ПолучитьСтруктуруХраненияБазыДанных(): программист выводит её результат и строит соответствие «таблица СУБД — объект 1С».
Читайте СУБД только учётной записью с правом на чтение и никогда не пишите в таблицы базы 1С напрямую — это ломает целостность данных, и восстанавливать базу придётся из резервной копии. Если важна поддержка и права доступа , выбирайте OData.
Ошибки при выгрузке в Excel и доводка таблицы
Как подготовить таблицу к анализу
Отчёт 1С сохраняется в Excel «как на экране»: с шапкой, группировками и итогами. Для сводных таблиц такую форму надо почистить.
- Удалите строки шапки над таблицей, чтобы первой строкой стали названия колонок.
- Снимите объединение ячеек во всём диапазоне.
- Удалите строки итогов и промежуточных итогов: сводная таблица посчитает их сама.
- Если группировки выведены лесенкой (контрагент в одной строке, договоры под ним), заполните пустые ячейки значением сверху:
Главная → Найти и выделить → Выделить группу ячеек → Пустые ячейки, введите=и ссылку на ячейку выше, затемCtrl+Enter. - Превратите диапазон в таблицу клавишами
Ctrl+T. Фильтры и формулы будут растягиваться на новые строки.
Проще сразу формировать в 1С плоский отчёт. В настройках отчёта на БСП переключитесь в расширенный режим и уберите иерархические группировки, оставив детальные записи. Тогда в Excel придёт таблица, пригодная для сводной без ручной чистки.
Частые вопросы
Можно ли выгрузить из 1С сразу в Google Таблицы?
Почему нет кнопки сохранения в отчёте?
Ctrl+S; если не срабатывает, обратитесь к администратору базы.