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