В процессе работы с типовыми конфигурациями, такими как 1С:Управление торговлей 11.4, часто возникает необходимость ограничить редактирование определенных реквизитов документа для рядовых пользователей. Одной из популярных задач является запрет на изменение ответственного менеджера в проведенных документах Заказ клиента и Реализация товаров и услуг. Давайте разберем, как реализовать такую задачу правильно, не нарушая целостность типовой конфигурации.
Наиболее предпочтительным способом внесения изменений в типовую конфигурацию является использование механизма Расширений. Это позволяет сохранить возможность обновления программы в будущем. Рассмотрим, как программно заблокировать поле через расширение.
Для реализации задачи нам потребуется создать расширение и добавить в него формы необходимых документов. Основная логика будет заключаться в управлении свойством ТолькоПросмотр элемента формы:
ЗаказКлиента и РеализацияТоваровУслуг.ПриСозданииНаСервере формы необходимо добавить проверку прав текущего пользователя.ТолькоПросмотр для поля «Менеджер» в значение Истина.Пример программной реализации логики проверки прав пользователя:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Проверяем наличие роли администратора
Если Не РольДоступна("ПолныеПрава") Тогда
Элементы.Менеджер.ТолькоПросмотр = Истина;
КонецЕсли;
КонецПроцедуры
Этот подход позволяет гибко управлять доступом: вы можете создать собственную роль, например, РазрешитьИзменениеМенеджера, и проверять именно её наличие. Таким образом, даже пользователи с ограниченными правами смогут менять поле, если вы предоставите им соответствующее разрешение. Для настройки ограничений в пользовательском режиме без написания кода можно использовать расширение для управления доступом и видимостью реквизитов документов.
Даже если вы установили свойство ТолькоПросмотр на форме, опытный пользователь или программная обработка могут попытаться изменить данные в обход визуального интерфейса. Чтобы гарантировать защиту, добавьте проверку в модуль объекта документа (событие ПередЗаписью):
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Проверка изменений при записи
Если Не РольДоступна("ПолныеПрава") Тогда
// Получаем ссылку на текущий объект из базы данных
ИсходныйДокумент = Ссылка.ПолучитьОбъект();
Если ИсходныйДокумент <> Неопределено И ИсходныйДокумент.Менеджер <> ЭтотОбъект.Менеджер Тогда
ВызватьИсключение "Изменение поля Менеджер запрещено!";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Использование этого кода гарантирует, что система выдаст ошибку, если данные были изменены несанкционированно, предотвращая запись некорректных значений.
Если жесткий запрет кажется избыточным, можно воспользоваться встроенным механизмом Версионирования объектов. Это позволит не блокировать действия пользователей, а контролировать их.
Заказ клиента и Реализация товаров и услуг в настройках программы.История изменений.Рассмотрим несколько нюансов, которые помогут сделать систему защиты более надежной:
Даты запрета изменения данных в 1С эффективно закрывает возможность редактирования документов за прошлые периоды, что часто решает проблему «шаловливых ручек» без дополнительного программирования.ПриЧтенииНаСервере добавьте сравнение ТекущийПользователь с полем Менеджер в документе. Если они не совпадают — блокируйте поле для редактирования.Применяя данные методы, вы сможете защитить важные реквизиты документов от случайных или преднамеренных изменений, сохранив при этом чистоту данных в вашей системе 1С:Управление торговлей 11.4.