Как в 1С реализовать поиск файлов в папке и вывод их в интерактивный список с возможностью открытия

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

В процессе разработки внутренних инструментов в 1С часто возникает задача автоматизации работы с внешними файлами. Типичный сценарий: пользователю необходимо просканировать определенный каталог, увидеть список найденных документов (например, PDF-сканов) непосредственно на форме и иметь возможность открыть любой из них одним кликом. Рассмотрим подробно, как реализовать этот функционал, начиная от поиска файлов и заканчивая настройкой интерфейса для удобной работы.

Этап 1: Программный поиск файлов в каталоге

Для начала разберем механизм получения списка файлов из операционной системы. В платформе 1С для этих целей предусмотрен объект Файлы и метод НайтиФайлы. Проанализируем базовый код, который выполняет поиск по маске.


// Определяем путь к папке и маску поиска (например, все файлы PDF)
ПутьКПапке = "C:\scan";
МаскаПоиска = "*.pdf";

// Получаем массив объектов типа Файл
МассивНайденных = НайтиФайлы(ПутьКПапке, МаскаПоиска);

Для Каждого Файл Из МассивНайденных Цикл
    // Здесь Файл.ПолноеИмя содержит абсолютный путь, 
    // а Файл.Имя — только название файла с расширением
    Сообщить("Найден файл: " + Файл.Имя);
КонецЦикла;

Важно помнить, что если ваша база работает в клиент-серверном варианте, поиск файлов на клиенте и на сервере будет происходить в разных контекстах. Если файлы лежат на локальном компьютере пользователя, код должен выполняться на стороне клиента.

Этап 2: Подготовка экранной формы и таблицы значений

Чтобы вывести найденные данные пользователю, нам понадобится элемент интерфейса. Рассмотрим вариант с использованием Таблицы Значений (ТЗ), так как она позволяет хранить не только визуальное имя файла, но и скрытые данные, например, полный путь для открытия.

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

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

Совет: Чтобы колонка ИмяФайла выглядела как ссылка, в свойствах элемента формы (путь: Элементы -> СписокФайловИмяФайла) установим флажок Гиперссылка.

Этап 3: Заполнение списка найденными файлами

Теперь объединим поиск и вывод в таблицу. Перед заполнением таблицы крайне важно её очищать, чтобы при повторном нажатии кнопки данные не дублировались. Разберем обновленный алгоритм:


&НаКлиенте
Процедура НайтиИЗаполнитьСписок(Команда)
    
    // Очищаем старые данные из таблицы на форме
    Объект.СписокФайлов.Очистить();
    
    МассивНайденных = НайтиФайлы("C:\scan", "*.pdf");
    
    Для Каждого Файл Из МассивНайденных Цикл
        
        НоваяСтрока = Объект.СписокФайлов.Добавить();
        НоваяСтрока.ИмяФайла = Файл.Имя;
        НоваяСтрока.ПутьКФайлу = Файл.ПолноеИмя;
        
    КонецЦикла;
    
КонецПроцедуры

В этом примере мы используем Объект.СписокФайлов (если ТЗ является реквизитом объекта) или просто СписокФайлов (если это реквизит формы). Обратите внимание, что обращение к колонкам НоваяСтрока.ИмяФайла должно в точности соответствовать именам, заданным в метаданных формы.

Этап 4: Реализация открытия файла по клику

Самый ответственный момент — сделать список интерактивным. Для этого нам нужно перехватить событие Выбор у таблицы на форме. Это событие срабатывает при двойном клике по строке или нажатии клавиши Enter.

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


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

Выясним причину использования СтандартнаяОбработка = Ложь: это необходимо, чтобы система не пыталась выполнить свои внутренние действия по двойному клику, а передала управление вашему коду.

Этап 5: Современный подход и асинхронность

В актуальных версиях платформы 1С (8.3.18+) и при работе в веб-клиенте рекомендуется использовать асинхронные методы. Это позволяет избежать "замирания" интерфейса и корректно работает в браузерах. Вместо ЗапуститьПриложение рассмотрим использование ЗапуститьПриложениеАсинх.

Пример современного вызова:


// Асинхронный запуск не блокирует работу пользователя
ЗапуститьПриложениеАсинх(Путь);

Также стоит предусмотреть проверку существования файла перед его открытием. Пользователь мог удалить файл в папке "C:\scan" уже после того, как список был сформирован на форме. Для этого используем объект Файл:


ПроверкаФайла = Новый Файл(Путь);
Если ПроверкаФайла.Существует() Тогда
    ЗапуститьПриложение(Путь);
Иначе
    ПоказатьПредупреждение(, "Файл больше не существует по указанному пути!");
КонецЕсли;

Резюме и рекомендации

Мы рассмотрели полный цикл создания интерактивного реестра файлов. Подведем итоги:

Используя данный подход, вы сможете создавать удобные "пульты управления" документами, интегрируя внешние хранилища файлов непосредственно в интерфейс 1С.

← На главную