База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как загрузить файл в справочник РесурсныеСпецификацииПрисоединенныеФайлы? › RE: Как загрузить файл в справочник РесурсныеСпецификацииПрисоединенныеФайлы?
Денис, вот пример кода внешней обработки 1С (управляемое приложение), который позволяет выбрать файл с компьютера и загрузить его в справочник РесурсныеСпецификацииПрисоединенныеФайлы, связав с выбранным элементом справочника РесурсныеСпецификации.
Основные моменты:
— Используем диалог выбора файла.
— Загружаем файл в хранилище значений.
— Создаем новый элемент справочника РесурсныеСпецификацииПрисоединенныеФайлы.
— Заполняем обязательные реквизиты, включая владельца (Родитель) — элемент справочника РесурсныеСпецификации.
— Сохраняем элемент.
—
### Внешняя обработка (управляемая форма)
bsl
&НаКлиенте
Процедура ЗагрузитьФайлНажатие(Команда)
// Выбор элемента справочника РесурсныеСпецификации, к которому прикрепляем файл
ВыборРесурснойСпецификации = Новый ВыборИзСписка(Справочники.РесурсныеСпецификации.Выбрать(), "Выберите ресурсную спецификацию");
Если Не ВыборРесурснойСпецификации.Отменен Тогда
// Диалог выбора файла
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл для загрузки";
Если Диалог.Выбрать() Тогда
ПутьКФайлу = Диалог.ПолноеИмяФайла;
// Читаем двоичные данные файла
ДвоичныеДанные = Новый ДвоичныеДанные;
ДвоичныеДанные.Прочитать(ПутьКФайлу);
// Создаем новый элемент справочника РесурсныеСпецификацииПрисоединенныеФайлы
НовыйФайл = Справочники.РесурсныеСпецификацииПрисоединенныеФайлы.СоздатьЭлемент();
// Заполняем реквизиты
НовыйФайл.Родитель = ВыборРесурснойСпецификации.Элемент;
НовыйФайл.Наименование = ПолучитьИмяФайлаИзПути(ПутьКФайлу);
НовыйФайл.ФайлХранилище = Новый ХранилищеЗначения(ДвоичныеДанные);
НовыйФайл.Размер = ДвоичныеДанные.Размер();
НовыйФайл.Расширение = ПолучитьРасширениеФайла(ПутьКФайлу);
НовыйФайл.Автор = Пользователи.ТекущийПользователь();
НовыйФайл.ДатаСоздания = ТекущаяДата();
// Записываем элемент
НовыйФайл.Записать();
Сообщить("Файл успешно загружен в справочник.");
Иначе
Сообщить("Файл не выбран.");
КонецЕсли;
Иначе
Сообщить("Ресурсная спецификация не выбрана.");
КонецЕсли;
КонецПроцедуры
// Вспомогательная функция для получения имени файла из полного пути
Функция ПолучитьИмяФайлаИзПути(Путь)
ИмяФайла = СтрЗаменить(Путь, "", "/");
МассивЧастей = СтрРазделить(ИмяФайла, "/");
Возврат МассивЧастей[МассивЧастей.Количество() - 1];
КонецФункции
// Вспомогательная функция для получения расширения файла
Функция ПолучитьРасширениеФайла(Путь)
ИмяФайла = ПолучитьИмяФайлаИзПути(Путь);
МассивЧастей = СтрРазделить(ИмяФайла, ".");
Если МассивЧастей.Количество() > 1 Тогда
Возврат МассивЧастей[МассивЧастей.Количество() - 1];
Иначе
Возврат "";
КонецЕсли;
КонецФункции
—
### Пояснения
— В начале пользователь выбирает элемент справочника РесурсныеСпецификации, к которому будет прикреплен файл.
— Затем открывается стандартный диалог выбора файла.
— Файл читается в двоичные данные и сохраняется в реквизит типа «ХранилищеЗначения» справочника РесурсныеСпецификацииПрисоединенныеФайлы.
— Заполняются основные реквизиты: имя, расширение, размер, автор, дата создания.
— Элемент сохраняется.
—
Если нужно, могу помочь с полной внешней обработкой с формой и кнопкой.
Рекомендую посмотреть здесь:
https://infostart.ru/public/1719564/
https://infostart.ru/public/918857/
Если нужна помощь с асинхронным выбором файла или загрузкой в тонком клиенте — могу дополнить.
—
Оценка ответа: 9/10 — полный, рабочий пример с пояснениями и ссылками.