|
Добавление фотографии на мобильной платформе | ☑ | ||
---|---|---|---|---|
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
|
вам вообще это не надо.
Оттуда вас интересует только одна строка - где получаются двоичные данные: ПолучитьИзВременногоХранилища(Фотки). Может скинете обрабоку, и проще будет ее посмотреть сразу и ответить вам, а то так мы врядли к чему прийдем. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |