Защита документов и справочников 1С 8.3 от изменений

· 9 мин

Содержание

Запретить редактирование в 1С 8.3 проще всего двумя штатными средствами: правами пользователя (Администрирование → Настройки пользователей и прав → Профили групп доступа) и датой запрета изменения в том же разделе. Первое закрывает объект целиком, второе — закрывает прошлые периоды. Код и доработка формы нужны, только когда штатных настроек не хватает.

Частое заблуждение — что «блокировка» в 1С означает запрет на правку. Механизм блокировки данных защищает от одновременной записи двумя пользователями, а не от изменения как такового. Ниже — все способы по порядку: от настроек без программиста до проверок в коде.

С чего начать: какой способ подходит вашей задаче

Сначала сформулируйте, что именно нужно запретить. От этого зависит инструмент.

ЗадачаЧем решаетсяНужен программист
Кладовщик не должен менять цены в номенклатуреПрофиль группы доступа без права изменения справочникаНет
Никто не правит документы закрытого кварталаДата запрета измененияНет
Менеджер видит только свою организациюОграничение доступа на уровне записейНет
Проведённый документ нельзя менять без роли «старшего»Проверка в модуле объектаДа
Одно поле формы недоступно, остальные можно правитьСвойство элемента формыДа
Два человека не должны записать документ одновременноБлокировка данныхДа (обычно уже есть в типовой)
Что нужно запретить?

Как запретить редактирование через роли и профили доступа

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

Где находятся настройки

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

Если ссылок «Группы доступа» и «Профили групп доступа» не видно, включите в этом же разделе флажок группировки пользователей по группам доступа.

Порядок настройки

  1. Откройте Профили групп доступа.
  2. Найдите профиль, который сейчас у сотрудника, и скопируйте его. Поставляемый профиль не правьте — при обновлении конфигурации он вернётся к исходному составу.
  3. В копии на вкладке ролей снимите флажки с ролей, которые дают добавление и изменение нужных объектов. Роли на чтение оставьте.
  4. Создайте группу доступа с новым профилем и включите в неё сотрудника.
  5. Уберите сотрудника из старой группы — иначе права сложатся.
  6. Попросите пользователя перезайти в программу.

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

Какие права есть у объекта

Если вы правите роль в конфигураторе или расширении, вот основные права документа:

  • 📖 Чтение — открыть и посмотреть;
  • ✏️ Изменение — записать изменения существующего объекта;
  • ➕ Добавление — создать новый;
  • 🗑 Интерактивная пометка удаления и Интерактивное удаление;
  • ✅ Проведение и Отмена проведения, плюс их интерактивные варианты.

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

Ограничение по организациям и складам

Когда нужно, чтобы сотрудник правил документы только своей организации, используйте ограничение доступа на уровне записей (RLS). Флажок включается в разделе настроек пользователей и прав. После этого в группе доступа появятся вкладки с видами доступа — там выбирают разрешённые организации.

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

Как закрыть период: даты запрета изменения

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

Как включить

  1. Откройте Администрирование → Настройки пользователей и прав (в УТ 11 — через НСИ и администрирование).
  2. Установите флажок Даты запрета изменения.
  3. Перейдите по ссылке настройки дат.
  4. Выберите способ указания: одна дата для всех, по разделам или по разделам и объектам (например, по организациям).
  5. Укажите дату и сохраните.

Фиксированная или относительная дата

Дату можно задать конкретным числом или относительной: конец прошлого месяца, квартала, года. Относительная дата сдвигается сама. Если выбрать «конец прошлого месяца», то 5 ноября будет закрыт октябрь, а 2 декабря — ноябрь.

Для относительной даты есть настройка с отсрочкой — сколько дней после начала нового периода прошлый ещё открыт. Это удобно, когда первичка приходит с опозданием: например, отсрочка 10 дней даст бухгалтеру время до 10-го числа.

Для всех или для отдельных пользователей

В настройке можно задать общую дату для всех и отдельную — для конкретного сотрудника или группы. Типичная схема:

  • 👥 для всех пользователей — конец прошлого квартала;
  • 👤 для главного бухгалтера — отдельная, более ранняя дата, чтобы он мог вносить корректировки;
  • 🔁 для обменов — даты запрета загрузки, это отдельная настройка рядом.

Даты запрета загрузки защищают закрытый период от данных, которые прилетают из другой базы по обмену. Без них УТ может переписать реализацию в закрытом месяце Бухгалтерии.

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

Типовая Бухгалтерия не запрещает менять проведённый документ: его можно открыть, исправить и перепровести. Многие ждут, что проведение «замораживает» документ, но так не работает.

Варианты решения:

  1. Дата запрета изменения — если проблема в старых документах. Подходит в большинстве случаев.
  2. Статус документа — в конфигурациях, где у документа есть статус (например, у заказов в УТ 11), часть реквизитов на определённых статусах становится недоступной. Набор зависит от документа и релиза.
  3. Своя проверка в коде — если нужно правило «проведённый документ меняет только старший бухгалтер». Это доработка, о ней в следующем разделе.

Совет «отмените проведение, исправьте и проведите заново» в закрытом периоде меняет движения по регистрам. Пересчитайте себестоимость и проверьте отчётность, если документ попадал в сданный период.

