Как исправить ошибку «У владельца файлов типа... не имеется справочников для хранения файлов» в 1С?

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

При разработке в среде 1С:Предприятие часто возникает задача добавления функционала прикрепления файлов к различным объектам конфигурации — документам, справочникам или договорам. В Библиотеке стандартных подсистем (БСП) для этого предусмотрена мощная подсистема «Работа с файлами». Однако простое копирование визуальных элементов (например, кнопки «Присоединенные файлы») с одной формы на другую часто приводит к системному сбою.

Разработчики часто сталкиваются с неприятной ошибкой выполнения кода в общем модуле:

{ОбщийМодуль.РаботаСФайламиСлужебный.Модуль(384)}: Ошибка при определении имен справочников для хранения файлов. У владельца файлов типа "Требование-накладная" не имеется справочников для хранения файлов.

В этой статье мы подробно разберем, почему возникает данное исключение, как устроена архитектура хранения файлов в БСП и как по шагам правильно настроить интеграцию механизма присоединенных файлов для любого нового документа на примере «Требования-накладной».

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

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

  1. Централизованное хранение: использование одного общего справочника для абсолютно всех файлов в системе (например, справочник Файлы). Этот вариант удобен для организации общей структуры папок, хранения шаблонов документов и файлов, не привязанных жестко к конкретным транзакциям.
  2. Децентрализованное хранение (присоединенные файлы): создание отдельного вспомогательного справочника под каждый конкретный тип объекта (например, ПоступлениеТоваровПрисоединенныеФайлы для документов поступления или ДоговорыКонтрагентовПрисоединенныеФайлы для договоров).

Использование децентрализованного подхода для прикладных документов обусловлено тремя ключевыми факторами:

Производительность СУБД. Если бы миллионы сканов, счетов и накладных со всей базы данных хранились в одной таблице СУБД, индексы этой таблицы разрослись бы до гигантских размеров. Это привело бы к резкому падению скорости поиска, записи и позиционирования на файлах при повседневной работе пользователей.

Разграничение прав доступа (RLS). На уровне платформы гораздо проще и производительнее настроить ограничения доступа (Row Level Security) к файлам, опираясь на права их непосредственного владельца. Если у пользователя нет прав на просмотр конкретного документа «Требование-накладная», система автоматически заблокирует для него доступ к элементам связанного справочника присоединенных файлов.

Блокировки базы данных. При одновременной записи файлов разными пользователями в разные документы транзакции не будут конкурировать за одну и ту же таблицу СУБД. Это минимизирует риски возникновения взаимоблокировок (deadlocks) в высоконагруженных системах.

Именно поэтому при попытке открыть форму присоединенных файлов БСП обращается к метаданным в поисках выделенного справочника. Если такого справочника нет, или он настроен некорректно, система аварийно завершает работу с описанной выше ошибкой.

Пошаговое руководство по интеграции присоединенных файлов

Рассмотрим детальный алгоритм, который позволит нам связать документ ТребованиеНакладная с подсистемой хранения файлов БСП.

Шаг 1. Создание вспомогательного справочника

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

Шаг 2. Настройка реквизита «ВладелецФайла»

Это самый важный шаг, который разработчики чаще всего пропускают при копировании справочников-шаблонов. Нам необходимо переопределить владельца.

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

Шаг 3. Регистрация в определяемых типах конфигурации

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

Шаг 4. Настройка подписок на события

Чтобы файлы вели себя корректно при стандартных интерактивных действиях пользователя, необходимо расширить типы источников в системных подписках на события БСП:

Шаг 5. Программная доработка формы и модуля документа

Теперь, когда структура метаданных полностью подготовлена, нам необходимо внедрить поддержку интеграции на уровне программного кода документа.

Проанализируем ситуацию, когда пользователь создает новый документ путем копирования существующего. Мы должны гарантировать, что файлы из старого документа корректно скопируются в новый (или, напротив, очистятся, в зависимости от бизнес-логики). Для реализации копирования файлов в модуле формы документа найдем или создадим процедуру ПриЗаписиНаСервере и пропишем в ней стандартный вызов БСП:


&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
    // Проверим, было ли произведено копирование документа
    Если Параметры.Свойство("ЗначениеКопирования") И ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда
        // Вызываем метод БСП для копирования присоединенных файлов из источника в новый объект
        ПрисоединенныеФайлы.ПриЗаписиНаСервере(Отказ, ТекущийОбъект, Параметры.ЗначениеКопирования);
    КонецЕсли;
    
КонецПроцедуры

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

Типичные ошибки разработчиков при интеграции файлов

Рассмотрим популярные «подводные камни», на которые наступают специалисты при настройке файлового хранилища:

Забытые права доступа (Роли). Очень часто разработчик настраивает весь функционал под учетной записью с полными правами (Администратор), проверяет — всё работает. Однако обычные пользователи при попытке прикрепить файл получают ошибку нарушения прав доступа. Не забывайте добавлять созданный справочник файлов в роли чтения, добавления и изменения для соответствующих профилей пользователей (например, «Добавление и изменение базовой нормативно-справочной информации» или специализированные роли документооборота).

Игнорирование очистки при пометке на удаление. Если не включить документ в подписку удаления, то при физическом удалении документа («Удаление помеченных объектов») связанные файлы в СУБД останутся сиротами. Они будут занимать дисковое пространство без возможности интерактивного удаления из интерфейса программы.

Ошибки кэширования метаданных. Иногда после создания всех объектов и настройки определяемых типов ошибка в режиме «1С:Предприятие» продолжает воспроизводиться. Выясним причину: БСП кэширует структуру метаданных для ускорения работы. В этом случае помогает перезапуск сеанса подсистемы или вызов процедуры обновления параметров работы БСП (например, через запуск базы с параметром ЗапуститьОбновлениеИнформационнойБазы).

Заключение

Мы успешно решили проблему отсутствия справочника хранения файлов для документа «Требование-накладная». Выполнив эти простые, но строго обязательные шаги по настройке метаданных БСП, мы обеспечили стабильную и быструю работу подсистемы прикрепления файлов, защищенную от будущих ошибок СУБД и конфликтов прав доступа.

← На главную