Из MXL в Excel, из XML в JSON: как 1С сохраняет, конвертирует и обменивает данные в нужном формате

· 9 мин

Содержание

Формат отчёта в 1С меняют в момент сохранения: откройте сформированный отчёт, нажмите кнопку «Сохранить» (значок дискеты) или Ctrl+S и в поле «Тип файла» выберите нужный — XLSX, XLS, PDF, DOCX, ODS, HTML, TXT или родной MXL. Данные между XML, JSON, DBF и Excel переводят обработкой на встроенном языке, а формат обмена между базами задаётся версией EnterpriseData или CommerceML в настройках синхронизации.

Типичная ситуация: главбух просит оборотно-сальдовую ведомость «в Excel, а не вашим 1С-файлом», банк ждёт выписку в XML, а сайт магазина — каталог в CommerceML. Задача одна — изменить формат данных, — но решается в трёх разных местах программы. Разбираем все три плюс облачную 1С:Fresh.

Какие форматы понимает 1С 8.3 и для чего каждый

Платформа 8.3 работает с форматами на трёх уровнях: сохранение табличных документов (отчёты, печатные формы), чтение и запись файлов из кода и обмен между программами.

ФорматГде встречаетсяКогда выбирать
MXLТабличный документ 1СХранить отчёт так, чтобы открыть его в 1С без потерь, с расшифровками
XLSXСохранение отчётов, загрузка из файлаПередать таблицу бухгалтеру или аудитору для работы в Excel
XLSСохранение отчётовТолько для очень старых программ: лимит 65 536 строк
ODSСохранение отчётовДля LibreOffice и «Р7-Офис»
PDFПечатные формы, отчётыОтправить документ контрагенту, чтобы его не правили
DOCXПечатные формыДоговор или письмо, которые нужно доредактировать
HTMLОтчётыОпубликовать таблицу на внутреннем портале
TXTОтчёты, выгрузкиПростой список для другой программы
XMLОбмены, регламентированная отчётность, банкСтруктурированный обмен по схеме
JSONHTTP-сервисы, REST-интеграцииОбмен с веб-сервисами, маркетплейсами, сайтами
DBFСтарые системы, банковские и складские программыИнтеграция с наследием на FoxPro и Clipper

Если файл нужен только для чтения человеком — берите PDF. Если с ним будут считать — XLSX. MXL оставляйте для коллег, у которых тоже есть 1С.

Как изменить формат отчёта при сохранении: XLSX, PDF, HTML

Обычный отчёт: ОСВ, анализ счёта, продажи

  1. Сформируйте отчёт кнопкой «Сформировать».
  2. Нажмите «Сохранить» на командной панели отчёта или Ctrl+S.
  3. В окне сохранения раскройте список «Тип файла».
  4. Выберите формат: «Лист Excel 2007-…» (XLSX), «Adobe PDF», «HTML документ» и т. д.
  5. Укажите папку и имя файла, нажмите «Сохранить».

В интерфейсе «Такси» то же самое доступно через главное меню (кнопка с тремя полосками в заголовке окна): Файл → Сохранить как.

Печатная форма документа: счёт, акт, ТОРГ-12

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

Удобный приём: отметьте сразу PDF и DOCX. PDF уйдёт клиенту, DOCX останется вам для правок.

Отчёт выглядит не так после сохранения

Формат меняет файл, но не макет. Если в PDF таблица обрезана справа, сначала настройте печать:

  • 📄 главное меню → Файл → Параметры страницы;
  • 🔄 ориентация «Альбомная»;
  • 📏 масштаб «По ширине страницы».

После этого сохраните отчёт в PDF заново — ширина подстроится под лист.

При сохранении в XLSX, PDF или HTML пропадают расшифровки: кликнуть по сумме и провалиться в документы уже не получится. Нужна интерактивность — сохраняйте в MXL.

Конвертация данных между форматами: XML ↔ JSON, DBF ↔ Excel

Готовой кнопки «перевести XML в JSON» в типовых конфигурациях нет. Такие задачи решают внешней обработкой: прочитать файл одним объектом встроенного языка, записать другим. Объекты для этого есть в платформе:

ФорматЧтениеЗапись
XMLЧтениеXMLЗаписьXML
JSONЧтениеJSON + ПрочитатьJSON()ЗаписьJSON + ЗаписатьJSON()
DBFXBaseXBase
XLSX, XLS, ODSТабличныйДокумент.Прочитать()ТабличныйДокумент.Записать()
Текст, CSVЧтениеТекстаЗаписьТекста

