Как в командную панель добавить кнопки для редактирования списка значений в 1С

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

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

Выясним причину типичной ошибки при открытии справочника

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

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

Настройка формы выбора и обработчика подбора значений

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

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

Процедура КоманднаяПанель1ДействиеДобавить(Кнопка)
    // Получаем форму выбора справочника (например, Контрагенты или ФизическиеЛица)
    ФормаВыбора = Справочники.Контрагенты.ПолучитьФормуВыбора(, ЭтаФорма);
    
    // Включаем возможность выбора нескольких строк через Shift или Ctrl
    ФормаВыбора.ЭлементыФормы.СправочникСписок.МножественныйВыбор = Истина;
    
    // Открываем форму в режиме выбора
    ФормаВыбора.Открыть();
КонецПроцедуры

Теперь разберем, как принять выбранные значения. Когда пользователь нажимает кнопку «Выбрать» в форме выбора, платформа автоматически вызывает в форме-владельце стандартное событие ОбработкаВыбора.


Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
    // Проверяем тип возвращенного значения: при множественном выборе возвращается Массив
    Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда
        Для Каждого ЭлементМассива Из ВыбранноеЗначение Цикл
            // Проверяем, чтобы элемент не дублировался в списке
            Если ПолеСписка1.НайтиПоЗначению(ЭлементМассива) = Неопределено Тогда
                ПолеСписка1.Добавить(ЭлементМассива);
            КонецЕсли;
        КонецЦикла;
    ИначеЕсли ВыбранноеЗначение <> Неопределено Тогда
        // Одиночный выбор
        Если ПолеСписка1.НайтиПоЗначению(ВыбранноеЗначение) = Неопределено Тогда
            ПолеСписка1.Добавить(ВыбранноеЗначение);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Реализация удаления элементов из списка

Для кнопки «Удалить» в командной панели необходимо получить текущую выделенную строку и удалить ее из коллекции списка значений:


Процедура КоманднаяПанель1ДействиеУдалить(Кнопка)
    ТекущийЭлемент = ЭлементыФормы.ПолеСписка1.ТекущаяСтрока;
    
    Если ТекущийЭлемент <> Неопределено Тогда
        ПолеСписка1.Удалить(ТекущийЭлемент);
    КонецЕсли;
КонецПроцедуры

Настройка командной панели в конфигураторе: кнопки и стандартные картинки

Рассмотрим, как настроить кнопки без написания лишнего кода визуального оформления:

  1. Откроем свойства элемента КоманднаяПанель в редакторе формы.
  2. Если требуется связать панель со списком напрямую, в свойстве Источник действий укажем ЭлементыФормы.ПолеСписка1 и установим флаг Автозаполнение. Стандартные кнопки работы со списком добавятся автоматически.
  3. Если создаются пользовательские кнопки, нажмем правой кнопкой мыши по командной панели, выберем пункт Настройка кнопок и добавим новые элементы.
  4. В свойствах каждой кнопки укажем обработчик действия, а в поле Картинка выберем стандартные пиктограммы из встроенной библиотеки картинок платформы (например, пиктограммы «плюс» и «минус» для добавления и удаления строк).

Режим подбора без закрытия формы выбора

Если требуется непрерывный выбор элементов по двойному клику без постоянного закрытия и повторного открытия окна справочника, посмотрим на удобный режим подбора:


Процедура КоманднаяПанель1Подбор(Кнопка)
    ФормаВыбора = Справочники.Контрагенты.ПолучитьФормуВыбора(, ЭтаФорма);
    ФормаВыбора.ЗакрыватьПриВыборе = Ложь;
    ФормаВыбора.Открыть();
КонецПроцедуры

При установке свойства ЗакрыватьПриВыборе = Ложь окно выбора остается открытым, и каждое выбранное значение последовательно отправляется в процедуру ОбработкаВыбора вашей формы.

← На главную