Ссылка на файл в 1С:Документооборот: от навигационной до внешней URL
Содержание
Чтобы получить прямую ссылку на файл в 1С:Документооборот, откройте карточку файла и нажмите значок цепочки «Получить ссылку» в заголовке формы. Программа скопирует навигационную ссылку вида e1cib/data/Справочник.Файлы?ref=.... Коллега с доступом к той же базе вставит её через команду «Перейти по ссылке» и откроет карточку.
Частое заблуждение — что такую строку можно вставить в браузер или переслать подрядчику. Нет: навигационная ссылка работает только внутри той же информационной базы. Чтобы файл открывался по обычному адресу https://..., базу публикуют на веб-сервере. А для скачивания из внешних систем без входа в 1С делают собственный HTTP-сервис в расширении.
Какие бывают ссылки на файл в Документообороте
Под «прямой ссылкой» люди имеют в виду разное. От задачи зависит способ.
| Что нужно | Вид ссылки | Кто откроет |
|---|---|---|
| Переслать коллеге внутри компании | e1cib/data/... | Пользователь той же базы, в клиенте 1С |
| Открыть из письма или мессенджера в браузере | https://сервер/база/#e1cib/data/... | Пользователь базы, через веб-клиент |
| Скачать файл без входа в 1С (сайт, CRM, бот) | https://сервер/база/hs/.../файл | Внешняя система по своему ключу |
📌 Первые два варианта открывают карточку файла с проверкой прав. Третий отдаёт сами двоичные данные — это уже интеграция, и её придётся делать самим.
Навигационная ссылка на файл в веб-клиенте и тонком клиенте
Это встроенная возможность платформы 1С:Предприятие 8.3. Ничего настраивать не нужно.
Как скопировать ссылку
- Найдите файл в списке «Файлы» или во вложениях документа.
- Откройте его карточку (двойной щелчок по строке).
- В заголовке формы нажмите значок цепочки — команда «Получить ссылку».
- Откроется окно со строкой ссылки. Скопируйте её.
Полученная строка выглядит так:
e1cib/data/Справочник.Файлы?ref=a1b2c3d4e5f60718293a4b5c6d7e8f90
Как открыть ссылку
- 🖥️ В тонком клиенте: команда «Перейти по ссылке» в главном меню (кнопка с тремя полосками в левом верхнем углу), вставить строку, «Перейти».
- 🌐 В веб-клиенте: вставить строку целиком после адреса публикации и символа
#. - 🔗 В тексте задачи, обсуждения или комментария ДО ссылку можно вставить как есть — пользователь кликнет по ней внутри программы.
Ссылку на карточку файла удобнее давать, чем сам файл. Коллега всегда увидит текущую версию, а не ту копию, что вы когда-то выгрузили на диск.
Почему не стоит собирать ссылку вручную
Параметр ref — это внутренний идентификатор объекта. Он похож на уникальный идентификатор (GUID), но байты в нём переставлены. Если взять GUID файла из выгрузки и подставить в ref= как есть, получится ссылка на несуществующий объект.
В коде ссылку получают функцией платформы:
НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(ФайлСсылка);
АдресБазы = ПолучитьНавигационнуюСсылкуИнформационнойБазы();
ПолнаяСсылка = АдресБазы + "#" + НавигационнаяСсылка;
ПолучитьНавигационнуюСсылкуИнформационнойБазы() вернёт адрес публикации, если база открыта через веб-клиент или опубликована. Для файловой базы в тонком клиенте адрес будет локальным — снаружи по нему не попасть.
Публикация базы Документооборота на веб-сервере
Чтобы ссылку можно было открыть кликом из почты, базу публикуют. Тогда адрес вида https://do.company.ru/DO/#e1cib/data/... откроет карточку в браузере после входа.
Что подготовить
- 🧩 Веб-сервер: IIS на Windows Server 2016 и новее или Apache.
- 🧩 Модуль расширения веб-сервера — ставится вместе с платформой (компонент «Модули расширения веб-сервера» в установщике).
- 🧩 Учётную запись с правами администратора Windows — публикация меняет настройки веб-сервера.
- 🧩 Доменное имя и TLS-сертификат, если доступ нужен из интернета.
Шаги публикации
- Запустите Конфигуратор от имени администратора Windows.
- Откройте меню
Администрирование → Публикация на веб-сервере. - Укажите имя публикации латиницей, например
DO. Оно станет частью адреса. - Выберите веб-сервер и каталог публикации.
- Оставьте флажок публикации тонкого и веб-клиента.
- При необходимости отметьте нужные HTTP-сервисы и веб-сервисы на соответствующих вкладках.
- Нажмите «Опубликовать» и перезапустите веб-сервер, если программа это предложит.
Проверка: откройте в браузере 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 трудно угадать, но такая ссылка, раз попав в пересланное письмо, работает вечно и для всех.
Ссылка на конкретную версию файла
В ДО у файла есть история версий. Карточка файла всегда показывает текущую версию. Если нужна именно та редакция договора, что согласовали в прошлый вторник, ссылку берут на версию.
В интерфейсе
- Откройте карточку файла.
- Перейдите к списку версий файла.
- Откройте нужную версию двойным щелчком.
- В её форме нажмите значок цепочки «Получить ссылку».
Ссылка будет вида e1cib/data/Справочник.ВерсииФайлов?ref=.... Она не изменится, когда появится новая версия.
В HTTP-сервисе
Добавьте второй шаблон URL, например /version/{id}, и ищите объект в справочнике ВерсииФайлов. Для ссылки «всегда на последнюю версию» оставьте вариант с файлом — он сам отдаст текущую.
| Ссылка ведёт на | Что откроется через месяц | Когда использовать |
|---|---|---|
| Файл | Текущую версию | Регламенты, шаблоны, актуальные прайсы |
| Версию файла | Ровно ту редакцию | Согласованный договор, протокол, доказательство |
Автоматическая выдача ссылок во внешние системы
Когда ссылки нужны сотням людей, копировать их руками неудобно. Вот рабочие варианты.
Ссылка в уведомлении из ДО
Если в базе настроены почтовые уведомления, в текст можно добавить полную ссылку на карточку. Собирается она теми же функциями ПолучитьНавигационнуюСсылкуИнформационнойБазы() и ПолучитьНавигационнуюСсылку() в расширении, которое формирует письмо.
Запрос ссылки внешней системой
Схема для CRM или портала:
- Внешняя система обращается к сервису ДО: «дай ссылку на файл договора № 125».
- Сервис ищет файл, выпускает токен и возвращает готовый URL.
- Система показывает ссылку пользователю или вставляет в письмо клиенту.
- По истечении срока токен перестаёт работать.
Для поиска файлов и обмена данными в ДО есть типовой веб-сервис интеграции. Им пользуются другие конфигурации 1С при связке с Документооборотом. Но выпуск временных ссылок в нём не предусмотрен, это всё равно делается в своём расширении.
Частые ошибки при получении ссылки
Переопубликация меняет файл default.vrd и настройки веб-сервера. Пока веб-сервер перезапускается, пользователи веб-клиента теряют сеансы. Делайте это вне рабочего времени и предупредите людей.