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