Acode tools - расширение возможностей мобильной платформы 1С (Android)

0. Дмитрий Шерстобитов (DitriX) 2557 02.11.14 04:14 Сейчас в теме
Не хватает возможностей в мобильной платформе 1С?
Надо push сообщения, логи, zip, ftp, работа с nfc и bluetooth сканерами в режиме "внешнего события"?
Или, может, хотите исполнить произвольный код андроида с передачей параметра из 1С и получением обратно?
Тогда Вам сюда.

Перейти к публикации

Комментарии
1. Ivan Khorkov (vano-ekt) 1055 09.11.14 23:00 Сейчас в теме
2. Эмиль Карапетян (amon_ra) 2 10.11.14 00:58 Сейчас в теме
Наконец-то появилась статья! :) Ждал ее появления с нетерпением после конференции)
3. Vladimir none (Montecrizto) 98 10.11.14 03:45 Сейчас в теме
Например, давайте решим задачу ввода некой строки. Или количества. Видь те формы, которые дает 1С для решения этой задачи – вообще не подходят.
4. Дмитрий Шерстобитов (DitriX) 2557 10.11.14 07:40 Сейчас в теме
7. Артем Ватан (v.a.ryag) 33 10.11.14 11:53 Сейчас в теме
(3) Montecrizto, тоже ненадолго завис пытаясь понять что такое "Видь"))
За статью большой + !!! Действительно всех этих вещей пока очень не хватает в мобильной платформе, равно как и гибкой настройки форм - что крайне необходимо при использовании мобильного приложения (например меню в виде плитки я лично реализовывал через "одно место" - в итоге все равно форма получилась чуть шире экрана и при движении пальцем немного прокручивается)
5. Андрей Волин (kser87) 1434 10.11.14 10:27 Сейчас в теме
Потрясающая статья! Очень полезная!
6. John Smith (PiccaHut001) 10.11.14 11:28 Сейчас в теме
8. Sergey Mosalov (dablack) 10.11.14 12:06 Сейчас в теме
Я ждал этого больше года!!! НО, у меня ни как не получается подключить ChipeLab 1560, вроде все делаю как надо, перевел сканер в режим SPP Slave (проверил программой типа BT SPP terminal - в ней все ок, штрихи читает), в 1с на кпк в списке показывает BT cканер, но пытаюсь подключиться пишет "Ошибка выполнения 0". Подскажите плиз куда можно капнуть, очень ждал Ваш функционал и тут ах... Спасибо.
10. Дмитрий Шерстобитов (DitriX) 2557 10.11.14 13:28 Сейчас в теме
(8) dablack, ну мы тестировали на 1660. Список активных сопряжений выводит?
(9) если мы даже будем продавать по 1000 на каждого программиста, то этот функционал окупит себя с первого клиента, так как добавляет много доп работы программисту 1с.
Но мы пока про это все не думаем.
12. Sergey Mosalov (dablack) 10.11.14 16:12 Сейчас в теме
(10) Да, выводит, а при нажатии "подключить" вываливает сообщение с MACом и "Ошибка выполнения 0". А сканер нужно перевести в SPP Slave или SPP Master? Я когда переводу в Slave, то КПК нормально его видит, а когда в Master - то ни как не могу подключить сканер к КПК (пишет, что не верный пин или пароль). Очень надеюсь, получиться получать ШК в 1с.
9. VVV Vit (V_V_V) 10.11.14 13:21 Сейчас в теме
Прикольно. Пригодится.
Надеюсь, на платную основу нет мыслей переводить? :)
11. Сергей Галюк (dj_serega) 347 10.11.14 16:10 Сейчас в теме
DitriX, Вы красавчик!!! Премию бы Вам выдать.
13. Дмитрий Шерстобитов (DitriX) 2557 10.11.14 16:37 Сейчас в теме
(11) уже получил премию на конференции инфостарта :)
(12) а какой пин вводите? Введите 1234 на смарте и на терминале. Или 0000.
14. Sergey Mosalov (dablack) 10.11.14 16:54 Сейчас в теме
(13) немножко повторюсь: у меня без проблем сканер подключается к КПК в режиме BT Slave (при этом 1С с ACODE сканер видит, но не подключает), а в режиме BT Maser я не могу подключить сканер к КПК, у меня даже не спрашивает PIN а сразу выдает сообщение, что не верный PIN или пароль. Но я не знаю, мне может быть и сто лет не нужен режим BT Master т.к. ACODE с таким режимом не работает (это я и хочу выяснить).
15. Дмитрий Шерстобитов (DitriX) 2557 10.11.14 17:22 Сейчас в теме
(14) я вам тоже не отвечу, увы. Я оба сканера и моторолу и сайферлаб - забыл в питере :)
Давайте тогда методом тыка пытать все это.
Для начала - выключите сканер, но оставьте его в списке сопряженных устройств и оставьте включенный BT.
Попробуйте еще раз получить список сканеров - он у вас должен появиться в списке.
Нажмите подключиться - должа выпасть ошибка 6. Т.е. ошибка устройства. Если ошибка 0, то это ошибка в самом плагине.
Напоминаю, все это делается при выключенном сканере.

