База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Почему изображение не сохраняется после выбора файла в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33763
      Телеграм группа https://t.me/odineskiOdineski
      Участник

      где ошибка в коде? изображение прикладывается, но не сохраняется. &НаКлиенте
      Процедура СсылкаНаКартинкуНажатие(Элемент, СтандартнаяОбработка)

      СтандартнаяОбработка = Ложь;
      Фильтр = «Все картинки (*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf)|*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf|»
      + «Формат bmp (*.bmp;*.dib;*.rle)|*.bmp;*.dib;*.rle|»
      + «Формат JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|»
      + «Формат TIFF (*.tif)|*.tif|»
      + «Формат GIF (*.gif)|*.gif|»
      + «Формат PNG (*.png)|*.png|»
      + «Формат icon (*.ico)|*.ico|»
      + «Формат метафайл (*.wmf;*.emf)|*.wmf;*.emf|»;
      Диалог = Новый ПараметрыДиалогаПомещенияФайлов(«Выберите файл», Ложь, Фильтр);
      Оповещение = Новый ОписаниеОповещения(«ПослеЗакрытияДиалогаВыбораФайла», ЭтаФорма);
      НачатьПомещениеФайлаНаСервер(Оповещение,,,, Диалог, УникальныйИдентификатор);

      КонецПроцедуры

      &НаКлиенте
      Процедура ПослеЗакрытияДиалогаВыбораФайла(ОписаниеФайла, ДопПараметры) Экспорт

      Если ОписаниеФайла = Неопределено Тогда
      Возврат;
      КонецЕсли;

      Модифицированность = Истина;
      СсылкаНаКартинку = ОписаниеФайла.Адрес;

      КонецПроцедуры

      &НаСервере
      Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

      Если ЭтоАдресВременногоХранилища(СсылкаНаКартинку) Тогда
      ТекущийОбъект.Изображение = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(СсылкаНаКартинку));
      КонецЕсли;

      КонецПроцедуры

      &НаСервере
      Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

      Если НЕ Объект.Ссылка.Пустая() Тогда
      Изображение = Объект.Ссылка.Изображение;
      Если ЗначениеЗаполнено(Изображение) Тогда
      ДанныеКартинки = Изображение.Получить();
      Если ДанныеКартинки Неопределено Тогда
      СсылкаНаКартинку = ПоместитьВоВременноеХранилище(ДанныеКартинки, УникальныйИдентификатор);
      КонецЕсли;
      КонецЕсли;
      КонецЕсли;

      КонецПроцедуры

    • #33764
      bot_avaOdin — Одинэсник
      Участник

      Ошибка в вашем коде связана с тем, что переменная СсылкаНаКартинку используется в серверной процедуре ПередЗаписьюНаСервере, но она не передается из клиентской части на сервер, и, скорее всего, не является реквизитом объекта или формы. В результате при записи объекта на сервере переменная СсылкаНаКартинку не содержит нужного значения, и изображение не сохраняется.

      ### Подробности и рекомендации:

      1. **Переменная СсылкаНаКартинку должна быть реквизитом формы или объекта**, чтобы серверная часть могла получить ее значение при записи.

      — Если СсылкаНаКартинку — это реквизит формы, то в процедуре ПередЗаписьюНаСервере нужно обращаться к нему через ЭтаФорма.СсылкаНаКартинку или передавать значение в параметры.
      — Если это реквизит объекта (например, справочника или документа), то он должен быть объявлен в метаданных и заполнен на клиенте.

      2. **В процедуре ПослеЗакрытияДиалогаВыбораФайла вы присваиваете СсылкаНаКартинку = ОписаниеФайла.Адрес;**, но это локальная переменная клиентского модуля. Чтобы сервер получил это значение, нужно:

      — Сделать СсылкаНаКартинку реквизитом формы и присваивать его через ЭлементыФормы.СсылкаНаКартинку = …
      — Либо передавать значение в объект, например, в реквизит объекта, если он есть.

      3. **В процедуре ПередЗаписьюНаСервере нужно обращаться к реквизиту объекта, а не к переменной модуля:**

      4. **В процедуре ПриСозданииНаСервере вы используете СсылкаНаКартинку без контекста**, лучше тоже обращаться к реквизиту объекта или формы.

      ### Итог: исправленный пример ключевых моментов

      **Клиентская часть:**

      **Серверная часть:**

      ### Дополнительные рекомендации:

      — Проверьте, что реквизит СсылкаНаКартинку существует в форме и/или объекте.
      — Убедитесь, что при записи объекта вызывается процедура ПередЗаписьюНаСервере.
      — Для отладки можно добавить журналирование или сообщения, чтобы проверить, что переменная действительно содержит значение.

      Рекомендую посмотреть здесь: https://infostart.ru/public/2109638/ — пример загрузки и сохранения изображений с использованием временного хранилища и реквизитов формы.

      Если нужна помощь с конкретным примером, могу помочь адаптировать ваш код.

Просмотр 1 ветки ответов
  • Для ответа в этой теме необходимо авторизоваться.