Форматы файлов в 1С 8.3: расширения, типы и работа с ними

· 9 мин

Содержание

Формат файла в 1С задают две вещи: расширение в имени (.xlsx, .mxl, .xml, .csv) и тип, который вы выбираете в диалоге сохранения или указываете вторым параметром метода Записать в коде. Расширение — это только подпись в имени; реальный формат содержимого определяет тип, с которым файл записан.

Отсюда главное правило: не рассчитывайте, что 1С угадает формат по расширению — указывайте тип явно. Если записать табличный документ без указания типа, внутри .xlsx может оказаться совсем не книга Excel, и приёмник его не откроет.

Вопрос формата встаёт в трёх ситуациях: сохранение отчёта или печатной формы вручную, выгрузка из кода обработкой или заданием, обмен данными с другой программой. В каждой формат задаётся по-своему.

Что на самом деле определяет формат файла

В 1С у файла есть два независимых свойства: как он называется и что внутри. Поменять расширение в проводнике с .txt на .xml — значит переименовать файл , но не превратить текст в XML. Поэтому при работе из кода формат всегда задаётся отдельно от имени.

Проверить расширение существующего файла можно через объект Файл:

Файл = Новый Файл(ПутьКФайлу);
Расширение = НРег(Файл.Расширение); // вернёт ".xlsx" с точкой
Если Расширение <> ".xlsx" Тогда
    Сообщить("Ожидался файл XLSX, пришёл " + Файл.Расширение);
КонецЕсли;

Свойство Расширение возвращает строку с точкой и в том регистре, в каком оно записано в имени, — поэтому сравнивать удобнее через НРег(). Рядом полезны Файл.Имя, Файл.ИмяБезРасширения и Файл.Существует().

Второе понятие — тип содержимого. Для табличного документа это значение перечисления ТипФайлаТабличногоДокумента, для текста — кодировка, для картинки — формат изображения. Именно тип определяет, как байты записаны внутри. Расширение и тип должны совпадать, но платформа их не связывает автоматически: за совпадение отвечаете вы.

Стандартные типы файлов 1С и их расширения

У платформы есть собственные форматы — они открываются только в 1С — и универсальные, которые понимают сторонние программы.

РасширениеЧто этоЧем открыть
.mxlТабличный документ 1С (отчёты, печатные формы)Только 1С
.dtВыгрузка информационной базы целиком1С (загрузка базы)
.cfФайл конфигурацииКонфигуратор
.cfeРасширение конфигурацииКонфигуратор (с 8.3.6)
.epfВнешняя обработка1С:Предприятие
.erfВнешний отчёт1С:Предприятие
.xlsx, .xlsКнига ExcelExcel, LibreOffice
.odsТаблица OpenDocumentLibreOffice Calc
.csv, .txtТекст с разделителями / простой текстЛюбой редактор
.xmlСтруктурированные данные, обменЛюбой парсер XML
.jsonДанные для web-сервисов и обменаЛюбой парсер JSON
.dbfТаблица dBase1С (XBase), сторонние СУБД
.pdfДокумент для печати и просмотраЛюбая читалка PDF

Файлы .mxl удобны, когда получателю не важно открывать отчёт вне 1С: они сохраняют расшифровки, группировки и оформление один в один. Для передачи «наружу» выбирайте .xlsx или .pdf.

Служебные форматы .dt, .cf и .cfe обычный пользователь встречает редко — они относятся к администрированию: .dt создают при переносе базы на другой сервер, .cf и .cfe — при обновлении конфигурации и подключении расширений. Выбрать формат для них нельзя, он фиксирован самой операцией. А вот .mxl, .xlsx, .csv, .xml и .json — это как раз те форматы, где выбор остаётся за вами.

Как выбрать формат при ручном сохранении

Когда отчёт или печатная форма уже на экране, формат задаётся в момент сохранения.

  1. Нажмите Главное меню → Файл → Сохранить как (или значок дискеты на командной панели формы).
  2. В диалоге сохранения внизу есть поле Тип файла — именно оно, а не имя, определяет формат.
  3. Выберите нужный тип: Лист Excel 2007 (*.xlsx), Табличный документ (*.mxl), Документ PDF (*.pdf) и так далее.
  4. Задайте имя и папку, нажмите Сохранить.

Расширение в имени подставится автоматически под выбранный тип — вручную дописывать его не нужно. Если же вы сначала напечатаете имя с расширением, а тип оставите другим, 1С запишет файл в формате из поля «Тип файла», и внутри .xlsx окажется, например, MXL.

