Как в 1С прикрепить разные типы файлов к одному справочнику и стоит ли для этого создавать второй справочник присоединенных файлов?

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

В процессе разработки в среде 1С:Предприятие часто возникает задача логического разделения файлов, привязанных к одному объекту. Например, для справочника ДоговорыКонтрагентов может потребоваться хранить отдельно «Скан-копии оригиналов» и «Техническую документацию». На первый взгляд кажется логичным создать два отдельных справочника: ДоговорыКонтрагентовПрисоединенныеФайлы и ДоговорыКонтрагентовПрисоединенныеФайлы1. Однако такой подход вступает в противоречие с архитектурой Библиотеки стандартных подсистем (БСП) и может создать массу сложностей при поддержке системы.

Рассмотрим подробнее, почему не стоит множить объекты метаданных и какие альтернативные способы решения задачи существуют в типовом функционале.

Проблема использования нескольких справочников присоединенных файлов

Стандартная подсистема «Присоединенные файлы» в БСП жестко ориентирована на связь «один владелец — один справочник хранения». При регистрации объекта в подсистеме мы указываем связь в программном коде. Если мы решим создать второй справочник для того же владельца, мы столкнемся со следующими проблемами:

  1. Нарушение работы типовых команд: Стандартная кнопка «Файлы» на панели навигации формы будет отображать данные только из основного справочника, прописанного в метаданных и модулях БСП.
  2. Сложность доработки интерфейса: Нам придется вручную создавать новые команды, формы и логику вызова для второго справочника, что увеличивает объем «кастомного» кода, который нужно будет поддерживать при обновлениях.
  3. Дублирование логики: Придется копировать обработчики событий, механизмы проверки прав доступа и логику очистки помеченных на удаление объектов для каждого нового справочника.

Разберем, как решить задачу разделения файлов более элегантными способами.

Решение 1: Добавление реквизита «Вид файла» в существующий справочник

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

Выполним следующие шаги:

  1. В конфигураторе найдем справочник ДоговорыКонтрагентовПрисоединенныеФайлы.
  2. Добавим новый реквизит, например, ВидДокумента с типом ПеречислениеСсылка.ВидыДокументовФизЛиц или создадим для этого специальное перечисление.
  3. На форме списка файлов добавим возможность выбора этого вида.

Теперь мы можем настроить отображение файлов на форме договора. Вместо одной стандартной кнопки «Файлы» мы можем разместить две таблицы (динамических списка), каждый из которых будет фильтровать общий справочник по значению реквизита ВидДокумента. Программная настройка фильтра в ПриСозданииНаСервере может выглядеть так:


// Пример настройки фильтра для динамического списка на форме
ЭлементОтбора = СписокФайловТехнических.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВидДокумента");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Перечисления.ВидыДокументов.ТехническаяДокументация;
ЭлементОтбора.Использование = Истина;

Этот метод позволяет сохранить целостность структуры БД и использовать все преимущества типовых механизмов БСП.

Решение 2: Использование дополнительных реквизитов (без изменения конфигурации)

Если нам запрещено менять конфигурацию, мы можем воспользоваться механизмом «Дополнительные реквизиты и сведения». Выясним, как это сделать:

  1. В пользовательском режиме перейдем в раздел Администрирование — Общие настройки — Дополнительные реквизиты и сведения.
  2. Найдем справочник присоединенных файлов для нужного нам объекта.
  3. Добавим дополнительный реквизит «Категория файла».
  4. Теперь пользователи при загрузке файла смогут указывать его категорию.

В списках файлов можно будет настроить группировку по этому реквизиту через «Изменить форму», что обеспечит требуемое визуальное разделение без написания кода.

Решение 3: Разграничение прав доступа через RLS

Иногда требование создать два справочника вызвано необходимостью ограничить доступ: например, бухгалтерия должна видеть финансовые файлы, а юристы — только тексты договоров. В этом случае создание двух справочников — не выход, так как права в БСП обычно наследуются от владельца.

Правильный путь — использование механизма RLS (Record Level Security). Мы можем настроить права так, чтобы чтение записей справочника присоединенных файлов зависело от значения того самого реквизита ВидДокумента, который мы добавили в первом решении. Таким образом, находясь в одной таблице, пользователи разных отделов будут видеть только «свои» файлы.

Решение 4: Хранение файлов в томах на диске

Проанализируем еще один важный аспект, упомянутый в обсуждении: объем базы данных. Если мы планируем хранить много тяжелых файлов (например, PDF), база начнет стремительно расти. Разделение на два справочника эту проблему не решает, так как данные все равно остаются в SQL-таблицах.

Рекомендуем настроить «Хранение файлов в томах на диске». Посмотрим на алгоритм действий:

  1. Включим в настройках программы использование томов.
  2. Создадим «Том», указав путь к сетевой папке, к которой у сервера 1С есть права доступа.
  3. После этого сами файлы будут лежать на жестком диске, а в справочниках 1С (сколько бы их ни было) останутся только ссылки и метаданные.

Это значительно ускоряет работу с базой, упрощает создание резервных копий и снимает вопрос о том, «раздувают» ли файлы базу данных.

Выводы

Создание отдельного справочника ПрисоединенныеФайлы1 — это путь к созданию «технического долга». Мы настоятельно рекомендуем:

Такой подход гарантирует стабильную работу подсистем БСП и легкость обновления конфигурации в будущем.

← На главную