Как заблокировать изменение данных в 1С:Предприятии 8.3

· 9 мин

Содержание

Чаще всего под словом «запрет» понимают одно, а настраивать нужно другое. Если задача — не дать менять документы закрытого периода, это делается за минуту в режиме 1С:Предприятие через дату запрета изменения, конфигуратор тут не нужен. Если нужно лишить пользователя права править справочники и документы совсем — это уже роли. А если закрыть одно поле в форме — программная блокировка.

Эти механизмы не взаимозаменяемы: дата запрета режет по периоду, роли — по видам объектов, RLS — по конкретным записям, программный код — по полям и условиям. Ниже — пять рабочих способов сделать запрет редактирования в 1С 8.3 и признак, по которому понятно, какой из них ваш.

Что именно нужно запретить менять?

Дата запрета изменения: закрыть период без конфигуратора

Это самый частый запрос бухгалтера: отчётность сдана, документы прошлых месяцев трогать нельзя. В типовых конфигурациях на библиотеке стандартных подсистем (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) для этого есть встроенный механизм — настраивается прямо в работающей базе.

Раздел называется одинаково, но лежит в разных местах меню:

КонфигурацияПуть к настройке
Бухгалтерия 3.0Администрирование → Настройки пользователей и прав
ЗУП 3.1Администрирование → Настройки пользователей и прав
Управление торговлей 11НСИ и администрирование → Настройки пользователей и прав

В группе «Даты запрета изменения» поставьте флажок Даты запрета изменения данных и перейдите по ссылке «Настроить».

Дату можно задать:

  • 🗓️ общую — одна для всех пользователей и всех разделов учёта;
  • 👤 по пользователям — для рядовых сотрудников период закрыт, для главбуха открыт;
  • 📂 по разделам и организациям — например, бухучёт закрыт по февраль, а кадры открыты.

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

При попытке записать или перепровести документ раньше установленной даты программа выдаст сообщение о том, что период закрыт, и записать не даст. Отчёты и чтение при этом остаются доступны — запрет касается только изменения.

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

Роли и права: запретить изменение целого вида объектов

Когда нужно, чтобы конкретная категория сотрудников в принципе не могла менять справочник или документ, работают роли. Право на объект в 1С делится на отдельные действия: Чтение, Добавление, Изменение, Удаление, Проведение, Отмена проведения. Чтобы сделать объект доступным только для просмотра, оставляют Чтение и Просмотр, а Изменение, Добавление и Удаление снимают.

Отдельно стоит пара «Изменение» и «Интерактивное изменение». Первое разрешает менять объект вообще (в том числе кодом), второе — именно руками через форму. Иногда объект нужно оставить доступным для программной обработки, но закрыть от ручной правки: тогда снимают только интерактивное право.

В типовой конфигурации роли напрямую не раздают — доступом управляют профили групп доступа:

  1. Откройте Администрирование → Настройки пользователей и прав → Профили групп доступа.
  2. Скопируйте подходящий типовой профиль (менять поставляемый нельзя — он перезапишется при обновлении).
  3. В копии на закладке «Разрешённые действия (роли)» уберите роли, дающие изменение нужного объекта.
  4. Назначьте профиль через группу доступа тем пользователям, которым он предназначен.

В самописной конфигурации или на доработке роль правят в конфигураторе: ветка Общие → Роли, нужная роль, таблица прав по объектам. Снимаете галочки Изменение и Интерактивное изменение у документа или справочника — и объект открывается только на чтение.

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

Роли удобны тем, что действуют на вид объекта целиком и не зависят от периода. Минус — грубая гранулярность: нельзя через роль закрыть «только документы после проведения» или «только чужие записи».

Ограничение на уровне записей (RLS): закрыть не вид, а конкретные записи

RLS (Record Level Security, ограничение доступа на уровне записей) решает задачу, которую роли не берут: разрешить пользователю видеть и менять свои записи и закрыть чужие. Классические примеры — менеджер работает только со своими сделками, бухгалтер — только по своей организации, кладовщик — только по своему складу.

Механизм встроен в роли: для каждого права объекта задаётся шаблон ограничения — по сути условие на языке запросов, которое платформа подставляет при каждом обращении к данным. Запись, не прошедшая условие, для пользователя невидима или недоступна на изменение.

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

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

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

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

