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