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