При использовании Библиотеки стандартных подсистем (БСП) в 1С:Предприятии стандартная логика хранения файлов в томах на диске предполагает автоматическое создание подпапок на основе даты (формат ГГГГММДД). Однако в крупных компаниях или при интеграции нескольких систем администраторам и пользователям часто требуется более прозрачная структура, например: Том\НаименованиеСправочника\Контрагент\НомерДоговора\Файл.pdf. Это упрощает поиск файлов напрямую через файловую систему и позволяет организовать совместный доступ к данным из разных конфигураций.
В данной статье мы подробно разберем, как изменить алгоритм формирования пути к файлу, на какие реквизиты обратить внимание при программном создании записей и как избежать типичных ошибок при работе с общим хранилищем для двух баз.
Для начала проанализируем ситуацию: за распределение файлов по папкам в БСП отвечает общая логика, сосредоточенная в программных модулях работы с файлами. В современных версиях БСП ключевым местом является общий модуль ПрисоединенныеФайлыСлужебный. Именно в нем вызываются функции, определяющие относительный путь внутри тома.
Рассмотрим подробнее: когда мы добавляем файл, система запрашивает у тома свободное место и генерирует путь. Переменная РабочийКаталогВладельца, упомянутая в обсуждении на форуме, чаще относится к клиентской части и временному хранению при редактировании. Для управления серверным хранением нам необходимо вмешаться в формирование переменной ОтносительныйПуть.
Чтобы реализовать структуру Том\Справочник\Контрагент\Договор, нам потребуется кастомизировать функцию получения пути. Выясним причину, по которой нельзя просто записывать строки «как есть»: файловые системы (особенно Windows) накладывают ограничения на символы в именах папок. Кавычки, слеши, двоеточия и другие спецсимволы в наименованиях контрагентов приведут к ошибкам записи.
Посмотрим на пример функции, которую необходимо внедрить или использовать для очистки строк перед формированием пути:
Функция ОчиститьИмяДляФайловойСистемы(Знач Имя) Экспорт
ЗапрещенныеСимволы = "/\:*?""<>|";
Для Индекс = 1 По СтрДлина(ЗапрещенныеСимволы) Цикл
Символ = Сред(ЗапрещенныеСимволы, Индекс, 1);
Имя = СтрЗаменить(Имя, Символ, "_");
КонецЦикла;
Возврат СокрЛП(Имя);
КонецФункции
Теперь разберем по шагам, как переопределить логику в модуле ПрисоединенныеФайлыСлужебный (или через расширение в методе ПутьКФайлуВТоме):
Договоры).Владелец.Контрагент.Наименование и Владелец.Код (или Номер).\.Часто возникает задача: файлы уже лежат на сервере в красивой структуре, и их нужно «показать» в 1С без физического перемещения или дублирования. Рассмотрим подробнее, какие поля справочника ДоговорыПрисоединенныеФайлы (или аналогичного) необходимо заполнить программно.
Важно: Просто создать запись в справочнике недостаточно. Система должна знать, что файл находится именно в томе.
Проанализируем обязательные поля:
ТипХраненияФайла — должен иметь значение Перечисления.ТипыХраненияФайлов.ВТомахНаДиске.Том — ссылка на соответствующий элемент справочника ТомаХраненияФайлов.ПутьКФайлу — это относительный путь от корня выбранного тома. Например: Договоры\ООО_Ромашка\Д_123\скан.pdf.СтатусИзвлеченияТекста — если вы не планируете сразу индексировать файл для поиска, установите НеПроводилось.Пример программного создания карточки файла:
НовыйФайл = Справочники.ДоговорыПрисоединенныеФайлы.СоздатьЭлемент();
НовыйФайл.Наименование = "Договор_скан.pdf";
НовыйФайл.ВладелецФайла = СсылкаНаДоговор;
НовыйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске;
НовыйФайл.Том = СсылкаНаТом;
НовыйФайл.ПутьКФайлу = "Договоры\Контрагент_А\Дог_001\Договор_скан.pdf";
НовыйФайл.Расширение = "pdf";
// Рассчитаем размер для корректного отображения в интерфейсе
ФайлНаДиске = Новый Файл(ПутьКТому + НовыйФайл.ПутьКФайлу);
Если ФайлНаДиске.Существует() Тогда
НовыйФайл.Размер = ФайлНаДиске.Размер();
КонецЕсли;
НовыйФайл.Записать();
Для того чтобы подсистема работы с файлами считала объект валидным, необходимо также учитывать регистры сведений. В зависимости от версии БСП, это может быть ПараметрыРаботыФайлов или ХранимыеФайлыВерсий. Если не внести туда соответствующие записи, пользователь может увидеть ошибку «Файл не найден» при попытке открытия, даже если путь в справочнике указан верно.
Также рекомендуется программно рассчитывать хеш-сумму файла (MD5). Это позволит системе проверять целостность файла и понимать, был ли он изменен внешними средствами. В БСП для этого существуют встроенные функции в модуле РаботаСФайлами.
Разберем ситуацию, когда две разные базы 1С (например, УТ и Бухгалтерия) смотрят в одну и ту же папку. Это «тонкий лед», и здесь нужно учитывать несколько критических факторов:
scan.jpg) файл будет перезаписан.Рекомендация: Если ваша цель — предоставить доступ пользователям Базы №2 к файлам из Базы №1, рассмотрите вариант использования HTTP-сервисов. База №2 может запрашивать файл у Базы №1 через API. Это избавит вас от проблем с правами доступа к сетевым папкам и конфликтов файловой системы.
Мы выяснили, что реализовать произвольную структуру хранения вполне реально, однако это требует аккуратности при работе с именами файлов и понимания внутренней архитектуры БСП. Основные усилия должны быть направлены на модификацию метода ПутьКФайлуВТоме и корректное заполнение реквизитов ТипХраненияФайла и ПутьКФайлу при регистрации объектов. Помните о безопасности: доступ пользователей к томам напрямую должен быть ограничен правами «только чтение», чтобы централизованное управление файлами из 1С оставалось надежным.