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