Подчинённый справочник через расширение конфигурации: настройка, форма, права
Содержание
Чтобы добавить владельца справочника в расширении 1С, заимствуйте справочник-владелец в расширение (Добавить в расширение в контекстном меню объекта основной конфигурации), затем в свойствах подчинённого справочника расширения откройте вкладку Владельцы и добавьте туда заимствованный объект. После этого выдайте права в роли расширения и обновите конфигурацию базы данных.
Типовую конфигурацию снимать с поддержки не нужно. Новая связь «владелец — подчинённый» живёт в расширении и переживает обновления типового релиза. Шаги описаны для конфигуратора платформы 8.3: расширения появились в 8.3.6, а собственные объекты с данными и изменение заимствованных объектов добавлялись в более поздних версиях, поэтому работайте на актуальной платформе.
Что нужно подготовить до правки метаданных
Владелец справочника — это свойство подчинённого справочника, а не владельца. Например, справочник «Договоры» подчинён «Контрагентам»: список владельцев хранится в свойствах «Договоров». Отсюда два сценария:
- 🧩 Новый справочник в расширении, владелец — типовой. Например, «Расш1_ПаспортаОборудования» подчинён типовым «Основным средствам». Самый частый и надёжный вариант.
- 🔁 Типовой справочник получает ещё одного владельца. Например, к «Договорам» добавить владельцем свой справочник. Здесь нужно менять свойство заимствованного объекта, а это доступно не на любой платформе.
Перед работой проверьте три вещи:
- Версию платформы:
Справка → О программев конфигураторе. Чем она новее, тем больше свойств заимствованных объектов можно менять. - Свойства самого расширения: назначение (
АдаптацияилиДополнение), префикс имён (например,Расш1_), безопасный режим. - Есть ли у вас резервная копия. Перед обновлением конфигурации базы данных сделайте выгрузку
.dtили копию файлов базы.
Расширение с собственными справочниками хранит данные. Если потом удалить такое расширение, его таблицы удалятся вместе с записями. Поэтому заранее решите, кто отвечает за расширение и где лежит его файл .cfe.
Список подключённых расширений в пользовательском режиме виден в Администрирование → Печатные формы, отчеты и обработки → Расширения (в конфигурациях на БСП). В конфигураторе их открывают через Конфигурация → Расширения конфигурации.
Шаг 1. Заимствование справочника-владельца в расширение
Расширение не может сослаться на объект основной конфигурации, пока не заимствует его.
- Откройте
Конфигурация → Расширения конфигурациии выберите своё расширение (или создайте новое кнопкой добавления). - Откройте дерево основной конфигурации, найдите справочник, который будет владельцем.
- Правой кнопкой мыши на нём —
Добавить в расширение. - В дереве расширения справочник появится с пометкой заимствованного объекта. Реквизиты, формы и модули при этом не копируются: заимствуется только сам объект.
Если владельцем будет собственный справочник расширения, этот шаг пропустите и просто создайте справочник в ветке Справочники расширения.
Заимствуйте ровно то, что нужно. Каждый заимствованный объект привязан к структуре основной конфигурации. После обновления типового релиза расширение может перестать применяться, если заимствованный объект в типовой изменили или удалили.
Шаг 2. Настройка вкладки «Владельцы» и реквизита владельца
Новый подчинённый справочник
- В расширении создайте справочник:
Справочники → Добавить. Имя получит префикс расширения. - Откройте его свойства, вкладку
Владельцы. - Кнопкой добавления выберите в списке заимствованный справочник-владелец. В списке видны только объекты расширения, поэтому без шага 1 типового справочника там не будет.
- Задайте
Использование подчинения:
| Значение | Когда выбирать |
|---|---|
| Элементам | Подчинены только элементы, группы общие. Вариант по умолчанию |
| Группам | Владелец указывается только у групп |
| Группам и элементам | Владелец есть и у групп, и у элементов |
После этого у справочника появляется стандартный реквизит Владелец. Его тип — ссылка на справочник-владелец. Если владельцев несколько, тип становится составным.
- Откройте
Стандартные реквизиты → Владелеци проверьте свойства: синоним для формы («Оборудование», «Сотрудник»), проверку заполнения, подсказку.
Новый владелец для заимствованного справочника
- Заимствуйте подчинённый типовой справочник и, если он нужен, свой справочник-владелец.
- В свойствах заимствованного подчинённого справочника откройте вкладку
Владельцы. - Если список доступен для изменения — добавьте свой справочник. Если поле заблокировано, текущая платформа не даёт менять это свойство из расширения. Тогда переходите к альтернативам в конце статьи.
Добавив владельца типовому справочнику, вы меняете тип его стандартного реквизита Владелец на составной. Типовой код, который ожидает в Владелец только одну ссылку (например, обращается к реквизитам владельца через точку), может работать неожиданно. Найдите в модулях обращения .Владелец. и проверьте их.
Шаг 3. Форма элемента: поле владельца и выбор из списка
У нового справочника форму создайте конструктором: на вкладке Формы нажмите кнопку добавления и выберите Форма элемента справочника. Поле Владелец конструктор добавит сам.
Что стоит донастроить в форме:
- 📌 Положение поля. Владельца ставьте в шапку, первым или вторым полем: это главный признак записи.
- 🔒 Доступность при открытии из владельца. Когда пользователь создаёт элемент из формы владельца, поле заполняется автоматически. Если менять владельца после записи нельзя по бизнес-логике, сделайте поле только для просмотра для записанных элементов.
- 🧭 Переход из формы владельца. Подчинённый справочник обычно сам появляется в панели навигации формы владельца. Если вы управляете панелью вручную, заимствуйте форму владельца и добавьте команду в её командный интерфейс.
Пример защиты от смены владельца в модуле формы элемента:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не Объект.Ссылка.Пустая() Тогда
Элементы.Владелец.ТолькоПросмотр = Истина;
КонецЕсли;
КонецПроцедуры
Если в типовом документе или справочнике есть реквизит, который ссылается на подчинённый справочник, выбор нужно ограничить владельцем. Для этого у реквизита (или поля формы) заполняют свойство Связи параметров выбора: параметр Отбор.Владелец, значение — реквизит с владельцем, например Объект.Контрагент. Так пользователь видит только записи нужного владельца.
Если элементы создаются программно, владельца заполняйте до записи: Элемент.Владелец = Ссылка. Запрос к подчинённому справочнику фильтруйте условием ГДЕ Спр.Владелец = &Владелец — по этому полю платформа строит индекс, и отбор работает быстро даже на больших таблицах.
Для поиска элемента по наименованию внутри владельца в коде используйте четвёртый параметр:
Паспорт = Справочники.Расш1_ПаспортаОборудования.НайтиПоНаименованию(
"Паспорт станка", Истина, , ОсновноеСредство);
Предопределённые элементы и подчинённый справочник
С предопределёнными элементами в подчинённых справочниках есть подвох: их создаёт сама платформа при обновлении базы, и пользователь их не заводит руками. Владелец у такого элемента сам по себе не появится.
Что делать на практике:
- 🚫 В новом подчинённом справочнике расширения не создавайте предопределённые элементы без крайней нужды. Их смысл — фиксированные значения для кода, а в подчинённом справочнике значения почти всегда свои у каждого владельца.
- 🔎 Если вы добавили владельца типовому справочнику с предопределёнными элементами, после обновления базы откройте эти элементы и попробуйте записать их. Если запись не проходит из-за пустого владельца, заполните его обработчиком.
- 🧷 Обращайтесь к предопределённым значениям по имени, а не по наименованию:
ПредопределенноеЗначение("Справочник.Имя.ИмяЭлемента"). Наименование пользователь может переименовать.
Заполнение владельца у существующих элементов одним запуском (выполняйте в копии базы и только от имени администратора):
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Спр.Ссылка КАК Ссылка
|ИЗ
| Справочник.Расш1_ПаспортаОборудования КАК Спр
|ГДЕ
| Спр.Владелец = &ПустойВладелец";
Запрос.УстановитьПараметр("ПустойВладелец", Справочники.ОсновныеСредства.ПустаяСсылка());
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЭлементОбъект = Выборка.Ссылка.ПолучитьОбъект();
ЭлементОбъект.Владелец = НужныйВладелец; // ссылка, которую вы определили заранее
ЭлементОбъект.Записать();
КонецЦикла;
Массовая перезапись элементов запускает их обработчики ПередЗаписью и подписки на события. Если в базе включена регистрация изменений для обмена, все записи уйдут в обмен. Делайте это вне рабочего времени.
Шаг 4. Роли и права доступа к объектам расширения
Новый справочник расширения без прав никто, кроме полноправного администратора, не увидит. Варианты выдачи прав:
| Способ | Как сделать | Когда подходит |
|---|---|---|
| Своя роль в расширении | Общие → Роли → Добавить, отметить права на новый справочник | Нужно выдать доступ отдельной группе пользователей |
| Заимствованная типовая роль | Добавить в расширение на типовой роли, затем отметить права на объекты расширения | Доступ должны получить все, у кого уже есть эта роль |
| Только администратору | Ничего не делать, работать под полными правами | Только для отладки |
Какие права отметить для подчинённого справочника: Чтение, Добавление, Изменение, Просмотр, Интерактивное добавление, Редактирование. Право Интерактивное удаление обычно не дают — хватает пометки на удаление.
Чтобы пользователь открыл элемент, ему нужно ещё и право Чтение на владельца. Типовые роли его уже дают, но если вы ограничиваете доступ своей ролью, проверьте это отдельно.
В конфигурациях на БСП роли сами по себе пользователям не назначают. После подключения расширения откройте Администрирование → Настройки пользователей и прав → Профили групп доступа, найдите нужный профиль (или скопируйте типовой) и отметьте в нём роль расширения. Иначе роль есть, а пользователи её не получат.
Если в базе включено ограничение доступа на уровне записей, оно на новый справочник расширения не распространится автоматически. Записи будут видны всем, у кого есть роль. Когда это критично, ограничивайте видимость через владельца отдельной настройкой RLS в своей роли.
Шаг 5. Обновление базы данных и проверка результата
- Сохраните расширение и выполните
Конфигурация → Проверить конфигурациюдля него: синтаксис, ссылки на заимствованные объекты. - Обновите конфигурацию базы данных расширения (
F7в окне расширения). Если расширение меняет структуру данных, платформа покажет список изменений — прочитайте его. - Монопольный доступ здесь может понадобиться: обновление структуры данных при работающих пользователях не всегда проходит. Предупредите пользователей: их сеансы придётся завершить, если платформа попросит монопольный режим.
- Запустите базу в режиме предприятия и пройдите сценарий проверки.
Отдельно проверьте пользователя без полных прав. Ошибки ролей почти никогда не видны под администратором: под ним всё открывается, а у бухгалтера список пустой или появляется сообщение о нарушении прав доступа. Заведите тестового пользователя с тем же профилем, что у реальных сотрудников, и пройдите чек-лист под ним.
Если в списке расширений в режиме предприятия у вашего расширения висит предупреждение, а данные справочника не видны, откройте свойства расширения в конфигураторе и проверьте, не включён ли безопасный режим вместе с кодом, которому он мешает. Подробности ошибки платформа выводит при попытке применить расширение .
Когда добавить владельца не получается: альтернативы
Бывает, что вкладка Владельцы у заимствованного справочника заблокирована или менять тип стандартного реквизита Владелец в типовом объекте слишком рискованно. Тогда есть три обходных пути.
Сравнение подходов:
| Подход | Плюсы | Минусы |
|---|---|---|
| Владелец справочника | Отбор по владельцу работает сам, ссылка на владельца обязательна | Только один владелец у элемента, меняет тип реквизита Владелец |
| Свой реквизит-ссылка | Не трогает стандартные реквизиты типового объекта | Отбор и проверку заполнения настраиваете сами |
| Регистр сведений | Любые связи, история по периодам при необходимости | Нужны своя форма и запросы для показа связи |
Слетит ли настройка владельца после обновления типовой конфигурации?
Можно ли сделать владельцем документ или план видов характеристик?
Что станет с элементами, если удалить расширение?
Нужно ли снимать типовую конфигурацию с поддержки?
Почему в списке на вкладке «Владельцы» нет нужного справочника?
Добавить в расширение.