Как управлять видимостью дополнительных реквизитов в 1С:Документооборот в зависимости от пользователя

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

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

Способ 1. Использование групп доступа дополнительных реквизитов (Штатный метод)

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

Проанализируем шаги по настройке этого механизма:

  1. Перейдем в раздел Администрирование — Общие настройки — Дополнительные реквизиты и сведения.
  2. Найдем нужный вид документа (например, «Внутренний документ: Договор аренды») и выберем целевой дополнительный реквизит.
  3. В карточке настройки реквизита обратим внимание на поле Группа доступа. По умолчанию оно может быть пустым.
  4. Создадим новую группу доступа, например «Конфиденциальные финансовые данные», и укажем её для нашего реквизита.
  5. Теперь самое важное: через Настройки прав доступа (Профили групп доступа) мы можем ограничить чтение или изменение для этой группы. Пользователи, не входящие в профиль с правами на эту группу, не увидят реквизит в карточке документа.

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

Способ 2. Использование реквизитов-«маркеров» (Low-code подход)

Если вам нужно, чтобы видимость менялась динамически, но вы не хотите прибегать к программированию в Конфигураторе, можно воспользоваться «хитрым» методом использования скрытого служебного поля.

Рассмотрим ситуацию: реквизит должен быть виден только если текущий пользователь является руководителем подразделения-подготовителя. Алгоритм действий следующий:

  1. Создадим скрытый дополнительный реквизит с типом Булево, назовем его, например, ПользовательИмеетДоступ.
  2. Настроим автоматическое заполнение этого реквизита. В «1С:Документооборот» это можно сделать через механизм Скриптов в шаблонах документов или через небольшое расширение, которое при открытии/записи документа проверяет роль пользователя и ставит «Да» или «Нет» в это поле.
  3. В стандартном конструкторе условий видимости для вашего основного «секретного» реквизита установим условие: Видимость, если ПользовательИмеетДоступ Равно Да.

Этот метод позволяет обойти ограничение конструктора, «подсовывая» ему нужное условие через промежуточное поле. Однако помните, что значение этого поля хранится в базе, и если условия доступа изменятся (например, пользователь сменит должность), значение в старых документах может остаться прежним.

Способ 3. Программное управление через расширение (Для разработчиков)

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

Выясним, как это реализовать программно. Нам необходимо перехватить событие формы документа ПриСозданииНаСервере или ПриЧтенииНаСервере. Рассмотрим пример кода, который скрывает дополнительный реквизит, если пользователь не обладает ролью «ДоступКФинансовымУсловиям»:


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

Важный нюанс: в управляемых формах «1С:Документооборот» элементы дополнительных реквизитов создаются программно. Поэтому обращение к ним напрямую по статическому имени (например, Элементы.МойРеквизит) может не сработать, так как имя генерируется системой (например, ДополнительныйРеквизит_Значение_Свойство_UUID). Рекомендуется искать нужный элемент перебором коллекции Элементы или использовать специализированные процедуры общего модуля УправлениеСвойствами.

Особенности в 1С:Документооборот 3.0

В версии 3.0 подход к работе с формами изменился. Появились Настройки отображения документов, которые позволяют более гибко управлять составом полей для разных видов документов. Тем не менее, базовая проблема конструктора условий остается прежней — он ориентирован на данные самого объекта.

В 3.0 для решения нашей задачи рекомендуется:

Резюме и рекомендации

Выбор метода зависит от строгости требований безопасности и ваших навыков владения платформой:

  1. Если нужно просто разграничить права (безопасность превыше всего) — используйте Группы доступа дополнительных реквизитов. Это надежно и предусмотрено вендором.
  2. Если нужно динамическое поведение без программирования — используйте метод с реквизитом-маркером.
  3. Если требуется сложная логика и вы готовы к поддержке кода — используйте Расширение конфигурации.

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

← На главную