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

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

В повседневной работе программиста 1С часто возникает задача автоматизации рутинных процессов, таких как массовая печать или отправка документов по электронной почте. В типовых конфигурациях на обычных формах (например, УТП для Украины 1.2 или УПП 1.3) множественное выделение в журналах документов часто отключено по умолчанию, что вызывает неудобство у пользователей. Рассмотрим подробно, как реализовать механизм выбора нескольких объектов и последующую работу с ними.

Включение возможности множественного выделения в журнале

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

Выполним следующие шаги для настройки интерфейса:

  1. Откроем форму журнала документов в конфигураторе.
  2. Выберем основное табличное поле, где отображается список документов.
  3. В палитре свойств найдем параметр МножественноеВыделение (MultiSelect) и установим его в значение Истина.
  4. Для удобства пользователя также рекомендуется проверить свойство РазрешитьВводТекстаВЯчейку — его лучше отключить, чтобы случайное нажатие клавиш не приводило к попытке редактирования.

После этих манипуляций пользователь сможет выделять строки привычными способами: удерживая клавишу Ctrl для произвольного выбора или Shift для выделения диапазона.

Программная обработка выделенных документов

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

Основным объектом для работы в данном случае является свойство табличного поля ВыделенныеСтроки. Рассмотрим пример кода, который можно разместить в обработчике нажатия новой кнопки на командной панели или в контекстном меню:


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

Важный нюанс: при использовании фильтров (отборов) в журнале, коллекция ВыделенныеСтроки будет содержать только те документы, которые визуально выделены пользователем в текущем представлении списка.

Создание специализированного рабочего места (АРМ)

Иногда изменение типового журнала нежелательно из-за требований поддержки конфигурации или сложности интерфейса. В этом случае рассмотрим вариант создания отдельной обработки, которая будет служить "Рабочим местом менеджера".

Проанализируем преимущества такого подхода:

Если мы выбираем путь создания АРМ на обычных формах, то алгоритм реализации будет аналогичен работе с журналом: добавляем на форму табличное поле с типом значения ДокументСписок.ИмяНужногоДокумента, включаем множественное выделение и обрабатываем коллекцию ВыделенныеСтроки.

Автоматизация формирования PDF и отправки почты

Разберем техническую сторону задачи, ради которой затевался выбор документов. Платформа 1С 8.3 предоставляет встроенные механизмы для сохранения печатных форм в PDF без использования сторонних "виртуальных принтеров".

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


Функция СформироватьФайлPDF(СсылкаНаДокумент)
    
    // Получаем печатную форму (стандартный механизм УТП/УПП)
    ТабДок = ПечатьДокумента(СсылкаНаДокумент); 
    
    ИмяФайла = КаталогВременныхФайлов() + СсылкаНаДокумент.Номер + ".pdf";
    
    // Сохраняем напрямую в PDF средствами платформы 8.3
    ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
    
    Возврат ИмяФайла;
    
КонецФункции

Чтобы избежать "зависания" интерфейса при обработке большого количества документов (например, 50-100 штук), выясним, как оптимизировать этот процесс. Рассмотрим два подхода:

  1. Синхронная обработка с индикацией: используем ЭлементыФормы.ИндикаторПрогресса, чтобы пользователь видел статус выполнения задачи. Это просто в реализации, но блокирует работу программы.
  2. Асинхронная отправка (Фоновые задания): это наиболее профессиональный подход. Мы передаем массив ссылок на сервер в процедуру, которая запускается как фоновое задание. Пользователь может закрыть форму или продолжить работу в журнале, пока сервер формирует PDF и общается с почтовым сервером.

Рекомендации по интерфейсу и юзабилити

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

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

Командная панель: вместо контекстного меню (которое многие пользователи не привыкли открывать), вынесем яркую кнопку "Отправить выбранное" на верхнюю панель журнала. Если действий несколько (Печать, Отправка, Выгрузка), сгруппируем их в подменю "Групповая обработка".

Обработка ошибок: при массовой отправке обязательно ведите лог. Если из 20 документов по двум возникла ошибка (например, не указан e-mail в карточке контрагента), программа не должна прерывать весь процесс. В конце работы следует вывести отчет: "Успешно отправлено: 18, Ошибок: 2".

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

← На главную