Способы выгрузки данных из 1С: таблицы, XML, JSON и веб-сервисы

· 9 мин

Содержание

Выгрузить данные из 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: его прочитает практически всё.

Типичные ошибки при выгрузке и как их избежать

Большинство провалов обмена сводится к нескольким повторяющимся причинам.

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

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

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

В каком формате выгрузить данные для банка или маркетплейса?
В том, который требует их спецификация. Банки чаще принимают текст/CSV или DBF, маркетплейсы и сайты — JSON или XML. Всегда берите за основу документ формата обмена от принимающей стороны, а не выгружайте «как привычно».
Как выгрузить всю базу 1С целиком?
Полная выгрузка базы — это файл .dt через конфигуратор (Администрирование → Выгрузить информационную базу). Но это резервная копия для переноса базы на другой компьютер, а не обмен данными с другой программой. Для обмена используйте XML, JSON или веб-сервисы.
Можно ли выгрузить данные без программиста?
Да. Сохранение списков и отчётов в Excel/PDF, стандартная выгрузка-загрузка XML между базами 1С и настройка синхронизации через мастер — всё это делается из интерфейса без написания кода.
Чем XML отличается от JSON для обмена?
XML — родной формат обмена между базами 1С (EnterpriseData), он строже и подробнее. JSON легче и компактнее, его ждут большинство веб-сервисов и сайтов. Выбор диктует принимающая сторона: с 1С — XML, с вебом — обычно JSON.
Почему нельзя просто скопировать данные через Excel в другую базу 1С?
Через Excel теряются ссылки на справочники, связи между документами и служебные реквизиты. Данные попадут как «плоский» текст без учёта структуры. Для переноса между базами 1С всегда используйте XML-обмен.