При разработке прикладных решений на платформе 1С часто возникает задача обеспечения доступа к присоединенным файлам непосредственно из формы списка. Стандартные механизмы БСП чаще всего ориентированы на формы объектов, поэтому для списков требуется применение специализированных подходов. Давайте разберем, как правильно организовать этот функционал.
Для того чтобы интегрировать функционал подсистемы РаботаСФайлами в форму списка, мы можем использовать методы программного добавления элементов в командную панель. Рассмотрим пример реализации в процедуре ПриСозданииНаСервере формы списка:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Подключаем функционал БСП
ДобавляемыеЭлементы = Новый Массив;
ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов;
ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
ДобавляемыеЭлементы.Добавить(ПараметрыГиперссылки);
ОбщиеПараметрыПоля = РаботаСФайлами.ПолеФайла;
ОбщиеПараметрыПоля.ФильтрДиалогаВыбора = НСтр("ru = 'Изображения'") + "|*.bmp;*.png;*.jpg;*.pdf;*.doc;*.docx;*.odf;*.xls;*.xlsx;*.ods";
ОбщиеПараметрыПоля.МаксимальныйРазмер = 2;
ОбщиеПараметрыПоля.ПоказыватьКоманднуюПанель = Ложь;
РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ДобавляемыеЭлементы);
КонецПроцедуры
Обратите внимание: данный подход требует, чтобы текущая версия БСП поддерживала работу в контексте списков. Обязательно добавьте проверку наличия данных в списке, чтобы избежать ошибок при пустом динамическом списке:
Если Элементы.Список.ТекущиеДанные <> Неопределено Тогда
// Логика открытия формы или вызова команды
КонецЕсли;
Более наглядным и распространенным способом является добавление в динамический список специальной колонки. Это позволяет пользователю сразу видеть, есть ли файлы у конкретной записи, и переходить к их редактированию одним кликом.
ДинамическийСписок, добавьте вычисляемое поле, проверяющее наличие записей в регистре сведений НаличиеФайлов. Лучше всего использовать левое соединение для исключения лишних проверок при открытии формы.ПолеКартинки. В обработчике события ПриПолученииДанных (или через механизм УсловноеОформление) настройте отображение картинки (например, «Скрепка»), если условие наличия файла выполняется.
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("ВладелецФайла", ВыбраннаяСтрока);
ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныеФайлы", ПараметрыОткрытияФормы, ЭтотОбъект);
КонецПроцедуры
При реализации данного функционала важно учитывать следующие моменты:
Выполнить() или Выбрать() внутри цикла обхода списка — это приведет к резкому замедлению прокрутки формы. Все вычисления должны быть выполнены на этапе формирования основного запроса динамического списка.ТекущаяСтрока ссылкой на нужный тип объекта, прежде чем передавать её в обработку РаботаСФайлами.Используя данные методы, вы сможете органично вписать работу с файлами в любой интерфейс списка, сделав его более удобным для конечного пользователя.