Часто при доработке типовых конфигураций 1С возникает задача — сделать иерархическим тот справочник, который изначально таковым не является. Использование механизма расширений кажется логичным решением, чтобы не снимать конфигурацию с поддержки. Однако при попытке изменить свойство иерархии у заимствованного в расширение справочника разработчики сталкиваются с тем, что в режиме «Предприятие» ничего не меняется. Давайте вместе разберемся, почему так происходит и какие есть пути решения этой задачи.
На первый взгляд, все просто: мы заимствуем справочник в расширение, устанавливаем ему свойство «Иерархический» и ожидаем, что теперь сможем создавать группы и элементы. Но реальность оказывается сложнее. Проанализируем ситуацию по шагам, чтобы понять корень проблемы.
Родитель) и признака, является ли элемент группой (ЭтоГруппа).Более того, платформа может вводить в заблуждение, позволяя в расширении создавать предопределенные элементы-группы для такого справочника. Это известная ошибка платформы. В режиме «Предприятие» такие «группы» будут отображаться как обычные элементы, так как сам справочник не поддерживает иерархию.
Таким образом, прямой ответ на вопрос: на данный момент добавить полноценную иерархию в заимствованный неиерархический справочник с помощью механизма расширений технически невозможно из-за ограничений платформы.
Но что делать, если такая задача все же стоит? Рассмотрим обходные пути.
Этот способ не делает справочник иерархическим в стандартном понимании 1С, но позволяет имитировать древовидную структуру для пользователей. Он требует больше программирования, но сохраняет конфигурацию на поддержке. Разберем по шагам, как это реализовать.
Создаем новый реквизит. В расширении добавим в заимствованный справочник новый реквизит, например, с именем ГруппаРодитель. Тип у этого реквизита должен быть СправочникСсылка на этот же самый справочник. Этот реквизит и будет играть роль поля Родитель.
Создаем собственные формы. Поскольку стандартные формы не будут отображать нашу «псевдо-иерархию», нам нужно создать и назначить в качестве основных собственные формы списка и выбора для нашего справочника в расширении.
Программируем отображение дерева. В созданной форме списка разместим элемент управления ТаблицаФормы. У этой таблицы установим свойство Отображение в значение Дерево. Далее, в коде формы (например, в обработчике ПриСозданииНаСервере) нам нужно будет программно получить все элементы справочника и построить из них дерево, используя наш реквизит ГруппаРодитель для определения вложенности.
Преимущества этого метода:
Недостатки:
Этот подход заключается в создании полностью нового, но уже иерархического справочника в расширении, который будет служить в качестве структуры групп, и связывании его с элементами исходного справочника.
Создаем новый иерархический справочник. В нашем расширении создадим абсолютно новый справочник, назовем его, например, ГруппыНоменклатуры (если мы дорабатываем справочник Номенклатура). Установим ему свойство «Иерархический».
Связываем справочники. В исходном (заимствованном) справочнике создадим новый реквизит, например, Группа, с типом СправочникСсылка.ГруппыНоменклатуры. Этот реквизит будет указывать, к какой группе из нашего нового иерархического справочника относится данный элемент.
Дорабатываем интерфейс. Для удобной работы пользователей можно доработать форму списка исходного справочника, добавив в нее дерево групп из нового справочника, которое будет фильтровать основной список элементов.
Преимущества этого метода:
Недостатки:
Подведем итог: хотя прямое превращение неиерархического справочника в иерархический через расширение невозможно, у нас есть рабочие альтернативы. Выбор конкретного способа зависит от сложности задачи, требований к пользовательскому интерфейсу и готовности к усложнению архитектуры системы.
← К списку