Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Мобильная платформа. Как к документу прикрепить фото из галереи?

Мобильная платформа. Как к документу прикрепить фото из галереи?
Я
   Родионовна
 
03.10.16 - 16:36
Здравствуйте.
Очень прошу отклика того, кто нашел решение, как к документу прикрепить фото (не сделать, а выбрать из галереи).
1. Действие = "android.intent.action.GET_CONTENT" - без утилиты акоды не взлетело, не получилось преобразовать content в uri. А ставить еще один апк - меня с этой идеей точно отправят.
2. ДиалогВыбораФайла() в 8.3.9 - это неудобный скроллинг списка изображений без разбивки по каталогам. Да и не хотелось пока в работу тестовую платформу внедрять - уже нашли существенные баги.
 
 
   kittystark
 
1 - 03.10.16 - 17:02
на уровне идеи:
своим кодом пробежаться по каталогу, и на лету сгенерировать со вcякими <img src=...> HTML-код, разместив его в поле хтмл на форме
   kittystark
 
2 - 03.10.16 - 17:04
&НаКлиенте
Процедура ВыбратьФайлСДискаИЗаписать()
    Перем ВыбранноеИмя;
    Перем АдресВременногоХранилища;
    Если ПоместитьФайл(АдресВременногоХранилища, "", ВыбранноеИмя, Истина) Тогда
        Объект.ИмяФайла = ВыбранноеИмя;
        ПоместитьФайлОбъекта(АдресВременногоХранилища);
    КонецЕсли;    
КонецПроцедуры

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

   Родионовна
 
3 - 03.10.16 - 17:21
(1)Спасибо за отклик. Это на крайний случай, т.к. на планшете эта идея отрабатывает очень медленно.
   kittystark
 
4 - 03.10.16 - 17:25
нема за шо
ПоместитьФайл(...), не оно ?
   Родионовна
 
5 - 03.10.16 - 17:28
В boss на 8.3.8 эта функция хорошо реализована - удобно и быстро. На первый взгляд через GET_CONTENT.
   Родионовна
 
6 - 03.10.16 - 18:37
(4) На мобильной платформе параметр <Интерактивно> игнорируется и диалоговое окно выбора файла не отображается никогда
   lucbak
 
7 - 03.10.16 - 20:41
(6) в 8.3.9 все отображается (ничего не игнорируется)
   lucbak
 
8 - 03.10.16 - 20:44
Какие баги нашли ? (ХОчется знать чего ждать)
   kittystark
 
9 - 04.10.16 - 09:25
(6) в (4) код рабочий - взят из реальной конфы и на моб.платформе 8.3.8.58 работает, во всяком случае под андроидом
   Родионовна
 
10 - 04.10.16 - 12:06
(9) проверила еще раз на 8.3.8.58 - окно выбора не появляется. Моя выдержка в (6) из справки к платформе
(8) Например, приложение вылетает при открытии формы с таблицей типа "Дерево" или "Иерархический список".
 
 Рекламное место пустует
   lucbak
 
11 - 04.10.16 - 12:08
(10) не всегда надо слепо верить СП :)

Вылет а "Иерархический список" тоже заметил, на Дереве вылетов не наблюдаю.
   newbling
 
12 - 04.10.16 - 12:14
Я недавно делал прикрепление файлов, могу скинуть

&НаКлиенте
Процедура Загрузить(Команда)
    // Тут с помощью НайтиФайлы() достаём один или много


ОписаниеОповещения("ОтветПользователяПродолжитьЗапись",ЭтотОбъект,МассивКартинок), "Найдено "+КолКарт+" картинок. Продолжить?",РежимДиалогаВопрос.ДаНет);
    КонецЕсли;
КонецПроцедуры

&НаКлиенте 
Процедура ОтветПользователяПродолжитьЗапись(РезультатВопроса,МассивКартинок) Экспорт
    Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
        ПомещаемыеФайлы = Новый Массив;
        Для Каждого фКартинка Из МассивКартинок Цикл
            ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(фКартинка.ПолноеИмя));
        КонецЦикла;
        ПомещенныеФайлы = Новый Массив;
        ПоместитьФайлы(ПомещаемыеФайлы,ПомещенныеФайлы,,Ложь);
        
        МассивДанных = Новый Массив;
        Для сч = 0 По ПомещенныеФайлы.Количество()-1 Цикл
            МассивДанных.Добавить(Новый Структура("ИмяБезРасширения,Расширение,АдресФайлаВоВременномХранилище",
            СокрЛП(МассивКартинок[сч].ИмяБезРасширения), СокрЛП(МассивКартинок[сч].Расширение), ПомещенныеФайлы[сч].Хранение));
        КонецЦикла;
        ЗагрузитьИзображенияСервер(МассивДанных);
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьИзображенияСервер(МассивДанных)
    //пустАвтор=Справочники.Пользователи.ПустаяСсылка();

    Для Каждого ЭлемДанных Из МассивДанных Цикл
        спрНом = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",ЭлемДанных.ИмяБезРасширения);
        Если спрНом.Пустая() Тогда
            Сообщить("Не найдена номенклатура с артикулом "+ЭлемДанных.ИмяБезРасширения, СтатусСообщения.Важное);
        Иначе
            Попытка
                ПрисоединеннаяКартинка = ПрисоединенныеФайлы.ДобавитьФайл(спрНом,ЭлемДанных.ИмяБезРасширения,ЭлемДанных.Расширение,ТекущаяДата(),,ЭлемДанных.АдресФайлаВоВременномХранилище);
                ОбНом = спрНом.ПолучитьОбъект();
                ОбНом.ФайлКартинки = ПрисоединеннаяКартинка;
                ОбНом.Записать();
                Сообщить("Добавлени картинка "+ЭлемДанных.ИмяБезРасширения + ЭлемДанных.Расширение + " для номенклатуры "+спрНом.Наименование);
            Исключение
                Сообщить(ОписаниеОшибки());
            КонецПопытки;
        КонецЕсли;
    КонецЦикла;    
