Имя: Пароль:
1C
 
Мобильное приложение на 8.3
0 mzelensky
 
22.10.14
10:59
Доброго всем.
Честно говоря запарился уже с этим вопросом, но все же.

Мобильное приложение на 8.3.5. Получаю геокоординаты и привязываю к объектам. У Платформы есть метод "Показать координаты на карте". Чтобы он работал нужно получить АПИ ключ Гугла и указать его при сборке. Косяк в том, что Гугл в очереднйо раз все поменял и получить этот присловутый ключ я не могу. Соответственно координаты на карте не отображаются.

Сейчас народ активно юзает мобильную платформу, может кто знает еще вариант отображать координаты на карте на мобильном устройстве?
1 mzelensky
 
22.10.14
11:02
(0) И еще одна попутная трабла. В Мобильном приложении нет "Диалога выбора файла". Хочу нарисовать совой. Проверяю на своем компе - все работает. Делаю сборку на МП - каталог временных файлов открывается (темповский), файлы в нем отображаются, но если попытаться получить данные других каталогов, то метод "НайтиФайлы" ничего не дает.

Понимаю, что описание крайне скудное и не понятно, но может кто-то уже заморачивался?
2 Широкий
 
22.10.14
11:18
(0) Да не делай ты сборку, обновляй конфу через веб-сервер
(1) Код покажи
3 mzelensky
 
22.10.14
11:28
(2) Не хочу я через веб-сервер.

Сейчас дословно не покажу - нет с собой исходников. Но принчип прост

СписокФайлов = Найти файлы(ТекущийКаталог, *.*)

Дальше обхожу список файлов и загоняю в ТЗ. На локальной машине все ок работает. НА мобильной как-то странно. При получении файлов каталога "КаталогДокументов" все отображает, а кроме этого ничего.
4 mzelensky
 
22.10.14
11:29
Разницу нашел только одну. На локальном компе разделитель "\", а в мобильном приложении "/"...но уже обыграл этот момент
5 Широкий
 
22.10.14
11:32
(4) У каталогов тоже есть расширение. Ты это учел?
6 mzelensky
 
22.10.14
11:38
(5) Я определяю катало\файл через

ФайлПроверки = новый файл(Путь)
Если ФайлПроверки.Существует() Тогда
  Если ФайлПроверки.ЭтоКаталог() Тогда
     //Это каталог
  Иначе
     //Это файл
  Конец
КонецЕсли;
7 Широкий
 
22.10.14
11:40
(6) Ты так и не ответил на вопрос
8 mzelensky
 
22.10.14
11:51
(7) Так я не знаю как на него ответить. Я не учитываю расширение и не использую его в каких-либо условиях.

А вариант "Найти файлы(ТекущийКаталог, *.*)" подразумевает "найти ВСЕ"...на сколько я понимаю.

Так как и где я должен учесть расширение каталога?
9 Широкий
 
22.10.14
11:54
(8) Думаю без засвета кода, диалог будет неконструктивным.
10 mzelensky
 
22.10.14
12:00
(9) Согласен. Выложу завтра.

а по первому вопросу с координатами?
11 Широкий
 
22.10.14
12:02
"Сейчас народ активно юзает мобильную платформу, может кто знает еще вариант отображать координаты на карте на мобильном устройстве?"

Сделай html страницу. На ней с помощью яндекс-апи (гугл мне не нравится) показывай координаты.
12 Широкий
 
22.10.14
12:03
+11 Подобное у меня сделано на веб клиенте (не мобильное приложение). Но думаю и на мобильном взлетит
13 Широкий
 
22.10.14
12:06
Самому рисовать гео-метки удобнее - можно привязывать балуны, кластеры организовывать и т.д.
Т.е. функционал шире, чем предлагает 1с на гугл-картах
14 mzelensky
 
22.10.14
12:23
(11) А есть пример реализации?
15 Широкий
 
22.10.14
12:25
16 Широкий
 
22.10.14
12:33
Проверил - яндекс апи на мобильной платформе работает.
17 mzelensky
 
22.10.14
12:42
Спасибо!

Заходи завтра :)
18 Garykom
 
гуру
22.10.14
12:58
(8) Вариант "Найти файлы(ТекущийКаталог, *.*)" подразумевает найти по шаблону "что угодно"+"."+"что угодно", а не просто "что угодно"="*"
19 mzelensky
 
