Защита документов от изменений в 1С 8.3: права, даты запрета и режим только для чтения
Содержание
Запретить редактирование документа в 1С 8.3 можно четырьмя способами, и выбирать их нужно под задачу. Если документы правит один конкретный пользователь — настройте права через роли и профили групп доступа. Если нельзя менять ничего за закрытый период — поставьте дату запрета изменения данных. Если базу на время сделали справочной — откройте её в режиме только для чтения. А чтобы заблокировать реквизиты уже проведённого документа — включите запрет редактирования реквизитов объектов.
Общий принцип: блокировка прав мешает всем, кому роль не даёт изменять объект; дата запрета мешает всем, кто правит прошлое; режим только для чтения закрывает всю базу целиком. Ниже — каждый метод с точными путями и настройками для типовых конфигураций на платформе 8.3 (интерфейс «Такси»).
Ограничиваем изменение документов правами и ролями
Самый гибкий способ — убрать у пользователя право изменять объект. В типовых конфигурациях (Бухгалтерия 3.0, ЗУП 3.1, Управление торговлей 11) права раздаются не ролями напрямую, а через профили групп доступа.
Откройте Администрирование → Настройки пользователей и прав → Группы доступа → Профили групп доступа. Профиль — это набор ролей. У каждой роли в составе есть отдельные права на объект: Просмотр, Добавление, Изменение, Удаление, Проведение, Отмена проведения.
Чтобы человек видел документы, но не правил их:
- Создайте новый профиль (или скопируйте подходящий).
- Оставьте в нём роли, дающие
Просмотрнужных документов. - Исключите роли, которые добавляют
Изменение,ПроведениеиУдалениеэтих документов. - Назначьте пользователя в группу доступа с этим профилем через
Пользователи → Права доступа.
В некоторых типовых поставках есть готовый профиль только для просмотра. Если он есть в вашем списке профилей — назначьте его, не создавая новый.
Отдельно стоит разделять интерактивное и программное изменение. Право Изменение закрывает запись из кода и из формы одинаково. А вот Интерактивное удаление отвечает только за удаление руками — если его снять, документ нельзя пометить на удаление через интерфейс, но обмен или обработка с нужными правами его всё равно удалят. Для документов, которые уходят в обмен, это важно: закрыв только интерактивные права, вы не защитите данные от записи извне.
Если нужно, чтобы пользователь правил не вообще все документы, а только свои (например, только по своей организации или своему складу), работает ограничение доступа на уровне записей — RLS. Оно настраивается в группах доступа: в профиле включается ограничение по значениям, а в группе доступа указывается, какие организации или подразделения доступны участникам. Тогда чужие документы пользователь видит, а менять не может — это тоньше, чем общий запрет на вид документа.
Тонкий момент: роли в типовых крупные, и одна роль часто даёт права сразу на пакет объектов. Поэтому точечно «запретить один вид документа» профилем не всегда получается — проще либо собрать узкий профиль, либо применить запрет на уровне конфигурации (см. раздел для разработчика). Проверяйте результат из-под учётной записи самого пользователя, а не администратора: у администратора полные права, и запрет вы не увидите.
Дата запрета изменения данных за закрытый период
Когда задача звучит как «после закрытия месяца документы трогать нельзя» — это не про права, а про дату запрета. Она не привязана к конкретному документу: программа блокирует запись любого документа, дата которого попадает в закрытый период.
Путь: Администрирование → Настройки пользователей и прав → Даты запрета изменения. Включите флажок и задайте дату.
Настроить запрет можно на двух уровнях детализации:
- 🔒 Общая дата — одна для всех пользователей и всех разделов учёта. Самый частый вариант: закрыли квартал — поставили последний день квартала.
- 🎚️ По условиям — отдельные даты для разных пользователей, организаций или разделов. Например, бухгалтеру по банку период уже закрыт, а по зарплате ещё открыт.
Логика работы: если дата документа меньше или равна дате запрета, при попытке записать или перепровести документ 1С выдаст сообщение и не сохранит изменения. Новые документы задним числом в закрытый период тоже не проведёте.
| Что нужно | Какую дату ставить |
|---|---|
| Закрыть прошлый месяц для всех | Последний день месяца, общая дата |
| Запретить правки только отдельному пользователю | Дату по условию для этого пользователя |
| Разные сроки по организациям в одной базе | Даты по условию в разрезе организаций |
Запрет распространяется и на групповые операции. Если вы запускаете групповое перепроведение документов за период, который попал под дату запрета, 1С пропустит защищённые документы и сообщит об этом в отчёте о проведении. Это удобно: массовое перепроведение после закрытия месяца не затронет то, что трогать нельзя.
Дата запрета не мешает полным правам в части самой настройки: администратор в любой момент сдвинет дату назад и откроет период. Это не дыра, а штатное поведение — но учитывайте, кому дали полные права.
Режим только для чтения: вся база без записи
Иногда нужно, чтобы в базе нельзя было менять вообще ничего — например, вы оставили старую базу как архив для справок. Тогда проще закрыть на запись всю базу, а не раздавать запреты по объектам.
Файловая база. Снимите базу с активной работы, затем в Проводнике откройте свойства файла 1Cv8.1CD и поставьте атрибут Только чтение. При следующем запуске 1С откроет базу в режиме только для чтения и предупредит об этом — провести или записать документ не получится.
Атрибут действует на уровне файла. Ставьте его, когда в базе никто не работает, иначе у активных пользователей оборвётся запись. Для возврата к обычному режиму снимите флажок Только чтение обратно.
Клиент-серверная база . Атрибута файла здесь нет — базу хранит СУБД. Чтобы сделать её только для чтения, назначьте всем пользователям профиль без прав на изменение (см. первый раздел) либо, если это разовое обслуживание, воспользуйтесь механизмом блокировки.
Не путайте два механизма:
- Блокировка установки соединений (в консоли кластера или через
Администрирование → Блокировка работы пользователей) запрещает вход в базу, а не правку данных. Это для регламентных работ, когда базу нужно освободить. - Режим только для чтения оставляет вход открытым, но запрещает запись.
Для «справочного» режима нужен именно запрет на запись, то есть права, а не блокировка сеансов.
Запрет на изменение отдельного документа и его реквизитов
Отдельной кнопки «запретить этот документ» в типовых нет, но задачу закрывают два штатных механизма.
Проведение. Проведённый документ уже защищён от случайных правок косвенно: чтобы изменить его движения, пользователю нужно право Отмена проведения. Заберите это право через профиль — и перепровести документ он не сможет, хотя открыть и посмотреть сможет.
Запрет редактирования реквизитов объектов. Это более точный инструмент: он блокирует ключевые реквизиты документа после первой записи. Включается в разделе Администрирование → Настройки пользователей и прав — найдите в настройках прав пункт про запрет редактирования реквизитов объектов и включите его.
После включения у защищённых документов и справочников появляется команда разблокировки реквизитов (обычно замок или отдельная команда в форме). Пока реквизит заблокирован, изменить его нельзя; чтобы поправить — пользователь с правами снимает блокировку осознанно, одним действием.
Запрет реквизитов удобен там, где документ-«основание» уже ушёл в обмен или в отчётность: сумма и контрагент зафиксированы, а служебные поля править можно.
Запрет редактирования на уровне конфигурации (для разработчика)
Если штатных настроек мало — например, нужно запретить менять документ по своему условию, — ограничение задаётся в конфигурации. Менять типовую конфигурацию напрямую нежелательно: снимете с поддержки и усложните обновления. Правильный путь — расширение конфигурации (доступны с платформы 8.3.6), оно накладывается поверх типовой и обновлению не мешает.
Права в роли. В Конфигураторе откройте роль → объект (документ) → снимите флажки Изменение, Проведение, Удаление, Интерактивное удаление. Это грубый запрет для всех, у кого только эта роль.
Запрет по условию через подписку на событие. Чтобы блокировать запись не всем и не всегда, добавьте в расширении подписку на событие ПередЗаписью документа. В обработчике ставите Отказ = Истина, если условие выполнено:
Процедура ЗапретИзмененияПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
Если РольДоступна("ПолныеПрава") Тогда
Возврат; // администратору не мешаем
КонецЕсли;
Если ЗначениеЗаполнено(Источник.Дата)
И Источник.Дата <= '20250101' Тогда
Отказ = Истина;
Сообщить("Документ за закрытый период изменять нельзя");
КонецЕсли;
КонецПроцедуры
Подписку на событие в расширении настройте на событие ПередЗаписью нужного документа и укажите этот обработчик. Так запрет живёт отдельно от типовой конфигурации, а при её обновлении вы просто проверяете, что расширение встало.
Тем же приёмом закрывают удаление: подписка на ПередУдалением с Отказ = Истина по условию не даст убрать документ, даже помеченный на удаление. А если нужно блокировать не весь документ, а отдельное поле формы, в расширении переопределяют доступность реквизита на форме — тогда поле просто становится недоступным для ввода, не трогая право на запись документа в целом.
Не выносите условие запрета в код жёстко. Храните граничную дату или список разрешённых пользователей в константе или регистре сведений — поправить значение сможет бухгалтер, не привлекая программиста.
Перед изменением прав в рабочей базе снимите выгрузку (резервную копию). Ошибка в роли может закрыть доступ не тем пользователям, а откат удобнее делать из копии, чем вручную.
Почему запрет не срабатывает: типичные ошибки
Частая ситуация: настройку сделали, а документ всё равно меняется. Разбираем причины.
Ещё одна неочевидная причина — кеш. Если вы меняли права, а эффекта нет, перезапустите сеанс пользователя: права перечитываются при входе, а не на лету.
Частые вопросы
Можно ли запретить редактирование только одного конкретного документа, не трогая остальные?
Чем отличается запрет изменения от блокировки работы пользователей?
Как снять дату запрета изменения данных?
Администрирование → Настройки пользователей и прав → Даты запрета изменения снимите флажок или сдвиньте дату. Для этого нужны полные права. После снятия закрытый период снова открывается для правок.