К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как добавить в расширение владельца справочника в 1С

Как добавить в расширение 1С владельца справочника: заимствование объектов, настройка связи по владельцу, типичные ошибки и проверка результата в конфигураторе.

Расширение конфигурации в 1С позволяет дорабатывать типовые решения без снятия их с поддержки, и одна из частых задач — добавить справочнику владельца или изменить связь подчинённых элементов. Например, нужно, чтобы в расширении созданный справочник «СпецификацииКлиентов» был подчинён типовому справочнику «Контрагенты», или наоборот — у заимствованного справочника появился новый владелец, созданный в самом расширении.

Здесь есть важное ограничение платформы: расширение не может произвольно перестраивать структуру типовых объектов. Изменить состав владельцев у заимствованного типового справочника напрямую нельзя — платформа контролирует соответствие расширяемого объекта исходному. Зато можно создать в расширении собственный справочник и назначить ему владельцем типовой объект, а также использовать механизмы связей и критериев отбора для обхода ограничений.

Ниже разобрано, что именно можно сделать, как настроить владельца у собственного справочника расширения, какие ошибки возникают при проверке применимости расширения и как проверить результат в пользовательском режиме.

Что платформа разрешает и запрещает в расширениях

Расширение работает по принципу заимствования: вы добавляете в него типовой объект, и платформа следит, чтобы заимствованные свойства не противоречили исходной конфигурации. Свойство «Владельцы» у справочника относится к структурным характеристикам объекта, и его изменение для заимствованного справочника заблокировано — в палитре свойств поле будет недоступно для редактирования, а при попытке обойти ограничение проверка применимости выдаст ошибку.

Разрешённые сценарии выглядят так:

  • создать в расширении новый справочник и назначить ему владельцем типовой заимствованный справочник;
  • создать в расширении два собственных справочника и связать их отношением «владелец — подчинённый»;
  • добавить типовому справочнику новые реквизиты, формы, команды — но не менять состав владельцев;
  • эмулировать подчинение через реквизит типа «СправочникСсылка» и отбор в форме списка.

Подготовка: заимствование нужных объектов

Прежде чем назначать владельца, типовой справочник нужно добавить в расширение. Откройте расширение в конфигураторе, в дереве конфигурации основной базы найдите нужный справочник, вызовите контекстное меню и выберите «Добавить в расширение». Объект появится в дереве расширения со значком заимствования.

Заимствуйте только те свойства, которые действительно нужны. Чем меньше заимствованных реквизитов и форм, тем устойчивее расширение к обновлениям типовой конфигурации: при изменении объекта поставщиком проверка применимости пройдёт без конфликтов. Если владелец нужен только для отбора данных, достаточно заимствовать сам объект без его форм.

Убедитесь, что режим совместимости расширения и основной конфигурации позволяет работать со справочниками и что в расширении включена возможность добавления собственных объектов — в свойствах расширения есть признак «Добавлять собственные объекты», он должен быть установлен.

Создание собственного справочника с владельцем

Основной рабочий сценарий — новый справочник расширения, подчинённый типовому. Порядок действий:

Порядок действий
  1. 1
    Откройте расширение, в ветке «Справочники» дерева расширения выберите «Добавить» — создайте новый справочник
  2. 2
    Задайте имя, синоним, длину кода и наименования
  3. 3
    Перейдите на закладку «Владельцы» в палитре свойств нового справочника
  4. 4
    Отметьте флажком заимствованный типовой справочник — он станет владельцем
  5. 5
    Проверьте, что у справочника появился стандартный реквизит «Владелец»
  6. 6
    Создайте форму элемента и форму списка, убедитесь, что поле «Владелец» выведено
  7. 7
    Обновите конфигурацию базы данных (F7) и проверьте применимость расширения

После назначения владельца платформа автоматически добавляет в справочник стандартный реквизит «Владелец». Элементы такого справочника нельзя создать без заполненного владельца — это контролируется на уровне платформы, дополнительный код не нужен.

Если справочник должен быть подчинён сразу нескольким объектам (например, и «Контрагентам», и «Организациям»), отметьте оба заимствованных справочника в списке владельцев. Тогда тип реквизита «Владелец» станет составным, и при создании элемента пользователь выберет владельца нужного типа.

Настройка форм и отборов по владельцу

Чтобы пользователь видел подчинённые элементы в контексте владельца, недостаточно назначить связь — нужно настроить интерфейс. Стандартный приём: в форме элемента владельца (заимствованной или новой форме расширения) добавить команду открытия списка подчинённого справочника с отбором по текущему элементу.

Для динамического списка подчинённого справочника установите свойство связи по владельцу: в параметрах списка или через событие «ПриСозданииНаСервере» формы установите отбор:

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Параметры.Свойство("ВладелецОтбор") Тогда

ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Владелец");

ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

ЭлементОтбора.ПравоеЗначение = Параметры.ВладелецОтбор;

КонецЕсли;

КонецПроцедуры

Более простой вариант без кода — использовать свойство формы списка «Отбор по владельцу» или передать стандартный параметр отбора при программном открытии формы через структуру параметров с ключом «Отбор».

Альтернатива: реквизит-ссылка вместо владельца

Когда собственный справочник создавать нежелательно или нужно «подчинить» один типовой объект другому, используют эмуляцию: у заимствованного справочника добавляют новый реквизит с типом «СправочникСсылка» на нужный объект. Расширения позволяют добавлять собственные реквизиты типовым объектам — это полноценная возможность, а не обходной путь.