22.10.14
13:29
(18) Попробую вообще второй параметр убрать.
20 mzelensky
 
22.10.14
13:31
И кстати еще один сопутствующий вопрос. Как на мобильном устройстве получить список доступных дисков (ну или если быть точнее, то флешек)?

Самое простое, что приходит на ум - перебрать все латинские буквы и проверить через  

ФайлПроверки = новый файл(Путь)
Если ФайлПроверки.Существует() Тогда
КонецЕсли;

Может как-то более красиво можно (уточняю именно на МОБИЛЬНОМ ПРИЛОЖЕНИИ)?
21 mzelensky
 
22.10.14
13:35
(18) В МС Виндоус

найтиФАйлы("Z:\~Зеленский\", "*");

и

найтиФАйлы("Z:\~Зеленский\", "*.*");

Дает одинаковые результаты - все файлы и каталоги
22 Широкий
 
22.10.14
13:59
(20) Скорее никак, бывают что флэхи вообще не выделяются как отдельный диск
23 Широкий
 
22.10.14
14:01
Я в качестве значения по-умолчанию задавал каталог "\".
24 mzelensky
 
22.10.14
14:05
(23) А что он в этом случае открывал?
25 Адинэснег
 
22.10.14
14:07
пути указываешь в линукс формате?
"/" вместо "\"
26 mzelensky
 
22.10.14
14:14
(25) НУ я поставил условие, что если Мобильное приложение, то использую "/", в противном случае "\"
27 Широкий
 
22.10.14
14:27
(26) МобильноеПриложениеКлиент?
28 mzelensky
 
22.10.14
15:03
и МобильноеПриложениеКлиент и МобильноеПриложениеСервер.
29 mzelensky
 
23.10.14
10:43
Продолжаем тему с формой Выбора. Вчера немного посидел, поэкспериментировал. Вот кусок кода:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Параметры.Свойство("РежимВыбораКаталога", РежимВыбораКаталога);
    
    #Если МобильноеПриложениеСервер Тогда
        Разделитель = "/";
    #Иначе
        Разделитель = "\";    
    #КонецЕсли
КонецПроцедуры

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

&НаКлиенте
Функция ПолучитьФайлыТекущегоУровня(знач Каталог)
    Если НЕ ЗначениеЗаполнено(Каталог) Тогда
        Каталог = ПолучитьКаталогПоУмолчанию();    
    КонецЕсли;
    
    ТаблицаФайлов.Очистить();
    
    Каталог = ?(Прав(Каталог,1)<>Разделитель, Каталог+Разделитель, Каталог);
    Если ЗначениеЗаполнено(Каталог) Тогда    
        НайденныеФайлы = НайтиФайлы(Каталог, "*");
        Для Каждого НайденныйФайл из НайденныеФайлы Цикл
            Если НайденныйФайл.Существует() Тогда
                Если (РежимВыбораКаталога = Ложь) ИЛИ (РежимВыбораКаталога = Истина И НайденныйФайл.ЭтоКаталог()) Тогда
                    НстрокаТЗ = ТаблицаФайлов.Добавить();
                    НстрокаТЗ.ИмяФайла = НайденныйФайл.Имя;
                    НстрокаТЗ.ПолноеИмяФайла = НайденныйФайл.ПолноеИмя;
                    
                    Если НайденныйФайл.ЭтоКаталог() Тогда
                        НстрокаТЗ.Картинка = 0;    
                    Иначе
                        НстрокаТЗ.Картинка = 1;    
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    Иначе
        Сообщить("Ошибка получения каталога!");    
    КонецЕсли;
    ТекущийКаталог = Каталог;
    
    ТаблицаФайлов.Сортировать("Картинка, ИмяФайла");
КонецФункции
30 mzelensky
 
23.10.14
10:47
В результате получилось следующее:

1) "НайтиФайлы(Каталог, "*")" вместо "НайтиФайлы(Каталог, "*.*")" реально помогло!

2) Странный нюанс с разделителями в пути на мобильном устройстве. Если делаю

"КаталогВременныхФайлов()"

то получаю путь с разделителями "/". Все выводится, отрабатывает вроде нормально.

А когда делаю вот это (вход в указанный каталог)



