При работе с механизмом расширений в платформе «1С:Предприятие 8.3» разработчики часто сталкиваются с вопросом выбора формата файла для выгрузки. Стандартным расширением для таких файлов является .cfe (Configuration Extension), в то время как основная конфигурация традиционно сохраняется в .cf (Configuration File). В рамках данной статьи мы подробно разберем, существуют ли ситуации, в которых расширение может превратиться в .cf, как платформа обрабатывает эти файлы на низком уровне и какие инструменты доступны программисту для автоматизации процесса сохранения.
Разберем базовый принцип: по умолчанию Конфигуратор 1С всегда предлагает сохранить расширение в файл с расширением .cfe. Это логическое разделение необходимо для того, чтобы система (и разработчик) могла быстро идентифицировать содержимое файла. Файл .cfe не является самостоятельной конфигурацией; он содержит лишь описание изменений (дельты) относительно основной конфигурации, заимствованные объекты и собственные объекты расширения.
Проанализируем техническую составляющую. Оба формата — и .cfe, и .cf — базируются на технологии Compound File (структурированное хранилище). Это своего рода «файловая система внутри файла». Несмотря на общую природу контейнера, их внутреннее наполнение различается. Если попытаться принудительно изменить расширение файла с .cfe на .cf простым переименованием, платформа все равно распознает в нем расширение при попытке загрузки в соответствующее окно, либо выдаст ошибку, если вы попытаетесь загрузить его как основную конфигурацию.
Как отмечают участники профессиональных дискуссий, при программной работе с объектами метаданных у разработчика появляется больше свободы. Рассмотрим ситуацию, когда нам необходимо выгрузить расширение из информационной базы средствами встроенного языка. Для этого используется объект РасширениеКонфигурации и его метод Записать().
Разберем пример кода, который позволяет сохранить расширение в файл:
// Получаем расширение по имени
Расширение = РасширенияКонфигурации.Найти("МоеРасширение");
Если Расширение <> Неопределено Тогда
// Мы можем указать абсолютно любое имя и расширение файла
ПутьКФайлу = "C:\Dump\ExtensionData.cf";
Расширение.Записать(ПутьКФайлу);
Сообщить("Расширение успешно сохранено в файл с расширением .cf");КонецЕсли;
В данном случае платформа успешно создаст файл с расширением .cf. Однако важно понимать: содержимое файла останется структурой расширения. Изменение расширения в имени файла (расширение строки пути) не меняет «магические числа» в заголовке бинарного файла, по которым платформа определяет тип контента. Таким образом, если вы сохранили расширение как .cf, вы не сможете загрузить его через меню «Конфигурация — Загрузить конфигурацию из файла». Система выдаст ошибку о несоответствии формата.
Иногда возникают специфические задачи, когда расширение требуется «превратить» в полноценную конфигурацию (например, для анализа структуры сторонними утилитами, которые не поддерживают .cfe). Выясним, как это происходит. Прямого штатного механизма конвертации «одной кнопкой» не существует, так как расширение по определению неполноценно без родительской конфигурации.
Тем не менее, существуют неофициальные способы:
.cf..cf.Для задач автоматизации (CI/CD) часто используется пакетный режим работы Конфигуратора. Рассмотрим параметры командной строки, которые отвечают за сохранение расширений. Команда /DumpExtension требует указания имени расширения и пути к файлу.
Пример команды для командного файла (bat/cmd):
1cv8.exe DESIGNER /F "C:\Base1C" /DumpExtension "MyExt" "C:\Backups\MyExt.cfe" /Out "log.txt"
Здесь также соблюдается правило: использование расширения .cfe является общепринятым стандартом. Платформа при выполнении этой команды ориентируется на внутреннюю логику объекта, а не на расширение файла, указанное в строке пути.
Рассмотрим ситуацию, когда сохранение в один бинарный файл (будь то .cfe или .cf) нецелесообразно. В современной практике разработки расширения чаще всего выгружаются в набор файлов (XML, модули .bsl и т.д.). Это критически важно для работы с системами контроля версий, такими как Git.
Посмотрим на последовательность действий:
В результате вместо одного файла .cfe вы получите структурированный каталог. Этот метод является наиболее прозрачным, так как позволяет увидеть реальный состав расширения без использования специализированных парсеров бинарных данных.
Проанализируем требования безопасности. В сервисах уровня «1С:Фреш» формат файла имеет решающее значение. При загрузке расширения в личный кабинет сервис ожидает именно файл .cfe. Более того, файл должен пройти аудит и часто должен быть подписан цифровой подписью. Попытка загрузить расширение, сохраненное с расширением .cf (даже если внутри валидное расширение), скорее всего, приведет к ошибке валидации на этапе загрузки файла в хранилище сервиса, так как фильтры расширений файлов настроены жестко.
Подводя итог нашему разбору, можно выделить следующие ключевые моменты:
Записать() можно задать любое имя файла, включая .cf, .zip или .txt, но внутренняя структура файла останется структурой расширения 1С.Таким образом, путаница между форматами чаще всего возникает из-за гибкости встроенного языка 1С, который позволяет игнорировать стандарты именования файлов при программной выгрузке данных.