Далее - сформируйте лог при помощи программки logcat, ссылку на нее я указал в статье - сделайте отбор по acode - меню - отправить - как приложение и отправьте себе на почту или куда нибудь, потом прикрепите файл сюда.
16. Sergey Mosalov (dablack) 10.11.14 18:32 Сейчас в теме
(15) Спасибо Вам большое за советы. Проблема видимо в блютузе конкретных КПК (Fly, Explay хотя в режиме HID с этими аппаратами проблем не было), взял Samsung и вуаля! сканер в Режиме BT Slave из 1с подключился (только пока не совсем понял реализацию сканирования, кнопку "обновить" надо нажать чтобы увидеть что отсканировано?, а по типу "Внешнее событие" как делать?). Logcat поставил, но он только под рутом работает, попозже попробую снять логи Fly и Explay почему они заразы не хотят работать. Еще раз большое спасибо за вашу разработку!
17. Дмитрий Шерстобитов (DitriX) 2557 10.11.14 18:46 Сейчас в теме
(16) увы, 1с не поддерживает внешние события, так что по другому никак. По крайней мере - пока что.
Но, можно подключить обработчик ожидания, вот как с терминалами сделано и тогда все будет норм.
18. Ruslan Ruslan (flyer) 191 11.11.14 14:33 Сейчас в теме
классная разработка однозначно что то подобное начинал делать но бросил. такая вещица мне сейчас на google play нужна к моим программам но у вас политика другая вы ее там размещать не будете.
19. Дмитрий Шерстобитов (DitriX) 2557 11.11.14 15:00 Сейчас в теме
(18) если держать ее там, то это значит что надо поддерживать кучу вариантов апи, т.е. версионность, а это слишком сложно.
Проще в конфу добавлять их и все. 3 метра особой погоды не сделают, либо где то у себя ее выложить и оттуда устанавливать.
20. Sergey Mosalov (dablack) 12.11.14 16:37 Сейчас в теме
(19) Продолжил выяснение причин почему у меня не подключаются сканеры на ряде устройств. Сделал лог с помощью CatLog и вот, что увидел при попытке подключения :
11-12 17:23:17.561 W/System.err(482): java.lang.SecurityException: Need BLUETOOTH_ADMIN permission: Neither user 10084 nor current process has android.permission.BLUETOOTH_ADMIN.
Какая то у меня проблема с правами. Хотя на форумах по этой проблеме пишут, что надо править в манифесте андроид приложения.
p.s. устройства на которых не работает объединяет то, что она на Adroid 4.2.2. Устройство на котором Adroid 4.1.2 - все работает.
Прикрепленные файлы:
2014-11-12-17-23-41.txt
21. Дмитрий Шерстобитов (DitriX) 2557 12.11.14 18:07 Сейчас в теме
(20) спасибо, скоро обновим.
22. Sergey Mosalov (dablack) 12.11.14 18:09 Сейчас в теме
(21) Вам спасибо! Буду очень ждать обновления.
29. Sergey Mosalov (dablack) 17.11.14 14:29 Сейчас в теме
(21) А когда примерно можно ждать обновления с исправленным подключением сканера?
Заметил еще одну проблему: если форма, в которой работает ОбработчикОжидания получающий каждую 1сек. штрихкоды открыта около 8 минут то мобильное приложение виснет, а потом просто закрывается. Поставил 3 секунды - зависло примерно через 24 минуты.

30. Дмитрий Шерстобитов (DitriX) 2557 17.11.14 15:26 Сейчас в теме
(29) сейчас допиливаем новый функционал и выложим.
На счет вылета - какая версия платформы?
И пробовали ли вы переподключать обработчик каждые 8 минут? Это конечно через Ж, но что поделать...
31. Дмитрий Шерстобитов (DitriX) 2557 17.11.14 15:32 Сейчас в теме
(29) и посмотрите логкат, может там хоть что то попадает туда?
32. Дмитрий Шерстобитов (DitriX) 2557 17.11.14 15:52 Сейчас в теме
(29) Да, по ходу нашел ошибку :) Точнее - очередной прикол 1с, хотя, с другой стороны - вызывать интенты в цикле - тоже не совсем верно.
&НаКлиенте
Процедура АвтоОбновление(Команда)
	ОтключитьОбработчикОжидания("Обновить");
	ПодключитьОбработчикОжидания("Обновить",1,Ложь);
	УтилитыACODEКлиент.ТоастСообщение("Подключен обработчик опроса сканера раз в секунду");
КонецПроцедуры

&НаКлиенте
Процедура Обновить()
	Сервис = Новый Массив;
	ПараметрыДанных = Новый Соответствие;
	ПараметрыДанных.Вставить("Service","BTReader");
	ПараметрыДанных.Вставить("Action","Read"); 	
	Сервис.Добавить(ПараметрыДанных); 
	//МассивСканеров = УтилитыACODEКлиент.ВыполнитьИнтенты(Сервис);
	МассивСканеров = УтилитыACODEСервер.ПредопределенноеПодключение(Сервис);
	Если МассивСканеров = Неопределено Тогда Возврат КонецЕсли;
	Для Каждого Стр Из МассивСканеров Цикл
		Нов = Объект.Штрихкода.Добавить();
		Нов.Штрихкод = Стр;
	КонецЦикла;
КонецПроцедуры
Показать


Обратите внимание - вызов надо делать через сервер, а не клиент :)
33. Sergey Mosalov (dablack) 17.11.14 17:12 Сейчас в теме
(32) Еще раз спасибо! Ближе к ночи смогу попробовать побороть проблему с вылетами.
34. Sergey Mosalov (dablack) 17.11.14 19:14 Сейчас в теме
(32) Проверил, после 8 минут появляется сообщение: "Ошибка выполнения (утилиты) 2". Но главное, что ни чего не вылетает и убрав это сообщение можно след. 8 минут работать :) Как вариант в принципе все равно можно будет попробовать через 8 мин перезапускать обработчик.
Кстати такой вариант, наверное через одно место но все же: есть такой стандартный обработчик ПодключитьОбработчикSMSСообщений("ИмяПроцедуры"), а нельзя ли как нибудь в него с помощью андроид приложения эмулировать отправку смс, но в котором будет шк? Вот и был бы аналог внешнего события.
35. Дмитрий Шерстобитов (DitriX) 2557 17.11.14 19:16 Сейчас в теме
(34) подумаем. Спасибо за идеи. Такой же обработчик есть и сканирования штрихкодов. Вот сейчас думаем на эту тему.
А эта ошибка один раз появляется? А то у меня через интенты 1С зависала через минуту, а через сервер - я тестировал пол часа и было норм.
37. Sergey Mosalov (dablack) 17.11.14 19:39 Сейчас в теме
(35) Ошибка (с одинаковым содержанием) у меня появляется каждый 8 мин, закрыл и продолжил дальше сканировать. А вот то, что у вас через сервер не виснет и не выдает ошибок странно, а период обработчика ожидания какой ? 1 сек.?
36. Николай Моисеев (Azathtot) 17.11.14 19:18 Сейчас в теме
(34) dablack, Спасибо за идею. Разослать броадкаст о якобы приходе SMS не сложно,но есть ненулевая вероятность, что у других программ, читающих SMS от этого "снесет крышу".
38. Sergey Mosalov (dablack) 17.11.14 19:42 Сейчас в теме
(36) Azathtot, У меня например нет на складских КПК других приложений кроме 1С :)
39. Николай Моисеев (Azathtot) 17.11.14 19:45 Сейчас в теме
(38) dablack, Ага, а стандартного Messages тоже нет? :) Вроде нашли способ, сейчас буду разбираться. День-два нужно.
40. Sergey Mosalov (dablack) 17.11.14 19:57 Сейчас в теме
(39) Azathtot, точно, есть, не подумал про него. Удачи!
49. Николай Моисеев (Azathtot) 20.11.14 20:33 Сейчас в теме
(40) dablack, Собственно, решили мы проблему. Сделал через SMS механизм. DitriX на днях думаю выложит конфигурацию
53. Sergey Mosalov (dablack) 21.11.14 15:06 Сейчас в теме
(49) Azathtot, Очень рад, что идея пригодилась. Жду с нетерпеньем заказанных у вас А401 и А420.
А проблему, что я описывал выше ( java.lang.SecurityException: Need BLUETOOTH_ADMIN permission: Neither user 10084 nor current process has android.permission.BLUETOOTH_ADMIN) не удалось пока решить в этом обновлении?
54. Дмитрий Шерстобитов (DitriX) 2557 21.11.14 16:13 Сейчас в теме
(53) обновления еще не было. Сейчас уже заканчиваю, скоро появится
55. Константин Гейнрих (CyberCerber) 165 25.11.14 08:32 Сейчас в теме
(54) а что ожидается в новой версии, не подскажите?
56. Дмитрий Шерстобитов (DitriX) 2557 25.11.14 14:24 Сейчас в теме
(55)
1. Работа с графиками (живыми, т.е. растягивать можно и т.д.)
2. Глобальное оповещение для 1С с сервера
3. Переделанный механизм чтения нфц и сканеров, теперь вызывается событие по факту сканирование и при этом, если после включения сканирования 1С свернуть, то после скана - окно 1с всплывает и отрабатывает событие скана
4. Та и еще там всякие плюшки.

Но это будет доступно для общественности не раньше чем через месяца два или три, сейчас люди тестируют, исправляем баги.
23. Ярослав Радкевич (WKBAPKA) 204 13.11.14 10:31 Сейчас в теме

Не хватает возможностей в мобильной платформе 1С?
Надо push сообщения, логи, zip, ftp, работа с nfc и bluetooth сканерами в режиме "внешнего события"?
Или может хотите исполнить произвольный код андроида с передачей параметра из 1С и получением обратно?


используйте Eclipse или Android Studio и изучайте язык программирования Java :)
omegus; OLEG4120; eugeniezheludkov; antonbezrukov; ZLENKO; Persempre; ya.Avoronov; Anixx; DigitalMan; dour-dead; baton_pk; sorb; +12 Ответить
24. Дмитрий Шерстобитов (DitriX) 2557 13.11.14 14:10 Сейчас в теме
(23) есть шанс не вернуться на 1с :)
Probot1c; el-gamberro; omegus; Anixx; ezhik_2000; +5 Ответить
74. ZLENKO.PRO (ZLENKO) 06.02.15 15:47 Сейчас в теме
(23) WKBAPKA, "используйте Eclipse или Android Studio и изучайте язык программирования Java :)"

IntelliJ IDEA вместо Eclipse или Android Studio
25. Александр Брязгин (abryazgin) 14.11.14 14:05 Сейчас в теме
А можно плагин написать, который бы брал фотографию, полученную с камеры средствами 1С и преобразовывал в нужный формат, чтобы уменьшить объем передаваемых в центральную базу данных?
26. Дмитрий Шерстобитов (DitriX) 2557 14.11.14 14:40 Сейчас в теме
(25) можно. Но разве не проще сразу делать фото нужного качества?
27. Александр Брязгин (abryazgin) 14.11.14 18:09 Сейчас в теме
Возможно и проще. Есть 2 но.
1) 1С не выдает фото нужного качества. Настроек я не нашел.
2) Нужна еще картинка просмотра, чтобы форма не висла. У меня сейчас при добавлении на форму 5-ти полей картинки платформа вылетает (если 4, то форма открывается нормально). Когда переделал на отображение картинок в Поле html, то с каждой новой картинкой все больше проявляются подвисания отображения этого поля. В итоге к 5 картинкам платформа не вылетает, но работать невозможно ). Каждая картинка получена с камеры и весит порядка 1,5 мб.

