К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как заблокировать поле в 1С от изменений

Как заблокировать поле в 1С от редактирования: настройка формы, свойство «Только просмотр», блокировка через код, права доступа и типовые механизмы.

Заблокировать поле в 1С — значит сделать его недоступным для редактирования: пользователь видит значение, но не может его изменить. Такая задача возникает постоянно: нужно защитить номенклатурный код от случайного изменения, запретить править дату проведённого документа, закрыть реквизиты после утверждения заявки. Способов несколько, и выбор зависит от того, кто выполняет работу — пользователь, администратор или разработчик — и на каком уровне требуется защита.

Важно различать два подхода. Первый — визуальный: поле блокируется только на форме, но остаётся доступным через другие формы, обмены и программный код. Второй — системный: запрет действует на уровне прав доступа или логики конфигурации, и обойти его через интерфейс невозможно. Для ответственных данных (цены, проводки, статусы) всегда нужен второй вариант, потому что блокировка на форме — это лишь удобство, а не защита.

Как понять, какой способ блокировки нужен

Прежде чем менять настройки, ответьте на три вопроса. Кто не должен редактировать поле — все пользователи или только часть? Запрет постоянный или включается по условию (например, после проведения документа)? Нужно защитить данные или просто упростить работу с формой? От ответов зависит инструмент.

Если поле должно быть недоступно всегда и для всех — достаточно установить «Только просмотр» на уровне метаданных. Если запрет зависит от роли пользователя — правильнее настроить права доступа. Если блокировка включается по условию — потребуется код в модуле формы или подписка на событие.

Маршрут решения

Как выбрать действие

Поле никто не должен менять никогдаУстановите «Только просмотр» в свойствах реквизита в конфигураторе
Запрет зависит от роли пользователяНастройте права доступа к реквизиту через роли
Блокировка включается по условию (проведён, утверждён)Используйте код в модуле формы или подписку на событие
Нужно закрыть редактирование старых документовИспользуйте типовую дату запрета редактирования

Блокировка поля через свойство «Только просмотр»

Самый прямой способ — установить у элемента формы или реквизита объекта свойство «Только просмотр». Поле остаётся видимым, но ввод в него недоступен: оно отображается серым цветом, курсор в него не устанавливается.

Чтобы заблокировать поле на конкретной форме, откройте конфигуратор, найдите нужный объект (документ, справочник), откройте его форму, выделите элемент и в палитре свойств установите «Только просмотр» = «Да». Если заблокировать нужно сам реквизит объекта — свойство устанавливается в свойствах реквизита, и тогда поле будет недоступно на всех формах, где используется автоматически созданный элемент.

Блокировка поля на форме
  1. 1
    Откройте конфигуратор и найдите нужный объект метаданных
  2. 2
    Откройте форму объекта и выделите нужное поле
  3. 3
    В палитре свойств установите «Только просмотр» = «Да»
  4. 4
    Обновите конфигурацию базы данных (F7)
  5. 5
    Откройте форму в режиме предприятия и убедитесь, что поле серое и не редактируется

Альтернатива — свойство «Доступность» элемента формы. Разница тонкая, но важная: «Только просмотр» блокирует именно редактирование значения, а «Доступность = Нет» отключает элемент целиком, включая кнопки выбора и открытия связанных объектов. Для полей ввода чаще используют «Только просмотр», чтобы сохранить возможность перейти к связанному объекту по кнопке открытия.

Программная блокировка поля по условию

Когда поле должно блокироваться динамически — например, после проведения документа или при определённом статусе — свойство устанавливается кодом в модуле формы. Обычно это делают в обработчике «ПриОткрытии» или «ПриЧтенииНаСервере», а также при изменении управляющего реквизита.

Типовой пример для управляемой формы: найти элемент по имени и установить свойство «ТолькоПросмотр». Условие проверяется по данным объекта — признаку проведения, значению статуса, роли текущего пользователя.

bsl
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Если Объект.Проведен Тогда
        Элементы.Комментарий.ТолькоПросмотр = Истина;
        Элементы.Ответственный.ТолькоПросмотр = Истина;
    КонецЕсли;
КонецПроцедуры

Если полей много, удобнее перебрать элементы формы циклом или сгруппировать их в группу и блокировать группу целиком — тогда не придётся перечислять каждый элемент по имени. Учтите, что код формы выполняется только при работе с этой формой: если тот же объект редактируется через другую форму, обработку или обмен данными, условие не сработает.

Блокировка через права доступа и роли

Надёжный способ ограничить редактирование для отдельных пользователей — настройка ролей. В конфигураторе у роли для каждого реквизита объекта можно снять право «Изменение», оставив «Чтение». Пользователь с такой ролью увидит значение, но не сможет его сохранить — платформа отклонит запись на уровне ядра, а не только на форме.

