Как реализовать хранение ссылки на файл в элементе справочника и открывать его по клику

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

В процессе разработки в среде 1С:Предприятие часто возникает задача связать элемент справочника (например, «Договоры» или «Номенклатура») с внешним файлом, хранящимся в сетевой папке. Это позволяет не перегружать базу данных тяжелыми двоичными данными, сохраняя лишь «путеводитель» к документу. В этой статье мы подробно разберем, как реализовать механизм выбора сетевого пути, его сохранения и последующего открытия файла, ориентируясь на возможности платформы 1С 8.1 и обычные формы.

Этап 1: Подготовка структуры метаданных

Прежде всего, нам необходимо определить, где именно будет храниться информация о пути к файлу. Рассмотрим этот процесс по шагам. Поскольку форма сама по себе не является хранилищем данных, нам нужно внести изменения в структуру справочника в Конфигураторе.

  1. Найдем нужный справочник в дереве метаданных.
  2. Перейдем на вкладку «Реквизиты» и добавим новый реквизит, например, с именем ПутьКФайлу.
  3. Тип данных: выберем «Строка».
  4. Длина: это критически важный момент. Сетевые пути могут быть очень длинными (особенно в глубоко вложенных папках). Рекомендуется устанавливать длину не менее 255 символов, а лучше 500, либо выбрать «Неограниченная длина», если конфигурация позволяет.

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

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

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

Рассмотрим основные свойства элемента управления ПолеВвода, который связан с нашим реквизитом ПутьКФайлу:

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

Этап 3: Реализация выбора файла из сети

Чтобы при нажатии на кнопку выбора открывалось окно проводника, нам нужно написать обработчик события НачалоВыбора. Выясним, как программно вызвать диалог работы с файловой системой.

Посмотрим на пример кода, который инициализирует диалог:


Процедура ПутьКФайлуНачалоВыбора(Элемент, СтандартнаяОбработка)
    
    // Отменяем стандартную обработку 1С, чтобы реализовать свою логику
    СтандартнаяОбработка = Ложь;
    
    // Создаем объект диалога
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберите файл для привязки";
    Диалог.ПолноеИмяФайла = Элемент.Значение;
    
    // Устанавливаем фильтры, если нужно ограничить типы файлов
    Диалог.Фильтр = "Все файлы (*.*)|*.*|Документы PDF (*.pdf)|*.pdf";
    
    Если Диалог.Выбрать() Тогда
        // Записываем выбранный путь в реквизит
        Элемент.Значение = Диалог.ПолноеИмяФайла;
    КонецЕсли;
    
КонецПроцедуры

Важный совет по работе с сетевыми ресурсами: старайтесь приучить пользователей использовать UNC-пути (например, \\Server\Documents\file.pdf) вместо путей через подключенные сетевые диски (например, Z:\file.pdf). Проанализируем причину: у одного пользователя диск Z: может быть подключен к одной папке, а у другого — к другой или не подключен вовсе. Ссылка в формате UNC гарантирует доступность файла для всех участников сети при наличии прав доступа.

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

Для реализации открытия файла по клику на кнопку «Открытие» или по нажатию на гиперссылку, мы будем использовать метод ЗапуститьПриложение(). Однако перед этим крайне желательно убедиться, что файл вообще существует по указанному адресу.

Разберем по шагам алгоритм безопасного открытия:


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

Использование объекта Файл и метода Существует() позволяет избежать системных ошибок Windows и дать пользователю понятное объяснение, если сетевой ресурс временно недоступен.

Этап 5: Особенности хранения и права доступа

Рассмотрим подробнее важные нюансы, которые часто упускаются из виду при реализации подобных механизмов:

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

← На главную