В повседневной работе программиста 1С часто возникает задача автоматизации рутинных процессов, таких как массовая печать или отправка документов по электронной почте. В типовых конфигурациях на обычных формах (например, УТП для Украины 1.2 или УПП 1.3) множественное выделение в журналах документов часто отключено по умолчанию, что вызывает неудобство у пользователей. Рассмотрим подробно, как реализовать механизм выбора нескольких объектов и последующую работу с ними.
Для начала разберем самое простое и очевидное интерфейсное решение — изменение свойств существующего журнала документов. В обычных формах за отображение списка отвечает элемент управления ТабличноеПоле, связанный с типом ДокументСписок.
Выполним следующие шаги для настройки интерфейса:
Истина.После этих манипуляций пользователь сможет выделять строки привычными способами: удерживая клавишу Ctrl для произвольного выбора или Shift для выделения диапазона.
После того как мы разрешили пользователю выбирать документы, нам необходимо считать эти данные и выполнить с ними действие (например, отправить в PDF). Проанализируем, как получить коллекцию выбранных ссылок в коде формы журнала.
Основным объектом для работы в данном случае является свойство табличного поля ВыделенныеСтроки. Рассмотрим пример кода, который можно разместить в обработчике нажатия новой кнопки на командной панели или в контекстном меню:
Процедура КоманднаяПанельДействиеОтправитьПочтой(Кнопка)
// Проверим, выбрано ли хоть что-нибудь
Если ЭлементыФормы.ДокументСписок.ВыделенныеСтроки.Количество() = 0 Тогда
Предупреждение("Не выбрано ни одного документа для отправки!");
Возврат;
КонецЕсли;
// Создаем массив для хранения ссылок, чтобы передать их в обработку
МассивДокументов = Новый Массив;
Для Каждого СсылкаИзСписка Из ЭлементыФормы.ДокументСписок.ВыделенныеСтроки Цикл
// Свойство ВыделенныеСтроки содержит ссылки на объекты (ДокументСсылка)
МассивДокументов.Добавить(СсылкаИзСписка);
КонецЦикла;
// Теперь вызываем логику обработки (например, внешнюю обработку или процедуру модуля)
ВыполнитьРассылкуДокументов(МассивДокументов);
КонецПроцедуры
Важный нюанс: при использовании фильтров (отборов) в журнале, коллекция ВыделенныеСтроки будет содержать только те документы, которые визуально выделены пользователем в текущем представлении списка.
Иногда изменение типового журнала нежелательно из-за требований поддержки конфигурации или сложности интерфейса. В этом случае рассмотрим вариант создания отдельной обработки, которая будет служить "Рабочим местом менеджера".
Проанализируем преимущества такого подхода:
Если мы выбираем путь создания АРМ на обычных формах, то алгоритм реализации будет аналогичен работе с журналом: добавляем на форму табличное поле с типом значения ДокументСписок.ИмяНужногоДокумента, включаем множественное выделение и обрабатываем коллекцию ВыделенныеСтроки.
Разберем техническую сторону задачи, ради которой затевался выбор документов. Платформа 1С 8.3 предоставляет встроенные механизмы для сохранения печатных форм в PDF без использования сторонних "виртуальных принтеров".
Типовой алгоритм обработки одного документа из списка выглядит так:
Функция СформироватьФайлPDF(СсылкаНаДокумент)
// Получаем печатную форму (стандартный механизм УТП/УПП)
ТабДок = ПечатьДокумента(СсылкаНаДокумент);
ИмяФайла = КаталогВременныхФайлов() + СсылкаНаДокумент.Номер + ".pdf";
// Сохраняем напрямую в PDF средствами платформы 8.3
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
Возврат ИмяФайла;
КонецФункции
Чтобы избежать "зависания" интерфейса при обработке большого количества документов (например, 50-100 штук), выясним, как оптимизировать этот процесс. Рассмотрим два подхода:
ЭлементыФормы.ИндикаторПрогресса, чтобы пользователь видел статус выполнения задачи. Это просто в реализации, но блокирует работу программы.Проанализируем ситуацию с точки зрения конечного пользователя. Просто включить множественное выделение недостаточно. Чтобы функционал был интуитивно понятным, выполним следующее:
Визуализация статуса отправки: крайне рекомендуется добавить в список документов колонку (через дополнительные сведения или регистр), которая будет отображать, был ли документ уже отправлен. Это предотвратит повторную отправку одних и тех же файлов клиенту.
Командная панель: вместо контекстного меню (которое многие пользователи не привыкли открывать), вынесем яркую кнопку "Отправить выбранное" на верхнюю панель журнала. Если действий несколько (Печать, Отправка, Выгрузка), сгруппируем их в подменю "Групповая обработка".
Обработка ошибок: при массовой отправке обязательно ведите лог. Если из 20 документов по двум возникла ошибка (например, не указан e-mail в карточке контрагента), программа не должна прерывать весь процесс. В конце работы следует вывести отчет: "Успешно отправлено: 18, Ошибок: 2".
Таким образом, комбинируя стандартные возможности табличного поля обычных форм и современные методы работы с данными платформы 8.3, можно создать удобный и эффективный инструмент для массовой обработки документов.