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