Как достать данные из базы 1С: Excel, MXL, XML, CSV и выгрузка по расписанию
Содержание
Чтобы выгрузить данные из 1С в Excel, откройте нужный список или сформированный отчёт и сохраните его через главное меню: Файл → Сохранить как, тип файла — «Лист Microsoft Excel 2007-…» (.xlsx). Для списка справочника или журнала документов сначала выполните Ещё → Вывести список…: программа построит табличный документ, который уже можно сохранить в любой формат.
Для переноса данных между базами 1С таблицы не годятся: нужен XML через универсальные обработки или синхронизацию данных. Для регулярной выгрузки во внешнюю систему без участия человека — COM-соединение или регламентное задание. Ниже каждый способ по шагам, плюс разбор кодировок, разделителей и ошибок, на которых спотыкаются чаще всего.
Всё описанное относится к платформе 1С:Предприятие 8.3 с интерфейсом «Такси» и работает одинаково в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других типовых конфигурациях: механизм табличного документа и внешних соединений — общий для платформы.
Какой способ выгрузки выбрать под задачу
Способ определяет не формат, а то, кто и как потом будет использовать данные. Человеку для анализа нужен Excel, другой базе 1С — XML со ссылками, внешней программе — стабильный CSV или прямое подключение.
| Задача | Способ | Формат | Кто делает |
|---|---|---|---|
| Отдать список контрагентов, номенклатуры, документов | Ещё → Вывести список… + сохранение | XLSX, ODS, PDF | Пользователь |
| Сохранить отчёт (ОСВ, анализ счёта, ведомость) | Сохранение табличного документа | XLSX, MXL, PDF | Пользователь |
| Произвольная выборка с отбором и группировкой | Универсальный отчёт или консоль запросов | XLSX, MXL | Опытный пользователь |
| Перенести справочники и документы в другую базу 1С | Универсальные обработки XML, синхронизация | XML | Администратор |
| Регулярно отдавать данные в сайт, BI, учётную систему | COM-соединение, регламентное задание | CSV, XML, JSON | Программист |
| Скопировать всю базу целиком | Конфигуратор, выгрузка информационной базы | DT | Администратор |
Выгрузка из 1С в Excel: списки, отчёты и печатные формы
Это самый частый сценарий. Он работает в любой конфигурации и не требует ни обработок, ни прав администратора.
Как выгрузить список справочника или документов
- Откройте нужный список: например,
Справочники → Контрагентыв Бухгалтерии 3.0. - Настройте отбор, сортировку и колонки. Колонки добавляются через
Ещё → Изменить форму…: в выгрузку попадут только видимые. - Выберите
Ещё → Вывести список…. - В окне отметьте нужные колонки. Переключатель «Выводить в» оставьте на «Табличный документ». Флажок «Только выделенные» нужен, если вы заранее выделили часть строк.
- Нажмите «ОК». Откроется табличный документ.
- Откройте главное меню (кнопка с тремя полосками в заголовке окна) и выберите
Файл → Сохранить как. - Укажите тип «Лист Microsoft Excel 2007-…» и папку, нажмите «Сохранить».
Если нужны данные из нескольких разделов сразу (например, контрагенты с договорами и банковскими счетами), вывод списка не поможет: он берёт только колонки текущей формы. Для таких выборок используйте универсальный отчёт или запрос.
Как сохранить отчёт или печатную форму
Сформированный отчёт уже является табличным документом. Сформируйте его с нужными настройками и сохраните тем же путём через Файл → Сохранить как.
Печатные формы (счёт, акт, накладная) сохраняются кнопкой «Сохранить» в форме предварительного просмотра. Там же можно выбрать сразу несколько форматов и отправить файл письмом.
Быстрый вариант для пары ячеек: выделите область в табличном документе, нажмите Ctrl+C и вставьте в Excel. Форматирование и границы обычно сохраняются.
Произвольная выборка через универсальный отчёт
В Бухгалтерии 3.0 в разделе Отчёты есть «Универсальный отчёт». В нём выбирается тип объекта (справочник, документ, регистр), конкретный объект и поля, задаются отбор и группировки. Результат сохраняется в Excel обычным способом.
Если нужна выборка, которую отчётом не собрать, программисты используют внешнюю обработку «Консоль запросов»: пишется запрос, результат выводится в таблицу и сохраняется в файл.
Какой формат выбрать при сохранении
| Формат | Когда использовать | Ограничения |
|---|---|---|
| XLSX | Почти всегда для Excel | До 1 048 576 строк на лист |
| XLS | Только для очень старых версий Excel | До 65 536 строк, большие таблицы обрежутся |
| ODS | LibreOffice, OpenOffice, Р7-Офис | Сложное оформление может съехать |
| Отдать «как есть», без правок | Данные не редактируются | |
| MXL | Обмен между пользователями 1С | Excel не открывает |
| TXT / ANSI TXT | Простой текст для дальнейшей обработки | Без оформления, колонки по табуляции |
| HTML, DOCX | Вставка в письмо или документ Word | Для расчётов неудобно |
Формат MXL и табличный документ: что с ними делать
MXL — родной формат табличного документа 1С. В нём сохраняется всё: объединения ячеек, оформление, расшифровки, области, параметры печати. Это лучший вариант, когда файл будет открывать другой пользователь 1С, например, для сверки с вашей бухгалтерией.
Открыть MXL можно тремя способами:
- 🖥️ в любой базе 1С через
Файл → Открыть— подойдёт даже пустая учебная база; - 📂 в бесплатной программе «1С:Предприятие 8. Работа с файлами» — она не требует лицензии и открывает MXL, а также сохраняет его в XLSX;
- 🔁 пересохранить из 1С в XLSX, если получателю нужен Excel.
Расшифровки из MXL работают только внутри исходной базы. В другой базе или в программе просмотра клик по ячейке отчёта ничего не откроет.
Табличный документ сохраняется в файл и программно, одной строкой. Это пригодится в регламентных заданиях и обработках:
ТабДок = Новый ТабличныйДокумент;
// ... заполнение табличного документа ...
ТабДок.Записать("C:\Обмен\osv.xlsx", ТипФайлаТабличногоДокумента.XLSX);
Тот же метод принимает ТипФайлаТабличногоДокумента.MXL, PDF, ODS, TXT и ANSITXT. Формата CSV в этом перечне нет: его пишут через запись текста, пример ниже.
Выгрузка данных из 1С в XML универсальными обработками
Когда данные нужно загрузить в другую базу 1С, Excel не подходит: ссылки на контрагентов, договоры и номенклатуру в таблице превращаются в строки. XML сохраняет связи между объектами.
Перенос между базами одной конфигурации
Для этого служит универсальная обработка «Выгрузка и загрузка данных XML» (внешний файл .epf, распространяется в составе материалов поддержки 1С). Обработке не нужны правила: она выгружает объекты как есть, вместе с их внутренними идентификаторами.
- Откройте обработку через
Файл → Открытьв главном меню. Нужно право на интерактивное открытие внешних обработок. - На вкладке выгрузки отметьте в дереве объекты: справочники, документы, регистры.
- Для документов укажите период.
- Задайте имя файла и нажмите «Выгрузить данные».
- В базе-приёмнике откройте ту же обработку, перейдите на вкладку загрузки, выберите файл и запустите загрузку.
Перед загрузкой сделайте резервную копию базы -приёмника. Обработка записывает объекты с теми же идентификаторами, что в источнике: совпадающие элементы будут перезаписаны без вопросов.
Конфигурации источника и приёмника должны совпадать по структуре. Если релизы разные, а реквизит есть только в одной базе, загрузка остановится с ошибкой.
Перенос между разными конфигурациями
Здесь два пути:
- 🔄 Типовая синхронизация. В Бухгалтерии 3.0 —
Администрирование → Синхронизация данных. Готовые обмены с УТ, Розницей, ЗУП и другими конфигурациями работают через формат EnterpriseData и не требуют программирования. - 🧩 Универсальный обмен данными в формате XML. Обработка встроена в типовые конфигурации и открывается через
Все функции → Обработки. Ей нужен файл правил обмена, который готовят в конфигурации «Конвертация данных ». Без правил она не работает .
Команда «Все функции» по умолчанию скрыта. Включите её: главное меню → Сервис → Параметры (в новых версиях платформы — Сервис и настройки → Параметры) → флажок «Отображать команду “Все функции”».
Автоматическая выгрузка из 1С через COM-соединение
COM-соединение (внешнее соединение) позволяет внешней программе подключиться к базе 1С без открытия окна, выполнить запрос и забрать результат. Так выгружают остатки на сайт, продажи в BI, справочники в складскую систему.
Подготовка
- Зарегистрируйте компонент на компьютере, где будет работать скрипт. Командная строка от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.25.1394\bin\comcntr.dll"
Номер версии в пути замените на вашу установленную платформу.
- Разрядность компонента должна совпадать с разрядностью программы, которая его вызывает. 64-разрядному Python нужна 64-разрядная платформа из
C:\Program Files\1cv8, 32-разрядному Excel — 32-разрядная изC:\Program Files (x86)\1cv8. - Заведите в базе отдельного пользователя для обмена с правом «Внешнее соединение» и правами только на чтение нужных объектов.
Пример выгрузки на Python
import csv
import win32com.client
v8 = win32com.client.Dispatch("V83.COMConnector")
conn = v8.Connect('File="C:\\Bases\\Buh";Usr="Obmen";Pwd="пароль";')
# для серверной базы: 'Srvr="srv1c";Ref="buh";Usr="Obmen";Pwd="пароль";'
q = conn.NewObject("Запрос")
q.Text = ("ВЫБРАТЬ Код, Наименование, ИНН "
"ИЗ Справочник.Контрагенты ГДЕ НЕ ПометкаУдаления")
sel = q.Execute().Select()
with open("kontragenty.csv", "w", newline="", encoding="utf-8-sig") as f:
w = csv.writer(f, delimiter=";")
w.writerow(["Код", "Наименование", "ИНН"])
while sel.Next():
w.writerow([sel.Get(0), sel.Get(1), sel.Get(2)])
Скрипт ставят в планировщик заданий Windows, например, на 06:00, когда в базе никто не работает. Пароль лучше хранить не в тексте скрипта, а в переменной окружения или защищённом файле.
Если программист может дорабатывать конфигурацию, проще сделать регламентное задание внутри 1С: оно выполняется на сервере 1С по расписанию и пишет файл в сетевую папку. Внешний скрипт и регистрация COM тогда не нужны. В файловой базе регламентные задания выполняются, только пока открыт хотя бы один клиентский сеанс.
Кодировка, разделители и числа при выгрузке в CSV и TXT
Половина жалоб на «сломанную выгрузку» на деле — вопрос того, как Excel открывает текстовый файл. Сам файл при этом в порядке.
Кракозябры вместо русских букв
Excel по двойному клику открывает CSV в кодировке Windows-1251. Если файл записан в UTF-8 без метки BOM, кириллица превращается в «РљРѕРґ».
Варианты решения:
- ✅ писать файл в UTF-8 с BOM (
utf-8-sigв Python) — современный Excel распознаёт его сам; - ✅ писать в Windows-1251 (
КодировкаТекста.ANSIв 1С), если получатель — только русский Excel; - ✅ открывать файл в Excel через
Данные → Из текстового/CSV-файлаи выбирать кодировку вручную.
Разделитель колонок
В русской локали Windows десятичный разделитель — запятая, поэтому Excel ждёт в CSV точку с запятой. Файл с запятыми откроется одной колонкой. Если значение само содержит ; или кавычки, его нужно заключить в кавычки, а кавычки внутри удвоить.
Пример записи CSV средствами 1С с корректным экранированием:
Функция ПолеCSV(Значение)
Возврат """" + СтрЗаменить(Строка(Значение), """", """""") + """";
КонецФункции
Запрос = Новый Запрос("ВЫБРАТЬ Код, Наименование, ИНН
|ИЗ Справочник.Контрагенты ГДЕ НЕ ПометкаУдаления");
Выборка = Запрос.Выполнить().Выбрать();
Запись = Новый ЗаписьТекста("C:\Обмен\kontragenty.csv", КодировкаТекста.ANSI);
Запись.ЗаписатьСтроку("Код;Наименование;ИНН");
Пока Выборка.Следующий() Цикл
Запись.ЗаписатьСтроку(ПолеCSV(Выборка.Код) + ";"
+ ПолеCSV(Выборка.Наименование) + ";" + ПолеCSV(Выборка.ИНН));
КонецЦикла;
Запись.Закрыть();
Числа, даты и коды
- 🔢 Пробелы в суммах. 1С форматирует числа с разделителем групп разрядов — неразрывным пробелом. Excel считает «12 500,00» текстом. В коде выводите
Формат(Сумма, "ЧГ=0"), в готовом файле замените неразрывный пробел через «Найти и заменить» (в поле «Найти» наберитеAlt+0160на цифровой клавиатуре). - 📅 Даты. Выводите явно:
Формат(Дата, "ДФ=dd.MM.yyyy"). Иначе в файл может попасть время «0:00:00». - 0️⃣ Ведущие нули. Код «000000123» или ИНН, начинающийся с нуля, Excel превращает в число и срезает нули. При импорте через
Данные → Из текстового/CSV-файлазадайте этим колонкам тип «Текст».
Почему выгрузка не получается: ошибки и решения
Ещё две ситуации, о которых стоит знать заранее:
- ⏳ Вывод списка на сотни тысяч строк идёт долго и съедает память клиента. Наложите отбор по периоду или организации и выгружайте частями. Для больших объёмов надёжнее запрос с записью сразу в файл.
- 🔒 В выгрузке нет части документов. Если в базе настроено ограничение доступа на уровне записей, пользователь выгрузит только то, что ему разрешено видеть. Для полной выгрузки нужен пользователь с полными правами на эти объекты.