Как открыть несколько выделенных документов из формы списка в 1С?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При активной работе со списками документов в конфигурациях «1С:Предприятие» (например, в «Управление торговлей 10.3») пользователи часто включают множественный режим выделения строк. Возникает логичная задача: выделить сразу несколько строк и открыть каждую форму документа одним действием (например, по нажатию клавиши Enter или двойному клику мыши).

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

Анализ ограничений стандартного интерфейса платформы

Проанализируем поведение типовых форм списков при множественном выборе:

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

Программная реализация для обычных форм (УТ 10.3)

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

Разберем по шагам последовательность действий:

  1. Откроем форму списка документов в конфигураторе.
  2. В свойствах табличного поля найдем событие Выбор и создадим процедуру-обработчик.
  3. Установим параметр СтандартнаяОбработка = Ложь, чтобы отменить стандартное открытие только одного документа.
  4. Обойдем коллекцию ВыделенныеСтроки элемента формы и откроем форму для каждого объекта.

Посмотрим на пример программного кода для обычной формы:


Процедура ДокументСписокВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
    
    // Отменяем стандартное одиночное открытие
    СтандартнаяОбработка = Ложь;
    
    КоличествоВыделено = Элемент.ВыделенныеСтроки.Количество();
    
    Если КоличествоВыделено = 0 Тогда
        Возврат;
    КонецЕсли;
    
    // Проверяем ограничение на количество открываемых окон
    Если КоличествоВыделено > 15 Тогда
        Предупреждение("Выделено слишком много документов (" + Строка(КоличествоВыделено) + "). Выберите не более 15 объектов.");
        Возврат;
    КонецЕсли;
    
    // Обходим коллекцию выделенных строк и открываем формы
    Для Каждого СтрокаДокумента Из Элемент.ВыделенныеСтроки Цикл
        ФормаДокумента = СтрокаДокумента.Ссылка.ПолучитьФорму();
        ФормаДокумента.Открыть();
    КонецЦикла;

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

Реализация для управляемых форм (УФ)

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

Посмотрим на пример обработчика выбора для управляемой формы:


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

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

Альтернативные варианты работы со списком документов

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

  1. Отдельная кнопка на командной панели: Чтобы сохранить стандартную логику клавиши Enter для одиночных строк, создадим на панели действий отдельную команду «Открыть выделенные» с горячей клавишей. Это позволит пользователю открывать один документ штатно, а группу — специальной командой.
  2. Универсальные групповые обработки: Если целью открытия документов является массовое изменение реквизитов или проведение, в типовых конфигурациях (включая УТ 10.3) эффективнее использовать инструмент «Групповая обработка справочников и документов», который позволяет выполнять операции в пакетном режиме без открытия индивидуальных форм.
← На главную