Создание ссылок на файлы в 1С:Предприятие — задача, с которой сталкиваются и бухгалтеры при работе с первичными документами, и разработчики при автоматизации бизнес-процессов. В зависимости от версии платформы (1С 8.2 или 1С 8.3) и конфигурации (Управление торговлей, Бухгалтерия предприятия, Зарплата и управление персоналом) способы добавления ссылок могут различаться. Эта статья охватывает все актуальные методы: от простой вставки через интерфейс до написания кода на встроенном языке.

Особенность работы с файлами в 1С заключается в том, что система оперирует не прямыми путями (как в Windows), а объектами типа "ХранилищеЗначения" или "ДвоичныеДанные". Это обеспечивает безопасность и кросс-платформенность, но требует специфических подходов. Например, ссылка на файл в справочнике ДоговорыКонтрагентов будет храниться иначе, чем прикреплённый документ в ПоступлениеТоваров. Разберёмся, как реализовать каждый сценарий.

1. Способ: Ручное добавление ссылки через интерфейс 1С

Самый простой метод, не требующий знания программирования. Подходит для пользователей, которые нуждаются в прикреплении файлов к документам или справочникам "на лету". Рассмотрим на примере конфигурации 1С:Бухгалтерия 8.3 (ред. 3.0).

Алгоритм действий:

  • 📁 Откройте документ или элемент справочника, к которому нужно прикрепить файл (например, Счёт на оплату покупателю).
  • 🖼️ В панели инструментов документа найдите кнопку "Прикрепить файл" (значок скрепки) или вкладку Файлы.
  • 📎 Нажмите Добавить → выберите файл на своём компьютере. Система автоматически создаст ссылку и сохранит файл в базе.
  • 🔗 После сохранения документа ссылка будет доступна в виде гиперссылки с именем файла.

Ограничения метода:

  • ⚠️ Файлы хранятся внутри базы 1С, что увеличивает её размер. Для больших файлов (например, сканов договоров в высоком разрешении) это может замедлить работу.
  • ⚠️ Нет возможности настроить внешнее хранилище (например, сетевой диск или облако) без доработок конфигурации.
💡

Если кнопка "Прикрепить файл" отсутствует, проверьте настройки прав пользователя в разделе Администрирование → Настройки пользователей и прав → Роли. Возможно, у вашей роли нет прав на работу с файлами.

2. Способ: Использование реквизита типа "ХранилищеЗначения"

Для разработчиков и опытных пользователей, которые хотят гибко управлять файлами, подходит метод с использованием реквизита типа "ХранилищеЗначения". Этот способ позволяет хранить файлы непосредственно в объектах конфигурации (например, в справочниках или документах) и программно управлять ими.

Пошаговая инструкция:

  1. Откройте конфигуратор (Файл → Конфигуратор).
  2. Перейдите в нужный объект (например, справочник Контрагенты).
  3. Добавьте новый реквизит с типом ХранилищеЗначения и именем, например, ПрикреплённыеФайлы.
  4. В модуле объекта напишите обработчик для загрузки файла:
    Процедура ПрикреплённыеФайлыНачалоВыбора(Элемент, СтандартнаяОбработка)
    

    СтандартнаяОбработка = Ложь;

    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

    Если Диалог.Выбрать() Тогда

    Данные = Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла);

    Объект.ПрикреплённыеФайлы.Записать(Данные);

    КонецЕсли;

    КонецПроцедуры

Преимущества метода:

  • 🔧 Полный контроль над файлами через код (можно добавлять валидацию, ограничения по размеру, типу файлов).
  • 📊 Файлы хранятся в базе, что упрощает резервное копирование.
  • 🔄 Можно реализовать версионирование файлов (например, хранить историю изменений договоров).
Как извлечь файл из ХранилищаЗначения?

Чтобы получить файл обратно, используйте метод Прочитать():

Данные = Объект.ПрикреплённыеФайлы.Прочитать();

Данные.Записать("C:\Temp\ВыгруженныйФайл.pdf");

Обратите внимание, что путь для сохранения должен существовать, иначе возникнет ошибка.