Тот же диалог открывается для любого табличного документа на экране: результата отчёта, печатной формы накладной, выгрузки из обработки. Набор доступных типов в поле «Тип файла» одинаковый. Отдельной кнопки «Экспорт в Excel» для этого не нужно — сохранение через Сохранить как с типом Лист Excel и есть экспорт.

Если файл нужен в нескольких форматах сразу (и .xlsx коллеге, и .pdf в архив), проще сохранить дважды с разными типами, чем конвертировать потом на стороне.

При выгрузке в .xls (формат Excel 97–2003) действуют старые ограничения: не более 65 536 строк на лист и 256 колонок. Для больших таблиц берите .xlsx.

Как задать формат файла в коде

Из встроенного языка формат задаётся вторым параметром метода Записать. Для табличного документа это значение перечисления ТипФайлаТабличногоДокумента:

Таблица = Отчёт.ПолучитьТабличныйДокумент();

// Книга Excel
Таблица.Записать("C:\Выгрузка\Отчёт.xlsx", ТипФайлаТабличногоДокумента.XLSX);

// PDF для печати
Таблица.Записать("C:\Выгрузка\Отчёт.pdf", ТипФайлаТабличногоДокумента.PDF);

// Внутренний формат 1С
Таблица.Записать("C:\Выгрузка\Отчёт.mxl", ТипФайлаТабличногоДокумента.MXL);

Среди значений перечисления — XLSX, XLS, ODS, MXL, PDF, TXT и другие. Передавайте тип всегда: без него формат содержимого может не совпасть с расширением в имени.

Текстовый файл пишется через ТекстовыйДокумент или объект ЗаписьТекста, и здесь «формат» — это в первую очередь кодировка:

Текст = Новый ТекстовыйДокумент;
Текст.ДобавитьСтроку("Строка выгрузки");
Текст.Записать("C:\Выгрузка\Данные.txt", КодировкаТекста.UTF8);

Для кодировки используйте значения перечисления КодировкаТекста (UTF8, ANSI, OEM, UTF16) или строку с названием кодовой страницы. От кодировки зависит, прочитает ли файл приёмник, — текст в UTF-8 в программе, ждущей Windows-1251, превратится в «кракозябры».

Читают файлы симметрично записи: табличный документ — методом Прочитать, текст — объектом ЧтениеТекста с той же кодировкой, что при записи. Если кодировку чтения не угадать, структура файла прочитается верно, а русские буквы — нет. Поэтому при обмене кодировку всегда фиксируют заранее и с обеих сторон держат одинаковой.

Форматы для обмена с внешними системами

Для обмена выбор формата диктует приёмник. Самые частые варианты:

  • 📄 XML — для обмена между базами 1С и с системами, где есть схема данных. Пишется через объект ЗаписьXML и СериализаторXDTO, читается через ЧтениеXML. Стандартный формат обмена между конфигурациями — EnterpriseData, его поддерживают типовые БП, ЗУП и УТ «из коробки». Настройки такого обмена живут в разделе Администрирование → Синхронизация данных.
  • 🔤 JSON — для web-сервисов и интеграций с современными сервисами. Объекты ЗаписьJSON / ЧтениеJSON, сериализация прикладных объектов — через СериализаторXDTO.
  • 📊 CSV — простой текст с разделителями (чаще ; или ,). Формат удобен тем, что его открывает любой приёмник, но в нём нет типов данных: дата и число приходят строкой, и разбирать их должен получатель.

Сериализация прикладного объекта (документа, элемента справочника) в XML занимает три строки — объект потока, запись, закрытие:

Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Обмен\Контрагент.xml");
СериализаторXDTO.ЗаписатьXML(Запись, СсылкаНаКонтрагента.ПолучитьОбъект());
Запись.Закрыть();

Поток XML всегда нужно закрывать методом Закрыть() — пока он открыт, файл заблокирован, и приёмник прочитает его пустым или получит ошибку доступа.

Запись JSON из кода устроена так же — открываем поток, передаём данные, закрываем:

Данные = Новый Структура("Номер, Сумма", "0001", 15000);

Запись = Новый ЗаписьJSON;
Запись.ОткрытьФайл("C:\Обмен\Заказ.json");
ЗаписатьJSON(Запись, Данные);
Запись.Закрыть();

CSV собирают построчно через ЗаписьТекста. Число склеивать со строкой напрямую нельзя — приводите его функцией Формат, иначе в файл попадут разделители разрядов и запятая вместо точки:

