При разработке конфигураций на платформе 1С:Предприятие 8.3 часто возникает задача предоставить пользователю возможность прикреплять внешние файлы (сканы, документы, изображения) к конкретным объектам метаданных, например, к документу ПеремещениеТоваров. В типовых решениях, использующих Библиотеку стандартных подсистем (БСП), для этого предназначена подсистема «Работа с файлами». Однако простого включения документа в состав подсистемы недостаточно для того, чтобы заветная кнопка «Файлы» появилась в интерфейсе. Рассмотрим детально, как правильно выполнить эту настройку и избежать типичных ошибок.
Перед началом технических манипуляций в конфигураторе нам необходимо определиться, по какой модели будут храниться файлы в системе. БСП версии 3.0 и выше предлагает два основных варианта:
ПеремещениеТоваровПрисоединенныеФайлы). Это оптимально для высоконагруженных систем, так как данные распределяются по разным таблицам БД.Файлы. Это упрощает конфигурацию, но может привести к замедлению работы при миллионах записей.Разберем ситуацию, когда мы подключаем документ к стандартному механизму через определяемые типы.
Для того чтобы общая команда ОбщаяКоманда.ПрисоединенныеФайлы «узнала» о существовании нашего документа, необходимо расширить состав нескольких определяемых типов. Проанализируем, какие именно типы требуют редактирования:
ДокументСсылка.ПеремещениеТоваров). Этот тип используется для связи с индивидуальными справочниками хранения.ДокументОбъект.ПеремещениеТоваров). Это критично для корректной работы бизнес-логики подсистемы.Файлы, включение в этот тип обязательно.Важный нюанс: если после добавления документа в эти типы команда не появилась, попробуйте полностью завершить сеанс пользователя и зайти в программу заново. Обновление конфигурации базы данных не всегда мгновенно отражается на динамическом формировании командного интерфейса.
Чтобы обеспечить целостность данных, мы должны гарантировать, что при удалении или пометке на удаление документа ПеремещениеТоваров, связанные с ним файлы также изменят свой статус. Выясним, в какие подписки нужно включить наш объект:
Найдите в дереве метаданных подписку УстановитьПометкуУдаленияПрисоединенныхФайловДокументов. В списке «Источник» необходимо отметить ДокументОбъект.ПеремещениеТоваров. Это позволит системе автоматически помечать файлы на удаление вслед за владельцем.
Иногда требуется не просто отобразить команду, но и обеспечить корректное поведение при копировании документа или проверку перед закрытием формы. Рассмотрим подробнее, какой код необходимо добавить в модуль формы документа ПеремещениеТоваров.
Во-первых, разберем ситуацию с копированием. Чтобы при создании нового документа на основании существующего файлы также копировались, в обработчике ПриЗаписиНаСервере используем метод общего модуля:
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
// Стандартный вызов БСП для копирования присоединенных файлов
РаботаСФайлами.ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи, Параметры);
КонецПроцедуры
Во-вторых, проанализируем необходимость проверки «занятых» файлов. Если пользователь редактирует файл и пытается закрыть форму документа, система должна выдать предупреждение. Для этого реализуем следующий алгоритм в модуле формы:
МожноЗакрытьФормуСФайлами с типом Булево.ПередЗакрытием пропишем вызов клиентского модуля БСП:
&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
// Проверка наличия редактируемых файлов перед закрытием
РаботаСФайламиКлиент.ПоказатьПодтверждениеЗакрытияФормыСФайлами(ЭтотОбъект, Отказ, Объект.Ссылка);
КонецПроцедуры
Если при нажатии на кнопку «Файлы» система выдает ошибку о том, что справочник не найден, это означает, что логика БСП ожидает наличия персонального хранилища. Проанализируем причину: по умолчанию БСП ищет справочник по шаблону ИмяВладельца + "ПрисоединенныеФайлы".
Если вы не хотите создавать отдельный справочник, убедитесь, что ваш документ правильно прописан в определяемом типе ВладелецФайлов. Если же политика разработки требует раздельного хранения, вам придется создать справочник ПеремещениеТоваровПрисоединенныеФайлы вручную. Рассмотрим требования к такому справочнику:
Документ.ПеремещениеТоваров.ОпределяемыйТип.ПрисоединенныйФайл и ОпределяемыйТип.ПрисоединенныйФайлОбъект.Бывают случаи, когда все типы настроены, но ссылка «Файлы» все равно не видна. Посмотрим на настройки командного интерфейса самой формы документа:
Присоединенные файлы. Убедитесь, что флаг Видимость установлен (иногда стоит снять флаг «Авто» и поставить галочку принудительно).Также проверьте значение функциональной опции ИспользоватьПрисоединенныеФайлы. Если она выключена в константах системы (через пользовательский интерфейс в разделе настроек), команда не будет отображаться ни в одном документе, независимо от настроек метаданных.
Соблюдение этой последовательности действий гарантирует корректное подключение подсистемы и стабильную работу механизма присоединенных файлов в вашем решении.