Как добавить дополнительные поля в форму группы видов номенклатуры в 1С

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

При работе с типовыми конфигурациями на платформе 1С:Предприятие 8.3, такими как ERP Управление предприятием, Управление торговлей 11 или Комплексная автоматизация, разработчики часто сталкиваются с необходимостью расширения функционала справочника Виды номенклатуры. Одной из специфических задач является добавление новых реквизитов не для самих видов (элементов), а для их групп (папок).

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

Понимание архитектуры справочника Виды номенклатуры

Прежде чем приступать к доработкам, проанализируем структуру объекта. В 1С справочники могут иметь иерархию двух типов: «иерархия групп и элементов» и «иерархия элементов». Справочник ВидыНоменклатуры использует первый вариант. Это означает, что в системе существуют как обычные элементы (сами виды номенклатуры), так и группы (папки), которые служат для логического объединения этих элементов.

Важно понимать: и группа, и элемент являются записями в одной и той же таблице базы данных. Различаются они системным реквизитом ЭтоГруппа (тип Булево). Если ЭтоГруппа имеет значение Истина, перед нами папка. Если Ложь — обычный элемент.

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

Шаг 1. Создание нового реквизита в Конфигураторе

Рассмотрим процесс добавления нового поля. Для начала нам нужно создать сам реквизит в метаданных справочника ВидыНоменклатуры (или в расширении конфигурации).

  1. Откроем дерево метаданных и найдем справочник ВидыНоменклатуры.
  2. Перейдем на вкладку Данные и добавим новый реквизит (например, ДополнительноеОписаниеГруппы).
  3. Самый важный момент — настройка свойства Использование (Use). В окне свойств реквизита найдем этот пункт. По умолчанию там установлено значение Для элемента.
  4. Изменим это значение на Для группы. Если вы хотите, чтобы поле было доступно везде, выберите Для элемента и группы.

Выбрав вариант Для группы, мы сообщаем платформе, что данный реквизит должен физически существовать только у записей, где ЭтоГруппа = Истина. В программном коде при обращении к этому реквизиту у обычного элемента система может вернуть ошибку или неопределенное значение, поэтому строгое разделение по использованию — хорошая практика проектирования.

Шаг 2. Размещение поля на форме

Теперь выясним, как отобразить это поле пользователю. Как мы уже определили, основной формой является ФормаЭлемента. Разберем по шагам, как добавить на нее наш реквизит:

  1. Откроем ФормаЭлемента справочника ВидыНоменклатуры.
  2. Перейдем на вкладку Элементы (левое верхнее окно редактора формы).
  3. Найдем в списке реквизитов объекта (правое окно) наш новый реквизит ДополнительноеОписаниеГруппы.
  4. Перетащим его мышкой в нужное место на форме (например, в основную группу элементов).

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

Шаг 3. Программное управление видимостью

Проанализируем ситуацию: нам нужно, чтобы поле ДополнительноеОписаниеГруппы было видно только тогда, когда пользователь открывает именно группу видов номенклатуры. Для этого воспользуемся встроенным языком 1С.

Перейдем в модуль формы и найдем процедуру ПриСозданииНаСервере. Если ее нет, создадим ее. В этой процедуре мы пропишем логику проверки типа объекта. Рассмотрим пример кода:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Проверяем, является ли текущий объект группой
    Если Объект.ЭтоГруппа Тогда
        // Если это группа, убеждаемся, что наше поле видимо
        Элементы.ДополнительноеОписаниеГруппы.Видимость = Истина;
        
        // Здесь же можно скрыть элементы, которые не нужны для группы
        // Например, настройки характеристик или серий
        Если Элементы.Найти("ГруппаНастройкиХарактеристик") <> Неопределено Тогда
            Элементы.ГруппаНастройкиХарактеристик.Видимость = Ложь;
        КонецЕсли;
    Иначе
        // Если это элемент, скрываем поле, предназначенное только для групп
        Элементы.ДополнительноеОписаниеГруппы.Видимость = Ложь;
    КонецЕсли;
    
КонецПроцедуры

Использование свойства Объект.ЭтоГруппа позволяет нам однозначно определить контекст работы формы. Обратите внимание, что при работе с расширениями конфигурации эту логику следует помещать в обработчик &После("ПриСозданииНаСервере").

Шаг 4. Настройка через механизм Изменить форму

Иногда возникают ситуации, когда реквизит добавлен в метаданные, но вы не хотите жестко прописывать его в конфигураторе, или форма строится динамически (как это часто бывает в сложных формах ERP). В этом случае пользователь (или администратор) может добавить поле в режиме 1С:Предприятие.

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

Дополнительные рекомендации

Рассмотрим еще один важный технический нюанс. В типовых решениях часто используется механизм «Сведения о техническом специалисте». Если вы не уверены, какая именно форма открывается перед вами, в режиме предприятия нажмите Сервис и настройки — Функции для технического специалиста (или аналогичный пункт в зависимости от версии платформы). Открыв нужную группу, вы сможете через меню Еще — Информация для технического специалиста точно увидеть имя формы и метаданных.

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

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

← На главную