Как сделать неактивной или скрыть кнопку «Создать» в списке документов 1С

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

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

Рассмотрим подробнее, как корректно обработать эту ситуацию, сделать интерфейс дружелюбным и скрыть или деактивировать лишние элементы управления.

Анализ причины проблемы

Прежде всего, разберем ситуацию. Если команда встроена в платформу (стандартная команда списка), то при отсутствии права ИнтерактивноеДобавление кнопка станет неактивной сама собой. Но если разработчик добавил на форму кнопку вручную и привязал к ней действие (команду формы), платформа не всегда может автоматически определить, что эта кнопка ведет к созданию объекта.

Выясним причину: в нашем случае команда СоздатьЗаказПокупателя выполняется программно. Чтобы исправить это, нам необходимо вмешаться в процесс инициализации формы на сервере.

Решение 1: Проверка конкретной роли пользователя

Самый простой и очевидный путь — проверить, назначена ли пользователю специфическая роль (например, «ТолькоПросмотр»). Мы можем сделать это в процедуре ПриСозданииНаСервере. Проанализируем пример кода:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Проверяем наличие роли, ограничивающей права
    Если РольДоступна("ТолькоПросмотр") Тогда
        // Обращаемся к элементу формы (кнопке) и меняем его доступность
        Элементы.ФормаСоздатьЗаказПокупателя.Доступность = Ложь;
    КонецЕсли;

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

В этом примере ФормаСоздатьЗаказПокупателя — это имя имени элемента (кнопки) на форме. Установив свойство Доступность в значение Ложь, мы сделаем кнопку серой и неактивной для клика.

Решение 2: Проверка прав доступа через метаданные (Универсальный метод)

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

Посмотрим на пример кода, который проверяет интерактивное право добавления документа ЗаказПокупателя:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Проверяем право на интерактивное добавление для текущего пользователя
    Если Не ПравоДоступа("ИнтерактивноеДобавление", Метаданные.Документы.ЗаказПокупателя) Тогда
        // Если права нет, скрываем кнопку или делаем ее неактивной
        Элементы.ФормаСоздатьЗаказПокупателя.Видимость = Ложь;
    КонецЕсли;

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

Важный момент: Обратите внимание на использование свойства Видимость вместо Доступность. В современном интерфейсе «Такси» предпочтительнее полностью скрывать элементы, которыми пользователь не может воспользоваться, чтобы не загромождать экран лишней информацией.

Решение 3: Использование расширений конфигурации

Если вы работаете с типовой конфигурацией (например, УНФ), крайне не рекомендуется вносить изменения непосредственно в основную конфигурацию. Это усложнит дальнейшие обновления. Рассмотрим, как решить задачу с помощью расширения.

  1. Создайте новое расширение и добавьте в него форму списка документа ЗаказПокупателя.
  2. Найдите процедуру ПриСозданииНаСервере и добавьте для нее перехват с аннотацией &После.
  3. Вставьте программный код для управления элементом формы.

Проанализируем пример кода в расширении:


&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Выполняем проверку прав
    Если Не ПравоДоступа("ИнтерактивноеДобавление", Метаданные.Документы.ЗаказПокупателя) Тогда
        
        // Поиск кнопки в командной панели
        КнопкаСоздать = Элементы.Найти("ФормаСоздатьЗаказПокупателя");
        Если КнопкаСоздать <> Неопределено Тогда
            КнопкаСоздать.Доступность = Ложь;
        КонецЕсли;
        
    КонецЕсли;

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

Дополнительные настройки в свойствах команды

Иногда можно обойтись и без программирования, если правильно настроить свойства самой команды. В редакторе формы выделите команду, связанную с кнопкой, и проверьте следующие свойства:

Рекомендации по выбору метода

Подведем итоги нашего анализа. Выбор метода зависит от архитектуры вашей системы:

  1. Если кнопка создана программно или добавлена в «Группу команд», лучше использовать проверку прав доступа в ПриСозданииНаСервере через расширение. Это гарантирует надежность при обновлении системы.
  2. Если нужно быстро ограничить доступ для конкретной группы пользователей без изменения кода, попробуйте настроить свойства команды формы (раздел «Использование»).
  3. Всегда отдавайте предпочтение свойству Видимость = Ложь для улучшения UX, за исключением случаев, когда пользователю важно знать о наличии функции, доступ к которой может быть предоставлен позже.

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

← На главную