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

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

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

Вариант 1. Использование механизма дополнительных реквизитов (БСП)

Если вы работаете с типовой конфигурацией (например, ERP, УТ 11, БП 3.0 или ЗУП 3), первым делом стоит рассмотреть использование штатной подсистемы «Свойства» из библиотеки стандартных подсистем (БСП). Это позволяет добавить реквизит без изменения метаданных в конфигураторе.

Преимущества:

  1. Конфигурация остается на полной поддержке.
  2. Реквизит автоматически появляется в формах списка и выбора (в разделе «Дополнительные поля»).
  3. Пользователь может самостоятельно управлять видимостью и расположением поля через меню «Еще — Изменить форму».

Чтобы программно работать с такими реквизитами, нам нужно использовать методы БСП. Рассмотрим пример получения значения дополнительного реквизита:


// Получаем значение дополнительного реквизита по его имени (заголовку)
ЗначениеСвойства = УправлениеСвойствами.ЗначениеСвойства(СсылкаНаОбъект, "НомерРР");

Если ЗначениеЗаполнено(ЗначениеСвойства) Тогда
    // Ваша логика обработки
КонецЕсли;

Для программной записи значения в дополнительный реквизит используйте следующую конструкцию:


НаборСвойств = Новый ТаблицаЗначений;
НаборСвойств.Колонки.Добавить("Свойство");
НаборСвойств.Колонки.Добавить("Значение");

НоваяСтрока = НаборСвойств.Добавить();
НоваяСтрока.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("НомерРР");
НоваяСтрока.Значение = "НовоеЗначение";

УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(СсылкаНаОбъект, НаборСвойств);

Вариант 2. Добавление реквизита через расширение конфигурации

Это наиболее современный способ кастомизации. Мы не снимаем объект с поддержки, а создаем его «отражение» в расширении. Однако здесь есть критически важные нюансы, которые мы обязаны учитывать.

Важные особенности работы с расширениями:

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


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

Вариант 3. Изменение основной конфигурации

Классический метод — снятие объекта с поддержки (с сохранением возможности изменений). Рассмотрим ситуацию, когда этот метод предпочтителен:

  1. Если по данному реквизиту планируется интенсивный поиск, индексация или он будет участвовать в сложных связях запросов.
  2. Если надежность хранения данных является приоритетом (данные основной конфигурации сложнее «потерять» случайно).

Проанализируем ситуацию с автоматическим заполнением (инкрементированием). Если НомерРР должен «наращиваться», как порядковый номер, лучше всего реализовать это в модуле объекта в процедуре ПередЗаписью или через подписку на событие ПриУстановкеНовогоНомера (если реквизит используется как альтернативный индекс).

Сравнение методов: что выбрать?

Давайте подведем итог и выясним, какой путь оптимален для вашей задачи:

1. Нужно быстро добавить поле «для галочки» без программирования?
Используйте Дополнительные реквизиты. Это безопасно, не требует изменения кода и легко настраивается в режиме «1С:Предприятие».

2. Нужно добавить реквизит и логику его обработки, сохранив типовую конфигурацию?
Используйте Расширение. Но помните о дисциплине обслуживания: никогда не удаляйте расширение, если в нем хранятся боевые данные.

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

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

← На главную