Часто при разработке в 1С мы сталкиваемся с весьма неприятной ситуацией: форма документа или обработки (например, рабочее место менеджера) добавляется в расширение, визуально все элементы присутствуют, но в режиме Предприятия платформа выдает ошибку Поле объекта не обнаружено. Колонки могут исчезать, а при попытке программно обратиться к видимостям элементов код падает в ошибку. При этом в отладчике нужного элемента может просто не быть.
Проанализируем эту ситуацию и разберем по шагам все возможные причины такого поведения, а также выясним, как вернуть форму к нормальной работе.
Одной из самых частых причин невидимости полей являются роли. Рассмотрим подробнее: как только вы добавляете в расширение хотя бы одну собственную роль, платформа включает жесткий механизм контроля доступа для объектов этого расширения. Если ранее (без ролей в расширении) доступ предоставлялся всем, то теперь добавленный на форму реквизит будет скрыт, пока вы явно не дадите на него права.
Как решить:
Рассмотрим коварство встроенного механизма обновления. После обновления типовой конфигурации мы часто нажимаем кнопку «Обновить расширение формы», чтобы подтянуть изменения. Платформа перестраивает элементы, но из-за бага во многих релизах она «забывает» пути к данным (ПутьКДанным) для добавленных нами колонок и полей.
При этом программный код, пытающийся управлять видимостью такого элемента, вызовет ошибку, так как физически поле потеряло связь со своими данными.
Как решить:
ПутьКДанным у всех добавленных элементов в конфигураторе.Выясним причину, связанную с архитектурой данных. Если вы добавляете на форму расширения реквизиты самого объекта (документа, справочника), то сами эти реквизиты тоже должны быть позаимствованы в расширение! Если заимствована только форма, платформа не увидит реквизит в контексте расширения, и путь к данным просто не сформируется.
Посмотрим на пример, когда мы программно управляем видимостью поля. Например, у нас есть процедура:
&НаСервере
Процедура УстановитьВидимостьСкладов(ФлагВидимости)
Элементы.ДокументыДляПеревозчиковСклад.Видимость = ФлагВидимости;
КонецПроцедуры
Если колонка или поле скрыто на форме по умолчанию (не выведено визуально или отключено в пользовательских настройках), платформа для оптимизации может вообще не формировать этот элемент управления на сервере. При обращении через Элементы возникнет ошибка. В расширениях эту проблему решает установка галки Использоваться всегда в свойствах нужного реквизита.
Разберем неочевидный нюанс. При добавлении новых групп или элементов разработчики часто оставляют стандартные имена: Группа2, Группа3 и так далее. Если в типовой конфигурации при обновлении появится элемент с таким же служебным именем, произойдет конфликт. Платформа начнет вести себя непредсказуемо: то отображать элементы, то скрывать их. Всегда задавайте добавленным элементам осмысленные уникальные имена.
При обновлении основной конфигурации уникальные идентификаторы метаданных могут меняться. Расширение же хранит ссылки на старые ID. Визуально код кажется правильным, но элементы пропадают. В этом случае, опять же, помогает полное удаление формы из расширения и повторное заимствование.
Если в конфигураторе и отладчике все выглядит идеально, но в режиме Предприятия без отладки элементы упорно скрыты — проанализируем кэш и настройки пользователя. Пользовательские настройки формы, сохраненные до применения расширения, могут конфликтовать с новым составом элементов.
Решение: В пользовательском режиме (Предприятие) зайдите в меню "Еще" на проблемной форме и выберите Установить стандартные настройки. Это заставит платформу заново перерисовать интерфейс с учетом расширения.
Работа с формами в расширениях требует особой внимательности. Проверьте права и заимствованные роли, убедитесь, что все необходимые реквизиты объекта перенесены в расширение вместе с формой, и избегайте использования кнопки автоматического обновления формы, если сталкиваетесь со слетающими путями к данным. Комбинация этих шагов гарантированно решит проблему с пропавшими полями.