Почему не отображается дополнительный реквизит на форме в 1С:Документооборот и как это исправить

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

В конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), таких как «1С:Документооборот», «1С:ERP», «1С:Комплексная автоматизация» и «1С:Управление торговлей», механизм работы с дополнительными реквизитами и сведениями реализован динамически. Это означает, что поля не создаются в конфигураторе заранее, а генерируются программно при открытии формы элемента. Из-за этого разработчики и администраторы часто сталкиваются с ситуацией, когда добавленный реквизит упорно отказывается появляться на форме, несмотря на правильные настройки условий видимости.

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

Как БСП работает с дополнительными реквизитами «под капотом»

Прежде чем переходить к решению проблемы, давайте разберем логику работы платформы и подсистемы «Свойства» БСП:

  1. При открытии формы объекта (например, карточки проекта или документа) в серверном событии ПриСозданииНаСервере вызывается специализированный метод БСП: УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект).
  2. Система обращается к метаданным и справочнику Наборы дополнительных реквизитов и сведений, чтобы определить, какие именно реквизиты должны быть созданы для текущего объекта с учетом его вида, категории или папки.
  3. Для каждого подходящего реквизита платформа динамически создает элемент формы. Имя этого элемента формируется по шаблону: ДополнительныйРеквизитЗначение_<УИД_Набора>_<УИД_Свойства>.
  4. Вся служебная информация о созданных элементах, их связях и настройках записывается в коллекцию формы — специальную таблицу Свойства_ОписаниеДополнительныхРеквизитов.

Если на каком-то из этих этапов происходит сбой или наложение пользовательских настроек, реквизит на форме просто не появляется. Рассмотрим основные причины этой проблемы и способы их решения.

---

Причина 1. Кэширование индивидуальных настроек формы пользователем

Это самая частая и неочевидная причина, с которой сталкиваются даже опытные разработчики. Если пользователь (или разработчик в режиме Предприятия) ранее изменял состав, расположение или группировку полей на форме через стандартное меню Ещё — Изменить форму, платформа 1С жестко фиксирует этот макет для его учетной записи.

Когда в справочник добавляется новый дополнительный реквизит, система генерирует его элемент, но при попытке отобразить его поверх старого «кэшированного» макета реквизит может:

Решение:

Для восстановления видимости реквизита необходимо сбросить настройки формы к первоначальному (системному) виду:

  1. Откройте форму объекта (например, карточку Проекта), где возникла проблема.
  2. В правом верхнем углу нажмите кнопку Ещё и выберите пункт Изменить форму....
  3. В открывшемся окне настройки формы нажмите кнопку Ещё (внутри этого окна) и выберите команду Установить стандартные настройки.
  4. Нажмите ОК для применения изменений. Форма перерисуется, и динамически создаваемый реквизит появится на своем законном месте.
  5. Если реквизит создался, но оказался на другой вкладке, вы можете вручную перетащить его методом drag-and-drop на нужную страницу или в нужную группу внутри этого же окна настройки формы.

---

Причина 2. Реквизит не привязан к нужному контексту («Набору свойств»)

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

Если при выборе определенной группы продуктов реквизит «Продукт» исчезает, это означает, что система не находит данный реквизит в наборе, связанном с этой новой группой продуктов. Метод БСП просто не создает элемент на форме, и в таблице Свойства_ОписаниеДополнительныхРеквизитов запись о нем отсутствует.

Решение:

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

---

Причина 3. «Ленивая» загрузка страниц формы (Lazy Loading)

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

Элементы будут физически созданы на форме только тогда, когда пользователь непосредственно перейдет на эту вкладку (по событию ПриАктивизацииСтраницы).

Решение:

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

---

Как правильно управлять видимостью доп. реквизитов программно в расширении

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

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

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

Проанализируем пример кода для реализации в модуле формы или в расширении формы:


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

Если управление видимостью зависит от изменения других реквизитов на клиенте, обязательно нужно вызывать процедуру обновления зависимостей БСП, чтобы система пересчитала условную видимость и доступность связанных полей:


&НаКлиенте
Процедура ГруппаПродуктовПриИзмененииПосле(Элемент)
    
    // Очищаем зависимые поля, если это необходимо по бизнес-логике
    // ...
    
    // Вызываем стандартный механизм БСП для пересчета зависимостей на клиенте
    УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
    
КонецПроцедуры

Резюме

Если у вас пропал дополнительный реквизит в «1С:Документообороте»:

  1. Первым делом сделайте сброс настроек формы до стандартных через меню «Ещё — Изменить форму».
  2. Проверьте, привязан ли ваш дополнительный реквизит к конкретному Набору свойств текущей группы или категории объекта.
  3. Убедитесь, что в условиях видимости самого реквизита правильно перечислены все необходимые значения и группы.
  4. При написании кода в расширениях всегда обращайтесь к элементам динамически через коллекцию Свойства_ОписаниеДополнительныхРеквизитов.
← На главную