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

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

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

Шаг 1. Заимствование объекта и создание реквизита

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

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

Шаг 2. Заимствование формы объекта

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

  1. Найдите нужную форму в основной конфигурации (внутри объекта, который уже заимствован).
  2. Нажмите на нее правой кнопкой мыши и выберите команду «Добавить в расширение».
  3. После этого форма появится в дереве метаданных вашего расширения.

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

Шаг 3. Привязка поля на форме к данным

Когда реквизит виден в составе Объект, мы можем разместить его на форме. Выясним причину, почему иногда поле создается, но данные в нем не сохраняются. Это часто происходит из-за путаницы между «Реквизитом формы» и «Реквизитом объекта».

Если вы создадите реквизит непосредственно в списке реквизитов формы (не внутри Объект), он будет существовать только пока открыто окно. Чтобы данные записывались в базу данных, поле на форме (Элемент формы) должно быть связано с данными объекта. Проверьте свойство «Путь к данным» у элемента формы. Оно должно выглядеть как Объект.ИмяВашегоРеквизита.

Шаг 4. Почему данные не сохраняются? Настройка прав доступа

Рассмотрим ситуацию: реквизит создан, поле на форму выведено, вы вводите цифры, нажимаете «Записать и закрыть», но при повторном открытии поле пустое. Одной из главных причин, которую часто упускают, является отсутствие прав доступа.

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

  1. Создайте в расширении новую Роль.
  2. В настройках этой роли найдите ваш новый реквизит и установите галочки «Чтение», «Просмотр», «Изменение» и «Редактирование».
  3. Не забудьте дать права на «Чтение» и «Просмотр» самому справочнику внутри этой же роли расширения (в режиме «Только для заимствованных объектов»).
  4. Назначьте эту роль пользователям через профили групп доступа или программно.

Без этого платформа позволит вам видеть поле на форме, но при попытке записи просто проигнорирует данные, на которые у пользователя нет прав «Изменение».

Шаг 5. Программное управление элементами формы

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


&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Создаем группу или находим существующую на форме
    Родитель = Элементы.ГруппаШапка;
    
    // Добавляем новый элемент формы
    НовоеПоле = Элементы.Добавить("Расш1_ДополнительныйКод", Тип("ПолеФормы"), Родитель);
    НовоеПоле.Вид = ВидПоляФормы.ПолеВвода;
    
    // Указываем путь к реквизиту, который мы добавили в расширение к объекту
    НовоеПоле.ПутьКДанным = "Объект.Расш1_НовыйРеквизит";
КонецПроцедуры

Использование префиксов (например, Расш1_) в именах реквизитов и элементов — это правило хорошего тона, которое помогает избежать конфликтов при обновлении основной конфигурации.

Альтернативный подход: Использование БСП

Проанализируем еще один способ решения задачи. Если ваша конфигурация построена на базе Библиотеки стандартных подсистем (БСП), иногда выгоднее использовать механизм «Дополнительных реквизитов и сведений» вместо расширения.

Преимущества метода БСП:

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

← На главную