# Спецификация формата выгрузки расширений конфигурации 1С (CFE)
Формат: XML-выгрузка расширения конфигурации 1С:Предприятие 8.3 (Конфигуратор → Конфигурация → Расширения → Выгрузить расширение в файлы).
Версия формата: `2.17` (платформа 8.3.17–8.3.24).
> **Связанные спецификации:**
> - Корневая структура конфигурации — [1c-configuration-spec.md](1c-configuration-spec.md)
> - Объекты метаданных — [1c-config-objects-spec.md](1c-config-objects-spec.md)
> - Подсистемы — [1c-subsystem-spec.md](1c-subsystem-spec.md)
> - Управляемые формы — [1c-form-spec.md](1c-form-spec.md)
> - Роли — [1c-role-spec.md](1c-role-spec.md)
> - Сводный индекс — [1c-specs-index.md](1c-specs-index.md)
---
## 1. Общая структура выгрузки расширения
```
Configuration.xml # Корневой файл — свойства и состав расширения
ConfigDumpInfo.xml # Служебный файл — версии объектов
Languages/ # Языки (всегда заимствованные)
Roles/ # Роли (собственные)
Subsystems/ # Подсистемы (собственные или заимствованные)
CommonModules/ # Общие модули
CommonPictures/ # Общие картинки
CommonCommands/ # Общие команды
Catalogs/ # Справочники
Documents/ # Документы
Enums/ # Перечисления
... # Другие типы объектов
```
### Ключевые отличия от конфигурации
| Аспект | Конфигурация | Расширение |
|--------|-------------|------------|
| Корневой `Ext/` | Есть (модули, интерфейс, справка) | **Нет** |
| `ObjectBelonging` в Properties | Нет | `Adopted` (всегда) |
| `ConfigurationExtensionPurpose` | Нет | `Patch` / `Customization` / `AddOn` |
| `KeepMappingToExtendedConfigurationObjectsByIDs` | Нет | `true` / `false` |
| `NamePrefix` | Пустой или нет | Префикс для собственных объектов |
| `CompatibilityMode` | Да | Нет (используется `ConfigurationExtensionCompatibilityMode`) |
| Свойства режимов работы | Полный набор | Сокращённый набор |
| Объекты в ChildObjects | Только собственные | Собственные **и заимствованные** |
---
## 2. Configuration.xml — корневой файл расширения
### 2.1. Общая структура
```xml
...
...
...
```
Пространства имён и корневой элемент идентичны конфигурации. Атрибут `version` соответствует версии формата выгрузки.
### 2.2. InternalInfo
Содержит 7 записей `xr:ContainedObject` — аналогично конфигурации. ClassId фиксированные, ObjectId уникальны для каждого расширения.
### 2.3. Properties — свойства расширения
Свойства идут в фиксированном порядке. Набор свойств **отличается** от конфигурации — часть свойств специфична для расширений, часть свойств конфигурации отсутствует.
#### Специфичные свойства расширения
| Свойство | Тип | Описание |
|----------|-----|----------|
| `ObjectBelonging` | enum | Всегда `Adopted` — расширение «принято» к основной конфигурации |
| `ConfigurationExtensionPurpose` | enum | Назначение расширения: `Patch` (исправление), `Customization` (адаптация), `AddOn` (дополнение) |
| `KeepMappingToExtendedConfigurationObjectsByIDs` | `xs:boolean` | Сохранять привязку к объектам по идентификаторам |
| `NamePrefix` | `xs:string` | Префикс имён собственных объектов (напр. `Расш1_`, `МоёРасш_`) |
| `ConfigurationExtensionCompatibilityMode` | enum | Режим совместимости расширения (`Version8_3_17`, `Version8_3_24`, ...) |
#### Общие свойства (совпадают с конфигурацией)
| Свойство | Тип | Описание |
|----------|-----|----------|
| `Name` | `xs:string` | Имя расширения (идентификатор) |
| `Synonym` | `LocalString` | Отображаемое имя |
| `Comment` | `xs:string` | Комментарий |
| `DefaultRunMode` | enum | Режим запуска (`ManagedApplication`) |
| `UsePurposes` | list | Назначения (`PlatformApplication`) |
| `ScriptVariant` | enum | Язык скриптов (`Russian` / `English`) |
| `DefaultRoles` | list | Роли по умолчанию |
| `Vendor` | `xs:string` | Поставщик |
| `Version` | `xs:string` | Версия расширения |
| `DefaultLanguage` | ref | Язык по умолчанию (`Language.Русский`) |
| `BriefInformation` | `LocalString` | Краткая информация |
| `DetailedInformation` | `LocalString` | Подробная информация |
| `Copyright` | `LocalString` | Авторские права |
| `VendorInformationAddress` | `LocalString` | Адрес поставщика |
| `ConfigurationInformationAddress` | `LocalString` | Адрес информации |
| `InterfaceCompatibilityMode` | enum | Совместимость интерфейса |
> **Примечание:** Свойства `DefaultRunMode`, `UsePurposes`, `DefaultRoles`, `DefaultLanguage`, `InterfaceCompatibilityMode` **опциональны** — могут отсутствовать в расширении (в отличие от конфигурации, где они обязательны).
#### Свойства конфигурации, отсутствующие в расширении
В расширениях **нет** следующих свойств:
- `CompatibilityMode` (заменено на `ConfigurationExtensionCompatibilityMode`)
- `DataLockControlMode`
- `ObjectAutonumerationMode`
- `ModalityUseMode`
- `SynchronousPlatformExtensionAndAddInCallUseMode`
- `DatabaseTablespacesUseMode`
- `MainClientApplicationWindowMode`
- `UpdateCatalogAddress`
- `IncludeHelpInContents`
- `UseManagedFormInOrdinaryApplication`
- `UseOrdinaryFormInManagedApplication`
- `Content`
- `StandaloneConfigurationRestrictionRoles`
### 2.4. Порядок свойств
```xml
Adopted
ИмяРасширения
...
Patch
true
Расш1_
Version8_3_17
ManagedApplication
...
Russian
...
Language.Русский
TaxiEnableVersion8_2
```
### 2.5. ChildObjects — состав расширения
Содержит как **собственные** объекты расширения, так и **заимствованные** из основной конфигурации. Порядок типов аналогичен конфигурации.
```xml
Русский
Расш1_МояПодсистема
Расш1_МояКартинка
Расш1_ОсновнаяРоль
Расш1_МодульСервер
ОбщийМодульКонфигурации
Контрагенты
Расш1_Проекты
Расш1_ВидыДокументов
Расш1_ДатыРабот
```
В `ChildObjects` не видно различие между собственными и заимствованными — оно определяется по содержимому XML-файла объекта (свойство `ObjectBelonging` и наличие `ExtendedConfigurationObject`).
**Правило именования:** собственные объекты расширения обычно имеют `NamePrefix` в начале имени (напр. `Расш1_Справочник1`, `Расш1_Проекты`), заимствованные — имя объекта из основной конфигурации без префикса (напр. `Контрагенты`, `Валюты`).
---
## 3. ConfigDumpInfo.xml
Формат идентичен конфигурации:
```xml
```
Включает записи для **всех** объектов расширения (и собственных, и заимствованных). Атрибут `configVersion` — 40-символьный SHA1-хеш версии объекта.
---
## 4. Заимствованные и собственные объекты
Расширение может содержать два типа объектов:
### 4.1. Заимствованные объекты (Adopted)
Объекты, существующие в основной конфигурации, которые расширение модифицирует или дополняет.
**Признаки:**
- `Adopted` в Properties
- `uuid` — UUID объекта в основной конфигурации
- Минимальный набор свойств (только те, что изменяются)
```xml
...
Adopted
Валюты
7aadbb67-...
```
Заимствованные объекты **не содержат** полного набора свойств — только `ObjectBelonging`, `Name`, `Comment`, `ExtendedConfigurationObject` и те свойства, которые расширение изменяет (напр. `CodeLength`, `DefaultListForm`).
### 4.2. Собственные объекты (Own)
Объекты, созданные непосредственно в расширении.
**Признаки:**
- **Нет** элемента `ObjectBelonging`
- **Нет** элемента `ExtendedConfigurationObject`
- Полный набор свойств (как в объектах конфигурации)
- Имя обычно начинается с `NamePrefix` расширения
```xml
...
Расш5_Справочник1
false
9
```
Формат полностью совпадает с форматом объектов конфигурации (см. [1c-config-objects-spec.md](1c-config-objects-spec.md)).
---
## 5. Заимствованные дочерние элементы
Дочерние элементы заимствованных объектов (реквизиты, табличные части, значения перечислений) также маркируются как заимствованные или собственные.
### 5.1. Заимствованные реквизиты
```xml
Adopted
ОсновнаяВалюта
206abcd3-...
cfg:CatalogRef.Валюты
```
Заимствованный реквизит содержит `ObjectBelonging: Adopted` и `ExtendedConfigurationObject`. Набор свойств минимальный (Name, Comment, ExtendedConfigurationObject, Type).
### 5.2. Собственные реквизиты в заимствованном объекте
```xml
Расш5_Реквизит1
cfg:CatalogRef.Расш5_Справочник1
false
```
Собственный реквизит **не имеет** `ObjectBelonging` и `ExtendedConfigurationObject`. Содержит полный набор свойств.
### 5.3. Заимствованные значения перечислений
```xml
Adopted
НаценкаНаКурсДругойВалюты
c9ab3890-...
...
```
### 5.4. Заимствованные формы
Метаданные формы (файл `.xml` в каталоге `Forms/`):
```xml
```
Содержимое формы (расширение) хранится в `Forms/ФормаСписка/Ext/Form.xml`, модуль формы — в `Forms/ФормаСписка/Ext/Form/Module.bsl`.
---
## 6. Расширение свойств (xr:PropertyState и xr:ExtendedProperty)
Расширения могут изменять свойства заимствованных реквизитов. Для этого используются специальные XML-конструкции.
### 6.1. PropertyState — уведомление об изменении
Элемент `xr:PropertyState` в `InternalInfo` реквизита указывает, что свойство было изменено расширением.
```xml
Type
Notify
Adopted
Наценка
87429f11-...
xs:decimal
10
2
Any
```
Значения `xr:State`:
| Значение | Описание |
|----------|----------|
| `Notify` | Свойство изменено расширением, платформа выводит предупреждение |
| `MultiState` | Свойство расширено (тип отличается от основной конфигурации) |
### 6.2. ExtendedProperty — расширение типа
Когда расширение изменяет тип реквизита, используется конструкция `xr:ExtendedProperty`:
```xml
xs:string
60
Variable
```
Свойство `Type` получает атрибут `xsi:type="xr:ExtendedProperty"`, а значение оборачивается в `xr:ExtendValue`. При этом в `InternalInfo` указывается `MultiState`.
---
## 7. Модули в расширениях
### 7.1. Типы модулей
Расширения поддерживают те же типы модулей, что и конфигурация:
| Модуль | Файл | Для каких объектов |
|--------|------|--------------------|
| Модуль объекта | `Ext/ObjectModule.bsl` | Справочники, документы, обработки |
| Модуль менеджера | `Ext/ManagerModule.bsl` | Справочники, документы, регистры |
| Модуль набора записей | `Ext/RecordSetModule.bsl` | Регистры |
| Модуль формы | `Forms/Имя/Ext/Form/Module.bsl` | Формы |
| Общий модуль | `CommonModules/Имя/Ext/Module.bsl` | Общие модули |
| Модуль команды | `Commands/Имя/Ext/CommandModule.bsl` | Команды |
### 7.2. Декораторы перехвата
Модули расширений используют специальные **аннотации-декораторы** для перехвата вызовов процедур основной конфигурации:
| Декоратор | Описание |
|-----------|----------|
| `&Перед("ИмяПроцедуры")` | Выполняется **до** оригинальной процедуры |
| `&После("ИмяПроцедуры")` | Выполняется **после** оригинальной процедуры |
| `&Вместо("ИмяПроцедуры")` | **Заменяет** оригинальную процедуру |
| `&ИзменениеИКонтроль("ИмяПроцедуры")` | Копия с контролем изменений (diff-маркеры) |
#### Пример &Перед / &После
```bsl
&НаКлиенте
&Перед("ПодборИзКлассификатора")
Процедура Расш5_ПодборИзКлассификатораПеред(Команда)
// Код выполняется ДО оригинальной процедуры
КонецПроцедуры
&НаКлиенте
&После("ПодборИзКлассификатора")
Процедура Расш5_ПодборИзКлассификатораПосле(Команда)
// Код выполняется ПОСЛЕ оригинальной процедуры
КонецПроцедуры
```
#### Пример &Вместо
```bsl
&НаСервере
&Вместо("ЗаполнитьПодменюПараметрыПрописиВалюты")
Процедура Расш5_ЗаполнитьПодменюПараметрыПрописиВалюты()
// Полная замена оригинальной процедуры
// ПродолжитьВызов() — вызов оригинальной реализации
ПродолжитьВызов();
КонецПроцедуры
```
#### Пример &ИзменениеИКонтроль
```bsl
&ИзменениеИКонтроль("РеквизитыРедактируемыеВГрупповойОбработке")
Функция Расш5_РеквизитыРедактируемыеВГрупповойОбработке()
Результат = Новый Массив;
Результат.Добавить("СпособУстановкиКурса");
#Удаление
Результат.Добавить("ФормулаРасчетаКурса");
#КонецУдаления
#Вставка
Результат.Добавить("НоваяФормулаРасчетаКурса");
#КонецВставки
Возврат Результат;
КонецФункции
```
### 7.3. Diff-маркеры в коде
Внутри процедур с декоратором `&ИзменениеИКонтроль` используются diff-маркеры для отслеживания изменений:
| Маркер | Описание |
|--------|----------|
| `#Удаление` | Начало блока удалённого кода |
| `#КонецУдаления` | Конец блока удалённого кода |
| `#Вставка` | Начало блока вставленного кода |
| `#КонецВставки` | Конец блока вставленного кода |
Маркеры могут быть вложенными и чередующимися — типичный паттерн «удалить → вставить»:
```bsl
#Удаление
ИначеЕсли Выборка.Дата > Дата Тогда
#КонецУдаления
#Вставка
ИначеЕсли Выборка.Дата < Дата Тогда
#КонецВставки
```
### 7.4. Именование процедур расширения
Собственные процедуры расширения именуются с `NamePrefix`:
- `Расш5_ПрочитатьАрхивВнутр()` — при `NamePrefix = Расш5_`
- `МоёРасш_ПроверитьДату()` — при `NamePrefix = МоёРасш_`
- `Расш1_ПриОпределенииНастроек()` — при `NamePrefix = Расш1_`
---
## 8. Предопределённые элементы в расширениях
Расширения могут добавлять предопределённые элементы к заимствованным справочникам. Файл: `Каталог/Ext/Predefined.xml`.
```xml
-
НовыйЭлемент
000000001
Новый элемент
false
Native
```
### Отличие от Predefined.xml конфигурации
| Аспект | Конфигурация | Расширение |
|--------|-------------|------------|
| Пространство имён | `http://v8.1c.ru/8.3/xcf/predef` (то же) | То же |
| `ExtensionState` | Нет | `Native` — элемент создан расширением |
---
## 9. Языки (Languages/)
Язык в расширении **всегда** заимствованный:
```xml
Adopted
Русский
0663bf5b-...
ru
```
UUID в `ExtendedConfigurationObject` одинаков для всех расширений одной конфигурации — это UUID языка в основной конфигурации.
---
## 10. Роли (Roles/)
### 10.1. Собственная роль расширения (без прав)
Минимальная роль без `Ext/Rights.xml`:
```xml
Расш1_ОсновнаяРоль
```
Собственные роли расширений в изученных примерах **не имеют** каталога `Ext/` с `Rights.xml`. Права могут задаваться через конфигуратор.
### 10.2. DefaultRoles
Ссылки на роли по умолчанию в Configuration.xml:
```xml
Role.Расш1_ОсновнаяРоль
```
---
## 11. Подсистемы (Subsystems/)
### 11.1. Собственная подсистема расширения
```xml
Расш1_МояПодсистема
...
CommonPicture.Расш1_МояКартинка
false
true
Catalog.Расш1_Проекты
Catalog.Расш1_Задачи
DataProcessor.Расш1_Обработка1
```
### 11.2. Заимствованная подсистема
```xml
Adopted
Закупки
f230c0c7-...
Расш1_Документы
```
Заимствованная подсистема может содержать элементы `Content` (добавленные расширением команды/объекты) и дочерние подсистемы в `ChildObjects`.
### 11.3. CommandInterface в расширении
Командный интерфейс подсистемы в расширении: `Subsystems/Имя/Ext/CommandInterface.xml`.
```xml
Document.ЗаказНаПеремещение.StandardCommand.OpenList
false
true
...
```
---
## 12. Общие модули (CommonModules/)
### 12.1. Заимствованный общий модуль
```xml
Adopted
ZipАрхивы
b92e2bb8-...
```
Модуль расширения: `CommonModules/ZipАрхивы/Ext/Module.bsl` — содержит процедуры с декораторами перехвата.
### 12.2. Собственный общий модуль
Формат аналогичен конфигурации (без `ObjectBelonging` и `ExtendedConfigurationObject`), со всеми свойствами (Server, ExternalConnection, ClientManagedApplication и т.д.).
---
## 13. Другие типы заимствованных объектов
### 13.1. Константы
```xml
...
...
...
Adopted
ИмяКонстанты
81d26b82-...
xs:boolean
```
### 13.2. Функциональные опции
```xml
Adopted
ИмяФункциональнойОпции
d2699502-...
Constant.ИмяКонстанты
```
### 13.3. Определяемые типы
Заимствованный (минимальный):
```xml
...
Adopted
ИмяОпределяемогоТипа
```
Собственный (с полным описанием типа):
```xml
Расш1_Координата
...
xs:decimal
15
10
Any
```
### 13.4. Элементы стиля
```xml
Adopted
ИмяЭлементаСтиля
3d428bdf-...
Font
```
Тип: `Color`, `Font`, `Border`.
### 13.5. Общие картинки
```xml
Adopted
ИмяКартинки
```
Собственные картинки могут иметь каталог `Ext/` с `Picture.xml` и файлом изображения:
```
CommonPictures/Расш1_МояКартинка/
Ext/
Picture.xml # Picture.png...
Picture/
Picture.png # Файл изображения
```
### 13.6. Общие команды
```xml
Adopted
ИмяКоманды
FormCommandBarImportant
```
### 13.7. Планы обмена
```xml
c335c2b8-...
Adopted
ИмяПланаОбмена
0c01b26a-...
```
### 13.8. Планы счетов
```xml
Adopted
Хозрасчетный
3796bdf5-...
```
### 13.9. Регистры сведений
Заимствованный (минимальный):
```xml
...
Adopted
ИмяРегистра
...
Quarter
Independent
Adopted
ИмяРесурса
...
...
```
Собственный регистр — полный набор свойств, аналогично конфигурации.
---
## 14. Назначения расширений (ConfigurationExtensionPurpose)
| Значение | Русское название | Описание |
|----------|-----------------|----------|
| `Patch` | Исправление | Минимальные исправления ошибок. Наибольшие ограничения |
| `Customization` | Адаптация | Доработка под требования заказчика. Средний уровень ограничений |
| `AddOn` | Дополнение | Добавление новой функциональности. Минимальные ограничения |
Назначение влияет на то, какие модификации допускает платформа при подключении расширения.
---
## 15. Структура каталогов (сводка)
### 15.1. Собственный объект (полная структура)
```
Catalogs/Расш1_Проекты.xml # Метаданные (полные)
Catalogs/Расш1_Проекты/
Ext/
ObjectModule.bsl # Модуль объекта
ManagerModule.bsl # Модуль менеджера
Predefined.xml # Предопределённые (опц.)
Forms/
ФормаЭлемента.xml # Метаданные формы
ФормаЭлемента/
Ext/
Form.xml # Содержимое формы
Form/
Module.bsl # Модуль формы
ФормаСписка.xml
ФормаСписка/
Ext/
Form.xml
Form/
Module.bsl
Templates/
ПФ_MXL_Акт.xml # Метаданные макета
ПФ_MXL_Акт/
Ext/
Template.xml # Содержимое макета
Commands/
ИмяКоманды.xml # Метаданные команды
ИмяКоманды/
Ext/
CommandModule.bsl # Модуль команды
```
### 15.2. Заимствованный объект (минимальная структура)
```
Catalogs/Валюты.xml # Метаданные (сокращённые)
Catalogs/Валюты/
Ext/
ManagerModule.bsl # Расширение модуля менеджера
Predefined.xml # Предопред. элементы (опц.)
Forms/
ФормаСписка.xml # Метаданные (сокращённые)
ФормаСписка/
Ext/
Form.xml # Расширение формы
Form/
Module.bsl # Расширение модуля формы
```
### 15.3. Минимальное расширение (пустое)
```
Configuration.xml # Корневой файл
ConfigDumpInfo.xml # Версии объектов
Languages/
Русский.xml # Язык (заимствованный)
```
### 15.4. Типичное расширение с ролью
```
Configuration.xml
ConfigDumpInfo.xml
Languages/
Русский.xml
Roles/
Расш1_ОсновнаяРоль.xml
```
---
## 16. Отличия заимствованного объекта от обычного (сводная таблица)
| Аспект | Обычный (конфигурация) | Заимствованный (расширение) | Собственный (расширение) |
|--------|----------------------|--------------------------|------------------------|
| `ObjectBelonging` | Нет | `Adopted` | Нет |
| `ExtendedConfigurationObject` | Нет | UUID объекта конфигурации | Нет |
| Набор Properties | Полный | Минимальный + изменённые | Полный |
| InternalInfo | GeneratedType | GeneratedType + PropertyState | GeneratedType |
| Реквизиты в ChildObjects | Полные | Заимствованные + собственные | Полные |
| Модули | Полные | С декораторами перехвата | Полные |
| Формы | Полные | С расширениями (Ext/) | Полные |