Как правильно добавить функционал присоединенных файлов в доработанный документ 1С:ERP?

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

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

Разбор архитектуры подсистемы «Присоединенные файлы»

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

Шаг 1: Создание подчиненного справочника

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

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

Важный нюанс: справочник должен иметь определенный набор реквизитов (Автор, ДатаСоздания, Расширение, ПутьКФайлу и т.д.). Копирование существующего справочника — самый безопасный и быстрый способ соблюсти структуру.

Шаг 2: Настройка Определяемых типов

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

Разберем, какие именно типы нужно отредактировать:

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

Шаг 3: Настройка функциональных опций и подписок

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

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

  1. УстановитьПометкуУдаленияПрисоединенныхФайлов — отвечает за синхронную пометку удаления файлов вместе с владельцем.
  2. ПереопределитьПолучениеФормыПрисоединенногоФайла — обеспечивает открытие стандартных форм для работы с файлом.

Шаг 4: Программная инициализация в форме документа

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

Посмотрим на пример кода, который подготавливает параметры для работы с присоединенными файлами:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Подготовка параметров для работы с файлами
    ПараметрыРаботыСФайлами = РаботаСФайлами.ПараметрыПанелиСпискаПрисоединенныхФайлов();
    ПараметрыРаботыСФайлами.ВладелецФайлов = Объект.Ссылка;
    
    // Если документ еще не записан, нужно передать УникальныйИдентификатор формы
    Если Объект.Ссылка.Пустая() Тогда
        ПараметрыРаботыСФайлами.ИдентификаторОбъекта = ЭтаФорма.УникальныйИдентификатор;
    КонецЕсли;
    
    // Дополнительная логика инициализации интерфейса...
    
КонецПроцедуры

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

Выясняем причину ошибки: почему файл не виден?

Если вы выполнили все шаги, но список пуст, выполним диагностику:

  1. Откройте «Функции для специалиста» (или «Все функции»).
  2. Найдите ваш справочник ИмяВашегоДокументаПрисоединенныеФайлы.
  3. Посмотрите на созданные элементы. Проанализируйте поле Владелец.

Если в поле Владелец вы видите надпись "Объект не найден" или оно пустое, значит, при вызове команды добавления не передается ссылка на документ. Если же поле заполнено правильно, но в форме документа файлов нет — проблема в динамическом списке на форме. Проверьте, что запрос динамического списка фильтруется по реквизиту Владелец и этот фильтр обновляется при записи документа или при открытии формы.

Резюме

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

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

← На главную