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