Отличия от настоящего владельца: платформа не запрещает оставить реквизит пустым (если не настроена проверка заполнения), не создаётся автоматический отбор в формах, а в запросах вместо стандартного поля «Владелец» используется имя вашего реквизита. Для отчётов и подборов это непринципиально, но интерфейсную логику (кнопки перехода, отборы) придётся реализовать вручную.

Сравнение вариантов

Собственный справочник с владельцем

Полноценная связь, автоматический контроль заполнения, стандартные отборы. Ограничение: данные хранятся в новой таблице расширения, типовые механизмы их «не видят».

Новый реквизит-ссылка у типового объекта

Подходит, когда нужно связать два типовых объекта. Минус: нет автоматических отборов и обязательности, логику отбора пишете сами.

Критерий отбора

Даёт общий список связанных объектов разных типов, но не заменяет подчинение — только навигацию.

Проверка результата и типичные ошибки

После обновления конфигурации базы данных откройте режим предприятия и проверьте цепочку целиком: создание элемента владельца, создание подчинённого элемента с заполненным владельцем, открытие списка подчинённых из карточки владельца, работу отчёта или подбора, где используется связь.

Контрольные точки

Как проверить результат

Создание подчинённого элемента
Норма

Поле «Владелец» доступно, элемент записывается с заполненным владельцем

Тревожный признак

Поля «Владелец» нет в форме или запись выдаёт ошибку ссылки

Отбор в списке
Норма

Из карточки владельца открывается список только его подчинённых элементов

Тревожный признак

Показываются элементы всех владельцев — отбор не настроен

Проверка применимости расширения
Норма

Расширение применяется без ошибок после обновления конфигурации

Тревожный признак

Сообщение о несоответствии заимствованного объекта — конфликт с обновлением типовой

Типичные ошибки
01
Попытка изменить состав владельцев у заимствованного типового справочника — свойство недоступно, а обход приводит к ошибке применимости; решение — собственный справочник или реквизит-ссылка
02
Заимствование в расширение лишних реквизитов и форм — после обновления типовой конфигурации расширение перестаёт применяться из-за конфликтов
03
Забыли обновить конфигурацию базы данных (F7) — новый справочник виден в конфигураторе, но отсутствует в режиме предприятия
04
Не настроен отбор по владельцу в форме списка — пользователи видят все элементы и создают дубли
05
Собственный справочник расширения не включён ни в одну подсистему — объект есть в базе, но недоступен в интерфейсе пользователя

Отдельная группа проблем — права доступа. Собственный справочник расширения требует настройки ролей: либо добавьте его в заимствованную роль, либо создайте в расширении собственную. Без прав объект не откроется у пользователей с ограниченным доступом, хотя у администратора всё будет работать.

Ограничения и границы самостоятельной работы

Расширение не заменяет доработку конфигурации в сложных случаях. Если требуется, чтобы типовые документы, отчёты и обмены работали с подчинённым справочником как со штатным (например, чтобы новый подчинённый справочник участвовал в типовом механизме печати или синхронизации), возможностей расширения может не хватить — понадобится доработка основной конфигурации или обработка данных через подписки на события.

Также учитывайте, что данные собственных объектов расширения физически хранятся в основной базе, но при отключении или удалении расширения эти данные удаляются вместе с его таблицами. Если справочник накопит значимые данные, продумайте сценарий выгрузки перед возможным отключением расширения.

Итог

Что важно запомнить

Изменить владельца у типового справочника через расширение нельзя. Рабочие варианты: собственный справочник расширения с владельцем-типовым объектом либо новый реквизит-ссылка у заимствованного объекта. После настройки проверьте отборы, права и применимость расширения, а перед реструктуризацией сделайте копию базы.

Частые вопросы

Можно ли в расширении добавить владельца типовому справочнику?

Нет. Состав владельцев — структурное свойство объекта, и платформа запрещает его изменение для заимствованных справочников. Вместо этого создайте в расширении собственный подчинённый справочник или добавьте типовому объекту реквизит-ссылку на нужный «владелец» и реализуйте отборы программно.

Почему созданный в расширении справочник не виден в режиме предприятия?

Чаще всего не выполнено обновление конфигурации базы данных (команда F7 в конфигураторе) или объект не включён ни в одну подсистему и не попал в командный интерфейс. Также проверьте роли: без назначенных прав объект недоступен пользователям без полных прав.

Что произойдёт с данными справочника, если отключить расширение?

Таблицы собственных объектов расширения удаляются вместе с ним, и все накопленные элементы справочника будут потеряны. Перед отключением выгрузите данные обработкой или через типовой механизм выгрузки, если он доступен.

Можно ли подчинить справочник сразу двум владельцам?

Да. В свойствах справочника на закладке «Владельцы» отметьте несколько объектов — реквизит «Владелец» получит составной тип. При создании элемента пользователь выберет владельца одного из разрешённых типов.

Чем реквизит-ссылка хуже настоящего владельца?

Реквизит не даёт автоматического контроля обязательности (без отдельной настройки проверки заполнения), не создаёт стандартные отборы в формах и не участвует в механизмах, рассчитанных на подчинённые справочники. Вся интерфейсная логика — кнопки перехода, отборы списков — реализуется вручную.

Расширение перестало применяться после обновления типовой конфигурации. Что делать?

Откройте проверку применимости расширения — она покажет, какой заимствованный объект конфликтует с новой версией. Обычно помогает повторное заимствование изменённого объекта или сокращение списка заимствованных свойств до минимально необходимого.