Вводные:
Нужно перенести файлы из томов в базу
Есть работающая некорректно обработка //infostart.ru/public/536028/ с отключенными комментариями
Решение:
Перебираем все ПрисоединенныеФайлы с ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске
1. Получаем двоичные данные
2. Получаем объект, записываем
- ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе
- Том = Неопределено
2.1 Записываем объект
3. Записываем двоичные данные в РегистрыСведений.ДвоичныеДанныеФайлов
Код:
&НаСервере
Процедура КомандаЗагрузитьНаСервере()
МассивТиповДляОбновленияФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы();
Для Каждого ТипДляОбновленияФайлов из МассивТиповДляОбновленияФайлов Цикл
ПолноеИмяОбъектаМетаданных = "";
Попытка
//Получаем строковые представления объектов метаданных типа "Справочник.ВходящийДокументПрисоединенныеФайлы"
ПолноеИмяОбъектаМетаданных = Метаданные.НайтиПоТипу(ТипДляОбновленияФайлов).ПолноеИмя();
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Тип" + ТипДляОбновленияФайлов + ", " + ОписаниеОшибки();
Сообщение.Сообщить();
Прервать; // Специфичные типы (например, строка) не обрабатываем
КонецПопытки;
//Получаем имя конкретного справочника
ИмяОбъектаМетаданных = Прав(ПолноеИмяОбъектаМетаданных, СтрДлина(ПолноеИмяОбъектаМетаданных)- Найти(ПолноеИмяОбъектаМетаданных, "."));
Выборка = Справочники[ИмяОбъектаМетаданных].Выбрать();
Пока Выборка.Следующий() Цикл
Если НЕ Выборка.ЭтоГруппа
И Выборка.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда
ДД = РаботаСФайлами.ДвоичныеДанныеФайла(Выборка.Ссылка);
Если ДД <> Неопределено Тогда
обПрисоединенныеФайлы = Выборка.Ссылка.ПолучитьОбъект();
обПрисоединенныеФайлы.Том = Неопределено;
обПрисоединенныеФайлы.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе;
обПрисоединенныеФайлы.Записать();
МенеджерЗаписи = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Файл = Выборка.Ссылка;
МенеджерЗаписи.ДвоичныеДанныеФайла = Новый ХранилищеЗначения(ДД);
МенеджерЗаписи.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
UPD 02.05.2020: В БСП 3.1 добавили функционал переноса файлов