Разработка и Конфигурация · 9 мин
Как получить ссылку на файл в 1С
Как получить ссылку на файл в 1С: навигационная ссылка, путь к файлу в базе и на диске, примеры кода, типичные ошибки и способы проверки результата.
Под «ссылкой на файл» в 1С обычно понимают три разные вещи: навигационную ссылку на объект, к которому прикреплён файл, путь к файлу на диске или в сетевой папке, либо адрес временного хранилища, где лежат двоичные данные файла. Прежде чем писать код или искать настройку, нужно понять, какая именно ссылка требуется — от этого зависит способ получения.
В типовых конфигурациях (Бухгалтерия, Управление торговлей, ЗУП и другие на БСП) файлы хранятся через подсистему «Присоединенные файлы»: сам файл лежит либо в информационной базе в виде двоичных данных, либо в томах на диске, а в базе остаётся только элемент справочника с метаданными. Поэтому «ссылка на файл» — это чаще всего ссылка на элемент справочника присоединённых файлов, а не на сам файл.
Ниже разобраны основные сценарии: получение навигационной ссылки, работа с присоединёнными файлами, получение пути к файлу на диске, передача файла через временное хранилище и типичные ошибки.
Какие виды ссылок на файл существуют в 1С
Прежде чем получать ссылку, определите её тип. Навигационная ссылка — это строка вида e1cib/data/Справочник.Номенклатура?ref=..., которая открывает объект внутри клиента 1С. Она подходит для передачи между пользователями одной базы.
Ссылка на элемент справочника присоединённых файлов (например, «НоменклатураПрисоединенныеФайлы») — это обычная ссылка на объект базы, через которую можно получить сами двоичные данные файла. Путь к файлу на диске — строка вида C:\Docs\file.pdf или сетевой путь; актуален, если файлы хранятся в томах. Адрес временного хранилища — служебный идентификатор, действующий ограниченное время, используется для передачи данных между сервером и клиентом.
Как получить навигационную ссылку на объект с файлом
Если файл прикреплён к документу или элементу справочника и нужно дать коллеге ссылку на этот объект, используйте функцию ПолучитьНавигационнуюСсылку(Объект). Она принимает ссылку или объект и возвращает строку.
НавСсылка = ПолучитьНавигационнуюСсылку(ДокументСсылка);
// Результат: e1cib/data/Документ.ПоступлениеТоваровУслуг?ref=...
В тонком клиенте навигационную ссылку можно получить и без программирования: откройте объект, нажмите кнопку «Ещё» и выберите команду «Получить ссылку» (в ряде конфигураций — «Вывести ссылку» или сочетание клавиш). Ссылка копируется в буфер обмена и вставляется в письмо или сообщение.
Учтите ограничение: навигационная ссылка работает только внутри той же информационной базы. Пользователь другой базы или внешняя система по ней объект не откроют — для интеграций нужны другие механизмы (HTTP-сервисы, публикация базы на веб-сервере).
Как получить ссылку на присоединённый файл в типовых конфигурациях
В конфигурациях на Библиотеке стандартных подсистем файлы хранятся в справочниках вида «<ИмяОбъекта>ПрисоединенныеФайлы». Чтобы найти ссылку на конкретный файл, выполните запрос по владельцу:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Файлы.Ссылка КАК Ссылка,
| Файлы.Наименование КАК Наименование
|ИЗ
| Справочник.НоменклатураПрисоединенныеФайлы КАК Файлы
|ГДЕ
| Файлы.ВладелецФайла = &Владелец";
Запрос.УстановитьПараметр("Владелец", ТоварСсылка);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СсылкаНаФайл = Выборка.Ссылка;
КонецЦикла;
Имя справочника зависит от объекта-владельца: для контрагентов это «КонтрагентыПрисоединенныеФайлы», для документов — «<ИмяДокумента>ПрисоединенныеФайлы». Точное имя смотрите в конфигураторе в ветке «Справочники».
Интерактивно ссылку на файл можно скопировать из формы списка присоединённых файлов: откройте карточку объекта, перейдите к списку файлов и через «Ещё → Получить ссылку» скопируйте навигационную ссылку на нужный элемент.
Как получить двоичные данные и путь к файлу
Ссылка на элемент справочника — это не сам файл. Чтобы получить содержимое, в типовых конфигурациях используется функция общего модуля РаботаСФайлами.ДвоичныеДанныеФайла(СсылкаНаФайл). Она возвращает двоичные данные независимо от того, хранится файл в базе или в томе на диске.
ДвоичныеДанные = РаботаСФайлами.ДвоичныеДанныеФайла(СсылкаНаФайл);
ДвоичныеДанные.Записать("C:\Temp\" + СсылкаНаФайл.Наименование + "." + СсылкаНаФайл.Расширение);
Если файлы хранятся в томах на диске (настройка «Хранить файлы в томах на диске» в параметрах работы с файлами), физический путь формируется из пути к тому и относительного пути, сохранённого в реквизитах файла. Напрямую обращаться к файлу по этому пути не рекомендуется: при переносе тома или смене настроек путь изменится, а код перестанет работать.
Как передать файл через временное хранилище
Для передачи файла между клиентом и сервером или во внешнюю обработку используется временное хранилище. Функция ПоместитьВоВременноеХранилище(Данные, Адрес) возвращает адрес — строку-идентификатор, по которой данные доступны в рамках сеанса или формы.
АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификаторФормы);
// На клиенте:
ПолучитьФайл(АдресХранилища, ИмяФайла, Истина);
Адрес временного хранилища — не постоянная ссылка. Если не передать второй параметр (идентификатор формы), данные удалятся после завершения серверного вызова. Для длительного хранения привязывайте адрес к форме или сразу сохраняйте данные в базу.
- 1Получите ссылку на присоединённый файл запросом по владельцу
- 2Извлеките двоичные данные через РаботаСФайлами.ДвоичныеДанныеФайла()
- 3Поместите данные во временное хранилище с привязкой к форме
- 4Передайте адрес хранилища туда, где файл будет использоваться
- 5Проверьте, что файл открывается и имеет корректное расширение
Как проверить, что ссылка получена корректно
После получения ссылки убедитесь, что она рабочая. Для навигационной ссылки достаточно вставить её в поле перехода (команда «Перейти по ссылке» в меню «Файл» или диалог по Ctrl+F11 в некоторых версиях) — должен открыться нужный объект.
Для ссылки на присоединённый файл проверьте, что по ней возвращаются двоичные данные и что размер файла больше нуля. Пустой результат обычно означает, что файл физически отсутствует в томе или был удалён из хранилища.
Как проверить результат
Открывается нужный объект базы
Ошибка «Объект не найден» — ссылка устарела или из другой базы
Возвращаются данные ненулевого размера
Неопределено или пустые данные — файл отсутствует в хранилище
Это строка, по ней данные доступны в сеансе
Пустая строка или данные потеряны после серверного вызова
Типичные ошибки при работе со ссылками на файлы
Самая частая ошибка — путать ссылку на объект-владелец и ссылку на сам файл. Получив ссылку на номенклатуру, разработчик пытается извлечь из неё двоичные данные, хотя нужен элемент справочника присоединённых файлов.
Вторая распространённая проблема — использование навигационной ссылки для интеграции с внешними системами. Формат e1cib/... понимает только платформа 1С; для сайта или мобильного приложения нужно публиковать HTTP-сервис, который по идентификатору вернёт файл.
Частые вопросы
Можно ли получить ссылку на файл без программирования?
Да. В форме объекта или списка присоединённых файлов через меню «Ещё» доступна команда «Получить ссылку» — она копирует навигационную ссылку в буфер обмена. Для получения пути к файлу на диске без кода штатных средств обычно нет.
Почему навигационная ссылка не открывается у коллеги?
Чаще всего коллега работает в другой информационной базе (копии, тестовой), где у объекта другой внутренний идентификатор. Реже — у пользователя нет прав на объект или объект был удалён.
Как узнать, где хранятся файлы: в базе или на диске?
Откройте настройки работы с файлами в разделе администрирования («Настройка работы с файлами»). Если включён режим хранения в томах, файлы лежат на диске, иначе — в информационной базе в виде двоичных данных.
Чем отличается адрес временного хранилища от ссылки на файл?
Адрес хранилища — временный идентификатор данных в памяти сервера, действующий в рамках сеанса или формы. Ссылка на файл — постоянная ссылка на объект базы, по которой данные можно получить в любой момент, пока объект существует.
Как дать доступ к файлу внешней системе?
Навигационная ссылка для этого не подходит. Опубликуйте HTTP-сервис в конфигурации, который по переданному идентификатору найдёт присоединённый файл и вернёт его двоичные данные, либо используйте штатные механизмы обмена.
Что важно запомнить
Определите, какая ссылка нужна: навигационная (для пользователей той же базы), ссылка на элемент справочника присоединённых файлов (для программной работы) или адрес временного хранилища (для передачи данных в сеансе). Двоичные данные всегда получайте через штатные функции работы с файлами, а не напрямую с диска.