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

Не отображается фотография на форме документа

Автор DenchikDev, Вчера в 08:50

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

DenchikDev

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

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

&НаКлиенте
Функция МожноСделатьФото()
    #Если МобильныйАвтономныйСервер ИЛИ МобильноеПриложениеКлиент ИЛИ МобильныйКлиент Тогда
        Возврат СредстваМультимедиа.ПоддерживаетсяФотоснимок();
    #Иначе 
        Сообщить(НСтр("ru='Данное устройство не поддерживает возмоность фотографировать'"));
    #КонецЕсли
    Возврат Ложь;
КонецФункции

&НаКлиенте
Функция ПолучитьДанныеСнимка()
    #Если МобильноеПриложениеКлиент ИЛИ МобильныйКлиент Тогда
        ТипКамеры = ТипКамерыУстройства.Задняя;
        РазрешениеКамеры = РазрешениеФотографииПоУмолчанию();
       
        Если РазрешениеКамеры = Неопределено Тогда
            Сообщить("Не удалось определить разрешение камеры");
            Возврат Неопределено;
        КонецЕсли;
       
        Данные = СредстваМультимедиа.СделатьФотоснимок(ТипКамеры, РазрешениеКамеры, КачествоФотографииПоУмолчанию());
       
        Возврат Данные;
    #КонецЕсли
   
    Возврат Неопределено;
КонецФункции

&НаКлиенте
Функция КачествоФотографииПоУмолчанию()
    Возврат 70;
КонецФункции

&НаКлиенте
Функция РазрешениеФотографииПоУмолчанию()
   
    #Если МобильноеПриложениеКлиент Или МобильныйКлиент Тогда
        ПоддерживаемыеРазрешения = СредстваМультимедиа.ПолучитьПоддерживаемыеРазрешенияКамеры();
       
        Если ПоддерживаемыеРазрешения.Количество() > 0 Тогда
            Возврат ПоддерживаемыеРазрешения[0];
        КонецЕсли;
       
        Возврат Новый РазрешениеКамерыУстройства(1024, 768);
    #Иначе
        Возврат Неопределено;
    #КонецЕсли
   
КонецФункции

&НаКлиенте
Функция СделатьИПоместитьФото()
    Если Не МожноСделатьФото() Тогда
        Возврат Неопределено;
    КонецЕсли;
   
    #Если МобильноеПриложениеКлиент Или МобильныйКлиент Тогда
    Попытка
        ДанныеФото = ПолучитьДанныеСнимка();
       
        Если ДанныеФото = Неопределено Тогда
            Возврат Неопределено;
        КонецЕсли;
       
        ТекущееФотоДвоичныеДанные = ДанныеФото.ПолучитьДвоичныеДанные();
       
        Адрес = ПоместитьВоВременноеХранилище(ТекущееФотоДвоичныеДанные, Новый УникальныйИдентификатор);
       
        Возврат Адрес;
       
    Исключение
        ТекстОшибки = НСтр("ru='Ошибка создания фотографии: '") + ОписаниеОшибки();
        ВызватьИсключение ТекстОшибки;
    КонецПопытки;
    #КонецЕсли
   
    Возврат Неопределено;
КонецФункции

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

&НаСервере
Процедура ЗагрузитьФотоСервер()
    Если Объект.Ссылка.Пустая() Тогда
        Возврат;   
    КонецЕсли;
   
    Объект.Фотография = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеФотографии");
КонецПроцедуры

&НаКлиенте
Процедура СделатьФото(Команда)
    СделатьФотоКлиент();
КонецПроцедуры

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЗагрузитьФотоСервер();
КонецПроцедуры

Заранее спасибо, буду очень благодарен.

sali

Цитата: DenchikDev от Вчера в 08:50Фотография - строковый реквизит
может картинку в двоичные данные запихнуть?

DenchikDev

sali, У меня в коде есть преобразование в двоичные данные функция СделатьИПоместитьФото(), или вы имеете ввиду что-то другое?

Максим75

DenchikDev, вот это что?
Объект.Фотография = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеФотографии");
Вы в строковый реквизит на форме возвращаете навигационную ссылку, я подозреваю, что это никак не фотография.

обычно делается так

&НаСервере
Процедура ПоместитьИзображениеФорма(СсылкаФайл)

 ИзображениеХранилище = ПоместитьВоВременноеХранилище(СсылкаФайл.Изображение.Получить(), УникальныйИдентификатор);

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

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

здесь у меня на форме справочника есть список фотографий этого товара, и при активации строки с фото выводится на форму само фото.
Реализовано хранение фото номенклатуры отдельно от самой номенклатуры в подчиненном справочнике (в реквизите Изображение с типом ХранилищеЗначения как раз и хранится двоичный код)

DenchikDev

Максим75, Не совсем так, мне надо, чтобы после успешно выполненного фото фотография размещалась в реквизит и чтобы при повторном открытии документа фото оставалось в реквизите.

Максим75

DenchikDev, так посмотрите код, который размещает фото на форме. так что-то не то
просто Вы храните двоичные данные фото в реквизите самого документа, а я отдельно. но это детали хранения.
принцип вывода картинки / фото на форму остается одинаковым.

antoneus

Адрес = ПоместитьВоВременноеХранилище(ТекущееФотоДвоичныеДанные, УникальныйИдентификатор);
Без Новый.

DenchikDev

Максим75, Всё равно не могу понять, почему не работает

DenchikDev

Сделал реквизит Фотография реквизитом формы, а не документа, всё заработало. Всем спасибо, кто помогал.

Теги:

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

Рейтинг@Mail.ru

Поиск