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