Если есть вариант как сделать картинку и просмотр без применения кувалды, то хочу его знать )))
У меня на тестируемом девайсе не получилось поместить фотографию сделанную через вызов запустить приложение.
Делал по примеру "Как сделать фото (видео) в любом качестве?" из другой вашей публикации (http://infostart.ru/public/301851/). Картинку получаю, но поместить ее внутрь базы 1С не получилось.
В с этим вопросом тоже хотел бы разобраться.

Но все равно это не решение, так как при использовании получения фото из 1С требуется меньше кликов по экрану (ровно один, против 2-х через запустить приложение: сделать фото, нажать вроде "ок", чтобы закрылось окно просмотра фото и данные можно было забирать в 1С).
28. Дмитрий Шерстобитов (DitriX) 2557 15.11.14 13:53 Сейчас в теме
(27) а как вы убедитесь, что фото было сделано верно? Т.е. не смазано и т.д.?
По поводу той статьи - что именно у вас не получилось? Создать двоичные данные и поместить в хранилище?
41. Александр Брязгин (abryazgin) 18.11.14 14:18 Сейчас в теме
(28)
1) В предполагаемом приложении должен быть предпросмотр, там можно определить, если фото сделано плохо. Но я так понял, что 1с после нажатия кнопки сфотографировать еще фокус потом настраивает сама (на моем устройстве).
2) Да не получилось получить двоичные данные, чтобы в РС внести.
Что пробовал
				
ФайлКартинки = "file:///sdcard/Download/FotoTestFrom1C.jpg";
НовВз = Новый ЗапускПриложенияМобильногоУстройства("android.media.action.IMAGE_CAPTURE");
НовВз.ДополнительныеДанные.Добавить("output",ФайлКартинки,"Uri");
Если НовВз.Запустить(Истина) <> 0 Тогда
        //ЗапуститьПриложение(ФайлКартинки); -- работает

        //помещение во временное хранилище работает
        ПутьКВРемХран = "";
        ПоместитьФайл(ПутьКВРемХран, ФайлКартинки,,ложь, УникальныйИдентификатор);

        //получить двоичные данные не получается ни напрямую из файла
	Попытка 
		Данные = Новый ДвоичныеДанные(ФайлКартинки);
	Исключение
		Сообщить(ОписаниеОшибки()); //Ошибка конструктора, недопустимое значение параметра
	КонецПопытки;	
	Попытка 
	    Данные = Новый ДвоичныеДанные(ПутьКВРемХран);
	Исключение
		Сообщить(ОписаниеОшибки()); //Файл не обнаружен "e1cib\tempstorage\..."
	КонецПопытки;	
КонецЕсли;
Показать
42. Дмитрий Шерстобитов (DitriX) 2557 18.11.14 14:40 Сейчас в теме
(41)
ФайлКартинки = "file:///sdcard/Download/FotoTestFrom1C.jpg";
НовВз = Новый ЗапускПриложенияМобильногоУстройства("android.media.action.IMAGE_CAPTURE");
НовВз.ДополнительныеДанные.Добавить("output",ФайлКартинки,"Uri");
Если НовВз.Запустить(Истина) <> 0 Тогда

    Данные = Новый ДвоичныеДанные(ФайлКартинки);
    Хр = Новый ХранилищеЗначение(Данные);
КонецЕсли;


Вместо Хр - может быть реквизит справочника с типом ХранилищеЗначений.
Ну естественно надо распределить клиент и сервер, это я так, по памяти написал.
43. Sergey Mosalov (dablack) 18.11.14 18:21 Сейчас в теме
(42) а вас не затруднит сообщить мне в приват, свои контакты, я пытаюсь отправить вам сообщение... и безрезультатно. Я бы хотел по ТСД ACode уточнить информацию.
44. Дмитрий Шерстобитов (DitriX) 2557 18.11.14 18:42 Сейчас в теме
45. Александр Брязгин (abryazgin) 19.11.14 10:59 Сейчас в теме
(42)
У меня не выполняется строка
    Данные = Новый ДвоичныеДанные(ФайлКартинки);

Говорит, что "Недопустимое значение параметра (параметр номер '1')".

Пробовал выполнять получение двоичных данных как на сервере так и на клиенте.
Платформа 8.3.5.1186.

Точно такой способ получения двоичных данных должен работать на мобильном приложении? Есть примеры на какой платформе у вас точно работает?
46. Дмитрий Шерстобитов (DitriX) 2557 19.11.14 15:21 Сейчас в теме
(45) не так
Данные = Новый ДвоичныеДанные(ФайлКартинки);

Потому что у вас:
ФайлКартинки = "file:///sdcard/Download/FotoTestFrom1C.jpg";

а это uri, а не путь к файлу. Значит в вашем случае:
Данные = Новый ДвоичныеДанные( "/sdcard/Download/FotoTestFrom1C.jpg");
poligraff; abryazgin; +2 Ответить
50. Александр Брязгин (abryazgin) 21.11.14 11:16 Сейчас в теме
(46) Спасибо, огромное. Так работает.

Пытаюсь понять как работать с URI.
Вот, например, у меня есть выбор файла из галереи. Оттуда получаю uri "content://media/external/images/media/19991"
Если бы это был объект, то можно было бы применить метод uri.getPath()
Но 1С возвращает строку.
Как в данном случае можно определить путь до файла, который 1С сможет понять?
52. Дмитрий Шерстобитов (DitriX) 2557 21.11.14 12:24 Сейчас в теме
(50) смотрите функцию выбора файлов конфигураторе этой конфигурации, там используется функция:
// Функция предназначена для получения прямого линка, на основе контента.
// Актуально для Андриод 4.4 и старше.
// Доступность: Клиент;
//
// Параметры:
//  Путь  - Строка - Путь с конткнтом
//
// Возвращаемое значение:
//   Соответствие, Неопределено   - Если ответ = Неопределено, то была ошибка.
&НаКлиенте
Функция ПолучитьUriИзContent(Путь)  Экспорт
	СтруктураСообщения = УтилитыACODEСлужебный.СформироватьСтруктуруДляПолученияUri(Путь);
	Возврат ВыполнитьИнтенты(СтруктураСообщения);
КонецФункции
Показать

Вот она и возвращает нормальный URI
47. Константин Гейнрих (CyberCerber) 165 20.11.14 08:25 Сейчас в теме
Спасибо за ваши публикации по мобильной платформе!
С каждым разом они становятся все интересней и полезней.

