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