Работа с JSON появилась в платформе 8.3.6, так что на актуальных релизах она доступна везде.

Пример: JSON-файл → таблица Excel

Допустим, сервис отдаёт массив товаров вида [{"code":"001","name":"Бумага","price":350}, …]. Обработка ниже читает его и сохраняет в XLSX.

&НаСервере
Процедура JSONвExcel(ПутьJSON, ПутьXLSX)

    Чтение = Новый ЧтениеJSON;
    Чтение.ОткрытьФайл(ПутьJSON, "UTF-8");
    Товары = ПрочитатьJSON(Чтение, Истина); // массив соответствий
    Чтение.Закрыть();

    ТД = Новый ТабличныйДокумент;
    ТД.Область(1, 1, 1, 1).Текст = "Код";
    ТД.Область(1, 2, 1, 2).Текст = "Наименование";
    ТД.Область(1, 3, 1, 3).Текст = "Цена";

    НомерСтроки = 1;
    Для Каждого Товар Из Товары Цикл
        НомерСтроки = НомерСтроки + 1;
        ТД.Область(НомерСтроки, 1, НомерСтроки, 1).Текст = Товар.Получить("code");
        ТД.Область(НомерСтроки, 2, НомерСтроки, 2).Текст = Товар.Получить("name");
        ТД.Область(НомерСтроки, 3, НомерСтроки, 3).Текст = Формат(Товар.Получить("price"), "ЧГ=0");
    КонецЦикла;

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

КонецПроцедуры

Второй параметр ПрочитатьJSON(Чтение, Истина) превращает объекты в Соответствие — так безопаснее, если в ключах встречаются символы, недопустимые в именах свойств структуры.

Обратный путь, Excel → JSON: ТД.Прочитать(ПутьXLSX), затем цикл по строкам с ТД.Область(Строка, Колонка, Строка, Колонка).Текст, сборка массива структур и ЗаписатьJSON(Запись, Массив).

Пример: DBF → XLSX

DBF из старых программ почти всегда в кодировке DOS. Если её не указать, вместо кириллицы получатся «кракозябры».

&НаСервере
Процедура DBFвExcel(ПутьDBF, ПутьXLSX)

    Файл = Новый XBase;
    Файл.Кодировка = КодировкаXBase.OEM; // для DBF из Windows-программ — ANSI
    Файл.ОткрытьФайл(ПутьDBF, , Истина); // только чтение

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

    Файл.Первая();
    Пока Не Файл.ВКонце() Цикл
        НомерСтроки = НомерСтроки + 1;
        ТД.Область(НомерСтроки, 1, НомерСтроки, 1).Текст = Файл.CODE;
        ТД.Область(НомерСтроки, 2, НомерСтроки, 2).Текст = Файл.NAME;
        Файл.Следующая();
    КонецЦикла;

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

КонецПроцедуры

CODE и NAME замените на реальные имена полей вашего DBF. Их видно в любой программе просмотра DBF или в коллекции Файл.Поля.

XML ↔ JSON

Для плоского XML (одинаковые записи с полями) схема та же: ЧтениеXML в цикле Пока Чтение.Прочитать() собирает массив структур, а ЗаписатьJSON() сохраняет его. Для XML со сложной вложенной схемой надёжнее загрузить XSD-схему в пакет XDTO и работать с объектами XDTO — так структура не развалится.

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

Смена формата обмена данными: EnterpriseData и CommerceML

EnterpriseData — обмен между конфигурациями 1С

Синхронизация БП 3.0 с УТ 11, КА 2 или ERP идёт через универсальный формат EnterpriseData. Это XML по общей схеме, у которой есть версии.

Выбирать версию руками не нужно. При синхронизации обе базы сообщают, какие версии формата поддерживают, и обмен идёт по самой новой общей. Отсюда правило:

  • 🔄 нужна новая версия формата — обновите обе конфигурации до актуальных релизов;
  • ⚠️ одна база сильно отстала — обмен либо откатится на старую версию, где нет новых объектов, либо выдаст ошибку о несовместимости;
  • 📋 настройки синхронизации живут в разделе Администрирование → Синхронизация данных.

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

CommerceML — обмен с сайтом

