Разработка и Конфигурация · 11 мин
Как добавить в расширение владельца справочника в 1С
Как добавить в расширение 1С владельца справочника: заимствование объектов, настройка связи по владельцу, типичные ошибки и проверка результата в конфигураторе.
Расширение конфигурации в 1С позволяет дорабатывать типовые решения без снятия их с поддержки, и одна из частых задач — добавить справочнику владельца или изменить связь подчинённых элементов. Например, нужно, чтобы в расширении созданный справочник «СпецификацииКлиентов» был подчинён типовому справочнику «Контрагенты», или наоборот — у заимствованного справочника появился новый владелец, созданный в самом расширении.
Здесь есть важное ограничение платформы: расширение не может произвольно перестраивать структуру типовых объектов. Изменить состав владельцев у заимствованного типового справочника напрямую нельзя — платформа контролирует соответствие расширяемого объекта исходному. Зато можно создать в расширении собственный справочник и назначить ему владельцем типовой объект, а также использовать механизмы связей и критериев отбора для обхода ограничений.
Ниже разобрано, что именно можно сделать, как настроить владельца у собственного справочника расширения, какие ошибки возникают при проверке применимости расширения и как проверить результат в пользовательском режиме.
Что платформа разрешает и запрещает в расширениях
Расширение работает по принципу заимствования: вы добавляете в него типовой объект, и платформа следит, чтобы заимствованные свойства не противоречили исходной конфигурации. Свойство «Владельцы» у справочника относится к структурным характеристикам объекта, и его изменение для заимствованного справочника заблокировано — в палитре свойств поле будет недоступно для редактирования, а при попытке обойти ограничение проверка применимости выдаст ошибку.
Разрешённые сценарии выглядят так:
- создать в расширении новый справочник и назначить ему владельцем типовой заимствованный справочник;
- создать в расширении два собственных справочника и связать их отношением «владелец — подчинённый»;
- добавить типовому справочнику новые реквизиты, формы, команды — но не менять состав владельцев;
- эмулировать подчинение через реквизит типа «СправочникСсылка» и отбор в форме списка.
Подготовка: заимствование нужных объектов
Прежде чем назначать владельца, типовой справочник нужно добавить в расширение. Откройте расширение в конфигураторе, в дереве конфигурации основной базы найдите нужный справочник, вызовите контекстное меню и выберите «Добавить в расширение». Объект появится в дереве расширения со значком заимствования.
Заимствуйте только те свойства, которые действительно нужны. Чем меньше заимствованных реквизитов и форм, тем устойчивее расширение к обновлениям типовой конфигурации: при изменении объекта поставщиком проверка применимости пройдёт без конфликтов. Если владелец нужен только для отбора данных, достаточно заимствовать сам объект без его форм.
Убедитесь, что режим совместимости расширения и основной конфигурации позволяет работать со справочниками и что в расширении включена возможность добавления собственных объектов — в свойствах расширения есть признак «Добавлять собственные объекты», он должен быть установлен.
Создание собственного справочника с владельцем
Основной рабочий сценарий — новый справочник расширения, подчинённый типовому. Порядок действий:
- 1Откройте расширение, в ветке «Справочники» дерева расширения выберите «Добавить» — создайте новый справочник
- 2Задайте имя, синоним, длину кода и наименования
- 3Перейдите на закладку «Владельцы» в палитре свойств нового справочника
- 4Отметьте флажком заимствованный типовой справочник — он станет владельцем
- 5Проверьте, что у справочника появился стандартный реквизит «Владелец»
- 6Создайте форму элемента и форму списка, убедитесь, что поле «Владелец» выведено
- 7Обновите конфигурацию базы данных (F7) и проверьте применимость расширения
После назначения владельца платформа автоматически добавляет в справочник стандартный реквизит «Владелец». Элементы такого справочника нельзя создать без заполненного владельца — это контролируется на уровне платформы, дополнительный код не нужен.
Если справочник должен быть подчинён сразу нескольким объектам (например, и «Контрагентам», и «Организациям»), отметьте оба заимствованных справочника в списке владельцев. Тогда тип реквизита «Владелец» станет составным, и при создании элемента пользователь выберет владельца нужного типа.
Настройка форм и отборов по владельцу
Чтобы пользователь видел подчинённые элементы в контексте владельца, недостаточно назначить связь — нужно настроить интерфейс. Стандартный приём: в форме элемента владельца (заимствованной или новой форме расширения) добавить команду открытия списка подчинённого справочника с отбором по текущему элементу.
Для динамического списка подчинённого справочника установите свойство связи по владельцу: в параметрах списка или через событие «ПриСозданииНаСервере» формы установите отбор:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("ВладелецОтбор") Тогда
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Владелец");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Параметры.ВладелецОтбор;
КонецЕсли;
КонецПроцедуры
Более простой вариант без кода — использовать свойство формы списка «Отбор по владельцу» или передать стандартный параметр отбора при программном открытии формы через структуру параметров с ключом «Отбор».
Альтернатива: реквизит-ссылка вместо владельца
Когда собственный справочник создавать нежелательно или нужно «подчинить» один типовой объект другому, используют эмуляцию: у заимствованного справочника добавляют новый реквизит с типом «СправочникСсылка» на нужный объект. Расширения позволяют добавлять собственные реквизиты типовым объектам — это полноценная возможность, а не обходной путь.
Отличия от настоящего владельца: платформа не запрещает оставить реквизит пустым (если не настроена проверка заполнения), не создаётся автоматический отбор в формах, а в запросах вместо стандартного поля «Владелец» используется имя вашего реквизита. Для отчётов и подборов это непринципиально, но интерфейсную логику (кнопки перехода, отборы) придётся реализовать вручную.
Сравнение вариантов
Полноценная связь, автоматический контроль заполнения, стандартные отборы. Ограничение: данные хранятся в новой таблице расширения, типовые механизмы их «не видят».
Подходит, когда нужно связать два типовых объекта. Минус: нет автоматических отборов и обязательности, логику отбора пишете сами.
Даёт общий список связанных объектов разных типов, но не заменяет подчинение — только навигацию.
Проверка результата и типичные ошибки
После обновления конфигурации базы данных откройте режим предприятия и проверьте цепочку целиком: создание элемента владельца, создание подчинённого элемента с заполненным владельцем, открытие списка подчинённых из карточки владельца, работу отчёта или подбора, где используется связь.
Как проверить результат
Поле «Владелец» доступно, элемент записывается с заполненным владельцем
Поля «Владелец» нет в форме или запись выдаёт ошибку ссылки
Из карточки владельца открывается список только его подчинённых элементов
Показываются элементы всех владельцев — отбор не настроен
Расширение применяется без ошибок после обновления конфигурации
Сообщение о несоответствии заимствованного объекта — конфликт с обновлением типовой
Отдельная группа проблем — права доступа. Собственный справочник расширения требует настройки ролей: либо добавьте его в заимствованную роль, либо создайте в расширении собственную. Без прав объект не откроется у пользователей с ограниченным доступом, хотя у администратора всё будет работать.
Ограничения и границы самостоятельной работы
Расширение не заменяет доработку конфигурации в сложных случаях. Если требуется, чтобы типовые документы, отчёты и обмены работали с подчинённым справочником как со штатным (например, чтобы новый подчинённый справочник участвовал в типовом механизме печати или синхронизации), возможностей расширения может не хватить — понадобится доработка основной конфигурации или обработка данных через подписки на события.
Также учитывайте, что данные собственных объектов расширения физически хранятся в основной базе, но при отключении или удалении расширения эти данные удаляются вместе с его таблицами. Если справочник накопит значимые данные, продумайте сценарий выгрузки перед возможным отключением расширения.
Что важно запомнить
Изменить владельца у типового справочника через расширение нельзя. Рабочие варианты: собственный справочник расширения с владельцем-типовым объектом либо новый реквизит-ссылка у заимствованного объекта. После настройки проверьте отборы, права и применимость расширения, а перед реструктуризацией сделайте копию базы.
Частые вопросы
Можно ли в расширении добавить владельца типовому справочнику?
Нет. Состав владельцев — структурное свойство объекта, и платформа запрещает его изменение для заимствованных справочников. Вместо этого создайте в расширении собственный подчинённый справочник или добавьте типовому объекту реквизит-ссылку на нужный «владелец» и реализуйте отборы программно.
Почему созданный в расширении справочник не виден в режиме предприятия?
Чаще всего не выполнено обновление конфигурации базы данных (команда F7 в конфигураторе) или объект не включён ни в одну подсистему и не попал в командный интерфейс. Также проверьте роли: без назначенных прав объект недоступен пользователям без полных прав.
Что произойдёт с данными справочника, если отключить расширение?
Таблицы собственных объектов расширения удаляются вместе с ним, и все накопленные элементы справочника будут потеряны. Перед отключением выгрузите данные обработкой или через типовой механизм выгрузки, если он доступен.
Можно ли подчинить справочник сразу двум владельцам?
Да. В свойствах справочника на закладке «Владельцы» отметьте несколько объектов — реквизит «Владелец» получит составной тип. При создании элемента пользователь выберет владельца одного из разрешённых типов.
Чем реквизит-ссылка хуже настоящего владельца?
Реквизит не даёт автоматического контроля обязательности (без отдельной настройки проверки заполнения), не создаёт стандартные отборы в формах и не участвует в механизмах, рассчитанных на подчинённые справочники. Вся интерфейсная логика — кнопки перехода, отборы списков — реализуется вручную.
Расширение перестало применяться после обновления типовой конфигурации. Что делать?
Откройте проверку применимости расширения — она покажет, какой заимствованный объект конфликтует с новой версией. Обычно помогает повторное заимствование изменённого объекта или сокращение списка заимствованных свойств до минимально необходимого.