Где хранится ссылка на присоединенный файл номенклатуры при хранении в томах в 1С:УТ 11?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При интеграции или программной обработке присоединенных файлов в конфигурации «1С:Управление торговлей 11» разработчики часто сталкиваются с вопросом: где именно в информационной базе хранится физический путь к файлу на диске, если включено хранение файлов в томах. Нередко при исследовании реквизитов или отладке на стороне клиента разработчик видит путь к локальным каталогам пользователя (например, в папку AppData), а не к сетевому или локальному тому хранения. Разберем по шагам структуру хранения файлов в типовых конфигурациях и выясним, как правильно программно получать пути и содержимое файлов.

Структура хранения данных о файлах в подсистеме БСП

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

  1. Справочник присоединенных файлов объекта: для номенклатуры это справочник НоменклатураПрисоединенныеФайлы. В его карточке присутствуют ключевые реквизиты:
    1. ТипХраненияФайла — определяет, где фактически расположен файл (в базе данных или в томе на диске);
    2. Том — ссылка на элемент справочника ТомаХраненияФайлов;
    3. ПутьКФайлу — относительный путь к файлу внутри тома (как правило, формируется в виде подкаталогов по датам, например, ГГГГ\ММ\ДД\...).
  2. Справочник томов хранения: справочник ТомаХраненияФайлов, в котором задаются базовые пути к каталогам. В нем содержатся реквизиты ПолныйПутьWindows и ПолныйПутьLinux.

Таким образом, полный физический адрес файла на диске формируется динамически путем объединения базового пути из справочника ТомаХраненияФайлов и относительного пути из реквизита ПутьКФайлу справочника НоменклатураПрисоединенныеФайлы.

Почему при отладке отображается путь к каталогу AppData

Выясним причину, почему в интерфейсе или при просмотре переменных на клиенте появляется путь к папке AppData\Local или AppData\Roaming. Тонкий и веб-клиенты платформы 1С не обращаются к файловым томам на сервере напрямую из соображений безопасности и сетевой изоляции. Когда пользователь открывает или просматривает файл, серверная процедура считывает данные из тома и передает их на клиент, где создается временная копия в рабочем каталоге пользователя. Поэтому при отладке на клиенте фиксируется именно локальный кэш, а не оригинальное хранилище тома.

Программное получение пути к файлу и его данных

Проанализируем правильные способы программной работы с файлами на стороне сервера. Для работы с присоединенными файлами разработчикам не рекомендуется вручную склеивать строки путей или выполнять прямое чтение с диска. Для этого в БСП предусмотрены типовые методы общего модуля ПрисоединенныеФайлы.

Если для внешних скриптов или систем требуется получить именно физический путь к файлу на сервере, используем метод общего модуля:


// СсылкаНаФайл — ссылка на элемент справочника НоменклатураПрисоединенныеФайлы
ПолныйПуть = ПрисоединенныеФайлы.ПолныйПутьКФайлу(СсылкаНаФайл);

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


// Получаем двоичные данные файла независимо от типа хранения
ДвоичныеДанные = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(СсылкаНаФайл);

Особенности прав доступа и работы под Linux

Разберем важные нюансы серверного администрирования при работе с томами:

  1. Права доступа к каталогу: чтение и запись файлов в сетевой каталог тома выполняет рабочий процесс сервера 1С (rphost). Сетевой доступ к папке тома должен быть настроен для учетной записи операционной системы, от имени которой запущена служба сервера 1С (по умолчанию usr1cv8), а не для пользовательских учетных записей.
  2. Работа на сервере Linux: операционные системы семейства Linux не поддерживают прямую адресацию через UNC-пути Windows вида \\server\share. Сетевая папка предварительно монтируется средствами операционной системы (CIFS или NFS) в локальную точку монтирования файловой системы, а в справочнике ТомаХраненияФайлов обязательно заполняется реквизит ПолныйПутьLinux.
← На главную