Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 12:19

Загрузка картинки в справочник

Автор tomayal, 18 сен 2024, 09:03

0 Пользователей и 1 гость просматривают эту тему.

tomayal

В справочнике имеются реквизиты: Код, Наименование, Путь, ДатаСоздания, Изображение(тип: ХранилищеЗначения). В форму элемента справочника добавлен реквизит АдресКартинки(тип: строка, вид: поле картинки).

Необходимо сделать так, чтобы путь к файлу(картинке) считывался из реквизита Путь, после чего находилась картинка на компьютере(пример пути: C:\картинка.jpg) и загружалась в поле картинки формы элемента справочника Фото.

Синтаксических ошибок нет, файл находит, в форме элемента ошибок не выдает. При нажатии на поле картинки выдает сообщение "ХранилищеЗначения".

Что я делаю не так???

&НаКлиенте 
Процедура ПутьПриИзменении(Элемент) 
    // Если путь пустой
    Если НЕ ЗначениеЗаполнено(Объект.Путь) Тогда 
        Возврат; 
    КонецЕсли;
   
    // Создаем новый объект Файл по указанному пути
    ВременныйФайл = Новый Файл(Объект.Путь);
   
   Если НЕ ВременныйФайл.Существует() Тогда     
        Сообщить("Файл не найден: " + ВременныйФайл.ПолноеИмя + ОписаниеОшибки()); 
        Возврат;
    КонецЕсли;
   
    Попытка 
        // Создание объекта картинки из файла
        Картинка = Новый Картинка(ВременныйФайл.ПолноеИмя); 
       
        // Присваиваем картинку объекту на клиенте
        ЭтотОбъект.АдресКартинки = Картинка; 
       
        // Вызываем процедуру для сохранения изображения на сервере
        СохранитьИзображениеНаСервере(Картинка);   
    Исключение 
        Сообщить("Не удалось загрузить изображение: " + ОписаниеОшибки());
        Возврат; 
    КонецПопытки;
КонецПроцедуры

&НаСервере
Процедура СохранитьИзображениеНаСервере(Картинка) 
    Попытка 
        // Проверка перед сохранением (является ли файл изображением)
        Если ЭтоИзображение(Картинка) Тогда 
            // Создание объекта для хранения данных картинки
            ДанныеКартинки = Новый ХранилищеЗначения(Картинка);
           
            // Присваиваем хранилище картинке
            ЭтотОбъект.АдресКартинки = ДанныеКартинки; 
        Иначе 
            Сообщить("Не удалось сохранить изображение: файл не является изображением."  + ОписаниеОшибки()); 
        КонецЕсли;
    Исключение 
        Сообщить("Не удалось сохранить изображение в хранилище: " + ОписаниеОшибки()); 
    КонецПопытки;
КонецПроцедуры 

// Вспомогательная функция для проверки формата изображения
Функция ЭтоИзображение(Картинка) Экспорт 
    // Допустимые расширения изображений
    ДопустимыеРасширения = "jpg, jpeg, png, bmp, gif";
   
    // Создание объекта Файл для обработки пути
    Файл = Новый Файл(Объект.Путь);
   
    Если НЕ Файл.Существует() Тогда
        Сообщить("Файл не существует: " + Объект.Путь); // Отладочное сообщение
        Возврат Ложь;
    КонецЕсли;

    // Получение расширения файла
    РасширениеФайла = Файл.Расширение;

    // Удаление точки из расширения
    Если Лев(РасширениеФайла, 1) = "." Тогда
        РасширениеФайла = Сред(РасширениеФайла, 2, СтрДлина(РасширениеФайла) - 1);
    КонецЕсли;

    // Приведение расширения к нижнему регистру и удаление пробелов
    РасширениеФайла = НРег(РасширениеФайла);
   
    // Проверка, является ли расширение допустимым
    Если Найти(ДопустимыеРасширения, РасширениеФайла) > 0 Тогда
        Возврат Истина;
    Иначе
        Сообщить("Расширение файла не является изображением: " + РасширениеФайла); // Отладочное сообщение
        Возврат Ложь;
    КонецЕсли;
КонецФункции


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск