Закрываем данные от правок в 1С 8.3: от даты запрета до блокировок в коде
Содержание
Чтобы в 1С запретить редактирование документов за прошлый период, включите дату запрета изменения: в БП 3.0 и ЗУП 3.1 это Администрирование → Настройки пользователей и прав, флажок «Даты запрета изменения» и ссылка «Настроить». Если нужно закрыть не период, а отдельные справочники или действия, установите запрет через профили групп доступа. Для разовой остановки работы всех пользователей подходит блокировка работы пользователей с кодом разрешения.
Типичная ситуация: декларацию по НДС за квартал уже сдали, а через неделю кто-то «поправил» поступление в июле — и книга покупок разошлась с отчётом. Описанные здесь способы — штатные механизмы платформы 1С:Предприятие 8.3 и типовых конфигураций на ней. Подходят для интерфейса «Такси».
Какой способ блокировки нужен именно вам
Под «запретом на редактирование» в 1С понимают пять разных задач. Перепутаете механизм — запрет либо не сработает, либо остановит всю бухгалтерию.
| Задача | Механизм | Кто настраивает | Риск |
|---|---|---|---|
| Закрыть прошлый месяц, квартал, год | Дата запрета изменения | Администратор или главбух | Низкий, снимается в одной форме |
| Дать сотруднику только просмотр | Профили и группы доступа | Администратор | Можно лишить человека нужных прав |
| Не дать менять ключевые поля карточки | Запрет редактирования реквизитов | Работает сам, разблокировка по праву | Низкий |
| Временно выгнать всех из базы | Блокировка работы пользователей, монопольный режим | Администратор | Обрываются сеансы, теряются несохранённые данные |
| Не дать двум сеансам портить одни данные | Блокировки данных в коде | Программист | Ошибки в коде дают ожидания и взаимоблокировки |
💡 Бухгалтеру чаще всего нужна первая строка. Остальные — инструменты администратора и программиста.
Дата запрета изменения: закрываем прошлый период
Это главный способ защитить сданную отчётность. После закрытия периода программа не даст записать, провести или распровести документ с датой раньше даты запрета. При попытке пользователь увидит сообщение о запрете, а документ не запишется.
Где включается
| Конфигурация | Путь |
|---|---|
| Бухгалтерия предприятия 3.0 | Администрирование → Настройки пользователей и прав → Даты запрета изменения |
| ЗУП 3.1 | Администрирование → Настройки пользователей и прав → Даты запрета изменения |
| Управление торговлей 11 | НСИ и администрирование → Настройки пользователей и прав → Даты запрета изменения |
Порядок действий:
- Откройте раздел из таблицы и установите флажок «Даты запрета изменения».
- Нажмите ссылку «Настроить» рядом с флажком.
- Выберите, для кого действует запрет: для всех пользователей или по отдельным пользователям.
- Укажите дату. Можно задать конкретное число или относительную дату — например, конец прошлого месяца или квартала.
- Закройте форму. Запрет начинает действовать сразу, перезапуск не нужен.
Относительная дата и отсрочка
Фиксированную дату приходится двигать вручную каждый месяц. Об этом забывают, и запрет «застревает» на январе.
Относительная дата сдвигается сама. Выберите «конец прошлого месяца» — и 1 ноября программа закроет октябрь без вашего участия. Чтобы бухгалтер успел внести поздние документы, задайте отсрочку в днях. При отсрочке 10 дней октябрь останется открытым до 10 ноября включительно, а с 11-го закроется.
Разные даты для разных людей
Главный бухгалтер иногда обязан править закрытый период: внести исправительную запись, перепровести документ после проверки. Для этого в форме настройки выберите вариант «по пользователям»:
- 👥 для всех пользователей — общая дата, например конец прошлого квартала;
- 👤 для главного бухгалтера — отдельная, более ранняя дата, например конец прошлого года.
Так рядовые сотрудники не тронут квартал, а главбух сможет поправить его в пределах года.
Разделы и организации
В форме настройки есть способ указания даты. Общая дата подходит небольшой фирме. Если в базе несколько организаций, удобнее задать даты отдельно по разделам и объектам: одна фирма уже сдала отчётность, а у другой квартал ещё открыт.
Даты запрета загрузки
Отдельно от дат запрета изменения есть даты запрета загрузки. Они нужны, если база получает данные через синхронизацию — например, из торговой программы. Без них обмен может молча перезаписать документы в закрытом периоде, даже когда пользователям правка запрещена. Настраиваются в той же группе настроек, если в базе включена синхронизация данных.
Дата запрета не откатывает уже внесённые правки. Сначала проверьте период и сдайте отчётность, потом закрывайте. Если правку внесли до установки даты, её придётся найти и исправить вручную.
Роли, профили и группы доступа: только просмотр вместо правки
Дата запрета закрывает время. Права доступа закрывают объекты и действия: этому сотруднику можно смотреть отчёты, но нельзя создавать платёжки.
В типовых конфигурациях на БСП права собираются в три слоя:
- 🔑 Роль — набор прав на объекты. Задаётся в конфигурации, пользователь её не меняет.
- 📦 Профиль группы доступа — набор ролей под должность: бухгалтер, кассир, кладовщик.
- 👥 Группа доступа — профиль плюс список участников и, при необходимости, ограничения по организациям или складам.
Пользователю роли напрямую не назначают. Его включают в группу доступа, а группа получает права своего профиля.
Как дать сотруднику только чтение
- Откройте
Администрирование → Настройки пользователей и прав → Профили групп доступа. - Не правьте поставляемый профиль: при обновлении конфигурации он может вернуться к исходному составу. Скопируйте его командой копирования в списке.
- В копии оставьте роли на просмотр и отчёты, снимите роли, которые дают добавление и изменение нужных объектов.
- Перейдите в
Группы доступа, создайте группу с новым профилем и добавьте в неё сотрудника. - Удалите сотрудника из прежних групп. Права из всех групп складываются: если человек остался в группе «Бухгалтер», запрет не сработает.
Ограничение по организациям
В той же форме настроек есть флажок «Ограничивать доступ на уровне записей». После его включения в группе доступа можно указать конкретные организации. Сотрудник увидит и сможет менять документы только своей фирмы, а данные остальных для него будут скрыты.
Ограничение на уровне записей заметно нагружает базу при большом объёме данных. Включайте его, когда разделение по организациям действительно нужно, и проверьте скорость работы после включения.
💡 Проверять настройку удобно так: войдите в базу под этим пользователем и попробуйте изменить документ . Под администратором проверка ничего не покажет.
Блокировка отдельных реквизитов документов и справочников
Бывает, что карточку менять можно, а одно поле — нельзя. Классический пример: у номенклатуры, по которой уже есть движения, поменяли вид номенклатуры или единицу измерения. Остатки и себестоимость после этого разъезжаются.
Штатный запрет в типовых
В БП 3.0, УТ 11 и других конфигурациях на БСП есть механизм запрета редактирования ключевых реквизитов. После того как объект начинает использоваться в документах, важные поля в карточке становятся недоступны.
Чтобы всё-таки изменить такое поле:
- Откройте карточку объекта.
- В меню
Ещёвыберите «Разрешить редактирование реквизитов». - Программа проверит, где объект уже используется, и покажет предупреждение.
- Отметьте поля, которые нужно открыть, и подтвердите.
Команду увидит только пользователь с правом на разблокировку реквизитов. Если её нет, значит, право ему не выдано, и вопрос решает администратор через профиль доступа.
Свой запрет на поле: для программиста
Если штатного запрета нет, а поле нужно закрыть, есть два пути.
Через права в роли. В конфигураторе в роли можно настроить права отдельно на каждый реквизит: «Просмотр» и «Редактирование». Снимите «Редактирование» — и поле станет только для чтения во всех формах. Но правка типовой роли снимает конфигурацию с полной поддержки и усложняет обновления.
Через форму в расширении. Безопаснее закрыть поле на форме. В расширении перехватите обработчик создания формы и поставьте свойство «ТолькоПросмотр»:
&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не РольДоступна("ПолныеПрава") Тогда
Элементы.Контрагент.ТолькоПросмотр = Истина;
КонецЕсли;
КонецПроцедуры
Здесь Контрагент — имя элемента формы, его смотрите в дереве элементов. Учтите: запрет на форме не мешает изменить реквизит обработкой или обменом. Для жёсткого запрета нужна проверка при записи объекта.
Монопольный режим и блокировка работы пользователей
Этот способ не запрещает редактирование навсегда. Он временно не пускает в базу никого, кроме администратора. Нужен перед обновлением конфигурации, загрузкой .dt, тестированием и исправлением базы, закрытием года с массовым перепроведением.
Блокировка из самой программы
В БП 3.0 и ЗУП 3.1 откройте Администрирование → Обслуживание и найдите ссылку «Блокировка работы пользователей».
- Укажите время начала и окончания блокировки.
- Напишите сообщение: его увидят пользователи, например «Обновление базы до 19:00».
- Задайте код разрешения — произвольное слово для входа администратора.
- Нажмите «Установить блокировку».
Активные пользователи получат предупреждение и через несколько минут будут отключены. Новые входы запрещены. Чтобы зайти самому во время блокировки, добавьте в строку запуска параметр /UC с кодом разрешения без пробела:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Buh" /UCобновление
Для файловой базы путь задаётся через /F, для серверной — через /S"сервер\имя_базы".
Блокировка в консоли кластера
Для клиент-серверной базы то же самое делается в консоли администрирования серверов 1С. Откройте свойства информационной базы и установите флажок «Блокировка начала сеансов включена». Там же задаются время, сообщение и код разрешения. Рядом есть флажок «Блокировка регламентных заданий включена» — его ставят, когда фоновые задания мешают обновлению.
Монопольный режим
Монопольный режим означает, что с базой работает только один сеанс. Платформа требует его для обновления структуры базы данных, загрузки .dt, тестирования и исправления. Сначала заблокируйте вход, потом завершайте сеансы.
Принудительное завершение сеансов обрывает работу пользователей. Несохранённые документы пропадут. Предупредите людей заранее и делайте это в нерабочее время или в объявленное окно.
После работ не забудьте снять блокировку. Иначе утром бухгалтерия увидит ваше сообщение вместо базы. Если блокировку ставили с временем окончания, она снимется сама.
Блокировки данных: что делает платформа и программист
Последний уровень касается не людей, а одновременной работы. Когда два пользователя меняют одни данные, платформа должна решить, кто первый.
Блокировка объекта при открытии формы
Когда пользователь начинает менять документ в форме, платформа блокирует этот объект. Второй пользователь, открывший тот же документ, сможет его посмотреть, но при попытке записать получит сообщение, что объект заблокирован другим сеансом. Блокировка снимается, когда первый закрывает форму.
Если сообщение висит, хотя никто документ не правит, значит, остался «зависший» сеанс. Найдите его в списке активных пользователей (Администрирование → Обслуживание) или в консоли кластера и завершите — с теми же предосторожностями, что выше.
Управляемые блокировки в коде
При проведении документы читают остатки и пишут движения. Чтобы между чтением и записью другой сеанс не изменил те же остатки, программист ставит блокировку данных внутри транзакции:
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ТоварыНаСкладах");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.УстановитьЗначение("Номенклатура", Номенклатура);
Блокировка.Заблокировать();
Код работает только внутри транзакции: при проведении она открыта автоматически. Блокировка снимается при завершении транзакции. Блокируйте как можно меньше: конкретный товар, а не весь регистр, иначе пользователи будут ждать друг друга и ловить ошибки по таймауту.
Это механизм целостности, а не прав. Он не заменяет дату запрета и профили доступа.