Подскажите, пожалуйста... Скачал xml файл по пути "http://acode.pro/~mu". Создал в сборщике моб приложений apk файл, закидываю его на планшет, устанавливаю, запускаю. Появляется окно запуска 1С, потом иконка загрузки, и все на этом зависает. В чем может быть проблема?
48. Дмитрий Шерстобитов (DitriX) 2557 20.11.14 14:53 Сейчас в теме
(47) ну обычно это бывает есл на arm установить образ x86
51. Николай Моисеев (Azathtot) 21.11.14 11:41 Сейчас в теме
"Дернуть" сервис ContentTool утилит. Передаете ему параметр Uri (строка),
получаете в Data путь.
57. Программулькин (Программулькин) 270 26.11.14 05:38 Сейчас в теме
Сижу на работе, читаю с большим интересом эту статью. В это время заходит работник отдела кадров. Задаёт вопрос: "Что такое интересно читаешь?"
Я отвечаю, что мол вот у 1 с появились новые возможности, что бла...блааа.. она такая вся модная, вот до мобильников добралась, может тебе WI-FI включить, сказать что за мобилка у тебя, какая ОСь стоит, и так далее, бла...блаа...(читаю некоторые выдержки из статьи, напрочь забыв, что передо мной не ITшник, а кадровик ). Она на меня смотрит своими большими круглыми глазами, хлопает несколько раз своими длинными ресницами, и выдаёт сногсшибательную фразу: "А зачем это 1с надо? Ведь у неё и так своих проблем хватает!"...под столам.
FireFox_Manager; arteast; RuzAleks; CyberCerber; sCHTASS; PolAlex2; DitriX; +7 Ответить
58. Дмитрий Шерстобитов (DitriX) 2557 26.11.14 11:45 Сейчас в теме
(57) у нее случаем не iPhone? А то обычно любители яблок так отвечают - если чего нет, то это не надо :)
59. Владимир Аникин (Vo-Va) 102 18.12.14 02:37 Сейчас в теме
Можно ли как то использовать эту утилиту для организации печати на мобильный принтер?
60. Дмитрий Шерстобитов (DitriX) 2557 18.12.14 18:10 Сейчас в теме
(59) можно, но это индевидуально, под заказ.
61. Константин Гейнрих (CyberCerber) 165 13.01.15 09:22 Сейчас в теме
Если кому нужно, вот как послать Broadcast сообщение с помощью BeanShell.

Код в 1С:

 Сервис = Новый Соответствие;
	Сервис.Вставить("Service","SendBroadcast");
	Сервис.Вставить("ActionName",ИмяДействия); // Здесь передаем имя выполняемого действия
        УтилитыACODEКлиент.ВыполнитьИнтенты(Сервис);


Создаем файл SendBroadcast.bsh, кладем в папку с плагинами, перезагружаем сервисы. В сам файл нужно вставить код:

//Внутренние пакеты модули.
import ru.acode.helper.instances.ScriptHelper;
import ru.acode.helper.ServiceDescriptor;
import ru.acode.helper.ServiceDescriptor.MethodParamType;
import ru.acode.helper.ServiceDescriptor.MethodParam;
import ru.acode.helper.Services;
import ru.acode.utils.ValueMap;
 
// Импорт из пакетов Android
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.R;
import android.content.Context;
import android.content.Intent;

ValueMap result = new ValueMap();
result.put(Services.INVOKE_RESULT, Services.E_OK);

initializer = new ScriptHelper.Initializer() {
  onInit(descriptor) {
      descriptor.setName("SendBroadcast"); //Имя сервиса. Именно по нему мы и обращаемся к этому плагину из 1С
      descriptor.params().add(new MethodParam("ActionName",MethodParamType.string,true)); // Обязательный строковый параметр
  }
};

executor = new ScriptHelper.Executor() {

  onExecute(Context context, ValueMap params) {
    actionName = params.getString("ActionName");
    Intent intent = new Intent();
    intent.setAction(actionName);
    context.sendBroadcast(intent);
    return result;
  }
};

helper = new ScriptHelper(initializer,executor);
Показать


Это самый простой пример, без передачи типов, доп данных. Просто мне пока больше не нужно было.
А зачем это вообще нужно? Сейчас 1С может только отправлять Интенты с передачей управления другому приложению. Броадкасты же могут запустить какие-то процессы на устройстве в фоновом режиме, не прерывая работы самой 1С. Я так сделал запись звука в фоне.
62. Дмитрий Шерстобитов (DitriX) 2557 13.01.15 12:00 Сейчас в теме
(62) в новой версии утилит - мы научили 1С ловить броэдкасты. :)
63. Константин Гейнрих (CyberCerber) 165 13.01.15 13:00 Сейчас в теме
(62) ловить - это тоже круто, но пока мне еще не понадобилось.

А еще такой вопрос... Не приходилось реализовывать простейшую рисовалку в мобильной 1С? Хотя бы просто на существующем рисунке тапами поставить пометки?
В HTML5 есть отличный объект Canvas, но в 1С 5-я версия не поддерживается... :-(
64. Дмитрий Шерстобитов (DitriX) 2557 14.01.15 12:34 Сейчас в теме
(63) - что значит рисовалка? Открыли фото для редактирования и рисуйте :)
Смотрите статью про интенты.
65. Денис Никитин (DeniNikitin) 30 20.01.15 16:26 Сейчас в теме
Здравствуйте!

Подскажите, а можно реализовать запуск утилит при загрузке конфигурации, и остановку при выходе из конфигурации? А то в памяти висит постоянно и ресурсы есть!!!
66. Дмитрий Шерстобитов (DitriX) 2557 20.01.15 18:40 Сейчас в теме
(65) Ок, учли предложение. Реализуем в будующих версиях :)
111. Денис Никитин (DeniNikitin) 30 27.03.15 16:05 Сейчас в теме
(66)
С выходом 8.3.6, ещё стоит надеятся на запуск и остановку процесса Acode?

Подскажите в чём может быть дело? Приложение свёрнуто, отправляю push сообщение, на одном телефоне высвечивается при свернутом и автоматически открывается приложение, а на других двух пока не подниму задачу не высвечивается!!!
112. Дмитрий Шерстобитов (DitriX) 2557 27.03.15 20:24 Сейчас в теме
(111) уже сделали остановку и там еще пару моментов. Скоро будет обновление.
Вы про пуши от акоде? Или от 1С?
113. Денис Никитин (DeniNikitin) 30 28.03.15 13:27 Сейчас в теме
114. Дмитрий Шерстобитов (DitriX) 2557 28.03.15 14:21 Сейчас в теме
(113) щас будет обновление, там будем использовать мехаизмы 1с, что позволит по нажатию пуша открыть нужную базу и передать в нее данные.
А по вашей проблеме - опишите подробней, как вариант, проблема может быть в том, что вы на одном телефоне вызываете пуши с клиента, а на других - с сервера.
но в любом случае - если надо открыть приложение, то ждите обновлений и используйте 8.3.6 - все остальное это костыли
197. Денис Никитин (DeniNikitin) 30 03.06.15 17:45 Сейчас в теме
(114)
Вызываю везде клиента, но на одном мобильном телефоне при свёрнутом приложении выскакивает пуш, а на другом при свёрнутом приложении не выскакивает, в чём может быть проблема? Приложение одно и код такой:
Путь = КаталогДокументов() + "/sound.mp3";
УтилитыACODEКлиент.ПроигратьЗвук("Ringtone",Путь);
УтилитыACODEКлиент.Вибрация(15);
PushДействие = "Set";
PushЗаголовок = "Новая заявка";
PushТекст = СокрЛП(Строка.Наименование) + " - " + СокрЛП(Строка.Количество);
PushОписание = "Оповещение";
PushИДСообщения = Ном;
PushНеВозможноУбрать = Ложь;
PushИконка = 2;
УтилитыACODEКлиент.ПушСообщение(PushЗаголовок,PushТекст,PushДействие,PushОписание,PushИДСообщения,PushНеВозможноУбрать,PushИконка);
Показать

Думал с обновлением что-то поменяется, но нет поведение такое же, проверял на трёх телефонах на двух не выскакивает пуш, на третьем без проблем!
67. Вадим Латышев (pro1c@inbox.ru) 166 21.01.15 13:54 Сейчас в теме
надо iOS!
те кто платит на iOS сидят!

а так все нормуль. костыли конечно, но на безрыбье....
68. Дмитрий Шерстобитов (DitriX) 2557 21.01.15 17:29 Сейчас в теме
(67) Если надо, то можно и на iOS, только вот это уже не за бесплатно :)
69. AlxSch (AlxSch) 18 28.01.15 14:26 Сейчас в теме
Спасибо автору публикации и всем из ACode за разработку и поддержку.
Может не совсем в тему, но просто эта ветка на мой взгляд одна из самых-самых по мобильной платформе.
Так вот когда стали переходить на 8.3.5 что пощупать все прелести AcodeTools, наткнулись на одной конкретной модели ТСД - при обновлении конфигурации (абсолютно любой) вылетает с ошибкой "Файл не является файлом базы данных data/data/com.e1c.mobile/files/gggggggg-gggg-gggg-ggggggggggggg/1cv8.1cd". Снимал копии через adb pull до и после - реально размер всех файлов в папке gggggggg-gggg-gggg-ggggggggggggg после обновления = 0. Убивает базу наповал.На 8.3.4 ничего подобного не было.
Как оказалось, на аппарате не стояла карточка, все было в памяти аппарата. Вылечилось установкой SD карты и переносом мобильной платформы на нее.
70. Дмитрий Шерстобитов (DitriX) 2557 28.01.15 18:14 Сейчас в теме
(69) отлично. Рад, что смог помочь.
71. Алексей Шачнев (efin) 04.02.15 16:36 Сейчас в теме
DitriX, от меня тоже спасибо за такую замечательную разработку! Правда, от нее мне нужны были только вибро, DeviceID и Push.

Push победить не удалось. По инструкции с сайта GOOGLE CLOUD MESSAGING (GCM), и по примерам в вашей конфигурации, реализовали и настроили push-server, запросы к нему отправляются, но в ответ приходит что Error=InvalidRegistration (использовал наугад).

Я понимаю, что мобильное приложение должно тоже зарегистрироваться на GCM при установке (или первом запуске) и я как-то должен узнать id, которое имеет конкретный экземпляр установленного приложение и использовать его при отправке. Но я не знаю как.

Можете подсказать?
72. Дмитрий Шерстобитов (DitriX) 2557 05.02.15 11:31 Сейчас в теме
(71) стоп, вы уточните что вы вообще делаете :)
Вы используете локальные пуш сообщения через утилиты, или же используете специальный софт для пуш сообщений?
Я не понимаю при чем тут GCM? Я про него не рассказывал :) А одна причина - почему, это потому что не известно будет - дошло сообщение до адресата или нет.
Вам в таком случае не сюда, а к примеру - вот сюда http://habrahabr.ru/post/213027/.

Будет намного проще, если вы опишите задачу и ее критерии, а я вам может смогу что-то посоветовать
76. Алексей Шачнев (efin) 06.02.15 20:12 Сейчас в теме
(72) когда я увидел, что acode tools позволяют добавить функционал push, я, естественно, понял, что речь идет о возможности принимать и обрабатывать стандартные push-сообщения от GCM. Мобплатформа этого не умеет, и я надеялся, что ваши утилиты могут выступать приемником push'ей от GCM и ретранслировать их в мобильную платформу.

Отправка сообщений в GCM у меня реализована из десктопной 1С обычными POST-запросами. В терминологии Гугла эта часть называется у них сервером.

Задача простая - из основной 1С оповещать сотрудников о входящей информации, вне зависимости от того где и как они подключены и запущена или нет мобильная платформа.
77. Дмитрий Шерстобитов (DitriX) 2557 07.02.15 01:09 Сейчас в теме
(76) тогда у вас два варианта - ждать 8.3.6 :) И то, проблема в GCM - нет увереннсоти что сообщение дойдет.
Или смотрите 8 урок про другой сервис, который гарантирует доставку и сообщает - успешна она или нет. И тут не надо никакой платформы 1С, но оно платное, но есть и бесплатное, вообщем смотрите видео, там все есть.
73. Руслан (imoby) 06.02.15 15:41 Сейчас в теме
Здравствуйте.

Подскажите, пожалуйста. В настройках ACODE есть функция принимать вызовы из локальной сети и она работает. Будет ли она работать, если устройство будет иметь статический внешний IP адрес? При обращении по внешнему ip адресу и порту 8090 выходит надпись "<Array xmlns="http://v8.1c.ru/8.1/data/core" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Value xsi:type="Map"><pair><Key xsi:type="xs:string">Result</Key><Value xsi:type="xs:decimal">2</Value></pair></Value></Array>", то есть внешний IP виден в сети, но при попытке передачи события на сервер выходит "Ошибка выполнения (утилиты) 2"
75. Дмитрий Шерстобитов (DitriX) 2557 06.02.15 20:10 Сейчас в теме
(73) Добрый.
Будет. //E_INVALID_PARAMS = 2;
Это ваша ошибка, как вариант - вы могли не указать ID устройства.
Проверьте через конфу, которая есть тут. Для этого пропишите на первой вкладке тестов утилит IP и ID устройства, ID можно получить в этой же конфе на вкладке Информация - Инфо, это длинное число (обычно отрицательное, но писать надо его с минусом, если оно есть)
78. Руслан (imoby) 07.02.15 10:20 Сейчас в теме
(75) я написал что в локальной сети работает, ID и IP устройства указаны. Но стоит мне поменять IP на внешний, пишется такая ошибка. Хотя внешний IP виден в сети и 8090 порт прослушивается. Просто хотел узнать, может у вас какое-то ограничение стоит, чтобы только в одной локальной сети принимать данные.
79. Дмитрий Шерстобитов (DitriX) 2557 07.02.15 10:31 Сейчас в теме
(78)ну а вы этот порт пробрасывали через роутер на телефон?
у меня все работает и по внешке.
Причины не работы чаще всего две:
1. Тупые роутеры, у которых если делать коннект по вненему IP, который равен IP роутеру, они его форсят на себя и не пусают дальше, если вы находитесь в подсети роутера.
2. Люди просто забывают пробросить порт с роутера на иелефон, или же пробросили, но забыли установить фиксированный IP для телефона.
80. Руслан (imoby) 07.02.15 23:36 Сейчас в теме
(79) планшет с симкой со статическим IP-адресом без роутеров, если ввести его адрес и порт через браузер, то он виден, но сама утилита не может передать событие, пишет ошибка выполнения утилиты (2). Думал, может какое-то ограничение на подключение извне.
81. Дмитрий Шерстобитов (DitriX) 2557 08.02.15 01:06 Сейчас в теме
(80) на симке - не проверял, может быть, всетаки это другой тип подключения.
Но если по вайфаю - то все ок. Мы подумаем над тем, можно ли эту проблему решить, если она есть, или не можем :)
82. ilyar mansurov (ilyar) 08.02.15 17:58 Сейчас в теме
Acode - суперская вещь, спасибо вам за это.
Я так понял что работа с FTP заключается в получении и отправки файлов. Это уже хорошо но если вот добавить возможность удалять/переименовывать/перемещать файлы ты будет супер. Если не сложно реализуйте пожалуйста в следующей версии.
Вопрос: Можно ли средствами BeanShell докрутить возможность удалять/переименовывать/перемещать файлы по FTP?
83. Дмитрий Шерстобитов (DitriX) 2557 08.02.15 19:08 Сейчас в теме
(82) а чего бы и нет?
Создавайте свой сервис и описание его, и работайте с ним :)
Мы эо делаьть не будем, во всяком случае до выхода 8.3.6 - точно, ибо там это все может появится.
88. Николай Моисеев (Azathtot) 04.03.15 13:17 Сейчас в теме
(82) ilyar,
Вопрос: Можно ли средствами BeanShell докрутить возможность удалять/переименовывать/перемещать файлы по FTP?

да, можно. beanShell предоставляет вам возможность доступа ко ВСЕМ классам утилиты и соответственно android API.
Для работы с FTP в утилитах используется apache.commons.net, все классы которой вам доступны.
84. Сергей Апухтин (Zasranec0) 6 24.02.15 15:07 Сейчас в теме
Не плохая разработка. Как узнать при открытии формы ориентацию экрана?
85. Дмитрий Шерстобитов (DitriX) 2557 24.02.15 16:14 Сейчас в теме
(84) хороший вопрос :)
Для этого надо где то в константе его хранить. Первую ориентацю можно вычислить пр помощи особенностей устройств с программными кнопками управления (домой, назад, меню) ну а потом внести текущее положение в константу, а дельше, при первом повороте - просто писать в константу.
86. Сергей Апухтин (Zasranec0) 6 25.02.15 12:03 Сейчас в теме
(85) А через утилиту, можно же как то состояние это у андройда узнать? Не вижу сложностей реализации этого. Или это надо самому допиливать ?
К примеру
 УтилитыACODEКлиент.ПолучитьДанныеОбУстройстве("state.wifi");


Как то можно там прописать ориентацию экрана что бы возвращало? Могу ли я допилить такую функцию? Если да, то был бы очень благодарен, если бы мне чуть-чуть подсказали где этот код редактируется.