Программная блокировка формы и реквизитов

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

Самый прямой приём — свойство формы ТолькоПросмотр. Поставили его в Истина — вся форма открывается для просмотра, ввод заблокирован:

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

Если нужно закрыть не всю форму, а отдельное поле (скажем, запретить менять склад после первой записи), блокируют конкретный элемент:

Элементы.Склад.ТолькоПросмотр = Истина;

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

Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    Если ЗаписьЗапрещенаУсловием Тогда
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры

Блокировка в форме защищает только от ввода через эту форму. Групповая обработка, загрузка из файла или другая форма объект всё равно изменят. Если запрет должен быть жёстким, дублируйте проверку в обработчике ПередЗаписью самого объекта (в модуле объекта), а не только на форме.

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

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

Расширения конфигурации вместо правки типовой

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

Через расширение запрет редактирования делают так:

  1. В конфигураторе создают расширение: Конфигурация → Расширения конфигурации.
  2. Заимствуют в него нужную форму документа или справочника.
  3. Добавляют в модуль формы обработчик (ПриОткрытии, ПередЗаписью) с той же логикой ТолькоПросмотр или Отказ.
  4. Сохраняют и загружают .cfe в рабочую базу через Конфигурация → Расширения конфигурации → Добавить, затем обновляют конфигурацию базы данных.

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

Типовая при этом остаётся на поддержке и спокойно обновляется, а запрет живёт в отдельном файле, который легко включить, выключить или перенести в другую базу. Это рекомендуемый способ, если менять поведение типовой всё же приходится.

Типичные ошибки при настройке запрета

Ошибки здесь однотипны и стоят времени на разбор «почему не сработало».

  • ❌ Дату запрета поставили, но забыли флажок. Без установленного флажка «Даты запрета изменения данных» сама дата не действует — она просто хранится как неактивная настройка.
  • ❌ Закрыли изменение ролью, а пользователю назначена вторая роль с разрешением. Права суммируются, и объект остаётся доступным. Смотрите весь набор ролей, а не одну.
  • ❌ Поставили ТолькоПросмотр на форме и считают, что объект защищён. Через групповую обработку или загрузку он всё равно изменится. Жёсткий запрет ставят в ПередЗаписью объекта.
  • ❌ Правят поставляемый профиль групп доступа или типовую конфигурацию . При следующем обновлении изменения затрутся. Копируйте профиль и используйте расширения.
  • ❌ Загрузили расширение, но не обновили конфигурацию базы. Расширение числится в списке, но не работает , пока не выполнен второй шаг.

Прежде чем проверять любой запрет на боевой базе, сделайте резервную копию. Ошибка в шаблоне RLS или в коде ПередЗаписью может незаметно закрыть доступ к данным большему кругу пользователей, чем планировалось.

Частые вопросы

Как сделать документ только для чтения после проведения?
Через программную блокировку формы: в обработчике ПриОткрытии проверить Объект.Проведен и при истине поставить ТолькоПросмотр = Истина. Чтобы запрет нельзя было обойти через другую форму — продублировать проверку в обработчике ПередЗаписью модуля объекта.
Можно ли запретить редактирование только для одного пользователя?
Да. Дату запрета можно задать персонально — по пользователям, тогда для одного сотрудника период закрыт, для остальных открыт. Для полного запрета изменения вида объектов — отдельный профиль групп доступа только для этого пользователя.
Почему запрет по дате не срабатывает?
Чаще всего не установлен флажок «Даты запрета изменения данных», либо дата задана для другого пользователя или раздела учёта. Проверьте, что настройка активна и относится именно к нужному сотруднику и разделу.
Запрет через роль перекрывается другой ролью?
Да. Права в 1С складываются по максимуму: если хотя бы одна из назначенных пользователю ролей даёт изменение, объект будет доступен для правки. Запрет в отдельной роли разрешение не отменяет.
Как закрыть изменение, не снимая конфигурацию с поддержки?
Расширением конфигурации. Оно заимствует форму и добавляет блокировку поверх типовой, не меняя её. Типовая остаётся на поддержке и обновляется штатно.