Для интернет-магазина 1С выгружает каталог, цены и остатки в CommerceML — это тоже XML, но по схеме для электронной торговли. Версий схемы несколько, и сайт с 1С должны поддерживать одну.

В УТ 11 и КА 2 обмен с сайтом настраивается в том же разделе синхронизации данных. В карточке узла обмена выбирается версия схемы: ставьте ту, которую поддерживает модуль обмена на стороне сайта. Если сайт ждёт одну версию, а 1С шлёт другую, товары часто загружаются без характеристик или цен.

Какой формат вам нужен?

Автоматизация: как менять формат без ручной работы

Рассылки отчётов

В конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11) есть механизм «Рассылки отчетов». В рассылке задают отчёт, вариант настроек, формат файла (XLSX, PDF, MXL и другие), получателей и расписание.

Пример: каждый понедельник в 8:00 ОСВ за прошлую неделю уходит директору в PDF и бухгалтеру в XLSX. Доставка — на почту, в сетевую папку или на FTP.

Регламентное задание

Если формат нестандартный — например, JSON для маркетплейса, — код конвертации из примеров выше выносят в регламентное задание. Оно работает на сервере 1С по расписанию и кладёт файл в общую папку.

Для файловой базы регламентные задания выполняются только при запущенном клиенте, поэтому на сервере это надёжнее.

Запуск из командной строки

Обработку конвертации можно запустить планировщиком Windows без участия человека:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "D:\Bases\Buh" /N "Робот" /P "пароль" /Execute "D:\Obr\Konvert.epf" /DisableStartupMessages
  • /F — путь к файловой базе (для серверной — /S "сервер\база");
  • /N и /P — пользователь и пароль;
  • /Execute — какую внешнюю обработку открыть при старте.

В модуле обработки делают процедуру, которая запускается при открытии формы, выполняет конвертацию и закрывает программу командой ЗавершитьРаботуСистемы(Ложь).

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

Форматы в облачной 1С:Fresh и веб-клиенте

В 1С:Fresh и при работе через браузер программа работает на сервере, а у вас только окно. Отсюда отличия:

  • 📥 Сохранение отчёта. Формат выбирается так же, но файл не пишется в папку напрямую — браузер скачивает его в «Загрузки».
  • 🧩 Расширение для работы с файлами. При первом сохранении браузер может предложить установить расширение . С ним можно выбирать папку, без него файлы идут через загрузки.
  • 🚫 Нет COM. Объект Excel.Application и другие COM-объекты в облаке не работают. Excel читайте только через ТабличныйДокумент.Прочитать().
  • 🔒 Внешние обработки. Свою обработку конвертации в сервис просто так не открыть: её подключают через «Дополнительные отчеты и обработки», и она проходит проверку поставщиком сервиса.
  • 🔄 Обмены. Синхронизация между приложениями Fresh идёт тем же EnterpriseData; версии форматов поднимает сам сервис при обновлении приложений.

Пути к файлам на сервере в облаке недоступны. Файл сначала загружают на сервер (НачатьПомещениеФайла), а результат отдают пользователю через ПолучитьФайл.

Ошибки при смене формата и как их обойти

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

Ещё одна частая ловушка — объединённые ячейки. Отчёт с шапкой из объединённых ячеек в XLSX выглядит красиво, но фильтр и сводная таблица в Excel по нему работают плохо. Для анализа включите в настройках отчёта упрощённый вид или выведите отчёт без группировок и итогов.

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

Можно ли задать формат сохранения отчётов по умолчанию?
Типовой настройки «всегда сохранять в XLSX» нет. Окно сохранения запоминает последний выбранный тип файла, а для регулярных выгрузок используйте рассылки отчётов с заданным форматом.
Как открыть в 1С файл Excel или PDF?
XLSX, XLS и ODS открываются через главное меню Файл → Открыть — файл станет табличным документом 1С. PDF платформа как таблицу не читает: данные из него нужно сначала перевести в Excel сторонней программой.
Чем MXL лучше XLSX?
MXL сохраняет оформление, примечания и расшифровки ровно так, как их показывает 1С. XLSX удобнее для расчётов, но интерактивные элементы теряет.
Нужен ли программист, чтобы перевести XML в JSON?
Для разовой простой задачи достаточно обработки на 20–30 строк кода из примеров выше. Для постоянного обмена со сложной схемой лучше заказать доработку с XDTO и проверкой ошибок.