Статьи 1С программиста

заметки и другая полезная информация по 1С

Полное руководство по свойствам элемента формы "КнопкаФормы" в 1С. Часть 2

952
09 января 2025

Свойство "Заголовок" кнопки

Описание свойства:

Свойство Заголовок кнопки отвечает за текст, который отображается на кнопке. Оно является ключевым для понимания назначения кнопки пользователем, делая интерфейс интуитивно понятным.

Основные характеристики:

  • Тип: Строка. Текст может быть любой длины, но следует учитывать ограничение высоты кнопки.
  • Доступность: Свойство доступно для чтения и записи, его можно изменить как на этапе проектирования, так и во время выполнения программы.
  • Использование: Позволяет динамически менять текст кнопки в зависимости от действий пользователя или состояния программы.

Где применяется:

Свойство Заголовок используется для отображения текстового описания на кнопке, например:

  • Для стандартных кнопок ("Сохранить", "Удалить", "Закрыть").
  • Для информативных кнопок с поясняющим текстом ("Подробнее", "Показать настройки").
  • Для кнопок, текст которых может изменяться в зависимости от контекста (например, "Включить" или "Отключить").

Пример использования:

На форме создаются две кнопки с разными заголовками:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ)
    // Создаем одну команду для кнопок.
    КомандаКнопок = ЭтаФорма.Команды.Добавить("КомандаКнопок");

    // Добавляем первую кнопку с заголовком "Кнопка 1".
    Кнопка1 = ЭтаФорма.Элементы.Добавить("Кнопка1", Тип("КнопкаФормы"), ЭтаФорма);
    Кнопка1.ИмяКоманды = "КомандаКнопок";
    Кнопка1.Заголовок = "Кнопка 1";

    // Добавляем вторую кнопку с заголовком "Кнопка 2".
    Кнопка2 = ЭтаФорма.Элементы.Добавить("Кнопка2", Тип("КнопкаФормы"), ЭтаФорма);
    Кнопка2.ИмяКоманды = "КомандаКнопок";
    Кнопка2.Заголовок = "Кнопка 2";
КонецПроцедуры

Результат:

На форме появятся две кнопки:

  • Кнопка 1: с текстом "Кнопка 1".
  • Кнопка 2: с текстом "Кнопка 2".

Свойство "ИмяКоманды" кнопки

Описание свойства:

Свойство ИмяКоманды кнопки позволяет привязать элемент формы к определённой команде. Это связывание определяет поведение кнопки при нажатии, вызывая соответствующий обработчик команды. С помощью ИмяКоманды можно гибко управлять логикой взаимодействия, изменяя её в зависимости от действий пользователя или текущего состояния программы.

Основные характеристики:

  • Тип: Строка — название команды, связанной с кнопкой.
  • Доступность: Свойство доступно для чтения и записи. Его можно изменять в процессе работы программы.
  • Использование: Позволяет одной кнопке вызывать разные команды, меняя её поведение динамически.

Как это работает:

При нажатии на кнопку с указанным ИмяКоманды, система автоматически вызывает обработчик, связанный с этой командой. Это упрощает логику программы и делает интерфейс более адаптивным.

Пример использования:

В нашем примере мы создаём две кнопки:

  • Первая кнопка: отвечает за смену команды второй кнопки. Её заголовок динамически меняется, указывая, какая команда будет активирована у второй кнопки.
  • Вторая кнопка: её ИмяКоманды переключается между двумя командами: Команда1 и Команда2. При нажатии она выполняет активированную команду, выводя соответствующее сообщение.

Код примера:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ)
    // Создаем команду для первой кнопки.
    КомандаИзменить = ЭтаФорма.Команды.Добавить("КомандаИзменить");
    КомандаИзменить.Действие = "ИзменитьКоманду";

    // Создаем команду 1.
    Команда1 = ЭтаФорма.Команды.Добавить("Команда1");
    Команда1.Действие = "ДействиеКоманда1";

    // Создаем команду 2.
    Команда2 = ЭтаФорма.Команды.Добавить("Команда2");
    Команда2.Действие = "ДействиеКоманда2";

    // Добавляем первую кнопку для изменения команды второй кнопки.
    КнопкаИзменитьКоманду = ЭтаФорма.Элементы.Добавить("КнопкаИзменитьКоманду", Тип("КнопкаФормы"), ЭтаФорма);
    КнопкаИзменитьКоманду.ИмяКоманды = "КомандаИзменить";
    КнопкаИзменитьКоманду.Заголовок = "Изменить Команду на 2";

    // Добавляем вторую кнопку, связав её с командой 1.
    КнопкаСменная = ЭтаФорма.Элементы.Добавить("КнопкаСменная", Тип("КнопкаФормы"), ЭтаФорма);
    КнопкаСменная.ИмяКоманды = "Команда1";
    КнопкаСменная.Заголовок = "Активирована команда 1";
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьКоманду(Команда)
    // Переход на сервер для изменения команды второй кнопки.
    ИзменитьКомандуНаСервере();
