Ссылка на файл в 1С:Документооборот: от навигационной до внешней URL

· 9 мин

Содержание

Чтобы получить прямую ссылку на файл в 1С:Документооборот, откройте карточку файла и нажмите значок цепочки «Получить ссылку» в заголовке формы. Программа скопирует навигационную ссылку вида e1cib/data/Справочник.Файлы?ref=.... Коллега с доступом к той же базе вставит её через команду «Перейти по ссылке» и откроет карточку.

Частое заблуждение — что такую строку можно вставить в браузер или переслать подрядчику. Нет: навигационная ссылка работает только внутри той же информационной базы. Чтобы файл открывался по обычному адресу https://..., базу публикуют на веб-сервере. А для скачивания из внешних систем без входа в 1С делают собственный HTTP-сервис в расширении.

Какие бывают ссылки на файл в Документообороте

Под «прямой ссылкой» люди имеют в виду разное. От задачи зависит способ.

Что нужноВид ссылкиКто откроет
Переслать коллеге внутри компанииe1cib/data/...Пользователь той же базы, в клиенте 1С
Открыть из письма или мессенджера в браузереhttps://сервер/база/#e1cib/data/...Пользователь базы, через веб-клиент
Скачать файл без входа в 1С (сайт, CRM, бот)https://сервер/база/hs/.../файлВнешняя система по своему ключу

📌 Первые два варианта открывают карточку файла с проверкой прав. Третий отдаёт сами двоичные данные — это уже интеграция, и её придётся делать самим.

Навигационная ссылка на файл в веб-клиенте и тонком клиенте

Это встроенная возможность платформы 1С:Предприятие 8.3. Ничего настраивать не нужно.

Как скопировать ссылку

  1. Найдите файл в списке «Файлы» или во вложениях документа.
  2. Откройте его карточку (двойной щелчок по строке).
  3. В заголовке формы нажмите значок цепочки — команда «Получить ссылку».
  4. Откроется окно со строкой ссылки. Скопируйте её.

Полученная строка выглядит так:

e1cib/data/Справочник.Файлы?ref=a1b2c3d4e5f60718293a4b5c6d7e8f90

Как открыть ссылку

  • 🖥️ В тонком клиенте: команда «Перейти по ссылке» в главном меню (кнопка с тремя полосками в левом верхнем углу), вставить строку, «Перейти».
  • 🌐 В веб-клиенте: вставить строку целиком после адреса публикации и символа #.
  • 🔗 В тексте задачи, обсуждения или комментария ДО ссылку можно вставить как есть — пользователь кликнет по ней внутри программы.

Ссылку на карточку файла удобнее давать, чем сам файл. Коллега всегда увидит текущую версию, а не ту копию, что вы когда-то выгрузили на диск.

Почему не стоит собирать ссылку вручную

Параметр ref — это внутренний идентификатор объекта. Он похож на уникальный идентификатор (GUID), но байты в нём переставлены. Если взять GUID файла из выгрузки и подставить в ref= как есть, получится ссылка на несуществующий объект.

В коде ссылку получают функцией платформы:

НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(ФайлСсылка);
АдресБазы = ПолучитьНавигационнуюСсылкуИнформационнойБазы();
ПолнаяСсылка = АдресБазы + "#" + НавигационнаяСсылка;

ПолучитьНавигационнуюСсылкуИнформационнойБазы() вернёт адрес публикации, если база открыта через веб-клиент или опубликована. Для файловой базы в тонком клиенте адрес будет локальным — снаружи по нему не попасть.

Публикация базы Документооборота на веб-сервере

Чтобы ссылку можно было открыть кликом из почты, базу публикуют. Тогда адрес вида https://do.company.ru/DO/#e1cib/data/... откроет карточку в браузере после входа.

Что подготовить

  • 🧩 Веб-сервер: IIS на Windows Server 2016 и новее или Apache.
  • 🧩 Модуль расширения веб-сервера — ставится вместе с платформой (компонент «Модули расширения веб-сервера» в установщике).
  • 🧩 Учётную запись с правами администратора Windows — публикация меняет настройки веб-сервера.
  • 🧩 Доменное имя и TLS-сертификат, если доступ нужен из интернета.

Шаги публикации

  1. Запустите Конфигуратор от имени администратора Windows.
  2. Откройте меню Администрирование → Публикация на веб-сервере.
  3. Укажите имя публикации латиницей, например DO. Оно станет частью адреса.
  4. Выберите веб-сервер и каталог публикации.
  5. Оставьте флажок публикации тонкого и веб-клиента.
  6. При необходимости отметьте нужные HTTP-сервисы и веб-сервисы на соответствующих вкладках.
  7. Нажмите «Опубликовать» и перезапустите веб-сервер, если программа это предложит.

