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