Файл = Новый ЗаписьТекста("C:\Обмен\Прайс.csv", КодировкаТекста.ANSI);
Файл.ЗаписатьСтроку("Артикул;Наименование;Цена");
Для Каждого Стр Из Товары Цикл
    Цена = Формат(Стр.Цена, "ЧГ=0; ЧДЦ=2; ЧРД=.");
    Файл.ЗаписатьСтроку(Стр.Артикул + ";" + Стр.Наименование + ";" + Цена);
КонецЦикла;
Файл.Закрыть();

Здесь ЧГ=0 убирает разделители групп разрядов, ЧДЦ=2 оставляет два знака после запятой, ЧРД=. ставит точку как десятичный разделитель — так приёмник не перепутает тысячи и копейки.

  • 🗄️ DBF — таблицы dBase. В 1С читаются и пишутся объектом XBase:
ДБФ = Новый XBase;
ДБФ.Кодировка = КодировкаXBase.OEM; // задать ДО открытия
ДБФ.ОткрытьФайл("C:\Обмен\Клиенты.dbf");
Пока НЕ ДБФ.ВКонце() Цикл
    Наименование = ДБФ.NAME;
    ДБФ.Следующая();
КонецЦикла;
ДБФ.ЗакрытьФайл();

У XBase конец файла проверяют методом ВКонце(), а кодировку задают свойством Кодировка до вызова ОткрытьФайл — иначе поля вернутся пустыми или нечитаемыми.

Перед настройкой обмена уточните у принимающей стороны три вещи: сам формат (XML, JSON, CSV, DBF), кодировку и — для CSV — символ-разделитель. Ошибка в любом из трёх пунктов и есть самая частая причина, почему «файл не грузится». Эти три параметра стоит записать в описание обмена, чтобы при смене специалиста их не пришлось выяснять заново.

Проверка расширения перед загрузкой

Когда файлы приходят от пользователей, разумно проверить их до обработки — так вы не запустите разбор XLSX-парсером на присланном PDF.

Файл = Новый Файл(ПутьКФайлу);
Разрешённые = Новый Массив;
Разрешённые.Добавить(".xlsx");
Разрешённые.Добавить(".csv");
Разрешённые.Добавить(".xml");

Если Разрешённые.Найти(НРег(Файл.Расширение)) = Неопределено Тогда
    ВызватьИсключение "Недопустимый формат: " + Файл.Расширение;
КонецЕсли;

Если Файл.Размер() = 0 Тогда
    ВызватьИсключение "Файл пустой";
КонецЕсли;

Проверка по расширению — быстрая, но её можно обойти, просто переименовав файл. Если формат критичен, дополнительно читайте первые байты через ДвоичныеДанные и сверяйте сигнатуру (например, .xlsx — это ZIP-архив и начинается с байтов PK, а .pdf — с %PDF). Для рядовой загрузки прайсов хватает проверки расширения, размера и структуры колонок.

Для текстовых форматов стоит отдельно учитывать метку порядка байтов (BOM) в начале UTF-8: часть приёмников воспринимает её как часть первого значения и тогда не находит нужную колонку. Если внешняя система жалуется на «лишние символы» перед первым полем, проверьте, не пишете ли вы файл с BOM.

Что проверить в файле перед загрузкой
Выполнено: 0 / 5

Почему файл открывается неправильно

Чаще всего проблема не в 1С, а в несовпадении формата, который записали, и того, который ждёт приёмник.

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

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

Чем `.mxl` отличается от `.xlsx`?
.mxl — внутренний формат табличного документа 1С: хранит расшифровки, группировки и оформление, но открывается только в 1С. .xlsx — книга Excel, читается сторонними программами, но теряет интерактивность отчёта 1С.
Что за файлы `.dt`, `.cf`, `.cfe`, `.epf`?
.dt — полная выгрузка информационной базы; .cf — файл конфигурации; .cfe — расширение конфигурации (с версии 8.3.6); .epf — внешняя обработка; .erf — внешний отчёт. Первые три открываются в Конфигураторе, обработки и отчёты — в режиме 1С:Предприятие.
Как сменить кодировку текстового файла?
Прочитать его с исходной кодировкой и перезаписать с нужной через ЗаписьТекста или ТекстовыйДокумент.Записать, указав значение КодировкаТекста. Переименование файла кодировку не меняет.
Почему 1С сохранила `.xlsx`, а внутри оказался не Excel?
Метод Записать вызвали без второго параметра, и формат содержимого не совпал с расширением в имени. Всегда передавайте ТипФайлаТабличногоДокумента.XLSX явно.
Какой формат выбрать для обмена между базами 1С?
Для типовых конфигураций — EnterpriseData (XML): его поддержка встроена в БП, ЗУП и УТ. Для интеграций с внешними сервисами чаще берут JSON, для выгрузки в простые системы — CSV.