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