From 2c96c90d450ba7652fb0a0f9cf7fd9016560ffcc Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 9 Feb 2026 21:06:01 +0300 Subject: [PATCH] Add 1C role XML format specification Complete reference: file structure, rights catalog by object type, nested object rights, RLS conditions, restriction templates. Verified across platform versions 8.3.20/8.3.24/8.3.27 and both ACC and ERP configurations. Co-Authored-By: Claude Opus 4.6 --- docs/1c-role-spec.md | 845 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 845 insertions(+) create mode 100644 docs/1c-role-spec.md diff --git a/docs/1c-role-spec.md b/docs/1c-role-spec.md new file mode 100644 index 00000000..2f32582a --- /dev/null +++ b/docs/1c-role-spec.md @@ -0,0 +1,845 @@ +# Спецификация формата ролей 1С:Предприятия 8.3 + +Полное описание XML-формата ролей в выгрузке конфигурации. Версии формата: 2.17 (платформа 8.3.20–8.3.24), 2.20 (8.3.27+). Структура идентична, отличается только атрибут `version`. + +## Файловая структура + +Каждая роль состоит из двух файлов: + +``` +Roles/ + ИмяРоли.xml ← метаданные (uuid, имя, синоним) + ИмяРоли/ + Ext/ + Rights.xml ← определение прав +``` + +## Регистрация роли в конфигурации + +При создании роли необходимо прописать ссылки в следующих местах: + +### Configuration.xml — ChildObjects + +Регистрация объекта в составе конфигурации: + +```xml + + ... + ИмяРоли + ... + +``` + +Элементы `` располагаются среди других объектов конфигурации в секции ``. + +### Configuration.xml — DefaultRoles (опционально) + +Если роль должна назначаться новым пользователям по умолчанию: + +```xml + + Role.ИмяРоли + +``` + +### Form.xml — права редактирования реквизитов (опционально) + +В формах роль может упоминаться для ограничения редактирования реквизитов: + +```xml + + + false + true + + +``` + +--- + +## Файл метаданных: Roles/ИмяРоли.xml + +```xml + + + + + ИмяРоли + + + ru + Отображаемое имя роли + + + + + + +``` + +### Элементы + +| Элемент | Обязательный | Описание | +|---------|:------------:|----------| +| `Role/@uuid` | да | UUID роли (формат `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`) | +| `Name` | да | Программное имя роли (идентификатор, латиница/кириллица) | +| `Synonym` | да | Мультиязычное отображаемое имя (один или несколько `v8:item`) | +| `Comment` | да | Комментарий (может быть пустым ``) | + +### Namespace + +Основной: `http://v8.1c.ru/8.3/MDClasses` +Мультиязычные строки: `v8` = `http://v8.1c.ru/8.1/data/core` + +--- + +## Файл прав: Roles/ИмяРоли/Ext/Rights.xml + +### Корневой элемент + +```xml + + + false + true + false + + ... + ... + + ... + ... + +``` + +### Namespace + +`http://v8.1c.ru/8.2/roles` (NB: 8.2, а не 8.3 — исторически) + +### Глобальные флаги + +| Флаг | Тип | По умолчанию | Описание | +|------|-----|:------------:|----------| +| `setForNewObjects` | boolean | false | Устанавливать права для новых объектов конфигурации | +| `setForAttributesByDefault` | boolean | true | Устанавливать права для реквизитов по умолчанию | +| `independentRightsOfChildObjects` | boolean | false | Независимые права подчинённых объектов | + +### Структура блока `` + +```xml + + ТипОбъекта.ИмяОбъекта + + ИмяПрава + true + + + ИмяПрава + true + + Текст условия RLS + + + +``` + +| Элемент | Обязательный | Описание | +|---------|:------------:|----------| +| `object/name` | да | Полное имя объекта метаданных (dot-нотация) | +| `right/name` | да | Имя права (см. таблицы ниже) | +| `right/value` | да | `true` или `false` | +| `right/restrictionByCondition` | нет | Ограничение на уровне записей (RLS) | +| `restrictionByCondition/condition` | да | Текст условия на языке шаблонов ограничений | + +### Именование объектов (dot-нотация) + +Объекты адресуются иерархически через точку: + +``` +ТипОбъекта.ИмяОбъекта[.ТипВложенного[.ИмяВложенного[...]]] +``` + +#### Верхний уровень — объекты метаданных + +``` +Catalog.Контрагенты +Document.РеализацияТоваровУслуг +InformationRegister.ЦеныНоменклатуры +DataProcessor.ЗагрузкаДанных +Report.АнализПродаж +Configuration.ИмяКонфигурации +``` + +#### Стандартные реквизиты + +``` +Catalog.Контрагенты.StandardAttribute.Code +Catalog.Контрагенты.StandardAttribute.Description +Catalog.Контрагенты.StandardAttribute.DeletionMark +Catalog.Контрагенты.StandardAttribute.Predefined +Catalog.Контрагенты.StandardAttribute.PredefinedDataName +Catalog.Контрагенты.StandardAttribute.Ref +Catalog.Контрагенты.StandardAttribute.IsFolder +Catalog.Контрагенты.StandardAttribute.Parent +Catalog.Контрагенты.StandardAttribute.Owner +Document.Реализация.StandardAttribute.Posted +Document.Реализация.StandardAttribute.Date +Document.Реализация.StandardAttribute.Number +``` + +#### Реквизиты + +``` +Catalog.Контрагенты.Attribute.ИНН +Document.Реализация.Attribute.Организация +``` + +#### Табличные части и их реквизиты + +``` +Document.Реализация.TabularSection.Товары +Document.Реализация.TabularSection.Товары.Attribute.Номенклатура +Document.Реализация.TabularSection.Товары.StandardAttribute.LineNumber +``` + +#### Измерения, ресурсы, реквизиты регистров + +``` +InformationRegister.Цены.Dimension.Номенклатура +InformationRegister.Цены.Resource.Цена +AccumulationRegister.Остатки.Attribute.ДатаОперации +AccountingRegister.Хозрасчетный.Dimension.Организация +``` + +#### Команды + +``` +Catalog.Контрагенты.Command.ОткрытьКарточку +DataProcessor.Обработка.Command.Выполнить +CommonCommand.УправлениеОборудованием +``` + +#### Реквизиты адресации (бизнес-процессы/задачи) + +``` +Task.ЗадачаИсполнителя.AddressingAttribute.Исполнитель +Task.ЗадачаИсполнителя.AddressingAttribute.ОсновнойОбъектАдресации +``` + +#### Операции веб-сервисов + +``` +WebService.Exchange.Operation.GetIBParameters +HTTPService.ЭДО.URLTemplate.Документы.Method.POST +``` + +#### Вложенные подсистемы + +``` +Subsystem.Администрирование.Subsystem.Пользователи +``` + +--- + +## Полный каталог прав по типам объектов + +### Права объектов верхнего уровня + +#### Configuration + +Права конфигурации в целом. Объект: `Configuration.ИмяКонфигурации`. + +| Право | Описание | +|-------|----------| +| `Administration` | Администрирование | +| `DataAdministration` | Администрирование данных | +| `UpdateDataBaseConfiguration` | Обновление конфигурации БД | +| `ConfigurationExtensionsAdministration` | Администрирование расширений | +| `ActiveUsers` | Активные пользователи | +| `EventLog` | Журнал регистрации | +| `ExclusiveMode` | Монопольный режим | +| `ThinClient` | Тонкий клиент | +| `ThickClient` | Толстый клиент | +| `WebClient` | Веб-клиент | +| `MobileClient` | Мобильный клиент | +| `ExternalConnection` | Внешнее соединение | +| `Automation` | Automation (COM) | +| `Output` | Вывод (печать, сохранение, копирование) | +| `SaveUserData` | Сохранение данных пользователя | +| `TechnicalSpecialistMode` | Режим технического специалиста | +| `InteractiveOpenExtDataProcessors` | Интерактивное открытие внешних обработок | +| `InteractiveOpenExtReports` | Интерактивное открытие внешних отчётов | +| `AnalyticsSystemClient` | Клиент системы аналитики | +| `CollaborationSystemInfoBaseRegistration` | Регистрация ИБ в системе взаимодействия | +| `MainWindowModeNormal` | Режим обычного окна | +| `MainWindowModeWorkplace` | Режим рабочего места | +| `MainWindowModeEmbeddedWorkplace` | Режим встроенного рабочего места | +| `MainWindowModeFullscreenWorkplace` | Режим полноэкранного рабочего места | +| `MainWindowModeKiosk` | Режим киоска | + +#### Catalog + +| Право | Описание | +|-------|----------| +| `Read` | Чтение | +| `Insert` | Добавление | +| `Update` | Изменение | +| `Delete` | Удаление | +| `View` | Просмотр | +| `Edit` | Редактирование | +| `InputByString` | Ввод по строке | +| `InteractiveInsert` | Интерактивное добавление | +| `InteractiveSetDeletionMark` | Интерактивная пометка удаления | +| `InteractiveClearDeletionMark` | Интерактивное снятие пометки удаления | +| `InteractiveDelete` | Интерактивное удаление | +| `InteractiveDeleteMarked` | Интерактивное удаление помеченных | +| `InteractiveDeletePredefinedData` | Интерактивное удаление предопределённых | +| `InteractiveSetDeletionMarkPredefinedData` | Пометка удаления предопределённых | +| `InteractiveClearDeletionMarkPredefinedData` | Снятие пометки удаления предопределённых | +| `InteractiveDeleteMarkedPredefinedData` | Удаление помеченных предопределённых | +| `ReadDataHistory` | Чтение истории данных | +| `ViewDataHistory` | Просмотр истории данных | +| `UpdateDataHistory` | Обновление истории данных | +| `UpdateDataHistoryOfMissingData` | Обновление истории отсутствующих данных | +| `ReadDataHistoryOfMissingData` | Чтение истории отсутствующих данных | +| `UpdateDataHistorySettings` | Обновление настроек истории данных | +| `UpdateDataHistoryVersionComment` | Обновление комментария версии | +| `EditDataHistoryVersionComment` | Редактирование комментария версии | +| `SwitchToDataHistoryVersion` | Переход к версии истории данных | + +#### Document + +Все права Catalog (кроме предопределённых) плюс: + +| Право | Описание | +|-------|----------| +| `Posting` | Проведение | +| `UndoPosting` | Отмена проведения | +| `InteractivePosting` | Интерактивное проведение | +| `InteractivePostingRegular` | Интерактивное проведение (неоперативное) | +| `InteractiveUndoPosting` | Интерактивная отмена проведения | +| `InteractiveChangeOfPosted` | Интерактивное изменение проведённых | + +#### InformationRegister + +| Право | Описание | +|-------|----------| +| `Read` | Чтение | +| `Update` | Изменение | +| `View` | Просмотр | +| `Edit` | Редактирование | +| `TotalsControl` | Управление итогами (для периодических) | +| `ReadDataHistory` | Чтение истории данных | +| `ViewDataHistory` | Просмотр истории данных | +| `UpdateDataHistory` | Обновление истории данных | +| `UpdateDataHistoryOfMissingData` | Обновление истории отсутствующих данных | +| `ReadDataHistoryOfMissingData` | Чтение истории отсутствующих данных | +| `UpdateDataHistorySettings` | Настройки истории данных | +| `UpdateDataHistoryVersionComment` | Обновление комментария версии | +| `EditDataHistoryVersionComment` | Редактирование комментария версии | +| `SwitchToDataHistoryVersion` | Переход к версии | + +#### AccumulationRegister + +| Право | Описание | +|-------|----------| +| `Read` | Чтение | +| `Update` | Изменение | +| `View` | Просмотр | +| `Edit` | Редактирование | +| `TotalsControl` | Управление итогами | + +#### AccountingRegister + +| Право | Описание | +|-------|----------| +| `Read` | Чтение | +| `Update` | Изменение | +| `View` | Просмотр | +| `Edit` | Редактирование | +| `TotalsControl` | Управление итогами | + +#### CalculationRegister + +| Право | Описание | +|-------|----------| +| `Read` | Чтение | +| `View` | Просмотр | + +#### Constant + +| Право | Описание | +|-------|----------| +| `Read` | Чтение | +| `Update` | Изменение | +| `View` | Просмотр | +| `Edit` | Редактирование | +| `ReadDataHistory` | Чтение истории данных | +| `ViewDataHistory` | Просмотр истории данных | +| `UpdateDataHistory` | Обновление истории данных | +| `UpdateDataHistorySettings` | Настройки истории данных | +| `UpdateDataHistoryVersionComment` | Обновление комментария версии | +| `EditDataHistoryVersionComment` | Редактирование комментария версии | +| `SwitchToDataHistoryVersion` | Переход к версии | + +#### ChartOfAccounts + +| Право | Описание | +|-------|----------| +| `Read` | Чтение | +| `Insert` | Добавление | +| `Update` | Изменение | +| `Delete` | Удаление | +| `View` | Просмотр | +| `Edit` | Редактирование | +| `InputByString` | Ввод по строке | +| `InteractiveInsert` | Интерактивное добавление | +| `InteractiveSetDeletionMark` | Пометка удаления | +| `InteractiveClearDeletionMark` | Снятие пометки удаления | +| `InteractiveDelete` | Интерактивное удаление | +| `InteractiveDeletePredefinedData` | Удаление предопределённых | +| `InteractiveSetDeletionMarkPredefinedData` | Пометка удаления предопределённых | +| `InteractiveClearDeletionMarkPredefinedData` | Снятие пометки удаления предопределённых | +| `InteractiveDeleteMarkedPredefinedData` | Удаление помеченных предопределённых | +| `ReadDataHistory` | Чтение истории данных | +| `ReadDataHistoryOfMissingData` | Чтение истории отсутствующих данных | +| `UpdateDataHistory` | Обновление истории данных | +| `UpdateDataHistoryOfMissingData` | Обновление истории отсутствующих данных | +| `UpdateDataHistorySettings` | Настройки истории данных | +| `UpdateDataHistoryVersionComment` | Обновление комментария версии | + +#### ChartOfCharacteristicTypes + +Аналогично ChartOfAccounts, плюс: + +| Право | Описание | +|-------|----------| +| `InteractiveDeleteMarked` | Интерактивное удаление помеченных | +| `EditDataHistoryVersionComment` | Редактирование комментария версии | +| `SwitchToDataHistoryVersion` | Переход к версии | +| `ViewDataHistory` | Просмотр истории данных | + +#### ChartOfCalculationTypes + +| Право | Описание | +|-------|----------| +| `Read` | Чтение | +| `Insert` | Добавление | +| `Update` | Изменение | +| `Delete` | Удаление | +| `View` | Просмотр | +| `Edit` | Редактирование | +| `InputByString` | Ввод по строке | +| `InteractiveInsert` | Интерактивное добавление | +| `InteractiveSetDeletionMark` | Пометка удаления | +| `InteractiveClearDeletionMark` | Снятие пометки удаления | +| `InteractiveDelete` | Интерактивное удаление | +| `InteractiveDeletePredefinedData` | Удаление предопределённых | +| `InteractiveSetDeletionMarkPredefinedData` | Пометка удаления предопределённых | +| `InteractiveClearDeletionMarkPredefinedData` | Снятие пометки предопределённых | +| `InteractiveDeleteMarkedPredefinedData` | Удаление помеченных предопределённых | + +#### ExchangePlan + +| Право | Описание | +|-------|----------| +| `Read` | Чтение | +| `Insert` | Добавление | +| `Update` | Изменение | +| `Delete` | Удаление | +| `View` | Просмотр | +| `Edit` | Редактирование | +| `InputByString` | Ввод по строке | +| `InteractiveInsert` | Интерактивное добавление | +| `InteractiveSetDeletionMark` | Пометка удаления | +| `InteractiveClearDeletionMark` | Снятие пометки удаления | +| `InteractiveDelete` | Интерактивное удаление | +| `InteractiveDeleteMarked` | Удаление помеченных | +| `ReadDataHistory` | Чтение истории данных | +| `ViewDataHistory` | Просмотр истории данных | +| `UpdateDataHistory` | Обновление истории данных | +| `ReadDataHistoryOfMissingData` | Чтение истории отсутствующих | +| `UpdateDataHistoryOfMissingData` | Обновление истории отсутствующих | +| `UpdateDataHistorySettings` | Настройки истории данных | +| `UpdateDataHistoryVersionComment` | Обновление комментария версии | +| `EditDataHistoryVersionComment` | Редактирование комментария версии | +| `SwitchToDataHistoryVersion` | Переход к версии | + +#### BusinessProcess + +| Право | Описание | +|-------|----------| +| `Read` | Чтение | +| `Insert` | Добавление | +| `Update` | Изменение | +| `Delete` | Удаление | +| `View` | Просмотр | +| `Edit` | Редактирование | +| `InputByString` | Ввод по строке | +| `Start` | Старт | +| `InteractiveInsert` | Интерактивное добавление | +| `InteractiveSetDeletionMark` | Пометка удаления | +| `InteractiveClearDeletionMark` | Снятие пометки удаления | +| `InteractiveDelete` | Интерактивное удаление | +| `InteractiveActivate` | Интерактивная активация | +| `InteractiveStart` | Интерактивный старт | + +#### Task + +| Право | Описание | +|-------|----------| +| `Read` | Чтение | +| `Insert` | Добавление | +| `Update` | Изменение | +| `Delete` | Удаление | +| `View` | Просмотр | +| `Edit` | Редактирование | +| `InputByString` | Ввод по строке | +| `Execute` | Выполнение | +| `InteractiveInsert` | Интерактивное добавление | +| `InteractiveSetDeletionMark` | Пометка удаления | +| `InteractiveClearDeletionMark` | Снятие пометки удаления | +| `InteractiveDelete` | Интерактивное удаление | +| `InteractiveActivate` | Интерактивная активация | +| `InteractiveExecute` | Интерактивное выполнение | + +#### Простые типы (одно-два права) + +| Тип объекта | Права | +|-------------|-------| +| `DataProcessor` | Use, View | +| `Report` | Use, View | +| `CommonForm` | View | +| `CommonCommand` | View | +| `Subsystem` | View | +| `FilterCriterion` | View | +| `DocumentJournal` | Read, View | +| `Sequence` | Read, Update | +| `WebService` | Use | +| `HTTPService` | Use | +| `IntegrationService` | Use | +| `SessionParameter` | Get, Set | +| `CommonAttribute` | View, Edit | + +#### Типы объектов БЕЗ прав в ролях + +Следующие типы не фигурируют в Rights.xml (права не применимы или управляются иначе): + +- `Enum` (перечисления) +- `FunctionalOption` +- `DefinedType` +- `CommonModule` +- `CommonPicture` +- `CommonTemplate` +- `SettingsStorage` +- `ExternalDataSource` + +--- + +### Права вложенных объектов + +Права можно задавать не только на уровне объекта, но и на уровне его составных частей. + +#### Реквизиты и стандартные реквизиты + +Доступные права: `View`, `Edit` + +```xml + + Catalog.Контрагенты.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + +``` + +Применимо к: +- `*.StandardAttribute.*` — стандартные реквизиты +- `*.Attribute.*` — реквизиты +- `*.TabularSection.*` — табличные части (целиком) +- `*.TabularSection.*.Attribute.*` — реквизиты табличных частей +- `*.TabularSection.*.StandardAttribute.*` — стандартные реквизиты табличных частей + +#### Измерения, ресурсы регистров + +Доступные права: `View`, `Edit` + +```xml + + InformationRegister.Цены.Dimension.Номенклатура + + Edit + false + + +``` + +Применимо к: +- `*Register.*.Dimension.*` +- `*Register.*.Resource.*` +- `*Register.*.Attribute.*` + +#### Команды + +Доступные права: `View` + +```xml + + Catalog.Контрагенты.Command.ОткрытьКарточку + + View + false + + +``` + +Применимо к: +- `*.Command.*` — команды любого объекта + +#### Реквизиты адресации (Task) + +Доступные права: `View`, `Edit` + +```xml + + Task.ЗадачаИсполнителя.AddressingAttribute.Исполнитель + + View + true + + +``` + +#### Полная таблица: вложенные объекты и их права + +| Тип вложенного | Родители | Права | +|----------------|----------|-------| +| `StandardAttribute` | Catalog, Document, ExchangePlan, ChartOf*, Task, BusinessProcess, *Register, DocumentJournal | View, Edit | +| `Attribute` | Catalog, Document, ExchangePlan, ChartOf*, Task, BusinessProcess, *Register, DataProcessor, Report | View, Edit | +| `TabularSection` | Catalog, Document, ExchangePlan, ChartOf*, Task, BusinessProcess, DataProcessor, Report | View, Edit | +| `TabularSection.*.Attribute` | (все с TabularSection) | View, Edit | +| `Dimension` | InformationRegister, AccumulationRegister, AccountingRegister | View, Edit | +| `Resource` | InformationRegister, AccumulationRegister, AccountingRegister | View, Edit | +| `Command` | Catalog, Document, DataProcessor, Report, *Register, DocumentJournal, ExchangePlan, BusinessProcess, Task | View | +| `AddressingAttribute` | Task | View, Edit | + +--- + +## Ограничения на уровне записей (RLS) + +### Структура + +```xml + + Read + true + + Текст условия + + +``` + +RLS добавляется внутрь `` как дочерний элемент ``. Условие содержит текст на языке шаблонов ограничений 1С. + +### Типичная структура условия + +``` +#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда +#ДляОбъекта("") +#Иначе +#ПоЗначениям("Документ.Реализация", "", "", +"Организации", "Организация", +"","", +...) +#КонецЕсли +``` + +Используются препроцессорные директивы (`#Если`, `#Тогда`, `#Иначе`, `#КонецЕсли`) и макросы шаблонов (`#ДляОбъекта`, `#ПоЗначениям`, `#ДляРегистра`, `#ПоЗначениямИНаборамРасширенный`). + +XML-кодирование: `&` → `&` в тексте условия. + +### Применимость + +RLS применяется к правам `Read`, `Update`, `Insert`, `Delete` объектов данных (Catalog, Document, Register и др.). Не применяется к интерактивным правам и правам конфигурации. + +--- + +## Шаблоны ограничений (restrictionTemplate) + +Располагаются в конце файла Rights.xml, после всех блоков ``. + +```xml + + ИмяШаблона(Параметр1, Параметр2, ...) + +// Комментарий с описанием параметров +// ... +Текст шаблона на языке запросов 1С + + +``` + +### Типичные шаблоны + +| Шаблон | Описание | +|--------|----------| +| `ДляОбъекта(Модификатор)` | Ограничение для ссылочных объектов (документы, справочники) | +| `ПоЗначениям(Таблица, -, Модификатор, В1,П1, ...)` | Ограничение по значениям видов доступа | +| `ДляРегистра(Регистр, Поле1, ..., Поле5)` | Ограничение для регистров | +| `ПоЗначениямИНаборамРасширенный(...)` | Расширенное ограничение по наборам и значениям | + +Шаблоны определяются в роли и вызываются из `` блоков RLS через макросы `#ИмяШаблона(...)`. + +--- + +## Примеры + +### Минимальная роль (без прав) + +**Roles/МояРоль.xml:** +```xml + + + + + МояРоль + + + ru + Моя роль + + + + + + +``` + +**Roles/МояРоль/Ext/Rights.xml:** +```xml + + + false + true + false + +``` + +### Роль для регламентного задания + +Типичный набор прав для фонового задания, работающего со справочниками и регистрами: + +```xml + + + false + true + false + + Catalog.Номенклатура + + Read + true + + + + Catalog.Контрагенты + + Read + true + + + + InformationRegister.ЦеныНоменклатуры + + Read + true + + + Update + true + + + + DataProcessor.ОбновлениеЦен + + Use + true + + + +``` + +### Роль с запретом редактирования полей + +```xml + + Document.РеализацияТоваровУслуг + + Read + true + + + View + true + + + + Document.РеализацияТоваровУслуг.StandardAttribute.Posted + + Edit + false + + + + Document.РеализацияТоваровУслуг.StandardAttribute.DeletionMark + + Edit + false + + +``` + +--- + +## Версии формата + +| Платформа | version (метаданные) | version (Rights.xml) | Изменения | +|-----------|:--------------------:|:--------------------:|-----------| +| 8.3.20 | 2.17 | 2.17 | Базовая | +| 8.3.24 | 2.17 | 2.17 | Без изменений | +| 8.3.27 | 2.20 | 2.20 | Только номер версии, структура идентична | + +Namespace Rights.xml (`http://v8.1c.ru/8.2/roles`) и namespace метаданных (`http://v8.1c.ru/8.3/MDClasses`) не менялись.