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