Как ограничить доступ к кнопке в форме документа 1С 7.7 для определенного пользователя или интерфейса

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Различие между доступностью и видимостью элементов формы

Прежде чем переходить к написанию кода, выясним важный методологический нюанс, который часто вызывает вопросы у начинающих разработчиков: в чем разница между свойствами Доступность и Видимость?

Доступность (метод Доступность()) — если мы устанавливаем значение в 0 (ложь), кнопка остается на форме, но становится серой и не нажимается. С точки зрения пользовательского опыта это дает понять человеку, что такая функция в программе существует, но конкретно ему она запрещена. Это может вызвать лишние вопросы к администратору системы.

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

Реализация ограничения в модуле формы документа

Основным местом для управления элементами формы является предопределенная процедура ПриОткрытии(). Именно в момент открытия документа система должна проверить, кто именно к ней обращается, и настроить интерфейс соответствующим образом. Рассмотрим пример кода, который можно разместить в модуле формы документа.

Разберем по шагам логику проверки. Мы можем опираться на три параметра: конкретное имя пользователя, название набора прав (роли) или название текущего интерфейса. Посмотрим на практический пример:


Процедура ПриОткрытии()
    // Проверяем пользователя по его имени в справочнике или системному имени
    Если (ИмяПользователя() = "Оператор") Или (НазваниеНабораПрав() = "ТолькоПросмотр") Тогда
        // Обращаемся к кнопке по ее идентификатору, указанному в свойствах
        Форма.КнопкаПечать.Доступность(0);
        
        // Если хотим полностью скрыть кнопку:
        // Форма.КнопкаПечать.Видимость(0);
    КонецЕсли;
КонецПроцедуры

В данном примере КнопкаПечать — это идентификатор кнопки, который вы задали в Конфигураторе на закладке «Дополнительно» в свойствах элемента формы. Важно убедиться, что идентификатор заполнен, иначе программа выдаст ошибку при попытке обращения к объекту Форма.

Централизованное управление через Глобальный модуль

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

Проанализируем ситуацию, когда у нас есть глобальная переменная глТекущийПользователь, ссылающаяся на элемент справочника. Мы можем добавить туда числовой реквизит ЗапретитьПечать. Тогда код в документе станет гораздо лаконичнее:


Процедура ПриОткрытии()
    Если глТекущийПользователь.ЗапретитьПечать = 1 Тогда
        Форма.КнопкаПечать.Доступность(0);
    КонецЕсли;
КонецПроцедуры

Такой подход позволяет изменять права доступа «на лету» прямо в пользовательском режиме, не прибегая к услугам программиста для правки кода каждого документа.

Работа со стандартными кнопками и метод «Контроль»

Выясним важную техническую особенность: если вы используете стандартные системные кнопки (которые включаются галочкой «Стандартные кнопки» в свойствах формы), то обратиться к ним напрямую через Форма.ИмяКнопки не получится. В 1С 7.7 системные панели инструментов практически не поддаются программному управлению штатными средствами.

Для решения этой задачи разработчики обычно используют один из двух путей:

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

Пример использования метода Контроль:


Попытка
    Форма.Контроль("КнопкаПечать").Доступность(0);
Исключение
    // Кнопка не найдена на форме, ничего не делаем
КонецПопытки;

Безопасность и альтернативные способы печати

Рассмотрим критически важный момент: простое скрытие кнопки на форме не является полноценной защитой от печати. Опытный пользователь может воспользоваться горячими клавишами (например, Ctrl+P) или пунктом меню «Файл» — «Печать».

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


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

Такая двойная проверка (скрытие кнопки в ПриОткрытии и блокировка выполнения в Печать) гарантирует, что ограничение будет работать надежно.

Использование внешних компонент (FormEx)

Если штатных возможностей платформы 1С 7.7 вам недостаточно (например, нужно управлять кнопками в системном меню или раскрашивать элементы формы в зависимости от условий), рекомендуется обратить внимание на внешнюю компоненту FormEx. Она значительно расширяет объектную модель формы, позволяя динамически менять свойства объектов, которые в обычном режиме доступны только для чтения.

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

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

← На главную