Защита документа от правок: все способы блокировки в 1С
Содержание
Проведённый документ в 1С всё ещё можно изменить — проведение и защита от правок это разные задачи. Чтобы документ нельзя было отредактировать, блокировку настраивают отдельно, и способ зависит от того, что именно вы хотите закрыть.
Коротко по задачам: закрытый период защищает дата запрета изменения (Администрирование → Настройки пользователей и прав → Даты запрета изменения); отдельному пользователю правку закрывают через его профиль доступа; у проведённого документа ключевые реквизиты блокирует механизм запрета редактирования. А сообщение «документ заблокирован другим пользователем» — это уже автоматическая блокировка платформы, а не настройка. Разберём каждый случай по порядку.
Права доступа: кто вообще может менять документ
Право на изменение документа задаётся на уровне ролей. У каждого объекта конфигурации роль определяет набор прав, и для документов они такие:
| Право | Что разрешает |
|---|---|
| 👁 Чтение | открывать и просматривать документ |
| ➕ Добавление | создавать новые документы этого вида |
| ✏️ Изменение | редактировать и записывать существующие |
| ✅ Проведение | проводить и отменять проведение |
| 🗑 Удаление | помечать на удаление и удалять |
В типовых конфигурациях (БП 3.0, ЗУП 3.1, УТ 11) роли напрямую пользователю не раздают — доступ собирают из профилей групп доступа. Откройте Администрирование → Настройки пользователей и прав → Профили групп доступа. Профиль — это набор ролей; чтобы человек документы только смотрел, назначьте ему профиль без прав на их изменение (например, профиль только для просмотра, если он есть в конфигурации).
Точечную настройку «этот вид документов — только чтение» задают ролью в Конфигураторе: у роли снимается флажок Изменение для нужного объекта. Это уже работа разработчика или администратора с доступом к конфигурации.
Если нужно ограничить доступ не по виду документов, а по их содержимому — например, чтобы бухгалтер одного филиала не менял документы другого, — работает ограничение на уровне записей (RLS). Оно настраивается в карточке профиля групп доступа или группы доступа: там задаются условия по организации, подразделению, складу. Пользователь видит и правит только «свои» документы, а остальные для него закрыты даже на чтение.
Права и RLS действуют на весь вид документов или на их срез (по организации, складу, подразделению), но не на один конкретный документ. Если надо защитить именно одну накладную, права не помогут — используйте дату запрета или запрет редактирования реквизитов.
Дата запрета изменения: закрываем прошлый период
Это главный инструмент, когда нужно запретить правки за уже закрытый период — после сдачи отчётности или закрытия месяца. Путь одинаков в БП, ЗУП и УТ: Администрирование → Настройки пользователей и прав → Даты запрета изменения.
Включите флажок и задайте дату. После этого документы, датированные этой датой и раньше, нельзя будет изменить, перепровести или отменить проведение — программа не даст записать изменения и покажет сообщение о запрете.
Дату можно задать двумя способами:
- 📅 Общая дата — одна на всю базу, для всех пользователей и разделов. Простой вариант для небольшой организации.
- 🏢 По разделам и объектам — отдельные даты по организациям, разделам учёта или даже по конкретным пользователям. Удобно, когда филиалы закрывают периоды в разное время.
Типичный сценарий: сдали декларацию по НДС за квартал — тут же ставите дату запрета на конец этого квартала. Бухгалтеры дальше работают текущим периодом, а закрытые данные случайно не «поедут».
Пользователь с правом на изменение даты запрета (обычно администратор) может поднять или снять дату и внести правку задним числом. Остальным документ за закрытым периодом будет недоступен для записи.
Рядом в тех же настройках есть отдельная дата запрета загрузки данных. Она не трогает ручной ввод, а закрывает приём документов за прошлые периоды по синхронизации и обменам: когда из другой базы прилетает документ старой датой, он не перезапишет уже закрытый учёт. Если у вас настроен обмен между базами, имеет смысл выставить обе даты согласованно, иначе загрузка обойдёт запрет на ручное изменение.
Запрет редактирования реквизитов проведённого документа
В типовых конфигурациях есть встроенная защита: после проведения ключевые реквизиты шапки — организация, контрагент, договор, склад, вид операции — становятся недоступны для правки. Поля отображаются серым, щёлкнуть по ним нельзя. Так документ страхуется от случайного изменения основания уже сформированных проводок.
Чтобы всё-таки поправить такой реквизит, в карточке документа откройте меню Ещё и выберите команду разрешения редактирования — в разных конфигурациях она называется «Разрешить редактирование реквизитов» или «Разрешить редактирование объекта». После подтверждения поля разблокируются.
Порядок действий:
- Открыть проведённый документ.
Ещё → Разрешить редактирование реквизитов, подтвердить предупреждение.- Внести правку в разблокированные поля.
- Обязательно перепровести документ — иначе движения останутся по старым данным.
Разрешение редактирования снимает защиту только в текущей сессии работы с документом. Это не общая настройка: в следующий раз реквизиты снова будут заблокированы, пока вы снова не нажмёте команду.
Какие именно реквизиты защищать, в типовых конфигурациях настраивается централизованно — в разделе Администрирование, в блоке настроек пользователей и прав. Там можно включить или отключить контроль редактирования реквизитов проведённых объектов для всей базы. По умолчанию защита включена, и отключать её без причины не стоит: это тот самый барьер, который не даёт задним числом переписать контрагента в уже оплаченной накладной.
«Документ заблокирован другим пользователем»: блокировка объекта
Это не ошибка и не сбой настроек, а штатная работа платформы. Когда один пользователь начинает редактировать документ, платформа ставит на объект блокировку. Второй, кто попытается открыть тот же документ на изменение, получит сообщение вида «Не удалось заблокировать объект» или «Объект заблокирован: Документ …» с указанием, кто его занял.
Блокировка снимается автоматически, когда первый пользователь записывает документ или закрывает форму. Специально включать или выключать это поведение не нужно — так программа защищает данные от одновременной записи двумя людьми.
Отдельно стоит сообщение «Запись невозможна, поскольку объект был изменён или удалён другим пользователем». Оно появляется в другой ситуации: вы открыли документ, пока держали форму открытой, его успели изменить и записать в другом сеансе. Платформа не даёт перезаписать чужие правки поверх ваших. Закройте форму, откройте документ заново — вы увидите актуальную версию — и повторите изменение.
Как посмотреть и снять зависшие блокировки
Если блокировка «повисла» — пользователь уже вышел, а объект всё ещё занят, — её нужно найти и снять. Способ зависит от режима работы базы.
Клиент-серверный режим. Откройте оснастку Администрирование серверов 1С Предприятия (консоль кластера). В ней есть узлы «Сеансы» и «Блокировки»: там видно, какой сеанс держит объект и какой пользователь за ним стоит. Чтобы снять зависшую блокировку, завершают сам сеанс — по правой кнопке на строке сеанса. Список сеансов также доступен утилитой rac (команда rac session list); параметры завершения смотрите в rac help.
Завершение сеанса оборвёт работу пользователя: всё, что он не успел записать, пропадёт. Сначала убедитесь, что сеанс действительно завис (человек вышел, а строка висит), и по возможности предупредите его. Не завершайте сеансы наугад.
В консоли кластера видно блокировки двух видов: объектные (кто-то держит документ в открытой форме) и транзакционные (временные, на момент записи и проведения). Снимать имеет смысл только зависшие объектные от сеанса, который уже не работает . Транзакционные живут доли секунды и проходят сами — гоняться за ними не нужно.
Файловый режим. Консоли кластера здесь нет. Блокировка снимается, когда пользователь закрывает форму или выходит из программы. Если клиент завис намертво, завершите его процесс 1cv8.exe через диспетчер задач на том компьютере, где он запущен. Удалять служебные файлы базы вручную не нужно — это может повредить данные.
Блокировка всей базы: запрет на вход пользователей
Иногда «заблокировать документы» означает закрыть на правки всю базу целиком — на время обновления, загрузки данных или тестирования. Для этого в клиент-серверной базе используют блокировку начала сеансов.
В оснастке Администрирование серверов 1С Предприятия откройте свойства информационной базы. Включите блокировку начала сеансов, задайте код разрешения и, при необходимости, время действия и текст сообщения, которое увидят пользователи при попытке войти.
После этого новые подключения отклоняются — кроме запусков с ключом доступа. Код разрешения передаётся в командной строке параметром /UC<код>: администратор с ним войти сможет, обычные пользователи — нет. Так база остаётся в монопольном распоряжении на время работ.
Блокировка начала сеансов не выгоняет тех, кто уже в базе, — она лишь закрывает вход новым. Чтобы остаться с базой один на один, дополнительно завершите активные сеансы через консоль (помня о несохранённых данных) и дождитесь, пока все выйдут.
В типовых конфигурациях есть и свой механизм завершения работы пользователей — в разделе Администрирование (точный пункт обслуживания зависит от конфигурации). Он предупреждает людей заранее и аккуратно закрывает сеансы к назначенному времени.
Программная блокировка данных в коде
Когда документы обрабатывают из кода (обработка, регламентное задание, обмен), данные блокируют управляемой блокировкой внутри транзакции. Объект БлокировкаДанных ставит блокировку на нужные записи, а конструкция Попытка … Исключение корректно обрабатывает ситуацию, если захватить данные не удалось:
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Документ.РеализацияТоваровУслуг");
ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаДокумент);
Блокировка.Заблокировать();
// здесь безопасно читаем и меняем данные документа
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Что здесь важно:
- 🔒 блокировка живёт только внутри транзакции и снимается при
ЗафиксироватьТранзакцию()илиОтменитьТранзакцию()— отдельно освобождать её не нужно; - 🧩
УстановитьЗначениесужает блокировку до конкретной ссылки, а не всего документа — остальные документы этого вида остаются доступны другим сеансам; - ⚠️ если объект уже занят,
Заблокировать()вызовет исключение; поэтому вызов и оборачивают вПопытка, чтобы откатить транзакцию, а не оставить её «висеть».
Не держите транзакцию открытой во время диалога с пользователем или долгих операций: пока блокировка стоит, остальные ждут. Захватывайте данные, быстро пишите, фиксируйте.
Частые вопросы
Если провести документ, его уже нельзя будет изменить?
Можно ли заблокировать только один конкретный документ?
Как запретить всем менять документы на время закрытия месяца?
Чем блокировка объекта отличается от управляемой блокировки в коде?
БлокировкаДанных) программист ставит сам внутри транзакции для согласованной обработки данных.