Как программно добавить стандартные команды динамического списка на управляемую форму

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке сложных интерфейсов на платформе 1С:Предприятие 8.3 часто возникает необходимость программного создания элементов формы. Одной из наиболее трудоемких задач является не просто добавление реквизита типа ДинамическийСписок, но и полноценная настройка его командного интерфейса. Мы часто сталкиваемся с тем, что стандартные кнопки, такие как «Настроить список», «Изменить форму» или «Вывести список», не появляются автоматически, если командная панель создается программно. В этой статье мы подробно разберем, как вдохнуть жизнь в программно созданные кнопки и связать их со стандартными действиями платформы.

Разберем синтаксис имен стандартных команд

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

Проанализируем структуру формирования имени команды для динамического списка. Шаблон выглядит следующим образом: ИмяРеквизитаСписка + "СтандартнаяКоманда" + ИмяКоманды. Рассмотрим на конкретных примерах, как это применить в коде, если наш динамический список называется Список:

  1. Настройка списка: СписокСтандартнаяКомандаНастройкаСписка
  2. Вывести список: СписокСтандартнаяКомандаВывестиСписок
  3. Обновить: СписокСтандартнаяКомандаОбновить
  4. Установить период: СписокСтандартнаяКомандаУстановитьПериод
  5. Поиск по текущему значению: СписокСтандартнаяКомандаНайти или отборы на соответствие шаблону

Посмотрим на пример кода, который добавляет кнопку настройки списка в программно созданную командную панель:


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

Особенности реализации команды «Изменить форму»

Выясним важный нюанс относительно команды «Изменить форму». В отличие от команд управления конкретным списком, эта команда является глобальной для всей формы. Следовательно, префикс с именем реквизита здесь не требуется. Для ее вызова используется идентификатор ИзменитьФорму.

Однако стоит учитывать, что в ряде случаев платформа может ограничивать прямой вызов этой команды через свойство ИмяКоманды у программно созданной кнопки, если контекст формы еще не полностью инициализирован. Если вы столкнулись с тем, что кнопка не активна, попробуйте перенести логику ее настройки из процедуры ПриСозданииНаСервере в ПриОткрытии (на клиенте), хотя для большинства типовых задач серверного создания достаточно.

Управление автозаполняемыми кнопками и их скрытие

Часто задача стоит не только в добавлении новых кнопок, но и в удалении лишних, которые платформа добавила автоматически (например, «Создать» или «Создать группу»). Важно понимать: если у командной панели установлено свойство Автозаполнение в значении Истина, мы не можем «удалить» стандартные элементы в привычном понимании. Но мы можем управлять их видимостью.

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

Рассмотрим пример скрытия кнопки «Создать» для списка с именем Список:


// Скрываем стандартную кнопку создания
ИмяКнопкиСкрыть = "СписокСоздать";
ЭлементКнопка = Элементы.КоманднаяПанельСписка.ПодчиненныеЭлементы.Найти(ИмяКнопкиСкрыть);
Если ЭлементКнопка <> Неопределено Тогда
    ЭлементКнопка.Видимость = Ложь;
КонецЕсли;

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

Использование метода «ОткрытьНастройкуСписка»

Существует еще один, часто более надежный способ вызова окна настроек, если нам не нужно создавать стандартную кнопку, а требуется вызвать окно настройки из кода (например, при нажатии на нашу собственную кнопку с расширенной логикой). Для этого у элемента формы типа Таблица (связанного с динамическим списком) существует прямой метод.

Рассмотрим использование метода ОткрытьНастройкуСписка():


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

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

Программное создание группы кнопок

Для того чтобы интерфейс выглядел профессионально и соответствовал современным стандартам 1С, рекомендуется объединять программно созданные кнопки в группу. Посмотрим, как создать группу кнопок с видом «Командная панель».


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

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

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

Почему иногда советы «ПриОткрытии» работают лучше?

В процессе обсуждения на форумах часто упоминается лайфхак с использованием события ПриОткрытии. Выясним причину: на этапе ПриСозданииНаСервере объектная модель формы еще находится в стадии формирования. Платформа может еще не «знать» о полном составе стандартных команд, которые будут доступны данному пользователю (с учетом его прав и функциональных опций). Перенос части логики по управлению элементами на клиентский этап ПриОткрытии позволяет работать с уже полностью инициализированным контекстом формы, где все стандартные команды гарантированно зарегистрированы.

Используя предложенные методы, мы можем полностью контролировать внешний вид и функциональность динамических списков, создаваемых «на лету», обеспечивая пользователям привычный и удобный инструментарий для работы с данными.

← На главную