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

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

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

Причины отсутствия видимости реквизита расширения

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

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

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

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

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

Рекомендуемый метод: использование Дополнительных сведений

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

Разберем по шагам, как реализовать вывод дополнительного сведения на форму через расширение:

Шаг 1. Настройка в пользовательском режиме. Сначала создадим само дополнительное сведение для документа ТребованиеНакладная в разделе «Администрирование» — «Общие настройки» — «Дополнительные реквизиты и сведения».

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


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

Шаг 3. Сохранение данных. Чтобы данные сохранялись при записи документа, необходимо добавить обработчик ПослеЗаписиНаСервере или перехватить процедуру записи самого объекта:


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

Проверка кэша и корректности формы

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

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

Подводя итог, наиболее стабильным решением для современных конфигураций является использование механизма дополнительных сведений с программным выводом на форму через расширение. Это обеспечивает безопасность данных при тестировании базы и упрощает поддержку расширения при обновлениях конфигурации 1С:Бухгалтерия 3.0.

← На главную