Вот у меня запускается 1с, в этот момент открывается форма, в ней уже не понятно как расположить элементы. При первом повороте конечно же можно записать это делать в константу, но интересует именно при запуске командой узнать.
87. Дмитрий Шерстобитов (DitriX) 2557 25.02.15 13:45 Сейчас в теме
(86) на днях ждем выхода 8.3.6, там появились новые функции работы с экраном. Пока она не выйдет - делать не будем, так как если оно уже будет сделанно там, то смысл его пилить тут.
А сделать вы это можете - для этого есть скрипты, пишите свой скрипт и получайте чаго хотите. Мы же специально систему плагинов сделали
89. Тимур Мансорунов (solarisman) 113 06.03.15 07:31 Сейчас в теме
Добрый день!

Разрабатываем приложение для ТСД на андроид (на мобильной платформе 1С), тестируем. Возникает одно довольно большое неудобство: при открытии формы для сканирования ШК приходится "тапать" в поле ввода, что крайне неудобно в режиме ТСД.

Можно ли при помощи данных утилит вызывать, допустим, событие нажатия кнопки, чтобы курсор вставал в поле ввода?
90. Дмитрий Шерстобитов (DitriX) 2557 06.03.15 13:17 Сейчас в теме
(89) все зависит от ТСД :) Что у вас за ТСД?
91. Тимур Мансорунов (solarisman) 113 06.03.15 18:54 Сейчас в теме
Не совсем понимаю, какая разница. Даже пусть это будет смартфон с bluetooth-сканером (в режиме клавиатуры).

Суть чтобы наборщик не выполнял лишнее действие. Представляете, надо обработать 1000 строк в день, это 1000 кликов по экрану. Пусть даже 2 секунды на действие, полчаса в день тупо на клики.

При открытии формы в 1С даже при принудительной установке текущего элемента
ТекущийЭлемент = Элементы.Штрихкод

установки курсора не происходит, а при сканировании поле не заполняется.

Так же не помогает свойство "АктивироватьПриОткрытии", а при вызове метода "ВвестиТекст" в диалоговом окне курсор не устанавливается в поле

Может быть, в манифесте поправить/добавть свойства?
Я слишком поверхностно знаю Android, но при разработке простейшего приложения в Android Studio курсор устанавливается уже при открытии окна и кликать лишний раз не надо.
92. Николай Моисеев (Azathtot) 06.03.15 19:08 Сейчас в теме
(91) solarisman,
Вообще-то при работе утилит с БТ сканнером происходит 2 вещи, при сканировании
- расылка "СМС" с номера 04 c сосканированным кодом
- рассылка интента c action "ru.acode.control" и следующими параметрам Action - 2 (SCAN), Status - 0 (OK), Scanner - 4 (БТ сканнер), Data - баркод.
Вы можете принимать эти сообщения не используя никаких активных полей ввода
93. Тимур Мансорунов (solarisman) 113 06.03.15 19:14 Сейчас в теме
Если хорошо покопаться в платформе, то можно найти Layout с аким поисанием:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/formBaseLayout"
	android:layout_width="fill_parent"
 	android:layout_height="fill_parent"
  	android:padding="0dip">
  	<LinearLayout 
		android:id="@+id/formButtonBar"
    
		android:layout_width="match_parent"
    
		android:layout_height="wrap_content"
    
		android:layout_alignParentBottom="true"
    
		android:orientation="vertical">


    
  		<LinearLayout 
      
			android:layout_width="match_parent"
      
			android:layout_height="wrap_content"
      
			android:orientation="horizontal"
      
			android:background="@android:drawable/bottom_bar"
      
			android:paddingTop="5dip"
      
			android:paddingLeft="3dip"
      
			android:paddingRight="2dip"
      	
			android:paddingBottom="0dip">


      
			<LinearLayout android:id="@+id/formLeftBarSpacer"
        
				android:layout_width="0dip"
        
				android:layout_height="wrap_content"
        
				android:layout_weight="0.25"
        
				android:layout_gravity="left"
        
				android:orientation="horizontal"
        
				android:visibility="gone"
			/>

 
      
			<Button
        
				android:id="@+id/formNegativeButton"
        
				android:layout_width="wrap_content"
        
				android:layout_height="wrap_content"
        	
				android:layout_weight="0.5"
        
				android:layout_gravity="fill_horizontal"
        	
				android:textSize="18sp"
        
				android:visibility="gone" 
			/>

	
			<Button
			        android:id="@+id/formPositiveButton"
			        android:layout_width="wrap_content"
			        android:layout_height="wrap_content"
			        android:layout_weight="0.5"
			        android:layout_gravity="fill_horizontal"
			        android:textSize="18sp"
			        android:visibility="gone"
			/> 
     
      
			<LinearLayout 
				android:id="@+id/formRightBarSpacer"
        
				android:layout_width="0dip"
        
				android:layout_height="wrap_content"
        
				android:layout_weight="0.25"
       
				android:layout_gravity="right"
        
				android:orientation="horizontal"
        
				android:visibility="gone" 
			/>

  

		</LinearLayout>
  
	</LinearLayout>


</RelativeLayout>
Показать


Я полагаю, что это и есть оконная форма, в которую динамически (в зависимости от конфигурации) добавляются элементы

Вот только как заставить платформу курсор туда поставить?
94. Тимур Мансорунов (solarisman) 113 06.03.15 19:19 Сейчас в теме
Это понятно с БТ сканнером, статью я прочитал и с конифгурацией ознакомился. Но хотелось бы, чтобы приложение "взлетело" на любом устройстве с режимом ввода с клавиатуры. А вообще заказали вот такой аппарат для тестирования, ждем посылку. Он работает в режиме ввода с клавиатуры
Оставьте свое сообщение