При работе с крупными конфигурациями, такими как 1С:Комплексная автоматизация 2 (КА 2) или 1С:ERP, программисты и администраторы часто сталкиваются с ситуацией, когда в форме списка или журнала документов пропадает кнопка "Создать". При этом визуальный осмотр прав в конфигураторе может показывать, что права на объект есть, а RLS (ограничение доступа на уровне записей) настроен корректно. В данной статье мы подробно разберем, почему так происходит, и пройдем по шагам диагностики этой проблемы на основе практического опыта.
Первым делом проанализируем ситуацию, с которой столкнулся автор темы. Часто разработчики смотрят на шаблоны ограничений доступа, такие как #ПоЗначениямРасширенный. Однако важно понимать, что ограничения на Чтение не имеют прямого отношения к возможности создания нового документа. Если пользователю разрешено чтение, он увидит список, но кнопка создания управляется правами на Добавление и, что критически важно, Интерактивное добавление.
Рассмотрим подробнее: право Добавление позволяет создавать объект программно (из кода), а право Интерактивное добавление отвечает именно за наличие кнопки в интерфейсе и возможность ручного ввода пользователем. Если в роли установлен флаг на добавление, но снят на интерактивное добавление — кнопка "Создать" исчезнет. Для анализа того, какие роли и профили определяют права доступа к проблемному объекту, можно использовать инструмент для управления правами доступа.
В современных конфигурациях 1С интерфейс строится динамически в зависимости от настроек программы. Разберем ситуацию: если в разделе НСИ и администрирование отключена опция, отвечающая за использование конкретного типа документа (например, Заказы на перемещение), система автоматически скроет все команды создания этого документа во всех формах и журналах.
Для диагностики проверим значение константы, связанной с функциональной опцией. Это можно сделать через Функции для технического специалиста. Если опция выключена, никакие настройки ролей не заставят кнопку появиться. Проанализируем также метаданные: в свойствах документа ЗаказНаПеремещение в поле Функциональные опции может быть указано несколько параметров. Только при истинности каждого из них команда создания будет доступна в интерфейсе.
Как выяснилось в ходе обсуждения темы, наиболее коварной причиной являются расширения конфигурации. Проблема может крыться в том, что в расширении была модифицирована форма журнала или документа. Выясним основные причины блокировки кнопки через расширение:
Автозаполнение), стандартные кнопки могут перестать отображаться.ПриСозданииНаСервере или ПриОткрытии может содержаться код, который явно отключает доступность команд. Рассмотрим пример кода, который мог бы привести к такой проблеме:
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Ошибочная логика, блокирующая создание
Элементы.ФормаСоздать.Доступность = Ложь;
// Или установка всей формы в режим просмотра
ТолькоПросмотр = Истина;
КонецПроцедуры
Посмотрим на ситуацию глубже: если в расширении создана новая роль, которая должна дополнять права пользователя, но в ней не проставлены права на нужный тип документа, платформа может применить наиболее строгое ограничение в зависимости от настроек профиля доступа.
В конфигурациях КА 2 и ERP списки документов часто строятся не на основной таблице документов, а на основе регистра сведений РеестрДокументов. Это сделано для повышения производительности при отображении сводных журналов. Проанализируем, как это влияет на кнопку создания:
Если у пользователя отсутствуют права на чтение этого регистра или на выполнение определенных действий с ним, динамический список может инициализироваться некорректно. Система не может определить контекст и "не понимает", какой именно документ предлагать создать пользователю, из-за чего скрывает стандартные команды. Проверьте, есть ли у пользователя права на объект РегистрСведений.РеестрДокументов. Для быстрой проверки прав конкретного пользователя на этот регистр и другие объекты метаданных можно использовать обработку для просмотра прав на объекты.
Если визуальный осмотр не помогает, проанализируем ситуацию с помощью отладки. Мы можем проверить доступность права на создание непосредственно в коде формы. Рассмотрим полезный фрагмент кода для проверки прав:
// Проверка права на интерактивное добавление конкретного типа документа
Если ПравоДоступа("ИнтерактивноеДобавление", Метаданные.Документы.ЗаказНаПеремещение) Тогда
Сообщить("Право на создание есть");
Иначе
Сообщить("Право на создание отсутствует у текущего пользователя");
КонецЕсли;
Также важно убедиться, что форма не открывается в режиме выбора. Выясним это, проверив параметры открытия формы. Если форма открыта для выбора значения в другой документ, кнопка "Создать" может быть скрыта по умолчанию, если в свойствах динамического списка не стоит соответствующая галочка.
Разберем краткий чек-лист, который поможет быстро решить проблему в будущем:
Совместный анализ подобных проблем показывает, что в 90% случаев причина кроется либо в специфических механизмах БСП (как реестр документов), либо в побочных эффектах от использования расширений конфигурации, которые перекрывают стандартную логику платформы.