&НаКлиенте
Процедура ТаблицаФайловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    ТД = Элементы.ТаблицаФайлов.ТекущиеДанные;
    Если ТД <> Неопределено Тогда
        Если ЗначениеЗаполнено(ТД.ПолноеИмяФайла) Тогда
            ФайлПроверки = Новый Файл(ТД.ПолноеИмяФайла);
            Если ФайлПроверки.Существует() Тогда
                Если ФайлПроверки.ЭтоКаталог() Тогда            
                    ПолучитьФайлыТекущегоУровня(ФайлПроверки.ПолноеИмя);    
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры


То получаю путь с разделителями "\"



И в чем тут фишка???
31 mzelensky
 
23.10.14
11:58
Все выше и выше и вышееее....
32 Широкий
 
23.10.14
12:35
(31) Так тебе выбор каталога надо?
33 mzelensky
 
23.10.14
13:44
(32) В данном случае мне выбор файла надо. + У меня есть параметр, который позволяет форму применять для выбора файла.

А в (30) процедурка, которая "ныряет" в каталог, который ты выбрал...т.е. переходит в него и отображает содержимое.
34 mzelensky
 
23.10.14
13:44
+ У меня есть параметр, который позволяет форму применять для выбора файла.

Нужно заменить на

+ У меня есть параметр, который позволяет форму применять для выбора каталога.
35 Широкий
 
23.10.14
14:38
На:
https://yadi.sk/d/DtY1ZPbNcELix

Пиво по почте пришлешь
36 Широкий
 
23.10.14
14:38
37 Широкий
 
23.10.14
14:39
38 mzelensky
 
23.10.14
14:58
(35)-(37) Спасибо тебе добрый человек! Хвала тебе и уважуха! + 100500 к карме!!!

Пойду смотреть.
39 mzelensky
 
23.10.14
15:06
(37) Ну вот ты все пути через ""/"" отрабатываешь.

Почему метод "КаталогВременныхФайлов()" возврщает путь с "\" ?
40 Широкий
 
23.10.14
15:09
(39) Предположу что ошибка платформы. Т.к. КаталогДокументов норм выдает.
Используй СтрЗаменить, раз уж тебе каталог временных файлов нужен
41 mzelensky
 
23.10.14
15:12
(40) Да я уже думал о "замене", прост о хочется понять в чем же тут фишка то.

Ведь каталоги получается считать и с "\" и с "/" (т.е. если в пути все разделители "\", то нормально работает. Если в пути все разделители "/", то тоже нормально работает). Ему что, нет разницы что использовать???
42 mzelensky
 
30.10.14
08:34
Не буду плодить новые ветки - продолжу разговор здесь.

ПРИЗЫВАЮ всемогущего "Широкий" - ПРИДИ!!!!!!!!!!!!!!!

А теперь по сути проблемы - с диалогом выбора файла разобрался. Проблема решилась простой заменой всех "\" на "/". Все заработало, хотя сама проблема достаточно загадочная.

Сейчас бьюс со следующим траблом. Делаю выгрузку данных в ЦБ. Если выгружаю только документы, то все проходит замечательно. Если пытаюсь выгрузить документы + присоединенные файлы, то возникает ошибка аля "Ошибка Интернет "/data/adata/.../temp/1c19394_v1" Такой файл или директория не обнаружены"

При этом я ничего во внешние темповские файлы НЕ сохраняю. Все данны еу меня хранятся в базе в хранилище. Я получаю это хранилице (проверяю ,что там двоичные данные) и засовываю это ХРАНИЛИЩЕ в массив (пробовал и полученные двоичные данные передавать, ошибка таже). А потом отправляю этот массив в ЦБ.

Еще одна забавность - если все это делать на стационарном компе, то все проходит замечательно. А С мобильного приложения - ошибка!
43 mzelensky
 
30.10.14
09:47
все выше и выше и вышееееее
44 Широкий
 
30.10.14
09:51
(42) Присоединенные файлы выгражешь? А нафига??
45 mzelensky
 
30.10.14
10:00
(44) Я их не выгружаю ,а перебрасываю с мобильного приложения в центральную базу. При этом сохранения на "диск" на стороне мобильного приложения я НЕ делаю.
46 mzelensky
 
30.10.14
10:01
(44) Или вопрос зачем я в ЦБ файлы перекидываю?