3. Способ: Ссылка на файл через внешнее хранилище (сетевой диск, FTP)

Если файлы хранятся вне базы 1С (например, на сетевом диске или FTP-сервере), можно создать ссылку на них в виде гиперссылки. Этот метод подходит для крупных файлов (видео, архивы проектов), которые нецелесообразно хранить в базе.

Пример реализации:

  • 📂 Загрузите файл на сетевой диск (например, \\server\docs\contracts\dogovor123.pdf).
  • 🔗 В 1С добавьте реквизит типа Строка (например, СсылкаНаФайл).
  • 📝 В модуле формы добавьте обработчик для открытия файла:
    Процедура СсылкаНаФайлПриНажатии(Элемент)
    

    Путь = Объект.СсылкаНаФайл;

    Если НЕ ЗначениеЗаполнено(Путь) Тогда

    Предупреждение("Ссылка не указана!");

    Возврат;

    КонецЕсли;

    Попытка

    СистемаКоманд.Выполнить(Путь);

    Исключение

    Предупреждение("Не удалось открыть файл: " + ОписаниеОшибки());

    КонецПопытки;

    КонецПроцедуры

⚠️ Внимание: При использовании сетевых путей убедитесь, что у всех пользователей 1С есть права доступа к папке. В противном случае ссылка будет нерабочей. Для FTP потребуется дополнительная настройка аутентификации в коде.
Метод хранения Плюсы Минусы Когда использовать
Внутри базы 1С Простота, резервное копирование вместе с базой Увеличивает размер базы, ограничения по размеру файлов Для небольших файлов (до 10 МБ)
ХранилищеЗначения Гибкость, программный контроль Требует доработки конфигурации Для автоматизированных систем с большим количеством файлов
Внешнее хранилище Не нагружает базу, подходит для больших файлов Сложности с правами доступа, резервным копированием Для архивов, видео, крупных документов
📊 Как вы обычно храните файлы в 1С?
Внутри базы
На сетевом диске
В облачном хранилище (Yandex Disk, Google Drive)
Использую внешнюю систему документооборота

4. Способ: Гиперссылка в текстовом поле (HTML)

Если вам нужно вставить кликабельную ссылку на файл внутри текстового поля (например, в описании товара или комментарии к документу), можно использовать HTML-разметку. Этот метод работает в полях типа Строка (с включённым режимом Многострочный) или HTMLДокумент.

Инструкция:

  1. В форме документа или справочника добавьте реквизит типа Строка с длиной не менее 200 символов.
  2. В модуле формы напишите обработчик для вставки HTML-кода:
    Процедура ВставитьСсылкуНаФайл(Команда)
    

    ПутьКФайлу = "\\server\docs\contracts\dogovor123.pdf";

    ТекстСсылки = "Скачать договор №123";

    Объект.Описание = "<a href=""file://" + ПутьКФайлу + """" + ">" + ТекстСсылки + "</a>";

    КонецПроцедуры

  3. Настройте отображение поля как ПолеHTMLДокумента в форме.

Важные нюансы:

  • 🔗 Для локальных файлов используйте префикс file:// (например, file://C:/Documents/contract.pdf).
  • 🌐 Для сетевых путей указывайте UNC-путь (например, file://\\server\share\file.pdf).
  • ⚠️ В браузерах и некоторых версиях 1С file:// может блокироваться по соображениям безопасности.

Путь к файлу указан корректно (без опечаток)|Файл существует по указанному пути|У пользователя есть права на чтение файла|Поле в 1С настроено как HTML-документ-->

5. Способ: Программное создание ссылки через "ДвоичныеДанные"

Для разработчиков, которые работают с файлами на уровне кода, актуально использование объекта "ДвоичныеДанные". Этот метод позволяет загружать файлы в базу, манипулировать ими (например, архивировать) и сохранять обратно на диск.

Пример кода для загрузки файла в документ:

Процедура ЗагрузитьФайлВДокумент(ПутьКФайлу)

// Чтение файла с диска

ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);

// Сохранение в реквизит документа

Объект.ФайлДанные = ДвоичныеДанные;

// Альтернативно: запись в ХранилищеЗначения

Хранилище = Новый ХранилищеЗначения();

Хранилище.Записать(ДвоичныеДанные);

Объект.ХранилищеФайла = Хранилище;

КонецПроцедуры

// Обратная выгрузка

Процедура СохранитьФайлНаДиск(ПутьСохранения)

ДвоичныеДанные = Объект.ФайлДанные;

ДвоичныеДанные.Записать(ПутьСохранения);

КонецПроцедуры

Критичный нюанс: при работе с "ДвоичнымиДанными" файлы хранятся в оперативной памяти, поэтому для больших файлов (более 100 МБ) используйте потоковую обработку, чтобы избежать ошибок переполнения.

6. Способ: Интеграция с внешними системами (REST API, облака)

Для современных бизнес-процессов актуальна интеграция 1С с облачными хранилищами (Yandex Disk, Google Drive) или корпоративными системами документооборота. В этом случае ссылка на файл будет веб-адресом (URL), а сами файлы — храниться вне 1С.

Пример интеграции с Yandex Disk:

  • 🔑 Получите OAuth-токен для доступа к API Яндекс.Диска (инструкция на сайте Яндекса).
  • 📤 Напишите функцию загрузки файла:
    Функция ЗагрузитьФайлНаЯндексДиск(ПутьКФайлу, ИмяФайлаНаДиске)
    

    Токен = "ваш_oauth_токен";

    URL = "https://cloud-api.yandex.net/v1/disk/resources/upload?path=" + ИмяФайлаНаДиске + "&overwrite=true";

    HTTPЗапрос = Новый HTTPЗапрос(URL);

    HTTPЗапрос.УстановитьЗаголовок("Authorization", "OAuth " + Токен);

    HTTPОтвет = Новый HTTPСоединение().Получить(HTTPЗапрос);

    Если HTTPОтвет.КодСостояния = 200 Тогда

    Данные = Новый ДвоичныеДанные(ПутьКФайлу);

    URLЗагрузки = JSON.Прочитать(HTTPОтвет.ПолучитьТекст()).href;

    HTTPЗапрос = Новый HTTPЗапрос(URLЗагрузки);

    HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(Данные);

    HTTPОтвет = Новый HTTPСоединение().ПослатьДляЗаписи(HTTPЗапрос);

    Если HTTPОтвет.КодСостояния = 201 Тогда

    Возврат "https://disk.yandex.ru/d/" + JSON.Прочитать(HTTPОтвет.ПолучитьТекст()).path;

    Иначе

    ВызватьИсключение "Ошибка загрузки: " + HTTPОтвет.ПолучитьТекст();

    КонецЕсли;

    Иначе

    ВызватьИсключение "Ошибка получения URL: " + HTTPОтвет.ПолучитьТекст();

    КонецЕсли;

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

  • 🔗 Сохраните полученную веб-ссылку в реквизит документа.
⚠️ Внимание: При работе с API сторонних сервисов учитывайте ограничения по количеству запросов и размеру файлов. Например, в бесплатном тарифе Яндекс.Диска лимит — 10 ГБ.

Типичные ошибки и их решения

При работе со ссылками на файлы в 1С пользователи и разработчики часто сталкиваются с типичными проблемами. Разберём самые распространённые:

  1. Ошибка "Файл не найден":
    • 🔍 Проверьте путь к файлу (особенно регистр символов в Linux-системах).
    • 🔄 Если файл на сетевом диске, убедитесь, что диск подключён (иногда буквы дисков меняются после перезагрузки).
  • Ссылка не кликабельна:
    • 📌 Убедитесь, что поле настроено как ПолеHTMLДокумента.
    • 🔗 Проверьте формат ссылки: для локальных файлов должен быть префикс file://.
    • Ошибка "Недостаточно памяти" при работе с большими файлами:
      • 🗃️ Используйте потоковое чтение/запись вместо ДвоичныеДанные.
      • 📉 Разбейте файл на части (актуально для файлов > 500 МБ).
      💡

      Перед массовой загрузкой файлов в 1С всегда тестируйте процесс на 2-3 файлах. Это поможет избежать ошибок переполнения базы или потери данных.

      FAQ: Частые вопросы по работе со ссылками на файлы в 1С

      Можно ли в 1С сделать ссылку на файл в облаке (Google Drive, OneDrive)?

      Да, но для этого потребуется:

      1. Сгенерировать публичную ссылку на файл в облаке (в настройках доступа выбрать "Все, у кого есть ссылка").
      2. Вставить эту ссылку в реквизит типа Строка в 1С.
      3. Настроить обработчик для открытия ссылки в браузере:
        Процедура ОткрытьОблачнуюСсылку(Ссылка)
        

        СистемаКоманд.Выполнить("rundll32 url.dll,FileProtocolHandler " + Ссылка);

        КонецПроцедуры

      Обратите внимание: при таком подходе файлы не хранятся в 1С, а только ссылки на них.

      Как ограничить типы файлов, которые можно прикрепить в 1С?

      Для реквизита типа ХранилищеЗначения ограничение настраивается в коде. Пример для разрешения только PDF и DOCX:

      Процедура ПрикрепитьФайл(Элемент)
      

      Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

      Диалог.Фильтр = "Документы (.pdf, .docx)|.pdf;.docx";

      Если Диалог.Выбрать() Тогда

      // Далее код загрузки файла

      КонецЕсли;

      КонецПроцедуры

      Для встроенного механизма прикрепления файлов (через кнопку "Скрепка") ограничения настраиваются в конфигураторе на уровне ролей.

      Почему после обновления 1С перестали работать ссылки на файлы?

      Причины могут быть следующими:

      • 🔄 Изменилась структура хранения файлов в новой версии платформы (актуально для переходов с 8.2 на 8.3).
      • 🔐 Обновились права доступа к сетевым папкам.
      • 📁 В новой версии 1С может блокироваться выполнение внешних команд (например, открытие file:// ссылок).
      • Решение:

        1. Проверьте журнал регистрации 1С на ошибки.
        2. Обновите обработчики открытия файлов с учётом новых ограничений безопасности.
        3. Для сетевых путей используйте UNC-формат вместо букв дисков (например, \\server\share вместо Z:\).
      Как сделать, чтобы прикреплённые файлы автоматически архивировались?

      Для этого нужно доработать модуль объекта. Пример кода для автоматического ZIP-архивирования:

      Процедура ПрикрепитьФайлСАрхивацией(ПутьКФайлу)
      

      // Чтение исходного файла

      ИсходныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);

      // Создание ZIP-архива

      ЗаписьZIP = Новый ЗаписьДанных();

      Архив = Новый ZIPАрхив(ЗаписьZIP);

      Архив.Добавить(ПутьКФайлу, ИсходныеДанные);

      Архив.Закрыть();

      // Сохранение архива в базе

      Объект.АрхивФайла = ЗаписьZIP.ЗакрытьИПолучитьДвоичныеДанные();

      КонецПроцедуры

      Для извлечения файла из архива используйте класс ЧтениеДанных и ZIPАрхив.

      Можно ли в 1С сделать ссылку на файл, который хранится в базе данных (например, SQL)?

      Да, но для этого потребуется:

      1. Настроить внешнее хранилище в конфигураторе (раздел Администрирование → Внешние источники данных).
      2. Создать реквизит типа Строка для хранения идентификатора файла в SQL.
      3. Написать обработчики для загрузки/выгрузки файлов через запросы к базе. Пример:
        Запрос = Новый Запрос;
        

        Запрос.Текст =

        "ВЫБРАТЬ ФайлДанные

        ИЗ ДокументыФайлы

        ГДЕ ИдДокумента = &ИдДокумента";

        Запрос.УстановитьПараметр("ИдДокумента", Объект.Ссылка.УникальныйИдентификатор());

        Результат = Запрос.Выполнить();

        Если НЕ Результат.Пустой() Тогда

        ДвоичныеДанные = Результат[0].ФайлДанные;

        ДвоичныеДанные.Записать("C:\Temp\ФайлИзSQL.pdf");

        КонецЕсли;

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