КонецПроцедуры

&НаСервере
Процедура ИзменитьКомандуНаСервере()
    // Получаем ссылки на кнопки.
    КнопкаСменная = ЭтаФорма.Элементы.КнопкаСменная;
    КнопкаИзменитьКоманду = ЭтаФорма.Элементы.КнопкаИзменитьКоманду;

    // Меняем ИмяКоманды у второй кнопки и заголовки на первой кнопке.
    Если КнопкаСменная.ИмяКоманды = "Команда1" Тогда
        КнопкаСменная.ИмяКоманды = "Команда2"; // Меняем команду на "Команда2".
        КнопкаСменная.Заголовок = "Активирована команда 2";
        КнопкаИзменитьКоманду.Заголовок = "Изменить Команду на 1";
    Иначе
        КнопкаСменная.ИмяКоманды = "Команда1"; // Меняем команду на "Команда1".
        КнопкаСменная.Заголовок = "Активирована команда 1";
        КнопкаИзменитьКоманду.Заголовок = "Изменить Команду на 2";
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ДействиеКоманда1(Команда)
    Сообщить("Команда 1");
КонецПроцедуры

&НаКлиенте
Процедура ДействиеКоманда2(Команда)
    Сообщить("Команда 2");
КонецПроцедуры

Как работает этот код:

  1. Первая кнопка вызывает серверную процедуру, которая меняет ИмяКоманды второй кнопки.
  2. На основе текущего значения ИмяКоманды у второй кнопки её поведение меняется — вызывается соответствующий обработчик команды.
  3. Заголовок первой кнопки динамически обновляется, чтобы пользователь понимал, какая команда будет активирована.

Результат:

  • При нажатии на первую кнопку вторая кнопка переключается между командами Команда1 и Команда2.
  • Заголовок первой кнопки меняется, указывая текущее состояние второй кнопки.

Применение:

Свойство ИмяКоманды особенно полезно для создания адаптивных интерфейсов, где элементы формы динамически меняют своё поведение в зависимости от действий пользователя или состояния программы. Это позволяет экономить место на форме и повышать удобство использования интерфейса.

Свойства "Картинка" и "ПоложениеКартинки" для кнопок в 1С

Зачем нужны свойства "Картинка" и "ПоложениеКартинки"?

Свойства Картинка и ПоложениеКартинки используются для улучшения визуального представления кнопок в форме 1С. Свойство Картинка позволяет назначить изображение, которое будет отображаться на кнопке. Это изображение может быть выбрано из библиотеки картинок. Свойство ПоложениеКартинки управляет расположением картинки относительно текста на кнопке: слева, справа или по умолчанию.

Использование свойства "Картинка"

Свойство Картинка принимает изображение из библиотеки или заданное программно. Пример:

Кнопка.Картинка = БиблиотекаКартинок.БизнесПроцесс; // Установка картинки из библиотеки

Использование свойства "ПоложениеКартинки"

Это свойство определяет, где на кнопке будет находиться картинка: слева или справа от текста.

Кнопка.ПоложениеКартинки = ПоложениеКартинкиКнопкиФормы.Лево; // Картинка слева Кнопка.ПоложениеКартинки = ПоложениеКартинкиКнопкиФормы.Право; // Картинка справа

Полный пример кода