Я перекидываю фотоотчет, который должен попасть в ЦБ.
47 Широкий
 
30.10.14
10:05
(46) Файлы через вебсервис, я бы наверно смотрел в сторону ftp.
Ну покажи код - как делаешь
48 mzelensky
 
30.10.14
10:09
(47) Не хочу рвать обмен на несколько этапов\подходов.

+ Меня очень "бесит" ,что на стационарном компе все проходит на ура, а с МП опять какие-то запарки.
49 mzelensky
 
30.10.14
10:14
(47)

МассивФАйлов = новый массив;

Запрос=новый запрос;
Запрос.Текст="...";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДвоичныеДанные = Выборка.Данные.Получить(); //Выборка.Данные - это хранилище из регистра сведений

Если ДвоичныеДанные <> Неопределено Тогда //Проверка, что хранилище не пустое
   МассивФАйлов.Добавить(Выборка.Данные); //Добавляю само хранилище

   //Еще пробовал вот так. Опять таки, на компе работает, а на МП нет
   //МассивФАйлов.Добавить(ДвоичныеДанные); //Добавляю двоичные данные из хранилища
КонецЕсли;
КонецЦикла;

СтруктураПередаваемыхДанных("ПрисоединенныеФайлы", МассивФАйлов);
50 mzelensky
 
30.10.14
10:15
(49) Потом, после формирования и заполнения всех ключей "СтруктураПередаваемыхДанных" помещаю структуру в хранилище и передаю через веб-сервис. Как ты и советовал.
51 Широкий
 
30.10.14
10:24
(49) Ошибка на каком моменте возникает?
52 Escander
 
30.10.14
10:26
(50) в курсе что на весь обмен у тебя максимум 5 мин? Упаковываешь методом №9 данные?
53 mzelensky
 
30.10.14
10:31
(51) А хрен его знает...отладку МП я сделать не могу (а на стационарнике работает все нормально). Как вариант понатыкать меток-сообщений, чтобы понять на каком этапе валится.
54 mzelensky
 
30.10.14
10:32
(53) Но явно дело именно в присоединенных файлах ,т.к. если я отключаю их выгрузку (через настройки), то все отрабатывает нормально
55 Широкий
 
30.10.14
10:34
(53) Ну ессно.
Сообщить("Запрос выполнился "+ТекущаяДата());
...

Сообщить("Хранилище получено "+ТекущаяДата());
и т.д.
56 mzelensky
 
30.10.14
10:34
(52) Откуда инфа про "максимум 5 мин" ? Пожно подробней?

"Упаковываешь методом №9 данные" - на сколько я понял на стороне мобильного приложения НЕТ "Сжатия".

Вообще размер пакета довольно маленький. Без фоток вообще за пару секунд все отрабатывает. Тестю я сейчас с 1 изображением. Оно не большое (несколько десятков килобайт). Так что косяк тут явно не в канале
57 mzelensky
 
30.10.14
10:35
(55) Ну я это и имел ввиду. Прочто вчера в 12 ночи уже лень было этим заниматься - пошел спать. Сегодня попробую все это сделать.

Просто думал может сталкивались уже с подобной проблемой.
58 Широкий
 
30.10.14
10:38
(56) Обязательно надо сжатие делать
Новый ХранилищеЗначения(СтруктураДанных,Новый СжатиеДанных(9))
59 mzelensky
 
30.10.14
10:44
(58) Помню ,что пробовал делать но он ругался на "Новый СжатиеДанных" - типа тип данных не определен. И в СП я что-то не увидел описалова. Может конечно я тупанул. Посмотрю сегодня еще раз.
60 Широкий
 
30.10.14
11:05
Мне вот этот момент не нравится
"ДвоичныеДанные = Выборка.Данные.Получить();"

Попробуй с перестраховкой:
Ссылка=Выборка.Ссылка;
Данные=Ссылка.Данные;
ДвоичныеДанные=Данные.Получить();
61 Escander
 
30.10.14
11:09
(56) "оттуда"...
5 мин - это ограничение стандарта
62 mzelensky
 
30.10.14
11:14
(60) "Выборка" - это выборка их регистра сведений. Где "Объект" - измерение (ссылка на документ), а "Данные" - ресурс (хранилище значения).

Поэтому вот этого

Ссылка=Выборка.Ссылка;
Данные=Ссылка.Данные;