Проверка: откройте в браузере http://имя-сервера/DO/. Должна появиться форма входа в 1С. Затем вставьте после адреса # и навигационную ссылку на файл.

Публикация в интернет без HTTPS означает, что логин и пароль пользователей пойдут открытым текстом. Ставьте сертификат до того, как раздадите ссылки.

Ссылка для тонкого клиента с рабочего стола

Если сотрудники работают в тонком клиенте, ссылку можно передать параметром запуска /URL. Он открывает указанный объект сразу после входа:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /IBName "Документооборот" /URL "e1cib/data/Справочник.Файлы?ref=a1b2c3d4e5f60718293a4b5c6d7e8f90"

Имя базы — как в списке информационных баз на этом компьютере.

HTTP-сервис для прямой ссылки на скачивание файла

Сайту, CRM или боту нужна не карточка, а сам файл по ссылке. Типовой Документооборот не выдаёт такие ссылки «из коробки», поэтому делают свой HTTP-сервис. Лучше всего — в расширении конфигурации: типовая конфигурация не снимается с поддержки, обновления ставятся как обычно.

Схема

  • 🛠️ В расширении создаётся HTTP-сервис, например с корневым URL files.
  • 🛠️ Шаблон URL: /get/{id}, метод GET.
  • 🛠️ Обработчик находит файл по идентификатору, проверяет ключ доступа и отдаёт двоичные данные.
  • 🛠️ Сервис публикуется вместе с базой (вкладка HTTP-сервисов в окне публикации).

Итоговый адрес:

https://do.company.ru/DO/hs/files/get/5f1c2a0e-7b3d-4e8a-9c41-0d2e6f7a8b9c?token=...

Пример обработчика

Пример для ДО 3.x, построенного на Библиотеке стандартных подсистем. Файл ищется по уникальному идентификатору ссылки, данные берутся функцией БСП РаботаСФайлами.ДвоичныеДанныеФайла.

Функция ПолучитьФайлGET(Запрос)

    Токен = Запрос.ПараметрыЗапроса.Получить("token");
    Если Не ТокенДействителен(Токен) Тогда
        Возврат Новый HTTPСервисОтвет(403);
    КонецЕсли;

    Попытка
        Идентификатор = Новый УникальныйИдентификатор(Запрос.ПараметрыURL["id"]);
    Исключение
        Возврат Новый HTTPСервисОтвет(400);
    КонецПопытки;

    ФайлСсылка = Справочники.Файлы.ПолучитьСсылку(Идентификатор);
    Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ФайлСсылка,
        "Наименование, Расширение, ПометкаУдаления");

    Если Реквизиты.Наименование = Неопределено Или Реквизиты.ПометкаУдаления Тогда
        Возврат Новый HTTPСервисОтвет(404);
    КонецЕсли;

    Данные = РаботаСФайлами.ДвоичныеДанныеФайла(ФайлСсылка, Ложь);
    Если Данные = Неопределено Тогда
        Возврат Новый HTTPСервисОтвет(404);
    КонецЕсли;

    ИмяФайла = Реквизиты.Наименование + "." + Реквизиты.Расширение;
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/octet-stream");
    Ответ.Заголовки.Вставить("Content-Disposition",
        "attachment; filename*=UTF-8''" + КодироватьСтроку(ИмяФайла, СпособКодированияСтроки.КодировкаURL));
    Ответ.УстановитьТелоИзДвоичныхДанных(Данные);
    Возврат Ответ;

КонецФункции

Функцию ТокенДействителен пишете сами: сверяете токен со списком выданных ключей в регистре сведений и проверяете срок действия.

В качестве {id} используйте строку ФайлСсылка.УникальныйИдентификатор(). В отличие от ref из навигационной ссылки, это обычный GUID — его удобно хранить во внешней системе.

Если база ДО 2.x

В редакции 2.x устройство хранения файлов отличается от 3.x, и функции БСП могут называться иначе. Перед разработкой посмотрите в Конфигураторе, как типовая команда «Сохранить как» получает данные файла, и повторите тот же вызов в своём сервисе.

Права доступа и безопасность ссылок

Навигационная ссылка не даёт никаких прав. Она лишь указывает на объект. Если у пользователя нет доступа к папке или документу, он увидит сообщение о недостаточности прав или «Объект не найден».

Для HTTP-сервиса всё наоборот: код работает под пользователем, указанным в публикации или переданным при аутентификации. Проверку прав нужно продумать самим.

Что настроить

  • 🔐 Отдельный пользователь ДО для сервиса, с доступом только к нужным папкам. Не полные права.
  • 🔐 Токен со сроком жизни: например, 24 часа для ссылки в письме, 15 минут для ссылки в чат-боте.
  • 🔐 Журнал выдачи: кто запросил ссылку, на какой файл, когда скачали.
  • 🔐 Только HTTPS и, если возможно, ограничение по IP на уровне веб-сервера.
  • 🔐 Вывод в лог регистрации — чтобы при разборе инцидента было видно обращения.

Как выпускать токены

Простой и надёжный вариант — регистр сведений в расширении с полями: токен (случайная строка из Новый УникальныйИдентификатор()), файл, срок действия, кто выпустил, сколько раз скачан. Сервис при каждом запросе ищет токен, сравнивает срок с ТекущаяДатаСеанса() и увеличивает счётчик. Отозвать ссылку — значит удалить запись или сдвинуть срок в прошлое.

Одноразовые ссылки делаются так же: после первого успешного скачивания запись удаляется.

Не публикуйте сервис, который отдаёт файл по одному лишь GUID без ключа. GUID трудно угадать, но такая ссылка, раз попав в пересланное письмо, работает вечно и для всех.

Ссылка на конкретную версию файла

В ДО у файла есть история версий. Карточка файла всегда показывает текущую версию. Если нужна именно та редакция договора, что согласовали в прошлый вторник, ссылку берут на версию.

В интерфейсе

  1. Откройте карточку файла.
  2. Перейдите к списку версий файла.
  3. Откройте нужную версию двойным щелчком.
  4. В её форме нажмите значок цепочки «Получить ссылку».

Ссылка будет вида e1cib/data/Справочник.ВерсииФайлов?ref=.... Она не изменится, когда появится новая версия.

В HTTP-сервисе

Добавьте второй шаблон URL, например /version/{id}, и ищите объект в справочнике ВерсииФайлов. Для ссылки «всегда на последнюю версию» оставьте вариант с файлом — он сам отдаст текущую.

Ссылка ведёт наЧто откроется через месяцКогда использовать
ФайлТекущую версиюРегламенты, шаблоны, актуальные прайсы
Версию файлаРовно ту редакциюСогласованный договор, протокол, доказательство

Автоматическая выдача ссылок во внешние системы

Когда ссылки нужны сотням людей, копировать их руками неудобно. Вот рабочие варианты.

Ссылка в уведомлении из ДО

Если в базе настроены почтовые уведомления, в текст можно добавить полную ссылку на карточку. Собирается она теми же функциями ПолучитьНавигационнуюСсылкуИнформационнойБазы() и ПолучитьНавигационнуюСсылку() в расширении, которое формирует письмо.

Запрос ссылки внешней системой

Схема для CRM или портала:

  1. Внешняя система обращается к сервису ДО: «дай ссылку на файл договора № 125».
  2. Сервис ищет файл, выпускает токен и возвращает готовый URL.
  3. Система показывает ссылку пользователю или вставляет в письмо клиенту.
  4. По истечении срока токен перестаёт работать.

Для поиска файлов и обмена данными в ДО есть типовой веб-сервис интеграции. Им пользуются другие конфигурации 1С при связке с Документооборотом. Но выпуск временных ссылок в нём не предусмотрен, это всё равно делается в своём расширении.

Сопоставление полей
Номер договора в CRM→Документ ДО по номеру и контрагенту
Тип вложения в CRM→Вид файла или папка ДО
Срок ссылки в CRM→Срок жизни токена в регистре
Ответ сервиса (URL)→Поле «Ссылка на договор» в CRM

Частые ошибки при получении ссылки

Диагностика: выберите симптом

Переопубликация меняет файл default.vrd и настройки веб-сервера. Пока веб-сервер перезапускается, пользователи веб-клиента теряют сеансы. Делайте это вне рабочего времени и предупредите людей.

Частые вопросы

Можно ли получить ссылку на файл, если база файловая?
Внутри базы — да, навигационные ссылки работают в любой базе. Для доступа из браузера файловую базу тоже можно опубликовать на веб-сервере, но для многих пользователей лучше клиент-серверный вариант.
Останется ли ссылка рабочей после переименования файла?
Да. Ссылка привязана к объекту, а не к имени. Переименование, перенос в другую папку и новая версия её не ломают.
Что будет со ссылкой, если файл пометить на удаление?
Пока объект не удалён физически, ссылка откроет карточку с пометкой. После удаления помеченных объектов ссылка перестанет работать.
Ссылка сработает в мобильном приложении?
Навигационные ссылки поддерживает и мобильный клиент, если он подключён к той же опубликованной базе. Ссылку на HTTP-сервис откроет любой браузер телефона.
Можно ли дать ссылку человеку без учётной записи в ДО?
Только через свой HTTP-сервис с токеном. Веб-клиент и навигационная ссылка всегда требуют входа в базу.