Как в 1С:Итилиум обойти ограничение в два уровня иерархии для каталога услуг?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← К списку

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

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

Решение 1: Имитация иерархии с помощью дополнительных реквизитов

Это самый безопасный и рекомендуемый способ, поскольку он не требует изменения основной конфигурации и сохраняет ее на поддержке. Суть метода заключается в том, что мы добавляем в справочник Каталог услуг новые реквизиты, которые будут играть роль родительских групп.

Разберем по шагам:

  1. Добавляем реквизиты. В режиме Конфигуратора, желательно через расширение, добавим в справочник Каталог услуг несколько новых реквизитов. Например, назовем их Уровень1 и Уровень2. В качестве типа данных для этих реквизитов укажем ссылку на этот же справочник: СправочникСсылка.КаталогУслуг. Это позволит нам выбирать в качестве "родителей" другие элементы (группы) из этого же справочника.

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

  2. Настраиваем формы. Для удобства работы пользователей необходимо доработать форму списка и форму элемента справочника Каталог услуг. Выведем наши новые реквизиты на формы и настроим отборы. Например, в форме списка можно добавить отбор по реквизиту Уровень1, что позволит легко фильтровать услуги по группам верхнего уровня.

  3. Защита от зацикливания. При таком подходе существует риск, что пользователь случайно создаст логическую петлю, указав в качестве родителя дочерний элемент. Чтобы этого избежать, нужно добавить проверку в модуле объекта справочника, например, в обработчике ПередЗаписью.

    Посмотрим на пример простого кода для проверки:

    
    Процедура ПередЗаписью(Отказ)
    
        // Проверяем, чтобы элемент не был родителем для самого себя
        Если НЕ ЭтоГруппа И ЗначениеЗаполнено(Ссылка) Тогда
            Если Ссылка = Уровень1 ИЛИ Ссылка = Уровень2 Тогда
                Сообщить("Элемент не может быть родителем для самого себя!");
                Отказ = Истина;
                Возврат;
            КонецЕсли;
        КонецЕсли;
        
        // Здесь можно добавить более сложную рекурсивную проверку
        // для исключения вложенных циклов, если иерархия сложная.
    
    КонецПроцедуры
    
  4. Адаптируем отчеты. Стандартные отчеты не будут "знать" о нашей новой иерархии. Поэтому для корректной группировки данных потребуется создать новые варианты отчетов или доработать существующие, добавив в них группировки по нашим новым реквизитам Уровень1 и Уровень2.

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

Решение 2: Создание отдельного иерархического справочника

Этот подход более трудоемкий, но обеспечивает более "правильную" и функциональную иерархию. Мы создаем новый справочник с нужным количеством уровней, а затем связываем его с типовым каталогом услуг.

Рассмотрим подробнее:

  1. Создаем новый справочник. В конфигурации (опять же, через расширение) создадим новый справочник, например, МногоуровневыйКаталогУслуг. В его настройках укажем, что он является иерархическим, и зададим необходимую глубину иерархии, например, 4 или 5 уровней.

  2. Связываем справочники. В типовой справочник Каталог услуг добавим новый реквизит, например, ГруппаМногоуровневогоКаталога, с типом данных СправочникСсылка.МногоуровневыйКаталогУслуг. Этот реквизит будет служить связкой между конкретной услугой и ее положением в нашей новой сложной иерархии.

  3. Переносим данные. Заполняем наш новый справочник МногоуровневыйКаталогУслуг, выстраивая нужную структуру. После этого для каждого элемента в справочнике Каталог услуг проставляем ссылку на соответствующий элемент в новом справочнике. При этом в самом типовом каталоге можно оставить простую двухуровневую структуру для совместимости с системными механизмами.

  4. Дорабатываем интерфейс. Чтобы пользователям было удобно выбирать услуги, возможно, потребуется доработать формы документов (например, документ Обращение). Вместо стандартного поля выбора услуги можно добавить кнопку, открывающую форму нашего нового иерархического справочника, откуда пользователь сможет выбрать нужную услугу, а система автоматически подставит ее в документ.

Этот метод дает максимальную гибкость и сохраняет логику работы типовых объектов, но требует более серьезных навыков разработки в среде 1С.

Решение 3: Прямое изменение свойств справочника (не рекомендуется)

Существует и прямой путь — зайти в Конфигуратор и в свойствах справочника Каталог услуг увеличить максимальное количество уровней иерархии. Мы настоятельно не рекомендуем этот способ.

Выясним причину, почему этот подход опасен. Разработчики «Итилиум» заложили в логику многих объектов (отчеты, бизнес-процессы, печатные формы) зависимость от жесткой двухуровневой структуры. Простое изменение этого параметра приведет к тому, что:

Чтобы этот метод сработал, потребуется провести полный аудит конфигурации, найти все места, где используется иерархия каталога услуг, и внести туда соответствующие изменения. Это огромный объем работы, который придется повторять при каждом обновлении конфигурации. Риск нарушить работоспособность системы слишком высок.

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

← К списку