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