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