Как добавить новый реквизит справочника в расширение и вывести его на заимствованную форму?

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

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

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

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

  1. Откроем конфигуратор и перейдем в список расширений.
  2. Добавим справочник Номенклатура в расширение (правой кнопкой мыши по объекту в основной конфигурации — Добавить в расширение).
  3. В самом расширении развернем дерево справочника, перейдем к разделу Реквизиты и создадим новый элемент с типом Булево.

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

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

Проблема заключается в том, что редактор управляемых форм в расширении не всегда автоматически синхронизирует структуру данных заимствованного объекта. Чтобы «подтянуть» изменения, выполним следующие шаги:

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

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

Важный нюанс: обратим внимание на Назначение расширения. Если ваше расширение имеет тип Исправление (Patch), оно предназначено для оперативного исправления кода. Для добавления новых данных, которые должны храниться в базе (новые реквизиты), следует использовать тип Адаптация или Дополнение. Также проверьте Режим совместимости расширения — он не должен быть выше режима совместимости основной конфигурации, а для стабильной работы с реквизитами рекомендуется использовать версию платформы не ниже 8.3.15.

Настройка свойств заимствованных объектов

Иногда программисты сталкиваются с тем, что свойства заимствованного объекта (например, справочника или документа) в расширении кажутся заблокированными (серыми). Рассмотрим, как изменить основную форму объекта или длину номера, если поля ввода недоступны.

Посмотрим на палитру свойств заимствованного объекта. Слева от каждого свойства (например, рядом с полем Основная форма объекта) находится небольшой чек-бокс (флажок). По умолчанию он снят, что означает использование значения из основной конфигурации. Чтобы переопределить это свойство в расширении:

  1. Установим флажок слева от нужного свойства.
  2. Поле ввода станет активным.
  3. Выберем новую форму или изменим числовое значение.

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

Добавление движений документа по новому регистру

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

  1. Добавим существующий документ в расширение.
  2. Создадим в расширении новый объект — Регистр накопления или Регистр сведений.
  3. Перейдем в свойства документа в расширении, найдем вкладку Движения.
  4. Установим флажок напротив нашего нового регистра.

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

Что делать, если ничего не помогает (борьба с кэшем)

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

  1. Сохраним расширение в файл (Конфигурация — Расширения конфигурации — Сохранить расширение в файл).
  2. Удалим расширение из базы.
  3. Перезапустим конфигуратор.
  4. Загрузим расширение обратно из файла.

Такая процедура заставляет платформу полностью перестроить таблицы метаданных расширения (с префиксами _Ext) и корректно сопоставить их с основной конфигурацией. Как показывает практика, это решает 90% «необъяснимых» проблем с видимостью объектов.

Пример программного обращения к реквизиту

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


&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Обращаемся к реквизиту, созданному в расширении
    Если Объект.ПроверкаПроведена Тогда
        Элементы.ГруппаСпецИнформации.ЦветТекста = ЦветаСтиля.ПоясняющийТекст;
    КонецЕсли;
КонецПроцедуры

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

← На главную