быть не может.
63 mzelensky
 
30.10.14
11:15
(61) "ограничение стандарта" - какого стандарта? Ограничение Веб-сервера, ограничение платформы или чего-то еще?
64 Широкий
 
30.10.14
11:17
(62) Может у тебя как раз из-за этого и падает? Запросом получать разом столько информации.
Переделай на справочник и по (60)
65 Широкий
 
30.10.14
11:20
Либо читать запросом только измерения а потом через "РегистрСведенийЗапись" доставать данные построчно. (как вариант без переделки структуры)
66 mzelensky
 
30.10.14
11:23
(65) я читаю не весь регистр, а конкретно по нужному мне объекту (документу). + тестю на 1 доументе (т.е. в регистре фактически всего одна запись). ТАк что врятли. Но попробую проверить
67 mzelensky
 
06.11.14
09:26
В общем крутил-вертел и так и эдак, но ошибка с передачей фото не уходила. Вылазила она именно при вызове удаленного веб-сервиса.

После всех тщетных попыток разобраться, просто решил обновить платформу до последнего релиза (и платформу конфигуратора и мобильную платформу). Обновил, пересобрал - ЗАРАБОТАЛО!!! И кстати еще кое-какие косячки интерфейсные ушли (ну или стали менее заметны).
68 mzelensky
 
06.11.14
09:27
Короче по всем момим веткам с мобильны приложением уже можно бложик заводить "Я и Мобильное приложение 1С"
69 DitriX
 
06.11.14
22:00
Вот так люди придумывают костыли :)
НовВз = Новый ЗапускПриложенияМобильногоУстройства();
НовВз.Действие = "android.intent.action.GET_CONTENT";
//Указываем тип искомых файлов, нас интересует только фото
НовВз.Тип = "image/*"; //"file/*"; //"*/*"
//Говорим что интересуют только локальные данные, а не облачные
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.LOCAL_ONLY",Истина);
РезультатРаботы = НовВз.Запустить(Истина);
Если НЕ РезультатРаботы Тогда
    Сообщить("Файл не выбран!");
    Возврат
КонецЕсли;
ПутьКФайлу = НовВз.Данные;

На счет апи карт - делай через ЗапуститьПриложение(), куда передавай урл с коордиатами, тогда откроется карта гугла и выведет все что надо.
70 DitriX
 
06.11.14
22:01
Взято отсюда http://infostart.ru/public/301851/
И там много еще такого всякого, мобильного :)
71 mzelensky
 
10.11.14
09:25
(70) Я видел эту статью. Вот только ты забыл сказать, что для работы всего этого нужно устанавливать на телефон дополнительную фоновую утилиту, а это не всегда есть ГУД
72 DitriX
 
10.11.14
13:50
(71) никакую утилиту ставить не надо, это встроенный функционал в андроид.
А вот если вы хотите больше (пуши, логи, вибро и т.д.), то тогда надо ставить, но это отдельная статья http://infostart.ru/public/310565
73 mzelensky
 
11.11.14
08:46
(72) Ок, спасибо. Возьму на заметку.

По поводу:

"На счет апи карт - делай через ЗапуститьПриложение(), куда передавай урл с коордиатами, тогда откроется карта гугла и выведет все что надо."

А есть пример этого самого "урл" ?
74 DitriX
 
11.11.14
13:30
(73) Я думаю пояснять тут ничего не надо, но если что - спрашивайте    
УРЛ = "http://www.google.com.ua/maps/dir";;
        МассивАдресов = СформироватьМаршрутНаСервере();
        
        Для Каждого Адрес Из МассивАдресов Цикл
            Координаты = ПолучитьМестоположениеПоАдресу(Адрес);
            Если Координаты = Неопределено Тогда
                Сообщить("Не удалось получить координаты " + Адрес.Представление);
                Продолжить;
            КонецЕсли;
            УРЛ = УРЛ + "/" +  Формат(Координаты.Широта,"ЧРД=.; ЧГ=0") + "," + Формат(Координаты.Долгота,"ЧРД=.; ЧГ=0");
        КонецЦикла;
        
        ЗапуститьПриложение(УРЛ);
75 DitriX
 
11.11.14
13:31
УРЛ = "http://www.google.com.ua/maps/dir";;
Только вот такой урл, а то что то сайт не так распарсил
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс