При работе с крупными конфигурациями 1С программисты часто сталкиваются с задачей массового изменения прав доступа. Например, необходимо запретить интерактивное удаление для всех документов во всех существующих ролях. Стандартный интерфейс Конфигуратора в этом плане накладывает серьезные ограничения: попытка массово снять галочку часто приводит к тому, что система, напротив, устанавливает ее, а в дополнение автоматически включает право Чтение. В этой статье мы подробно разберем, почему так происходит, и рассмотрим профессиональные способы решения этой задачи, включая работу с файловой выгрузкой и современными инструментами разработки.
Разберем ситуацию, с которой сталкивается разработчик. Открывая окно редактирования ролей и выбирая целую ветку метаданных (например, Документы), мы ожидаем, что нажатие на колонку конкретного права (например, Удаление) снимет его у всех объектов. Однако на практике интерфейс Конфигуратора часто ведет себя иначе. Это связано с тем, что в UI реализовано логическое правило: за один клик можно совершить только одно действие — либо массовую установку, либо массовое снятие. Поскольку установка прав требуется чаще, приоритет отдается ей.
Более того, в системе 1С существует жесткая иерархия прав. Проанализируем зависимость: такие права, как Удаление, Изменение или Интерактивное удаление, технически не могут существовать без права на Чтение и Просмотр. Как только вы пытаетесь установить право на удаление, Конфигуратор автоматически проставляет право Чтение, чтобы сохранить логическую целостность метаданных. При массовых операциях это превращается в проблему, так как «откатить» эти изменения назад так же массово через интерфейс крайне сложно.
Проанализируем наиболее надежный метод, который упоминали опытные разработчики в обсуждении. Если интерфейс Конфигуратора не позволяет удобно управлять галочками, мы можем отредактировать структуру прав напрямую в текстовом (XML) формате. Рассмотрим этот процесс по шагам:
Конфигурация — Выгрузить конфигурацию в файлы.... Выберем пустую папку для сохранения структуры.Roles. В ней содержатся XML-файлы для каждой роли в системе.<object>. Рассмотрим пример структуры для справочника:
<object>
<name>Catalog.ШаблоныАнкет</name>
<right>
<name>InteractiveDelete</name>
<value>false</value>
</right>
<right>
<name>InteractiveDeletePredefinedData</name>
<value>false</value>
</right>
</object>
Выясним важную особенность: если право установлено в значение true, оно обязательно присутствует в файле. Если мы хотим массово снять права, нам достаточно найти блоки с InteractiveDelete и заменить значение true на false. Если же для объекта установлены абсолютно все права, 1С может вообще не упоминать этот объект в файле выгрузки, считая разрешения полными по умолчанию.
Для автоматизации этого процесса воспользуемся скриптами (например, на языке Python или через PowerShell), которые пройдутся по всем файлам в папке Roles и выполнят замену текста. После внесения правок выполним обратную операцию: Конфигурация — Загрузить конфигурацию из файлов.
Современная среда разработки EDT предоставляет гораздо более гибкие инструменты для работы с метаданными. Рассмотрим, как решить нашу задачу в этой среде:
Properties (Свойства).Этот метод является наиболее прогрессивным, так как он исключает ошибки ручного редактирования XML-файлов и предоставляет визуальный контроль над процессом.
Посмотрим на ситуацию под другим углом. Если нам нужно массово «очистить» права, мы можем использовать механизм объединения конфигураций. Разберем этот алгоритм:
Сравнить, объединить с конфигурацией из файла, выбрав этот же файл конфигурации.Если по каким-то причинам выгрузка в файлы недоступна, а объектов слишком много для ручной правки, проанализируем возможность использования инструментов автоматизации кликов, таких как AutoHotKey (AHK). Рассмотрим простую логику скрипта:
Мы можем написать скрипт, который будет имитировать нажатие клавиши «вниз» и клик мышкой по определенным координатам или нажатие клавиши «пробел» для снятия галочки. Это «грубый» метод, но он эффективно решает проблему UI-ограничений Конфигуратора, когда нужно просто «прощелкать» 500 документов подряд.
Разберем подробнее внутреннюю логику системы. В 1С права доступа строятся на принципе расширения. Невозможно удалить объект, если система не «видит» его в базе данных. Поэтому, как только разработчик дает право на Удаление, платформа автоматически гарантирует пользователю право на Чтение (Read) и Просмотр (View).
При попытке массового снятия через Конфигуратор, система часто путается в текущих состояниях разных объектов (у одного чтение было, у другого нет) и выбирает «безопасный» режим — включает всё. Понимание этой связи помогает осознать, что наиболее чистым способом будет именно программная правка XML-файлов, где мы можем жестко задать value = false для конкретного права, не трогая остальные узлы.
Проанализировав все доступные варианты, выделим оптимальный план действий:
Чтение), а вторым проходом снимите его.Таким образом, комбинируя стандартные возможности платформы с внешними инструментами обработки текста, можно обойти любые ограничения интерфейса и эффективно управлять безопасностью системы даже в самых крупных программных продуктах на базе 1С.