В типовых конфигурациях на базе БСП (Библиотека стандартных подсистем) есть механизм групп доступа и профилей: администратор может настроить ограничения без изменения конфигурации, через раздел «Администрирование — Настройки пользователей и прав». Это предпочтительный путь в типовых решениях, потому что он не требует доработки и не усложняет обновления.

Запрет редактирования проведённых и старых документов

Частая задача — закрыть от изменений документы прошлых периодов. В типовых конфигурациях для этого есть «Дата запрета редактирования данных»: администратор устанавливает дату, и документы раньше неё становятся недоступными для изменения и проведения. Настройка находится в разделе «Администрирование — Поддержка и обслуживание — Регламентные операции» или в настройках пользователей и прав, в зависимости от конфигурации.

Дополнительно в типовых решениях работает механизм «Блокировка изменения данных»: документ можно заблокировать вручную или автоматически после определённого события. Если ваша конфигурация самописная, аналог реализуется подпиской на событие «ПередЗаписью», где проверяется условие и при необходимости вызывается отказ от записи.

bsl
Процедура ПередЗаписьюДокументаПроверка(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    Если Источник.Дата < Дата('20260101') И Не РольДоступна("ПолныеПрава") Тогда
        Отказ = Истина;
        Сообщить("Редактирование документов закрытого периода запрещено.");
    КонецЕсли;
КонецПроцедуры

Проверка результата и типичные ошибки

После настройки обязательно проверьте результат под учётной записью целевого пользователя, а не под полными правами. Откройте форму, попробуйте изменить поле, сохранить объект, а также изменить тот же реквизит через альтернативные пути: групповое изменение реквизитов, копирование, обмен данными.

Контрольные точки

Как проверить результат

Поле на форме
Норма

Серое, ввод недоступен, значение видно

Тревожный признак

Поле активно, значение можно изменить

Запись объекта
Норма

При попытке обхода запрет срабатывает отказ или запрет прав

Тревожный признак

Объект сохраняется с изменённым значением

Другие формы и обработки
Норма

Запрет действует везде (при блокировке через права или подписку)

Тревожный признак

Через другую форму поле редактируется

Типичные ошибки
01
Блокировка только на одной форме — реквизит меняется через другую форму или обработку
02
Проверка под полными правами — у администратора запреты не действуют, и ошибка всплывает у пользователей
03
Установка «Доступность = Нет» вместо «Только просмотр» — пропадает кнопка открытия связанного объекта
04
Забытое обновление конфигурации базы данных — изменения в конфигураторе не видны пользователям
05
Блокировка поля, которое заполняется программно при записи — объект перестаёт сохраняться

Отдельная ловушка — поля, которые конфигурация заполняет автоматически при записи или проведении. Если такой реквизит заблокирован на форме, а код пытается его изменить, проблем не будет (код работает с данными, а не с элементом формы). Но если запрет реализован через права на реквизит, программная запись тоже может быть отклонена — тестируйте полный цикл работы документа.

Частые вопросы о блокировке полей в 1С

Можно ли заблокировать поле без доработки конфигурации?

Да, частично. В типовых конфигурациях есть дата запрета редактирования, профили групп доступа и настройки прав. Для произвольного поля на конкретной форме без доработки обычно не обойтись — нужен конфигуратор или расширение.

Чем расширение лучше изменения конфигурации?

Расширение позволяет добавить блокировку поля, не снимая конфигурацию с поддержки. Это упрощает обновления: типовые механизмы остаются нетронутыми, а ваша доработка хранится отдельно и при необходимости легко отключается.

Почему поле заблокировано, но значение всё равно меняется?

Скорее всего, блокировка установлена только на форме, а значение меняется программно — обработчиком заполнения, подпиской, обменом или другой формой. Для полной защиты используйте права на реквизит или проверку в событии «ПередЗаписью».

Как заблокировать сразу все поля документа?

Установите свойство «Только просмотр» для всей формы или для корневой группы элементов. Программно это делается через ЭтаФорма.ТолькоПросмотр = Истина — все элементы станут недоступны для редактирования одновременно.

Действует ли «Только просмотр» в мобильном клиенте и веб-клиенте?

Да, свойство «Только просмотр» — это свойство платформы, оно работает во всех клиентах: тонком, толстом, веб-клиенте и мобильном клиенте. Различаться может только визуальное отображение заблокированного поля.

Итог

Что важно запомнить

Простая блокировка делается свойством «Только просмотр» у элемента формы или реквизита, условная — кодом в модуле формы, надёжная — через права доступа и подписки на события. Всегда проверяйте результат под учётной записью целевого пользователя и помните: блокировка на форме не защищает данные от программного изменения.