Как в 1С:Управление торговлей 11.2 запретить пользователю помечать объекты на удаление и удалять их?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

В процессе настройки прав доступа в 1С часто возникает задача: предоставить пользователю максимально широкие полномочия, но при этом жестко ограничить его возможность безвозвратно удалять данные или даже просто устанавливать пометку на удаление. В типовых конфигурациях, таких как Управление торговлей 11.2, это может стать вызовом из-за архитектуры ролей. Давайте разберем, как решить эту задачу эффективно, сохранив конфигурацию на поддержке и обеспечив стабильность системы.

Понимание механизмов ограничения прав в 1С

Прежде чем приступать к настройке, проанализируем, как платформа 1С обрабатывает права. Важно помнить о принципе суммирования прав: если пользователю назначено несколько ролей, и хотя бы в одной из них разрешено действие ИнтерактивнаяПометкаНаУдаление, пользователь сможет это делать. Система всегда дает приоритет разрешению перед запретом.

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

Способ 1. Настройка профилей групп доступа (типовой функционал)

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

Выясним алгоритм действий:

  1. Перейдем в раздел Администрирование — Настройки пользователей и прав — Профили групп доступа.
  2. Вместо редактирования стандартного профиля (например, «Менеджер по продажам»), создадим его копию. Это позволит избежать проблем при обновлении конфигурации.
  3. В списке разрешенных ролей нам необходимо проанализировать каждую роль. Нам нужно убрать те роли, в которых установлены галочки напротив прав:
    • Удаление
    • Интерактивное удаление
    • Интерактивная пометка на удаление
    • Интерактивное снятие пометки на удаление
    • Интерактивное удаление помеченных
  4. Основная сложность здесь в том, что в УТ 11 права на пометку удаления часто зашиты в базовые роли или роли вида ДобавлениеИзменениеДокументов.... Если мы снимем такую роль, пользователь потеряет возможность создавать документы.

Если типовой профиль не позволяет разделить право на "Изменение" и "Пометку удаления", перейдем к более гибким методам.

Способ 2. Использование расширений конфигурации (рекомендуемый метод)

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

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


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

    // Выясним, изменился ли признак пометки на удаление
    // Сравниваем текущее состояние объекта с данными в базе
    Если Источник.ПометкаУдаления И НЕ Источник.Ссылка.ПометкаУдаления Тогда
        
        // Проверяем, есть ли у текущего пользователя роль-исключение
        Если НЕ РольДоступна("ПолныеПрава") И НЕ РольДоступна("РазрешитьУдалениеОбъектов") Тогда
            Сообщить("У вас недостаточно прав для установки пометки на удаление!");
            Отказ = Истина;
        КонецЕсли;
        
    КонецЕсли;

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

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

Способ 3. Ограничение доступа на уровне записей (RLS)

Разберем ситуацию, когда нам нужно использовать механизм RLS. Хотя обычно он применяется для фильтрации данных по организациям или складам, в нем можно прописать условия на изменение данных.

В шаблоне ограничений для роли можно указать условие вида:

ГДЕ ПометкаУдаления = ЛОЖЬ

Однако будьте осторожны: использование RLS для подобных целей может существенно снизить производительность системы, особенно при проведении массовых документов или формировании отчетов. Проанализируем нагрузку на сервер перед внедрением этого метода на больших базах данных.

Способ 4. Дата запрета редактирования

Если ваша задача — запретить удаление объектов в закрытых периодах, воспользуйтесь стандартным механизмом Дата запрета изменения данных.

Для этого выполним следующие шаги:

  1. Перейдем в Администрирование — Настройки пользователей и прав.
  2. Установим флаг Дата запрета изменения.
  3. Настроим дату для конкретных пользователей или групп.

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

Резюме и практические советы

Подведем итоги нашего анализа. Для решения задачи в 1С:УТ 11.2 оптимальным будет комбинированный подход:

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

Рассмотренные методы позволяют гибко настроить систему под требования бизнеса, не нарушая логику типового решения и сохраняя возможность легкого обновления программы в будущем.

← На главную