Ниже приведен код создания кнопок с использованием обоих свойств.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ)

    // Создаем команду без заголовка
    НоваяКоманда = ЭтаФорма.Команды.Добавить("Команда1");

    // Добавляем первую кнопку с отображением только картинки из библиотеки
    Кнопка1 = ЭтаФорма.Элементы.Добавить("Кнопка1", Тип("КнопкаФормы"));
    Кнопка1.ИмяКоманды = "Команда1";
    Кнопка1.Картинка = БиблиотекаКартинок.БизнесПроцесс;
    Кнопка1.Отображение = ОтображениеКнопки.Картинка;

    // Добавляем вторую кнопку с отображением текста
    Кнопка2 = ЭтаФорма.Элементы.Добавить("Кнопка2", Тип("КнопкаФормы"));
    Кнопка2.ИмяКоманды = "Команда1";
    Кнопка2.Заголовок = "Только текст";
    Кнопка2.Отображение = ОтображениеКнопки.Текст;

    // Добавляем третью кнопку с отображением текста и картинки
    Кнопка3 = ЭтаФорма.Элементы.Добавить("Кнопка3", Тип("КнопкаФормы"));
    Кнопка3.ИмяКоманды = "Команда1";
    Кнопка3.Картинка = БиблиотекаКартинок.БизнесПроцесс;
    Кнопка3.Заголовок = "Текст и картинка";
    Кнопка3.Отображение = ОтображениеКнопки.КартинкаИТекст;
    Кнопка3.ПоложениеКартинки = ПоложениеКартинкиКнопкиФормы.Лево;

    // Добавляем четвёртую кнопку с отображением текста и картинки
    Кнопка4 = ЭтаФорма.Элементы.Добавить("Кнопка4", Тип("КнопкаФормы"));
    Кнопка4.ИмяКоманды = "Команда1";
    Кнопка4.Картинка = БиблиотекаКартинок.БизнесПроцесс;
    Кнопка4.Заголовок = "Текст и картинка";
    Кнопка4.Отображение = ОтображениеКнопки.КартинкаИТекст;
    Кнопка4.ПоложениеКартинки = ПоложениеКартинкиКнопкиФормы.Право;

КонецПроцедуры

Свойство "Родитель"

Что такое свойство Родитель и его назначение

Свойство Родитель является одним из ключевых механизмов управления иерархией элементов формы. Оно определяет принадлежность элемента к определенному контейнеру (группе) и позволяет программно определять и изменять расположение элементов в интерфейсе. Свойство доступно только для чтения и возвращает объект типа ГруппаФормы или ФормаКлиентскогоПриложения.

Базовые примеры использования

Получение текущего родителя элемента:

ТекущийРодитель = ЭлементФормы.Родитель;

Проверка принадлежности элемента к определенной группе:

Если ЭлементФормы.Родитель.Имя = "ИмяГруппы" Тогда ...

Создание элемента с указанием родителя:

НовыйЭлемент = Элементы.Добавить("ИмяЭлемента", Тип("КнопкаФормы"), ГруппаРодитель);
НовыйЭлемент.Заголовок = "Новая кнопка";

Практическое применение

Основные сценарии использования свойства включают:

  • Определение текущего расположения элемента
  • Программное перемещение элементов между группами
  • Создание динамических интерфейсов с изменяемой структурой
  • Организация условного отображения элементов в разных группах

Пример реализации перемещения элементов

Для демонстрации возможностей свойства рассмотрим практический пример динамического перемещения кнопки между двумя группами. В примере реализовано:

  • Создание двух визуально различимых групп
  • Размещение кнопки с возможностью перемещения
  • Механизм программного перемещения между группами

Исходный код решения

&НаСервере
Процедура ПриСозданииНаСервере(Отказ)

    // 1. Создаем команду "Изменить родителя"
    КомандаИзменитьРодителя = Команды.Добавить("КомандаИзменитьРодителя");
    КомандаИзменитьРодителя.Действие = "ИзменитьРодителяКнопки";
    КомандаИзменитьРодителя.Заголовок = "Изменить родителя";

    // Создаем кнопку для команды "Изменить родителя"
    КнопкаИзменить = Элементы.Добавить("КнопкаИзменитьРодителя", Тип("КнопкаФормы"));
    КнопкаИзменить.ИмяКоманды = "КомандаИзменитьРодителя";

    // 2. Создаем команду "Для видимости" без действия
    КомандаДляВидимости = Команды.Добавить("КомандаДляВидимости");
    КомандаДляВидимости.Заголовок = "Для видимости";

    // 3. Создаем две группы разного цвета
    // Группа 1
    Группа1 = Элементы.Добавить("Группа1", Тип("ГруппаФормы"));
    Группа1.Вид = ВидГруппыФормы.ОбычнаяГруппа;
    Группа1.Заголовок = "Группа 1";
    Группа1.ЦветФона = Новый Цвет(255, 200, 200); // Светло-красный
    Группа1.Отображение = ОтображениеОбычнойГруппы.СлабоеВыделение;

    // Кнопка "Для видимости" в группе 1
    КнопкаВидимости1 = Элементы.Добавить("КнопкаВидимости1", Тип("КнопкаФормы"), Группа1);
    КнопкаВидимости1.ИмяКоманды = "КомандаДляВидимости";

    // Группа 2
    Группа2 = Элементы.Добавить("Группа2", Тип("ГруппаФормы"));
    Группа2.Вид = ВидГруппыФормы.ОбычнаяГруппа;
    Группа2.Заголовок = "Группа 2";
    Группа2.ЦветФона = Новый Цвет(200, 255, 200); // Светло-зеленый
    Группа2.Отображение = ОтображениеОбычнойГруппы.СлабоеВыделение;

    // Кнопка "Для видимости" в группе 2
    КнопкаВидимости2 = Элементы.Добавить("КнопкаВидимости2", Тип("КнопкаФормы"), Группа2);
    КнопкаВидимости2.ИмяКоманды = "КомандаДляВидимости";

    // 4. Создаем кнопку "Родитель - Группа 1" в первой группе
    КнопкаПеремещаемая = Элементы.Добавить("КнопкаПеремещаемая", Тип("КнопкаФормы"), Группа1);
    КнопкаПеремещаемая.ИмяКоманды = "КомандаДляВидимости";
    КнопкаПеремещаемая.Заголовок = "Родитель - Группа 1";

