Способы выгрузки данных из 1С: таблицы, XML, JSON и веб-сервисы
Содержание
Выгрузить данные из 1С можно четырьмя разными путями, и выбор зависит от того, куда они поедут. Для человека — сохранить список или отчёт в Excel и PDF прямо из формы. Для другой базы 1С — обмен через XML и формат EnterpriseData. Для стороннего сервиса или сайта — JSON, веб-сервисы и OData. Для регулярной передачи — автоматический обмен по расписанию.
Ниже разберём каждый формат и метод обмена: где нажимать в интерфейсе, какой механизм платформы за это отвечает и когда что применять. Примеры путей даны для типовых конфигураций на платформе 8.3 с интерфейсом «Такси».
Сохранение списков и отчётов в файл через интерфейс
Самый простой способ выгрузки не требует ни программиста, ни настроек. Почти любой список, журнал документов или отчёт в 1С можно сохранить в файл прямо из формы.
Для списка или журнала: откройте нужный список, нажмите кнопку Ещё в правом верхнем углу командной панели и выберите Вывести список. 1С предложит, какие колонки выгрузить и куда — в табличный или текстовый документ. Полученную таблицу сохраняете через Файл → Сохранить как.
Для отчёта всё ещё короче. Сформируйте отчёт и нажмите Сохранить (значок дискеты) на панели или через меню Файл → Сохранить как. В диалоге выберите формат.
Табличный документ 1С умеет сохраняться в следующие форматы:
- 📊 Excel —
.xlsx(современный) и.xls(старый, лимит 65 536 строк); - 📄 PDF — для печати и отправки, без возможности редактировать;
- 📝 Word —
.docx; - 🌐 HTML — для публикации на странице;
- 📋 ODS/табличный документ —
.odsдля LibreOffice,.mxl— родной формат 1С; - 🔤 текст —
.txtс разделителями, по сути простой экспорт.
Если строк больше 65 тысяч, выгружайте только в .xlsx. Старый .xls оборвёт данные на лимите, и вы этого можете не заметить.
Этот способ закрывает большинство бытовых задач: выгрузить оборотку, реестр документов, список номенклатуры или контрагентов для коллеги, банка или налоговой.
Работает он во всех типовых конфигурациях одинаково — в «Бухгалтерии», «Управлении торговлей», ЗУП кнопка Ещё → Вывести список стоит на тех же местах. Отдельно отметим: выгрузка в Excel через эту кнопку отдаёт данные «как видно на экране», без формул и связей. Это картинка таблицы, а не рабочая база данных — для переноса в другую программу 1С она не годится.
Обмен через XML между базами 1С
Когда данные нужно перенести в другую базу 1С, через буфер Excel это делать нельзя — потеряются ссылки на справочники, связи документов и реквизиты. Здесь работает выгрузка в XML.
У платформы есть несколько механизмов XML-обмена, и путать их не стоит.
Стандартная выгрузка и загрузка данных XML. Это типовая обработка от фирмы 1С (ВыгрузкаЗагрузкаДанныхXML), которая переносит справочники и документы между однотипными конфигурациями. Выгружает отобранные объекты в один XML-файл, на приёмнике он загружается той же обработкой. Подходит для разовых переносов — например, перенести справочник контрагентов из старой базы в новую.
Планы обмена и Конвертация данных . Для постоянного обмена между разными конфигурациями (скажем, из «Управления торговлей» в «Бухгалтерию») используют планы обмена и правила конвертации. Правила готовят в отдельной конфигурации «Конвертация данных»:
- КД 2.0 — старый механизм, правила под конкретную пару конфигураций;
- КД 3.0 и формат EnterpriseData — современный универсальный формат обмена, на нём работают типовые синхронизации между продуктами 1С.
EnterpriseData — это, по сути, единый XML-словарь, который понимают все свежие типовые конфигурации. Именно он стоит за кнопкой Синхронизация данных в разделе Администрирование.
При обмене через EnterpriseData сверяйте версию формата на обеих базах. Если на приёмнике версия формата ниже, часть данных просто не загрузится, а в протоколе обмена появятся предупреждения о неизвестных элементах.
Если нужна собственная выгрузка конкретных объектов кодом, работает сериализация XDTO:
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Обмен\Контрагенты.xml");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Данные");
Выборка = Справочники.Контрагенты.Выбрать();
Пока Выборка.Следующий() Цикл
СериализаторXDTO.ЗаписатьXML(Запись, Выборка.Ссылка.ПолучитьОбъект());
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();
На приёмнике такой файл читается объектом ЧтениеXML и методом СериализаторXDTO.ПрочитатьXML.
Выгрузка в JSON и обмен через веб-сервисы
Для обмена с сайтами, маркетплейсами, банками и любыми внешними сервисами XML уже не всегда удобен — там чаще ждут JSON. Платформа 8.3 (начиная с версии 8.3.3) умеет работать с JSON напрямую.
Записать структуру или таблицу в JSON можно встроенными средствами:
Данные = Новый Структура;
Данные.Вставить("Номер", "СЧ-0012");
Данные.Вставить("Сумма", 15400);
Запись = Новый ЗаписьJSON;
Запись.ОткрытьФайл("C:\Обмен\Счет.json");
ЗаписатьJSON(Запись, Данные);
Запись.Закрыть();
Чтение — зеркально, через объект ЧтениеJSON и глобальную функцию ПрочитатьJSON.
Для онлайн-обмена, когда файлы гонять неудобно, используют веб-сервисы. В 1С их два типа:
- Web-сервисы (SOAP) — обмен по строгому контракту WSDL, классика корпоративных интеграций;
- HTTP-сервисы (REST) — лёгкий обмен по HTTP, когда вы сами описываете, какие запросы принимает база;
- Стандартный интерфейс OData — автоматический REST-доступ почти ко всем данным базы без единой строки кода.
OData особенно удобен для выгрузки: вы публикуете базу на веб-сервере (Администрирование → Публикация на веб-сервере в конфигураторе), включаете стандартный интерфейс OData, и внешняя программа забирает справочники и документы обычными HTTP-запросами в формате JSON или Atom. Доступ к составу выгружаемых объектов настраивается там же, при публикации.
Запрос на выгрузку справочника выглядит просто — обычный адрес в браузере или в коде стороннего сервиса:
http://server/base/odata/standard.odata/Catalog_Контрагенты?$format=json
В ответ приходит список элементов справочника в JSON. Параметры $filter, $select и $top позволяют отобрать только нужные записи и поля, чтобы не тянуть базу целиком.
Между SOAP и REST выбор такой: если принимающая сторона уже прислала файл WSDL и требует строгий контракт — делаете Web-сервис. Если нужно гибко и быстро, под собственные правила — HTTP-сервис. Если же достаточно просто отдать данные наружу и писать код не хочется — включаете OData.
OData отдаёт данные только на чтение в базовом режиме и требует отдельной настройки прав. Не открывайте интерфейс в интернет без ограничения по пользователю и IP — через него видна вся разрешённая база.
Автоматизация: обмен по расписанию без участия человека
Если выгрузка нужна каждый день — например, заказы с сайта утром и выгрузка остатков вечером, — ручные нажатия не подходят. Автоматизируют обмен тремя способами.
Настроенная синхронизация данных. В типовых конфигурациях в разделе Администрирование → Синхронизация данных обмен между базами 1С настраивается мастером и дальше идёт по расписанию сам. Это самый простой путь, когда обе стороны — базы 1С.
Регламентные задания. Любую выгрузку кодом можно повесить на регламентное задание и запускать по графику. В клиент-серверном варианте задания выполняет сервер 1С без открытого сеанса пользователя. Настраиваются в Администрирование → Обслуживание → Регламентные и фоновые задания.
Распределённая информационная база (РИБ). Когда нужно держать несколько баз в актуальном состоянии (центр и филиалы), используют РИБ — особый вид плана обмена, который переносит не только данные, но и изменения конфигурации.
Для разовой автоматизации подойдёт внешняя обработка, запускаемая через планировщик Windows с ключом командной строки:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE
/S"СерверБаза"
/N"Пользователь" /P"Пароль"
/Execute"C:\Обработки\Выгрузка.epf"
В пакетном запуске всегда указывайте путь к файлу журнала через ключ /Out, иначе ошибку обмена вы не увидите — обработка молча завершится, и выгрузка просто не произойдёт.
Ещё → Вывести список или Файл → Сохранить как. Кода не нужно.Прямая выгрузка в базы данных и внешние системы
Иногда данные нужно положить сразу в чужую СУБД или в формат, который понимает старое оборудование. Для этого есть отдельные инструменты.
Внешние источники данных. Механизм платформы, который подключает таблицы сторонней СУБД (MS SQL, PostgreSQL и других по ODBC) прямо в 1С как обычные объекты. Чаще используется на чтение, но связка работает и для передачи данных.
COM-соединение. Через объект V83.COMConnector одна программа управляет 1С и забирает из неё данные. Так данные тянут из 1С в Excel-макросы, в собственные приложения на C# или Python через COM. Тонкий момент — разрядность: comcntr.dll должен совпадать по битности (x86/x64) с программой-клиентом, иначе соединение не установится.
Формат DBF (xBase). Старый, но живучий формат для обмена с банк-клиентами, таможенными программами и кассовым оборудованием. В 1С за него отвечает объект XBase:
ДБФ = Новый XBase;
ДБФ.Поля.Добавить("CODE", "S", 9);
ДБФ.Поля.Добавить("NAME", "S", 50);
ДБФ.СоздатьФайл("C:\Обмен\nomenkl.dbf");
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
ДБФ.Добавить();
ДБФ.CODE = Выборка.Код;
ДБФ.NAME = Выборка.Наименование;
ДБФ.Записать();
КонецЦикла;
ДБФ.ЗакрытьФайл();
CSV и текст с разделителями. Самый универсальный формат для обмена с чем угодно. Формируется объектом ЗаписьТекста построчно. Главное — задать кодировку (обычно UTF-8) и один тип разделителя на весь файл. Если в данных встречаются сами разделители (запятые в наименованиях при разделителе-запятой), значения заключают в кавычки — иначе приёмник неправильно разобьёт строку на колонки.
Выбор между этими инструментами простой. В чужую СУБД на постоянной основе — внешние источники данных. Данные из 1С в своё приложение по требованию — COM-соединение. В старое оборудование и банк-клиенты — DBF. В любой неизвестный заранее приёмник — CSV: его прочитает практически всё.
Типичные ошибки при выгрузке и как их избежать
Большинство провалов обмена сводится к нескольким повторяющимся причинам.
.xls. Пересохраните в .xlsx — у него лимит больше миллиона строк.UTF-8 при записи и ту же кодировку указывайте при открытии файла на приёмнике.comcntr.dll и программа-клиент должны быть одной битности (обе x86 или обе x64). Зарегистрируйте нужную версию библиотеки./Out и проверяйте файл журнала после каждого запуска.Отдельно про даты и числа: при выгрузке в текст и CSV проверяйте формат дат и разделитель дробной части. Приёмник может ждать точку, а 1С по умолчанию в некоторых случаях отдаёт запятую — и суммы «съезжают».
Частые вопросы
В каком формате выгрузить данные для банка или маркетплейса?
Как выгрузить всю базу 1С целиком?
.dt через конфигуратор (Администрирование → Выгрузить информационную базу). Но это резервная копия для переноса базы на другой компьютер, а не обмен данными с другой программой. Для обмена используйте XML, JSON или веб-сервисы.