В процессе разработки в среде 1С:Предприятие часто возникает задача связать элемент справочника (например, «Договоры» или «Номенклатура») с внешним файлом, хранящимся в сетевой папке. Это позволяет не перегружать базу данных тяжелыми двоичными данными, сохраняя лишь «путеводитель» к документу. В этой статье мы подробно разберем, как реализовать механизм выбора сетевого пути, его сохранения и последующего открытия файла, ориентируясь на возможности платформы 1С 8.1 и обычные формы.
Прежде всего, нам необходимо определить, где именно будет храниться информация о пути к файлу. Рассмотрим этот процесс по шагам. Поскольку форма сама по себе не является хранилищем данных, нам нужно внести изменения в структуру справочника в Конфигураторе.
ПутьКФайлу.Проанализируем ситуацию: если мы оставим длину строки по умолчанию (10 символов), путь просто не поместится, и система обрежет его при записи, что сделает ссылку нерабочей. Поэтому всегда закладывайте запас по длине.
Теперь, когда у нас есть место в базе данных, выведем этот реквизит на форму элемента справочника. Разберем, как сделать работу с этим полем удобной для пользователя.
Рассмотрим основные свойства элемента управления ПолеВвода, который связан с нашим реквизитом ПутьКФайлу:
ПутьКФайлу.Если вы хотите, чтобы путь выглядел как активная интернет-ссылка, можно включить свойство «Гиперссылка». В этом случае текст станет синим и подчеркнутым, а курсор при наведении будет принимать форму «руки».
Чтобы при нажатии на кнопку выбора открывалось окно проводника, нам нужно написать обработчик события НачалоВыбора. Выясним, как программно вызвать диалог работы с файловой системой.
Посмотрим на пример кода, который инициализирует диалог:
Процедура ПутьКФайлуНачалоВыбора(Элемент, СтандартнаяОбработка)
// Отменяем стандартную обработку 1С, чтобы реализовать свою логику
СтандартнаяОбработка = Ложь;
// Создаем объект диалога
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл для привязки";
Диалог.ПолноеИмяФайла = Элемент.Значение;
// Устанавливаем фильтры, если нужно ограничить типы файлов
Диалог.Фильтр = "Все файлы (*.*)|*.*|Документы PDF (*.pdf)|*.pdf";
Если Диалог.Выбрать() Тогда
// Записываем выбранный путь в реквизит
Элемент.Значение = Диалог.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Важный совет по работе с сетевыми ресурсами: старайтесь приучить пользователей использовать UNC-пути (например, \\Server\Documents\file.pdf) вместо путей через подключенные сетевые диски (например, Z:\file.pdf). Проанализируем причину: у одного пользователя диск Z: может быть подключен к одной папке, а у другого — к другой или не подключен вовсе. Ссылка в формате UNC гарантирует доступность файла для всех участников сети при наличии прав доступа.
Для реализации открытия файла по клику на кнопку «Открытие» или по нажатию на гиперссылку, мы будем использовать метод ЗапуститьПриложение(). Однако перед этим крайне желательно убедиться, что файл вообще существует по указанному адресу.
Разберем по шагам алгоритм безопасного открытия:
Процедура ПутьКФайлуОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Путь = СокрЛП(Элемент.Значение);
Если ПустаяСтрока(Путь) Тогда
Предупреждение("Путь к файлу не указан!");
Возврат;
КонецЕсли;
// Проверяем физическое наличие файла
ФайлНаДиске = Новый Файл(Путь);
Если ФайлНаДиске.Существует() Тогда
Попытка
ЗапуститьПриложение(Путь);
Исключение
Сообщить("Не удалось открыть файл. Возможно, нет подходящей программы. " + ОписаниеОшибки());
КонецПопытки;
Иначе
Предупреждение("Файл не найден по указанному пути или сетевой ресурс недоступен!");
КонецЕсли;
КонецПроцедуры
Использование объекта Файл и метода Существует() позволяет избежать системных ошибок Windows и дать пользователю понятное объяснение, если сетевой ресурс временно недоступен.
Рассмотрим подробнее важные нюансы, которые часто упускаются из виду при реализации подобных механизмов:
\\Server\Documents, то программа выдаст ошибку «Файл не найден», даже если путь указан верно..\Files\doc.txt) не рекомендуется, так как рабочим каталогом 1С может быть папка установки платформы или временная папка пользователя. Используйте только абсолютные пути.Таким образом, мы создали надежный и простой механизм связи объектов базы данных с внешними файлами. Этот подход позволяет сохранять высокую производительность информационной базы, не увеличивая ее размер за счет вложений, и при этом предоставляет пользователям удобный интерфейс для работы с документацией.