Скопировать присоединенные файлы. Создает у Получателя копии всех присоединенных файлов Источника.
// Создает у Получателя копии всех присоединенных файлов Источника.
// Источник и Получатель должны быть объектами одного типа.
//
// Параметры:
// Источник - Ссылка - объект, имеющий присоединенные файлы для копирования.
// Получатель - Ссылка - объект, к которому копируются присоединенные файлы.
//
Процедура СкопироватьПрисоединенныеФайлы(Знач Источник, Знач Получатель) Экспорт
ДоступнаЭлектроннаяПодпись = Неопределено;
МодульЭлектроннаяПодписьСлужебный = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись");
МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный");
КонецЕсли;
КопируемыеФайлы = ВсеПодчиненныеФайлы(Источник.Ссылка);
Для Каждого КопируемыйФайл Из КопируемыеФайлы Цикл
Если ДоступнаЭлектроннаяПодпись = Неопределено Тогда
ДоступнаЭлектроннаяПодпись = (МодульЭлектроннаяПодписьСлужебный <> Неопределено)
И (МодульЭлектроннаяПодписьСлужебный.ДоступнаЭлектроннаяПодпись(ТипЗнч(КопируемыйФайл)));
КонецЕсли;
Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КопируемыйФайл, "ПометкаУдаления") Тогда
Продолжить;
КонецЕсли;
НачатьТранзакцию();
Попытка
МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(КопируемыйФайл);
КопияФайла = КопируемыйФайл.Скопировать();
КопияФайлаСсылка = МенеджерОбъекта.ПолучитьСсылку();
КопияФайла.УстановитьСсылкуНового(КопияФайлаСсылка);
КопияФайла.ВладелецФайла = Получатель.Ссылка;
КопияФайла.Редактирует = Справочники.Пользователи.ПустаяСсылка();
КопияФайла.ТекстХранилище = КопируемыйФайл.ТекстХранилище;
КопияФайла.СтатусИзвлеченияТекста = КопируемыйФайл.СтатусИзвлеченияТекста;
КопияФайла.ФайлХранилище = КопируемыйФайл.ФайлХранилище;
ДвоичныеДанные = РаботаСФайлами.ДвоичныеДанныеФайла(КопируемыйФайл);
КопияФайла.ТипХраненияФайла = ТипХраненияФайлов();
Если ТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
ЗаписатьФайлВИнформационнуюБазу(КопияФайлаСсылка, ДвоичныеДанные);
Иначе
// Добавить в один из томов (где есть свободное место).
СведенияОФайле = ДобавитьФайлВТом(ДвоичныеДанные, КопияФайла.ДатаМодификацииУниверсальная,
КопияФайла.Наименование, КопияФайла.Расширение);
КопияФайла.ПутьКФайлу = СведенияОФайле.ПутьКФайлу;
КопияФайла.Том = СведенияОФайле.Том;
КонецЕсли;
КопияФайла.Записать();
Если ДоступнаЭлектроннаяПодпись Тогда
УстановленныеПодписи = МодульЭлектроннаяПодпись.УстановленныеПодписи(КопируемыйФайл);
МодульЭлектроннаяПодпись.ДобавитьПодпись(КопияФайла.Ссылка, УстановленныеПодписи);
СертификатыИсточника = МодульЭлектроннаяПодпись.СертификатыШифрования(КопируемыйФайл);
МодульЭлектроннаяПодпись.ЗаписатьСертификатыШифрования(КопияФайла, СертификатыИсточника);
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецЦикла;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ОбновитьПрисоединенныйФайл (БСП)
КоличествоПрисоединенныхФайлов (БСП)
ДанныеПрисоединенныхФайловПисьма (БСП)
ПриПолученииПрисоединенныхФайлов (БСП)
КомандаУправленияПрисоединеннымиФайлами (БСП)
ПриЗаписиПрисоединенногоФайлаСервер (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)