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

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

Рассмотрим ситуацию, когда в нетиповой или самописной конфигурации 1С на управляемых формах (без использования Библиотеки Стандартных Подсистем — БСП) требуется выгрузить или напечатать один документ сразу для нескольких выделенных элементов справочника (например, справочника «Сотрудники»). Разберем основные способы реализации этой задачи.

Способ 1. Использование команды справочника с множественным выбором

Это наиболее удобный и штатный механизм платформы 1С:Предприятие 8.3 для работы со списками объектов.

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

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

Проанализируем пример кода в модуле команды:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    // ПараметрКоманды содержит массив ссылок на выделенные строки
    ПараметрыОткрытия = Новый Структура;
    ПараметрыОткрытия.Вставить("МассивСотрудников", ПараметрКоманды);
    
    // Открываем форму внешней обработки или отчета, передавая массив ссылок
    ОткрытьФорму("Обработка.ПечатьОтчетаПоСотрудникам.Форма", 
                 ПараметрыОткрытия, 
                 ПараметрыВыполненияКоманды.Источник, 
                 ПараметрыВыполненияКоманды.Уникальность);

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

Способ 2. Получение выделенных строк из динамического списка формы

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

  1. В редакторе управляемой формы выбираем элемент «Таблица» (динамический список, например Элементы.Список) и проверяем, чтобы свойство МножественныйВыбор было установлено в значение Истина.
  2. В обработчике нажатия кнопки считываем массив выбранных элементов и передаем его в форму обработки.

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


&НаКлиенте
Процедура СформироватьПечать(Команда)

    // Получаем массив ссылок на выделенные в списке элементы
    МассивВыделенныхСтрок = Элементы.Список.ВыделенныеСтроки;
    
    Если МассивВыделенныхСтрок.Количество() = 0 Тогда
        ПоказатьПредупреждение(, "Не выбрано ни одного элемента!");
        Возврат;
    КонецЕсли;
    
    ПараметрыФормы = Новый Структура("МассивСсылок", МассивВыделенныхСтрок);
    ОткрытьФорму("ВнешняяОбработка.ПечатьДокументов.Форма", ПараметрыФормы);

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

Важные особенности и ограничения платформы

Выясним основные нюансы, которые необходимо учитывать при передаче множественного выбора:

  1. Указание основной таблицы: Свойство ВыделенныеСтроки возвращает массив ссылок только в том случае, если у динамического списка в свойствах заполнена ОсновнаяТаблица. Если список сформирован на основе произвольного запроса без основной таблицы, элементы массива будут содержать не ссылки, а ключи строк (структуры).
  2. Обработка группировок: Если пользователь сгруппировал динамический список, при выделении строки-группировки в массив попадет элемент типа группировки, а не ссылка. Перед обработкой массива на сервере рекомендуется проверять тип элементов через ТипЗнч(Элемент).
  3. Клиент-серверный контекст: Свойство ВыделенныеСтроки доступно только на клиенте. Передача массива ссылок на сервер для выполнения запросов или формирования печатной формы должна выполняться явным образом через параметры серверных процедур и функций.
← На главную