При разработке в среде «1С:Предприятие» программисты часто сталкиваются с ситуацией, когда новый реквизит, добавленный через расширение конфигурации, упорно отказывается появляться на форме в пользовательском режиме. При этом данные в базе существуют, консоль запросов их видит, а добавление обычного «реквизита формы» (не привязанного к объекту) работает корректно. Рассмотрим подробнее, почему так происходит, и разберем по шагам алгоритм решения этой проблемы.
Прежде всего, проанализируем техническую сторону вопроса. Если вы добавили реквизит в расширение к существующему объекту (например, к справочнику Номенклатура или документу РеализацияТоваровУслуг), система создает физическое поле в таблице базы данных. Именно поэтому запрос в консоли возвращает результат. Однако отображение этого поля на форме регулируется не только наличием элемента в редакторе формы, но и сложной системой прав доступа, функциональными опциями и механизмами объединения метаданных.
Выясним основную причину: чаще всего проблема кроется в правах доступа. В системе «1С» права пользователя — это совокупность всех ролей из основной конфигурации и всех активных расширений. Если хотя бы на одном уровне доступ заблокирован или не настроен, платформа предпочтет «скрыть» поле от пользователя в целях безопасности.
Разберем механизм объединения ролей. Когда мы заимствуем роль из основной конфигурации в расширение, она начинает работать по принципу дополнения или перекрытия. Если в расширении создана новая роль или заимствована старая, необходимо убедиться, что для нового реквизита установлены флажки Просмотр и Редактирование именно внутри расширения.
Рассмотрим типичную ошибку: программист добавляет реквизит в расширение, но не создает для него новую роль и не модифицирует существующую внутри этого же расширения. В итоге, даже если у пользователя в основной конфигурации есть роль ПолныеПрава, она ничего не знает о новом реквизите «из будущего» (из расширения). Система видит объект, но не видит явного разрешения на его отображение.
Что нужно сделать:
Чтение, Просмотр, Изменение и Редактирование для этого реквизита.Проанализируем влияние платформы. В версиях 8.3.12 и ниже механизмы расширений работали менее стабильно, чем в современных релизах. В этом режиме совместимости права на добавленные объекты могут игнорироваться, если в расширении не назначена «Основная роль». Выясним, установлена ли она у вас: в свойствах расширения проверьте параметр Основная роль. Если там пусто, попробуйте создать роль с полными правами внутри расширения и назначить ее основной для этого расширения.
Если ваша конфигурация построена на базе БСП (УТ 11, ERP, Бухгалтерия 3.0), то простого изменения прав в конфигураторе недостаточно. В таких системах используется справочник Идентификаторы объектов метаданных. Система кэширует структуру прав, и пока справочник не будет обновлен, новые реквизиты расширения могут игнорироваться подсистемой управления доступом.
Для решения этой задачи выполним программное обновление. Вы можете запустить этот код во внешней обработке или через консоль кода:
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанные(Истина, Ложь, Ложь);
Этот метод принудительно перечитает структуру объектов, включая ваши расширения, и зарегистрирует новые реквизиты в системе прав БСП. После этого не забудьте зайти в «Профили групп доступа» и проверить, появились ли там галочки напротив ваших новых прав.
Иногда реквизит не выводится из-за работы Функциональных опций (ФО). Если вы заимствовали форму, на которой уже настроены ФО, или если ваш новый реквизит случайно попал в состав какой-либо опции, он будет скрыт до тех пор, пока значение ФО в информационной базе не станет Истина. Проверьте свойство Состав у функциональных опций как в основной конфигурации, так и в расширении.
Рассмотрим ситуацию, когда реквизит добавлен, права есть, но на форме его все равно нет. Посмотрите на свойство реквизита Использовать всегда в редакторе формы. Установка этого флага принудительно включает реквизит в данные, передаваемые между сервером и клиентом. Это особенно важно, если видимость элемента управляется программно в коде формы.
Также проверим процедуры ПриСозданииНаСервере. Если в основной конфигурации есть код, который динамически меняет состав элементов формы или управляет видимостью групп, ваше расширение может «проигрывать» этой логике. Убедитесь, что ваши изменения вносятся в методах с аннотацией &После, чтобы они выполнялись в последнюю очередь:
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Принудительно устанавливаем видимость, если стандартные механизмы подводят
Элементы.Расш1_НовыйРеквизит.Видимость = Истина;
Элементы.Расш1_НовыйРеквизит.Доступность = Истина;
КонецПроцедуры
Если все вышеперечисленные шаги не помогли, велика вероятность технического сбоя кэша. Платформа 1С сохраняет структуру форм и прав локально на компьютере пользователя. Для исправления ситуации выполним следующие действия:
%AppData%\1C\1Cv8).Активно в списке расширений и нет ли ошибок в колонке Состояние (например, из-за конфликта имен).Проблема с отображением реквизита расширения — это почти всегда вопрос комплексной настройки прав. Проверьте заимствованные роли, обновите идентификаторы метаданных (для БСП) и убедитесь, что в конфигураторе у роли проставлены права на просмотр конкретного поля. Совместное использование этих методов гарантированно вернет «пропавший» реквизит на форму.