Проверка прав в модуле объекта

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

Пример: проведённый документ меняет только пользователь с ролью

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;

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

КонецПроцедуры

Что здесь важно:

  • 🔄 ОбменДанными.Загрузка — при загрузке по обмену проверку пропускаем, иначе встанет синхронизация;
  • 🔍 Ссылка.Проведен читает состояние из базы, а не из изменённого объекта: так мы проверяем, был ли документ проведён до правки;
  • 🔑 РольДоступна() проверяет роль текущего пользователя. Вместо ПолныеПрава подставьте свою роль.

Для проверки права на конкретный объект есть функция ПравоДоступа:

Если Не ПравоДоступа("Изменение", Метаданные.Справочники.Номенклатура) Тогда
	Отказ = Истина;
КонецЕсли;

Почему лучше через расширение

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

Порядок такой: Конфигурация → Расширения конфигурации в конфигураторе, создать расширение, заимствовать документ, в модуле объекта добавить обработчик с аннотацией &Перед("ПередЗаписью"). После загрузки обязательно обновите конфигурацию базы данных.

Как сделать форму или отдельные поля только для просмотра

Иногда документ менять можно, но не все реквизиты. Например, менеджер заполняет товары, а цену меняет только руководитель.

Вся форма только для чтения

В модуле формы, в обработчике ПриСозданииНаСервере:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Если Не РольДоступна("ИзменениеЦен") Тогда
		ТолькоПросмотр = Истина;
	КонецЕсли;
КонецПроцедуры

ИзменениеЦен здесь — пример имени вашей роли.

Отдельное поле

Элементы.Цена.ТолькоПросмотр = Не РольДоступна("ИзменениеЦен");

Разница между свойствами:

СвойствоКак выглядитМожно выделить и скопировать
ТолькоПросмотр = ИстинаПоле обычное, ввод запрещёнДа
Доступность = ЛожьПоле сероеНет
Видимость = ЛожьПоля нет на форме—

Запрет в форме — это не защита данных. Он закрывает только интерактивный ввод в этой форме. Тот же реквизит можно изменить групповой обработкой, загрузкой или из другой формы. Если правило важно, дублируйте его проверкой в модуле объекта.

Платформа сама делает поле только для просмотра, если у пользователя нет права на изменение объекта. Поэтому сначала настройте роли, а форму дорабатывайте точечно.

Блокировки данных: что это и чем не являются

Под словом «блокировка» в 1С скрываются три разных механизма. Путают их постоянно.

Объектная блокировка при редактировании

Когда пользователь открыл документ и начал правку, платформа ставит пессимистическую блокировку объекта. Второй пользователь при попытке изменить тот же документ увидит сообщение, что объект заблокирован. В коде такую блокировку ставят вызовом ЗаблокироватьДанныеДляРедактирования() и снимают РазблокироватьДанныеДляРедактирования().

Блокировка живёт, пока открыта форма или сеанс. Это не запрет — это очередь.

Транзакционная блокировка

Объект БлокировкаДанных защищает данные внутри транзакции, например остатки при проведении:

Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ТоварыНаСкладах");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();

Нужна, чтобы два документа не списали один и тот же остаток. Для запрета редактирования её не используют. Имя регистра в примере условное.

Блокировка работы пользователей

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

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

Частые ошибки при настройке запретов

  • ❌ Роли выданы в конфигураторе напрямую. В типовых конфигурациях на БСП роли пересчитываются по группам доступа. Роль, добавленная вручную в списке пользователей конфигуратора, исчезнет при ближайшей перезаписи групп.
  • ❌ Дата запрета поставлена, но не для всех. Если общей даты нет, а задана только для одного сотрудника, остальные правят период свободно.
  • ❌ Запрет только в форме. Пользователь меняет реквизит через групповую обработку — правило обойдено.
  • ❌ Проверка в модуле без учёта обмена. Без условия на ОбменДанными.Загрузка встанет синхронизация с другой базой.
Почему пользователь всё ещё может менять документ после смены прав?
Роли применяются при входе. Пусть сотрудник закроет программу и войдёт снова. Если не помогло, проверьте, не состоит ли он в другой группе доступа с более широкими правами.
Действует ли дата запрета на администратора?
Дата запрета проверяется для всех пользователей, указанных в настройке. Администратор может её изменить, но для этого придётся открыть настройку — случайно закрытый период он не исправит.
Можно ли запретить изменение одного конкретного документа?
Штатной настройки на один документ в типовых конфигурациях нет. Решение — дата запрета, если документ в прошлом периоде, или своя проверка в коде, например по отметке в дополнительном реквизите.
Как запретить удаление, но разрешить изменение?
Уберите из роли права Интерактивная пометка удаления и Интерактивное удаление, а Изменение оставьте. В типовой конфигурации это делается своей ролью в расширении, добавленной в профиль.
Запрет изменения мешает закрытию месяца?
Да, если дата запрета стоит позже закрываемого месяца. Обработка закрытия месяца пишет документы и регламентные операции в этом периоде. Сначала закройте месяц, потом передвиньте дату.