Как подключить типовой механизм хранения файлов БСП к нетиповому документу в 1С 8.3

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

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

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

Архитектурная концепция хранения файлов в БСП

Прежде чем перейти к практическим шагам в конфигураторе, проанализируем, как устроен этот механизм изнутри. БСП не хранит файлы непосредственно в самом документе. Вместо этого для каждого прикладного объекта, к которому могут прикрепляться файлы, создается отдельный подчиненный справочник. Например, для документа ДоговорКонтрагента существует справочник ДоговорыКонтрагентовПрисоединенныеФайлы.

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

---

Шаг 1. Создание подчиненного справочника присоединенных файлов

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

Рассмотрим порядок действий по шагам:

  1. Найдем в дереве метаданных любой типовой справочник файлов. Отличным примером может послужить ДоговорыКонтрагентовПрисоединенныеФайлы или НоменклатураПрисоединенныеФайлы.
  2. Скопируем его и назовем по шаблону: [ИмяВашегоДокумента]ПрисоединенныеФайлы (например, ЗаявкаНаТранспортПрисоединенныеФайлы).
  3. Перейдем на вкладку "Владельцы" созданного справочника, удалим старого владельца и укажем наш нетиповой документ.
  4. В свойствах стандартного реквизита Владелец убедимся, что длина наименования составляет не менее 150 символов, а проверка заполнения установлена в значение "Выдавать ошибку".
  5. Проверим наличие ключевых реквизитов в справочнике. Наш новый справочник обязательно должен содержать следующие реквизиты:
    • Автор (тип СправочникСсылка.Пользователи) — создатель карточки файла;
    • ДатаСоздания (тип Дата) — время добавления файла;
    • ИндексКартинки (тип Число) — для визуализации типа файла (pdf, doc, xls) в списках;
    • Размер (тип Число) — размер файла в байтах;
    • Расширение (тип Строка) — формат файла;
    • ТипХраненияФайла (тип ПеречислениеСсылка.ТипыХраненияФайлов) — определяет, где лежит файл: в базе данных или в томе на диске;
    • Том (тип СправочникСсылка.ТомаХраненияФайлов) — конкретный дисковый том, если используется соответствующий режим;
    • ФайлХранилище (тип ХранилищеЗначения) — сам двоичный код файла при хранении в базе данных.

---

Шаг 2. Настройка определяемых типов (Регистрация метаданных)

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

Нам необходимо добавить наши новые объекты метаданных в четыре ключевых определяемых типа:

  1. ВладелецПрисоединенныхФайлов — в состав этого типа добавляем ссылку на наш нетиповой документ (например, ДокументСсылка.ЗаявкаНаТранспорт).
  2. ВладелецПрисоединенныхФайловОбъект — добавляем сюда объект нашего нетипового документа (ДокументОбъект.ЗаявкаНаТранспорт). Это критично для корректного выполнения транзакций записи на стороне сервера.
  3. ПрисоединенныйФайл — добавляем ссылку на наш вновь созданный справочник файлов (СправочникСсылка.ЗаявкаНаТранспортПрисоединенныеФайлы).
  4. ПрисоединенныйФайлОбъект — добавляем объект этого справочника (СправочникОбъект.ЗаявкаНаТранспортПрисоединенныеФайлы).

Важное примечание: Обратите внимание на разделение между ссылочными типами данных и объектами (с суффиксом Объект). Ошибки при заполнении этих типов часто приводят к падению системы при попытке записи или интерактивного открытия прикрепленного файла.

---

Шаг 3. Добавление поддержки в регистр сведений "ДвоичныеДанныеФайлов"

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

Выполним следующие действия:

  1. Найдем в дереве метаданных регистр сведений ДвоичныеДанныеФайлов.
  2. Откроем свойства его измерения Объект.
  3. В типе данных этого измерения найдем наш новый справочник ЗаявкаНаТранспортПрисоединенныеФайлы и установим напротив него галочку.

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

---

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

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

Разберем три важнейшие подписки, которые начинаются с префикса ПрисоединенныеФайлы...:

  1. ПрисоединенныеФайлыПередУдалениемОбъекта — отвечает за очистку базы от "осиротевших" файлов. В источник подписки добавляем наш нетиповой документ (тип ДокументОбъект). Если этого не сделать, при удалении документа файлы навсегда останутся лежать мертвым грузом в вашей базе или на диске.
  2. ПрисоединенныеФайлыПриКопированииОбъекта — отвечает за корректное создание новых связей при копировании документа-владельца. В источник добавляем наш нетиповой документ.
  3. ОпределитьИсточникСобытияПрисоственногоФайла (или аналогичная подписка в зависимости от версии БСП) — необходима для корректной маршрутизации событий интерактивного изменения файлов. В источник добавляем наш справочник файлов (тип СправочникОбъект).

---

Шаг 5. Вывод команды "Файлы" на форму документа

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

Выясним, как вывести эту команду на форму нашего документа:

  1. Откроем свойства общей команды ПрисоединенныеФайлыКОбъекту.
  2. Найдем свойство "Тип параметра команды" и добавим туда наш нетиповой документ. Это позволит команде понимать, для какого именно объекта мы запрашиваем список файлов.
  3. Откроем форму нашего нетипового документа в редакторе форм.
  4. Перейдем на вкладку "Командный интерфейс" формы.
  5. В разделе "Перейти" найдем команду ПрисоединенныеФайлыКОбъекту, установим для нее флаг видимости и настроим ее отображение (например, в виде гиперссылки в верхней панели формы или в командной панели).

После этого на форме документа появится привычная пользователям стандартная кнопка/ссылка со значком скрепки и текстом "Файлы".

---

Шаг 6. Настройка прав доступа (Важный нюанс безопасности)

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

Для предотвращения этой проблемы выполним следующие действия:

  1. Создадим новую роль (или добавим права в существующие типовые роли профилей ваших пользователей) для созданного справочника файлов ЗаявкаНаТранспортПрисоединенныеФайлы.
  2. Предоставим права на "Чтение", "Добавление" и "Изменение" этого справочника.
  3. Убедимся, что новые справочники включены в шаблоны ограничений доступа (RLS), если в вашей базе используется разграничение прав на уровне записей. Это гарантирует, что пользователь сможет просматривать прикрепленные файлы только тех документов, к которым у него есть физический доступ на чтение.

---

Разбор типичных ошибок при интеграции

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


{ОбщийМодуль.ОбщегоНазначенияКлиентСервер.Модуль(2873)}: Недопустимое значение параметра ПрисоединенныйФайл в РаботаСФайлами.ДвоичныеДанныеФайла.
Ожидалось: Присоединенный файл ([ТипДокумента]), Присоединенные файлы ([ТипДокумента])...

Причина возникновения: Эта ошибка указывает на то, что вы забыли прописать ваш новый справочник присоединенных файлов в определяемом типе ПрисоединенныйФайл или забыли добавить поддержку этого справочника в измерение Объект регистра сведений ДвоичныеДанныеФайлов.

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

---

Заключение

Мы успешно разобрали процесс подключения стандартного механизма БСП для работы с присоединенными файлами в произвольном документе 1С 8.3. Теперь файлы ваших документов будут аккуратно структурированы, смогут храниться на внешних томах диска (что значительно снизит размер самой информационной базы SQL) и будут иметь стандартный, интуитивно понятный для пользователей интерфейс. Для дополнительной оптимизации и сокращения объема накопленных данных применяется механизм многопоточной свёртки 1С:ERP.

← На главную