Форматы файлов в 1С 8.3: расширения, типы и работа с ними
Содержание
Формат файла в 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 | Книга Excel | Excel, LibreOffice |
.ods | Таблица OpenDocument | LibreOffice Calc |
.csv, .txt | Текст с разделителями / простой текст | Любой редактор |
.xml | Структурированные данные, обмен | Любой парсер XML |
.json | Данные для web-сервисов и обмена | Любой парсер JSON |
.dbf | Таблица dBase | 1С (XBase), сторонние СУБД |
.pdf | Документ для печати и просмотра | Любая читалка PDF |
Файлы .mxl удобны, когда получателю не важно открывать отчёт вне 1С: они сохраняют расшифровки, группировки и оформление один в один. Для передачи «наружу» выбирайте .xlsx или .pdf.
Служебные форматы .dt, .cf и .cfe обычный пользователь встречает редко — они относятся к администрированию: .dt создают при переносе базы на другой сервер, .cf и .cfe — при обновлении конфигурации и подключении расширений. Выбрать формат для них нельзя, он фиксирован самой операцией. А вот .mxl, .xlsx, .csv, .xml и .json — это как раз те форматы, где выбор остаётся за вами.
Как выбрать формат при ручном сохранении
Когда отчёт или печатная форма уже на экране, формат задаётся в момент сохранения.
- Нажмите
Главное меню → Файл → Сохранить как(или значок дискеты на командной панели формы). - В диалоге сохранения внизу есть поле Тип файла — именно оно, а не имя, определяет формат.
- Выберите нужный тип:
Лист Excel 2007 (*.xlsx),Табличный документ (*.mxl),Документ PDF (*.pdf)и так далее. - Задайте имя и папку, нажмите Сохранить.
Расширение в имени подставится автоматически под выбранный тип — вручную дописывать его не нужно. Если же вы сначала напечатаете имя с расширением, а тип оставите другим, 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.
Почему файл открывается неправильно
Чаще всего проблема не в 1С, а в несовпадении формата, который записали, и того, который ждёт приёмник.
ТекстовыйДокумент.Записать с нужным значением КодировкаТекста — чаще ANSI (Windows-1251) для Excel на русской Windows или UTF8 для web-приёмников.ТипФайлаТабличногоДокумента.XLSX вторым параметром Записать.;, а пришёл XML или CSV с ,. Уточните формат, кодировку и разделитель у принимающей стороны.XBase. Задайте свойство Кодировка (обычно OEM для старых DBF) до вызова ОткрытьФайл.Частые вопросы
Чем `.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 явно.