КонецПроцедуры

&НаКлиенте
Процедура ИзменитьРодителяКнопки(Команда)
    ИзменитьРодителяКнопкиНаСервере();
КонецПроцедуры

&НаСервере
Процедура ИзменитьРодителяКнопкиНаСервере()
    // Находим текущую кнопку
    ТекущаяКнопка = Элементы.Найти("КнопкаПеремещаемая");

    Если ТекущаяКнопка <> Неопределено Тогда
        // Определяем текущего родителя
        ТекущийРодитель = ТекущаяКнопка.Родитель;
        НовыйРодитель = Неопределено;
        НовыйЗаголовок = "";

        // Определяем нового родителя и заголовок
        Если ТекущийРодитель.Имя = "Группа1" Тогда
            НовыйРодитель = Элементы.Найти("Группа2");
            НовыйЗаголовок = "Родитель - Группа 2";
        Иначе
            НовыйРодитель = Элементы.Найти("Группа1");
            НовыйЗаголовок = "Родитель - Группа 1";
        КонецЕсли;

        // Удаляем текущую кнопку
        Элементы.Удалить(ТекущаяКнопка);

        // Создаем новую кнопку в новой группе
        НоваяКнопка = Элементы.Добавить("КнопкаПеремещаемая", Тип("КнопкаФормы"), НовыйРодитель);
        НоваяКнопка.ИмяКоманды = "КомандаДляВидимости";
        НоваяКнопка.Заголовок = НовыйЗаголовок;
    КонецЕсли;
КонецПроцедуры

Особенности и рекомендации

  • Свойство Родитель доступно только для чтения, прямое изменение невозможно
  • Для изменения родителя необходимо использовать методы Удалить() и Добавить()
  • При программном перемещении элементов важно сохранять их функциональные свойства
  • Рекомендуется проверять существование элементов перед операциями с ними

Заключение

Свойство Родитель является мощным инструментом для создания динамических пользовательских интерфейсов. Его использование позволяет реализовывать сложные сценарии управления отображением и поведением элементов формы, обеспечивая гибкость и адаптивность интерфейса под различные задачи.

Стилизация кнопок. Свойства "Фигура", "ЦветРамки", "ЦветТекста", "ЦветФона", "Шрифт"

Описание свойств

Рассмотрим основные свойства, отвечающие за визуальное оформление кнопок, их значения и особенности применения. Данные свойства доступны для изменения как на сервере, так и на клиенте.

Свойство "Фигура"

Определяет геометрическую форму кнопки. Принимает значения из перечисления ФигураКнопки:

  • Обычная - стандартная прямоугольная форма
  • Овал - закругленная форма
  • Авто - автоматический выбор фигуры

Базовый пример установки фигуры:

КнопкаФормы.Фигура = ФигураКнопки.Овал;

Свойства цветового оформления

Три свойства отвечают за цветовое оформление кнопки. Все они принимают значение типа Цвет:

  • ЦветРамки - устанавливает цвет обводки кнопки
  • ЦветТекста - определяет цвет текста заголовка
  • ЦветФона - задает цвет заливки кнопки

Пример установки цветов:

КнопкаФормы.ЦветРамки = Новый Цвет(255, 0, 0);    // Красный
КнопкаФормы.ЦветТекста = Новый Цвет(255, 255, 255); // Белый
КнопкаФормы.ЦветФона = Новый Цвет(0, 0, 255);      // Синий

Свойство "Шрифт"

Управляет параметрами отображения текста на кнопке. Принимает значение типа Шрифт со следующими параметрами:

  • Имя шрифта (например, "Arial")
  • Размер в пунктах
  • Жирное начертание (Истина/Ложь)
  • Курсивное начертание (Истина/Ложь)

Пример настройки шрифта:

КнопкаФормы.Шрифт = Новый Шрифт("Arial", 12, Истина, Ложь);

Практический пример

Рассмотрим полный пример создания кнопок с различным оформлением:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ)

    // Создаем общую команду для всех кнопок
    КомандаКнопок = Команды.Добавить("КомандаКнопок");
    КомандаКнопок.Действие = "ДействиеКнопки";
    КомандаКнопок.Заголовок = "Тестовая команда";

    // 1. Создаем группу для кнопок с разными фигурами
    ГруппаФигур = Элементы.Добавить("ГруппаФигур", Тип("ГруппаФормы"));
    ГруппаФигур.Вид = ВидГруппыФормы.ОбычнаяГруппа;
    ГруппаФигур.Заголовок = "Кнопки разных фигур";

    // Создаем кнопку с обычной фигурой
    КнопкаОбычная = Элементы.Добавить("КнопкаОбычная", Тип("КнопкаФормы"), ГруппаФигур);
    КнопкаОбычная.ИмяКоманды = "КомандаКнопок";
    КнопкаОбычная.Заголовок = "Обычная фигура";
    КнопкаОбычная.Фигура = ФигураКнопки.Обычная;

    // Создаем кнопку с овальной фигурой
    КнопкаОвал = Элементы.Добавить("КнопкаОвал", Тип("КнопкаФормы"), ГруппаФигур);
    КнопкаОвал.ИмяКоманды = "КомандаКнопок";
    КнопкаОвал.Заголовок = "Овальная фигура";
    КнопкаОвал.Фигура = ФигураКнопки.Овал;

    // 2. Создаем группу для кнопок с разными цветами
    ГруппаЦветов = Элементы.Добавить("ГруппаЦветов", Тип("ГруппаФормы"));
    ГруппаЦветов.Вид = ВидГруппыФормы.ОбычнаяГруппа;
    ГруппаЦветов.Заголовок = "Кнопки с разными цветами";

    // Создаем кнопку с настроенными цветами
    КнопкаЦветная = Элементы.Добавить("КнопкаЦветная", Тип("КнопкаФормы"), ГруппаЦветов);
    КнопкаЦветная.ИмяКоманды = "КомандаКнопок";
    КнопкаЦветная.Заголовок = "Цветная кнопка";
    // Красная рамка
    КнопкаЦветная.ЦветРамки = Новый Цвет(255, 0, 0);
    // Белый текст
    КнопкаЦветная.ЦветТекста = Новый Цвет(255, 255, 255);
    // Синий фон
    КнопкаЦветная.ЦветФона = Новый Цвет(0, 0, 255);

    // 3. Создаем группу для кнопки с особым шрифтом
    ГруппаШрифта = Элементы.Добавить("ГруппаШрифта", Тип("ГруппаФормы"));
    ГруппаШрифта.Вид = ВидГруппыФормы.ОбычнаяГруппа;
    ГруппаШрифта.Заголовок = "Кнопка с особым шрифтом";

    // Создаем кнопку с настроенным шрифтом
    КнопкаШрифт = Элементы.Добавить("КнопкаШрифт", Тип("КнопкаФормы"), ГруппаШрифта);
    КнопкаШрифт.ИмяКоманды = "КомандаКнопок";
    КнопкаШрифт.Заголовок = "Кнопка с новым шрифтом";
    // Устанавливаем шрифт Arial, 12, жирный, курсив
    КнопкаШрифт.Шрифт = Новый Шрифт("Arial", 12, Истина, Истина);

КонецПроцедуры

Особенности использования

  • Изменение свойств на клиенте доступно без обращения к серверу
  • Для создания единого стиля интерфейса рекомендуется использовать одинаковое оформление для однотипных кнопок
  • При выборе цветов следует учитывать контрастность для обеспечения читаемости текста
  • В разных клиентских приложениях фигуры кнопок могут отображаться по-разному

Заключение

Грамотное применение свойств стилизации позволяет создавать интуитивно понятный интерфейс и акцентировать внимание пользователя на важных элементах управления. При этом важно соблюдать общий стиль приложения и не перегружать интерфейс излишним оформлением.

952
09 января 2025