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

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

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

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

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

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

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

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

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

    // Приведение расширения к нижнему регистру и удаление пробелов
    РасширениеФайла = НРег(РасширениеФайла);
  
    // Проверка, является ли расширение допустимым
    Если Найти(ДопустимыеРасширения, РасширениеФайла) > 0 Тогда
        Возврат Истина;
    Иначе
        Сообщить("Расширение файла не является изображением: " + РасширениеФайла); // Отладочное сообщение
        Возврат Ложь;
    КонецЕсли;
КонецФункции
1 Волшебник
 
18.09.24
09:12
С утра ботяры попёрли
2 banco
 
18.09.24
09:12
АдресКартинки = ПолучитьНавигационнуюСсылку(ДанныеКартинки)
3 tomayal
 
18.09.24
09:16
(2) Выдает сообщение: Не удалось сохранить изображение в хранилище: {Справочник.Фото.Форма.ФормаЭлемента.Форма(40)}: Ошибка при вызове метода контекста (ПолучитьНавигационнуюСсылку): Недопустимое значение параметра (параметр номер '1') (Нельзя получить навигационную ссылку от значения типа Хранилище значения)

&НаСервере
Процедура СохранитьИзображениеНаСервере(Картинка)  
    Попытка  
        // Проверка перед сохранением (является ли файл изображением)
        Если ЭтоИзображение(Картинка) Тогда  
            // Создание объекта для хранения данных картинки
            ДанныеКартинки = Новый ХранилищеЗначения(Картинка);
            
            // Присваиваем хранилище картинке
            АдресКартинки = ПолучитьНавигационнуюСсылку(ДанныеКартинки);  
        Иначе  
            Сообщить("Не удалось сохранить изображение: файл не является изображением."  + ОписаниеОшибки());  
        КонецЕсли;
    Исключение  
        Сообщить("Не удалось сохранить изображение в хранилище: " + ОписаниеОшибки());  
    КонецПопытки;
КонецПроцедуры
4 Stepashkin
 
18.09.24
09:18
(0) >> Что я делаю не так???
Занимаетесь не своим делом.
5 Мультук
 
18.09.24
09:42
6 tomayal
 
18.09.24
09:47
(5) в статье, что вы прислали, загрузка картинки делается через кнопку, а надо без кнопки и без нажатия на поле картинки..((
7 Stepashkin
 
18.09.24
09:47
(5) Оказывается нужно просто научиться пользоваться поиском, но это очень трудно).
8 Волшебник
 
18.09.24
09:48
(6) Вы издеваетесь что ли? Ну если надо без кнопки, так идите и делайте нейроинтерфейс!
9 Stepashkin
 
18.09.24
09:51
(6) Мысленно, что ли?
10 maxab72
 
18.09.24
11:07
(6) сделайте через командную строку. Как в добрые ламповые времена до появления Виндузов...
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.