КонецПроцедуры
   newbling
 
13 - 04.10.16 - 12:15
Ну и ессно надо накидать обработчик выбора файла чтоб красиво было, но это уже другая тема
   newbling
 
14 - 04.10.16 - 12:16
ПрисоединенныеФайлы.ДобавитьФайл удобно тем, что там уже учтена возможность хранения файлов в томах на диске или внутри базы.
   Родионовна
 
15 - 04.10.16 - 12:34
(11) я не доверяю, я проверяю. И на 8.3.8.68 тоже - нет интерактива.
(14) Это функционал из БСП. Меня интересует как организовать выбор изображения в мобильном приложении и получить дв.данные для дальнейшей отправки по Ws.
Через НайтиФайлы() можно вывести форму с полями html док-та для выбора пользователем нужного, но отрисовываться она будет ппц как долго
   lucbak
 
16 - 04.10.16 - 13:09
(15) на 8.3.9 есть, хотя  в СП написано, что нет.
Можешь воспользоваться вот этим: http://catalog.mista.ru/public/155226/ (в принципе работает, но есть небольшая проблема с отрисовкой)
   arsik
 
17 - 05.10.16 - 15:33
(0) Вообще то у меня вот такой кусок работает без всякого ACODE, т.к. он использует стандартные методы мобильной платформы и андроида.

    НовВз = Новый ЗапускПриложенияМобильногоУстройства();
    НовВз.Действие = "android.intent.action.GET_CONTENT";
    НовВз.Тип = "image/*";
    НовВз.ДополнительныеДанные.Добавить("android.intent.extra.LOCAL_ONLY",Истина);
    РезультатРаботы = НовВз.Запустить(Истина);
    Если НЕ РезультатРаботы Тогда
        Сообщить("Файл не выбран!");
        Возврат
    иначе
        Сообщить(НовВз.Данные);
    КонецЕсли;


   arsik
 
18 - 05.10.16 - 15:47
+(17) Только не найду как в дополнительных параметрах передать, что нужен множественный выбор.
   arsik
 
19 - 05.10.16 - 16:12
+(18)
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.ALLOW_MULTIPLE",Истина);

Никакого эффекта
   arsik
 
20 - 05.10.16 - 16:20
+ (19)  Все понятно. Это ограничение стандартной галереи в андроиде.
http://stackoverflow.com/questions/31002388/android-intent-extra-allow-multiple-allows-only-single-picking
   DitriX
 
21 - 06.10.16 - 12:48
(17) не вводите людей в заблуждение. В данном случае - это работает именно у ВАС, и далеко не факт, что работать будет у других.
Так как есть разные версии прошивки, есть разные версии тех же приложений и т.д.
   arsik
 
22 - 06.10.16 - 14:55
(21) Ну яж почитал чуток :)
Интенты - намерения не предназначены приложению, они в систему кидаются. Там же и ищется соответствие Намерение + миме тип. И выдается список приложений какими я могу воспользоватся.
Это все работает на уровне андроида, и не важно какие приложения у меня стоят. Если есть подходящее по фильтру я его увижу в списке выбора.
   Родионовна
 
23 - 06.10.16 - 16:50
(17) Я неточно изложила проблему: фото выбрать можно и оно отображается в поле типа Html документ, а вот сохранить его в двоичные данные и передать в центральную базу - увы.
НовВз.Данные- это ссылка типа content и ее в двоичные данные не преобразовать.
   arsik
 
24 - 07.10.16 - 08:42
(23) Странно. У меня в 
НовВз.Данные - строка типа "file://storage/emulated/0/DCIM/Camera/IMG_20161003_151055_HDR.jpg"
Ниже приведенный код вполне себе работает.
&НаСервере
Процедура ОткрытьГалереюНаСервере(ИмяФайла)
    ДвД = Новый ДвоичныеДанные(ИмяФайла);
    хрЗначений = Новый ХранилищеЗначения(ДвД);
    Сообщить(ДвД.Размер());
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьГалерею(Команда)
    НовВз = Новый ЗапускПриложенияМобильногоУстройства("android.intent.action.GET_CONTENT");
    НовВз.Тип = "image/*";
    НовВз.ДополнительныеДанные.Добавить("android.intent.extra.LOCAL_ONLY",Истина);
    РезультатРаботы = НовВз.Запустить(Истина);
    
    Если НЕ РезультатРаботы Тогда
        Сообщить("Файл не выбран!");
        Возврат
    иначе
        ОткрытьГалереюНаСервере(НовВз.Данные);
    КонецЕсли;
КонецПроцедуры

   arsik
 
25 - 07.10.16 - 08:42
Покажи свой кусок
   DitriX
 
26 - 07.10.16 - 19:51
(22) потому что ваше приложение фотографий возвращает прямой линк к файлу, а у других - через контент првайдера, а 1с не может в них.
Тут дело не в коде, а в приложениях.
   arsik
 
27 - 07.10.16 - 19:58
(26) О том что проблема в обработке результата я только в (23) узнал.
Понятно что приложение может разный результат вернуть.
(23) Может поиграться с ДополнительныеДанные? Туда возможно можно передать параметр, для приложения, что бы оно возвращало ури. Но это опять затыкание дыр, т.к. на разных устройствах разные приложения могут стоять.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует