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

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

Программное управление командами формы

877
25 октября 2024

В этой статье мы рассмотрим как программно работать с командами формы: создавать их, связывать с кнопками и удалять. В качестве примера создадим две кнопки, одна из которых при нажатии будет удалять вторую кнопку вместе с её командой.

Для работы нам понадобятся методы коллекции КомандыФормы:

  • Добавить() - создание новой команды
  • Найти() - поиск существующей команды по имени
  • Удалить() - удаление команды
  • Количество() - подсчет количества команд

1. Создание первой команды и кнопки

Начнем с создания команды и связанной с ней кнопки в процедуре ПриСозданииНаСервере:

Команда1 = ЭтаФорма.Команды.Добавить("Команда1");
Команда1.Действие = "НажатиеКнопки1";
Команда1.Заголовок = "Кнопка 1";

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

2. Создание второй команды и кнопки

Аналогично создаем вторую кнопку, которая будет удаляться при нажатии:

Команда2 = ЭтаФорма.Команды.Добавить("Команда2");
Команда2.Действие = "НажатиеКнопки2";
Команда2.Заголовок = "Кнопка 2 (Нажмите чтобы удалить)";

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

3. Обработка нажатия кнопок

Для первой кнопки просто выводим сообщение:

&НаКлиенте
Процедура НажатиеКнопки1(Команда)
    Сообщить("Нажата кнопка 1");
КонецПроцедуры

Для второй кнопки реализуем удаление команды на сервере:

&НаСервере
Процедура УдалитьКоманду2НаСервере()
    НайденнаяКоманда = ЭтаФорма.Команды.Найти("Команда2");

    Если НайденнаяКоманда <> Неопределено Тогда
        ЭтаФорма.Команды.Удалить(НайденнаяКоманда);
        Сообщить("Команда2 удалена. Кнопка без команды не будет отображаться на форме.");
        Сообщить("Осталось команд: " + ЭтаФорма.Команды.Количество());
    КонецЕсли;
КонецПроцедуры

Интересный момент: после удаления команды связанная с ней кнопка автоматически скрывается с формы, так как кнопка не может существовать без команды.

Полный код решения

Вот полный код с подробными комментариями, который вы можете использовать в своих проектах:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ)
    // 1. Создаем первую команду и кнопку
    // Добавляем команду в коллекцию команд формы. Метод Добавить() возвращает созданную команду
    Команда1 = ЭтаФорма.Команды.Добавить("Команда1");
    // Указываем имя процедуры, которая будет вызвана при нажатии кнопки
    Команда1.Действие = "НажатиеКнопки1";
    // Устанавливаем текст, который будет отображаться на кнопке
    Команда1.Заголовок = "Кнопка 1";

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

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

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

    // Выводим информацию о начальном количестве команд
    // Метод Количество() возвращает число команд в коллекции
    Сообщить("Начальное количество команд: " + ЭтаФорма.Команды.Количество());
КонецПроцедуры

&НаКлиенте
// Обработчик нажатия первой кнопки
Процедура НажатиеКнопки1(Команда)
    // Просто выводим сообщение для демонстрации работы команды
    Сообщить("Нажата кнопка 1");
КонецПроцедуры

&НаКлиенте
// Обработчик нажатия второй кнопки
Процедура НажатиеКнопки2(Команда)
    // Так как удаление команды нужно выполнять на сервере,
    // вызываем серверную процедуру
    УдалитьКоманду2НаСервере();
КонецПроцедуры

&НаСервере
// Серверная процедура для удаления второй команды
Процедура УдалитьКоманду2НаСервере()
    // Ищем команду по имени с помощью метода Найти()
    // Метод вернет команду или Неопределено, если команда не найдена
    НайденнаяКоманда = ЭтаФорма.Команды.Найти("Команда2");

    // Проверяем, что команда найдена
    Если НайденнаяКоманда <> Неопределено Тогда
        // Удаляем найденную команду из коллекции команд
        ЭтаФорма.Команды.Удалить(НайденнаяКоманда);

        // Выводим информационное сообщение об удалении
        // При удалении команды связанная с ней кнопка автоматически скрывается с формы
        Сообщить("Команда2 удалена. Кнопка без команды не будет отображаться на форме.");

        // Выводим информацию об оставшемся количестве команд
        // После удаления должна остаться только одна команда
        Сообщить("Осталось команд: " + ЭтаФорма.Команды.Количество());
    КонецЕсли;
КонецПроцедуры

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

877
25 октября 2024