Имя: Пароль:
1C
1С v8
Добавление фотографии на мобильной платформе
,
0 Enot_tut
 
27.07.15
11:12
Есть загрузку изображения с компьютера,
https://yadi.sk/i/1xFOL9zoi7Ac6
&НаКлиенте
Процедура ДобавитьКартинку(Команда)
ИмяФайла = "";
ПутьФайла = "";
//Вызываем Диалоговое окно и помещаем файл Картинки из локальной файловой системы во временное хранилище
Если ПоместитьФайл(ПутьФайла, , ИмяФайла, Истина) = Истина Тогда

//в строковый реквизит ФОТО нашей формы сохраняем ссылку на Картинку во временном хранилище
Фото = ПутьФайла;
//для создания нового элемента в Справочнике Файлы и записи Картинки в его реквизит Файл
//переходим на сервер с помощью вызова серверной процедуры
УстановитьКартинку();
КонецЕсли;
//условие ЕСЛИ нужно для того, чтобы если пользователь отказался от выбора файла
//мы не вызывали серверную процедуру УстановитьКартинку()
КонецПроцедуры

&НаСервере
Процедура УстановитьКартинку()
//создаем новый элемент в Справочнике Файлы
НовыйФайлКартинки = Справочники.Файлы.СоздатьЭлемент();
//в реквизит СправочникаФайлы Файл помещаем выбранную ранее Картинку
НовыйФайлКартинки.Файл = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Фото));
Фото = ПоместитьВоВременноеХранилище(НовыйФайлКартинки.Файл.Получить());
//записываем новый элемент справочника Файлы
НовыйФайлКартинки.Записать();

//устанавливаем значение реквизита Картинка Справочника Сотрудники
Объект.Картинка = НовыйФайлКартинки.Ссылка;
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//отображение картинки при открытии формы справочника
Фото = ПолучитьНавигационнуюСсылку(Объект.Картинка, "Файл");

//устанавливаем автомасштаб для картинки
Элементы.Фото.РазмерКартинки = РазмерКартинки.АвтоРазмер;
КонецПроцедуры

при нажатие на кнопке на мобильной фотокамеры открывается фотокамера после того как сделана фотка изображение не где не появляться как это исправить помогите пожалуйста  

https://yadi.sk/i/IZjNCI08i7Ak2
https://yadi.sk/i/DW3Uk9yii7ApF

НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    УРИ = "file:///sdcard/Download/1.png";
    НовВз = Новый ЗапускПриложенияМобильногоУстройства();
        НовВз.Действие = "android.media.action.IMAGE_CAPTURE";
        НовВз.ДополнительныеДанные.Добавить("output",УРИ, "Uri");
        если НовВз.Запустить(Истина) = 0 Тогда
            Возврат;
        КонецЕсли;    
        
        ФотокамераФрагмент(УРИ);

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

&НаСервере
Процедура ФотокамераФрагмент(Знач УРИ)
    
    Перем ДД, ХЗ;
    
    ДД = Новый ДвоичныеДанные("/sdcard/Download/1.png");
    ХЗ = Новый ХранилищеЗначения(ДД, Новый СжатиеДанных(9));

КонецПроцедуры
    
&НаКлиенте
Процедура УдалитьФайл(УРИ)
УдалитьФайлы(УРИ);
КонецПроцедуры
1 DitriX
 
27.07.15
22:06
я могу ошибаться, но вроде это не должно быть так.
УРИ = "file://sdcard/Download/1.png";
Если вы указываете такой формат, то укажите это вот так
УРИ = "file:///sdcard/Download/1.png";
2 Enot_tut
 
28.07.15
11:21
все исправил теперь как добавляет фотографию пишет ошибку
https://yadi.sk/i/2QUi9ew-i8Qjy
3 DitriX
 
28.07.15
12:03
у меня такое подозрение, что вы нарвались на некий баг платформы.
Вы только на одном устройстве пробовали?
4 Enot_tut
 
28.07.15
12:57
да
5 Enot_tut
 
28.07.15
13:00
ДанныеМультимедиа = СредстваМультимедиа.СделатьФотоснимок();
        Если Не ДанныеМультимедиа = Неопределено Тогда
            Попытка
                ДвоичныеДанные        = ДанныеМультимедиа.ПолучитьДвоичныеДанные();
                АдресХранилища         = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
                Фото     = АдресХранилища;
                Элементы.Фото.РазмерКартинки = РазмерКартинки.АвтоРазмер;

            Исключение
                Сообщить(ОписаниеОшибки());    
            КонецПопытки;
        КонецЕсли;

https://yadi.sk/i/gDhvPoLoi8YgB
сделал по этому коду все нормально в форму добавляет но после того как нажимаешь готово фотография пропадает
6 Enot_tut
 
28.07.15
13:01
я предполагаю что этот код надо связать как тос этим кодом но я не разобрался как

&НаСервере
Процедура УстановитьКартинку()
//создаем новый элемент в Справочнике Файлы
НовыйФайлКартинки = Справочники.Файлы.СоздатьЭлемент();
//в реквизит СправочникаФайлы Файл помещаем выбранную ранее Картинку
НовыйФайлКартинки.Файл = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Фото));
Фото = ПоместитьВоВременноеХранилище(НовыйФайлКартинки.Файл.Получить());
//записываем новый элемент справочника Файлы
НовыйФайлКартинки.Записать();

//устанавливаем значение реквизита Картинка Справочника Сотрудники
Объект.Картинка = НовыйФайлКартинки.Ссылка;
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//отображение картинки при открытии формы справочника
Фото = ПолучитьНавигационнуюСсылку(Объект.Картинка, "Файл");

//устанавливаем автомасштаб для картинки
Элементы.Фото.РазмерКартинки = РазмерКартинки.АвтоРазмер;
КонецПроцедуры
7 DitriX
 
28.07.15
13:20
Вот вам пример из реального проекта. Фотки - это реквизит формы типа строка,  выведенный на форму как каринка.

&НаКлиенте
Процедура ФоткиНажатие(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;    
КонецПроцедуры

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

&НаКлиенте
Процедура ОбработкаКоманды(Команда)
      //Тут указываем путь, при чем путь должен быть доступен всем программам, так что временные файлы 1С не подйут
    ФайлКартинки = "/sdcard/Download/FotoTestFrom1C.bmp";
    НовВз = Новый ЗапускПриложенияМобильногоУстройства("android.media.action.IMAGE_CAPTURE");

    //Обязательно указываем этот параметр, если его не указать, тогда вам вернется привью файла в низком качестве и находится он будет в параметрах с ключем data.
    НовВз.ДополнительныеДанные.Добавить("output","file://" + ФайлКартинки,"Uri");

    //Если фото не сделано, то ответ будет "0"
    Если НовВз.Запустить(Истина) <> 0 Тогда

    //ну а тут уже готовое фото, так что все что хотим, то и делаем.
        ДД = Новый ДвоичныеДанные(ФайлКартинки);
        Фотки = ПоместитьВоВременноеХранилище(ДД);
        IDФото = Новый УникальныйИдентификатор;
    Иначе
        Сообщить("Фото не сделано!");
    КонецЕсли;    
  
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьФото(Команда)
    Если IDФото = "" Тогда
        Сообщить("Сделайте фото!");
        Возврат;
    КонецЕсли;
    ХТТП = Новый HTTPСоединение("127.0.0.1",65100,"dima","pass");
    
    СтруктураЗапроса = Новый Соответствие;
    СтруктураЗапроса.Вставить("ID", ID);
    СтруктураЗапроса.Вставить("IDFoto", IDФото);
    СтруктураЗапроса.Вставить("type", 1);
    ХТТПЗапрос = Новый HTTPЗапрос("/BaseOneNew/hs/DataTransfer/Sync",СтруктураЗапроса);
    ХТТПЗапрос.УстановитьТелоИзДвоичныхДанных(ПолучитьИзВременногоХранилища(Фотки));
    Ответ = ХТТП.ОтправитьДляОбработки(ХТТПЗапрос);
    ОтветОтСервера = Ответ.ПолучитьТелоКакСтроку("UTF-8");
    Если Ответ.КодСостояния <> 200 Тогда
        ВызватьИсключение "Ошибка подключения к серверу: " + Символы.ПС + Ответ.КодСостояния + ОтветОтСервера;
    КонецЕсли;
    Сообщить(ОтветОтСервера);
    
КонецПроцедуры
8 Enot_tut
 
28.07.15
13:46
ХТТП = Новый HTTPСоединение("127.0.0.1",65100,"dima","pass");
вот это строка что озночает
9 DitriX
 
28.07.15
14:27
Процедура ОтправитьФото(Команда)
Эта процедура отправляет данные на сервер 1с по http сервисам.
10 Enot_tut
 
28.07.15
14:51
,"dima","pass"
это так же оставить??
11 DitriX
 
28.07.15
14:53
вам вообще это не надо.
Оттуда вас интересует только одна строка - где получаются двоичные данные:
ПолучитьИзВременногоХранилища(Фотки).

Может скинете обрабоку, и проще будет ее посмотреть сразу и ответить вам, а то так мы врядли к чему прийдем.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.