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