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

Опубликовал DitriX в раздел Программирование - Внешние компоненты

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

Обновление от 11.02.2016

Версия 2.08

Добавили возможность работать с блютуз сканерами, в которых нет символа перевода строки в конце.

Исправили мелкие баги

Добавили возможность запускать скрипты при старте программы (например, после перезагрузки устройства, или приложения, приложение сразу запустит некий скрипт)

Обновление от 28.03.2015

Версия 2.07

Добавили остановку утилит.

Добавили возможность работать с пушами 1С, теперь можно отправлять сообщения в саму базу 1С, через ее механизм локальных уведомлений.

Изменили механизм работы с ТСД Acode, из-за бага в 8.3.6.110 - 1С падает в крит при подключении обработчика приема смс. Теперь все работает как через push (точнее, броадкаст) так и по смс, соотвественно появилась новая операция при работе со сканерами.

Механизм работы с bluetooth сканерами тоже переведен на новый режим работы.

Всякие мелкие исправления.

 

Все изменения, которые были сделанны - не должны повлиять на старые механизмы работы. Т.е. вы просто обновляете модули и все. (Ну кроме бага 8.3.6.110, надо убедиться, что у вас отключены приемы смс)

  

Сразу несколько моментов. Если вы сканируете, когда 1С свернуто, то у вас появляться будут пуши от 1С.

Пуши от 1С не появляются, если у вас сейчас открыта база 1С. Они просто приходят незаметно.

В версии 8.3.6.110 - не принимаются отчеты по багам, при работе с смс - баги в самой платформе.

 

Обновление материала от 16.01.2015:

Как я раньше уже обещал - выпускаем новую версию утилит. В ней появилось несколько новых интересных вещей.

Самые основные - это то, что мы теперь научили 1С "прослушивать" события андроида. Например, теперь 1С может узнать про блокировку экрана, поворот экрана, и даже событие сканирования bluetooth сканера или nfc сканера, ну или сканирование терминалов ACODE. Ранее мы вынуждены были считывать это все с буфера, а это было неудобно, и даже криво.

Теперь же, мы можем даже со стационарной 1С - заставить мобильную 1С сделать обмен. А это важно. Так как на текущий момент у мобильной платформы нет регламентов, та и если бы были, то делать холостые обмены - это зло. А так - появился документ, мы сообщили мобильной - что пора бы обновиться, и она обновилась :)


Эту статью - мы публикуем как видео уроки из полного курса по мобильной платформе, так как тема эта очень нужная многим людям, мы решили опубликовать ее в свободный доступ.

Старую статью - я не удаляю, так как она все еще корректно отображает многие аспекты.


Кроме этого - просьба написать в комментариях о том, какой вид вам больше пришелся по душе - видео или текстовая статья.

Может, в дальнейшем имеет смысл сразу делать видео уроки :)


Во вводном видеоуроке представлена общая информация о расширении возможностей мобильной 1С.

В этом уроке мы поговорим о том, что такое Acode Tools, для чего они создавались и какой принцип работы с ними нужно использовать.

После знакомства с утилитами мы пройдемся по некоторому функционалу, для того чтобы понять суть работы с ними. Тут мы познакомимся с toast-сообщениями, push-сообщениями и многим другим.

Что такое намерения (intent) и как с ними работать – об этом мы будем говорить в этом уроке. Узнаем, как вызвать окно выбора файла, причем по маске. Что такое path, uri, как бороться с uri вида «content://» и т.д.

После подготовительной базы мы перейдем непосредственно к самому принципу взаимодействия с утилитами.

То есть как их заставить делать то, что нам нужно.

Какие существуют варианты работы с ними и еще пару интересных моментов.

Зачастую пользователи, работающие с мобильной платформой, терпят неудобства из-за того, что нельзя сделать элементарные вещи, например, заархивировать или разархивировать файл обмена. Как это сделать при помощи утилит – мы разберем в этом видеоуроке. И как бонус, не многие знают, что xlsx-формат (то есть Office 2007) – это заархивированные в zip xml-файлы. В данном видео мы и посмотрим, как можно создать такой файл.

Теперь мы умеем архивировать и разархивировать.

Далее нужно научить платформу делать обмен файлами по FTP, так как не всегда можно поднять веб-сервисы для обмена.

Это мы и научимся делать в данном видеоуроке.

Что делать если нам нужно, к примеру, подключить Bluetooth-сканер и ловить сам момент сканирования, или сканирование nfc-метки? Узнать момент, когда появился или пропал интернет, да и еще узнать тип канала, или запретить работу пользователя, если заряд батареи упал ниже 10%? Как узнатьориентацию экрана и факт поворота, или даже – заблокировали экран или нет? Ответы на эти вопросы смотрите в данном видеоуроке.

В последнее время большинство приложений переходит на свои способы оповещений – при помощи push-сообщений.
Поэтому в этом уроке мы отойдем от мобильной платформы 1С, а вместо этого рассмотрим – какие сервисы предоставляют возможность оповещать пользователей под Android, iOS и даже на стационарных компьютерах.

В заключительном видеоуроке подведем итоги по изученной теме.

Отметим важные моменты, касающиеся темы расширения возможностей мобильной платформы 1С.


Предыдущая версия статьи

Оглавление

Что такое ACODE tools?. 1

Суть взаимодействия 1С и ACODEtools. 1

Особенности работы с утилитами. 1

Что надо для работы с утилитами. 1

Toast сообщения. 1

Push сообщения. 1

Информация об устройстве. 1

LogCat – запись логов. 1

Остальной функционал. 1

Подключение Bluetooth сканеров. 1

Тестирование ТСД.. 1

Плагины.. 1

Принцип написания плагинов. 1

 

Добрый день.

Сегодня мы будем говорить о том, как же можно интегрировать мобильную платформу в среду Android.

Сразу оговорюсь - все, про что здесь будет идти речь - не доступно на iOS, и врдяли я этим вопросом когда-либо задамся :) Без обид :)

Начнем же мы все с основ. А именно - что такое утилиты в принципе, и как они работают.

Что такое ACODE tools?

ACODE tools - это утилиты, которые позволяют расширить возможности мобильной платформы и даже стационарной. Основная их направленность - взаимодействие с устройство на ОС Android.

Работать взаимодействие с ними выполняется при помощи следующих решений:

1.     Вызов намерения (Intent), детальней тут http://infostart.ru/public/301851;

2.     http соединений из локального устройства;

3.     http соединение из любого другого устройства, это может быть, как центральная база, так и другое мобильное устройство, в общем все, что может слать POSTзапросы, и достучаться до мобильного устройства по сети.

Из описания возможностей взаимодействия видно, что мобильные утилиты - это приложение, которое может выступать в качестве веб-сервера.

И это действительно так, и у такого подхода есть несколько, просто колоссальных, преимуществ:

1.     Можно вызывать функции с серверных модулей (&НаСервере), так как работа с намерениями (ЗапуститьМобильноеПриложение) доступна только с клиентских вызовов (&НаКлиенте);

2.     Есть возможность работать с утилитами вне контекста мобильной платформы 1С. Т.е. для того, чтобы послать push-уведомление на мобильное устройство – не обязательно ставить на него 1С, достаточно установить только утилиты.

Суть взаимодействия 1С и ACODEtools

Если вкратце, то для того что бы передать некие данные из 1С в утилиты, мы должны сформировать определенную структуру данных, сериализовать ее и отправить.

Но, ничего делать в ручную не надо, так как есть готовая конфигурация с модулями, так что для того, чтобы встроить утилиты в ваш проект – достаточно перенести в вашу конфигурацию 3 модуля. И далее работать просто с их функциями.

К примеру, чтобы  вызвать вибрацию устройства, достаточно прописать вот такую строку:

УтилитыACODEСервер.Вибрация(ВибрацияДлительность);

Или вот такую:

УтилитыACODEКлиент.Вибрация(ВибрацияДлительность);

В зависимости от того, в каком контексте надо выполнить действие.

Теперь давайте детальней рассмотрим – что происходит, когда выполняется эта функция.

По структуре функции понятно, что вызывается она из общего модуля. В этих модулях – описание функций выглядит так:

// Функция предназначена для Вибрации.
// Доступность: Клиент;
//
// Параметры:
//  Длительность  - Число - Длительность вибрации
//
// Возвращаемое значение:
//   Соответствие, Неопределено   - Если ответ = Неопределено, то была ошибка.
//
&НаКлиенте
Функция Вибрация(Длительность)  Экспорт
    СтруктураСообщения = УтилитыACODEСлужебный.СформироватьСтруктуруДляВибрации(Длительность);
    Возврат ВыполнитьИнтенты(СтруктураСообщения);
КонецФункции

Или вот так, в случае сервера:

// Функция предназначена для Вибрации.
// Доступность: Клиент, Сервер;
//
// Параметры:
//  Длительность  - Число - Длительность вибрации
// Возвращаемое значение:
//   Соответствие, Неопределено   - Если ответ = Неопределено, то была ошибка.
//
Функция Вибрация(Длительность)  Экспорт
    СтруктураСообщения = УтилитыACODEСлужебный.СформироватьСтруктуруДляВибрации(Длительность);
    Возврат ПредопределенноеПодключение(СтруктураСообщения);
КонецФункции

Как видно – обе функции обращаются к модулю УтилитыACODEСлужебный.

Там и происходит формирование параметров для отправки. И как вы понимаете – оно идентично для работы как с веб-сервером, так и с намерениями.

Выглядит оно вот так:

Функция СформироватьСтруктуруДляВибрации(Длительность)  Экспорт
	Сервис = Новый Соответствие;	
	Сервис.Вставить("Service","Vibration");
	Сервис.Вставить("Duration", Длительность);
	Возврат Сервис;
КонецФункции

Т.е. формируется вложенная структура соответствий, где указывается само действие (Vibration) и его параметры.

После этого, в зависимости от того – что мы вызываем (намерение или веб-сервер), у нас происходит следующее:

В случае работы с намерениями:

&НаКлиенте
Функция ВыполнитьИнтенты(Параметры, ВернутьСтроку = Ложь) Экспорт
	#Если МобильноеПриложениеКлиент Тогда
		НовВз = Новый ЗапускПриложенияМобильногоУстройства();
		НовВз.Действие = "ru.acode.1c.tools";
		Если ТипЗнч(Параметры) = Тип("Массив") Тогда
			Массив = Параметры;
		Иначе
			Массив = Новый Массив;
			Массив.Добавить(Параметры);
		КонецЕсли;
		НовВз.ДополнительныеДанные.Добавить("Data",УтилитыACODEСлужебный.Сериализовать(Массив));
		
		Результат = НовВз.Запустить(Истина);
		Если Результат = 0 Тогда
			Сообщить("Ошибка выполнения " + Результат);
			Возврат Неопределено;
		Иначе
			Результат = НовВз.ДополнительныеДанные.Получить("Data").Значение;
			Возврат УтилитыACODEСлужебный.ОбработкаОтвета(Результат);
		КонецЕсли;		 
	#Иначе
		Возврат "Доступно только на мобильном устройстве!"
	#КонецЕсли
КонецФункции

На что тут надо обратить внимание – передаем мы xml, и получаем xml, который мы можем десериализовать.

Далее проверяем результат, если он равен 0, то все ок, иначе – вот список ошибок:

//Коды ошибок при ответе:
 //E_OK = 0;
 //E_INVALID_SERVICE = 1;
 //E_INVALID_PARAMS = 2;
 //E_INVALID_PARAM_VALUE = 3;
 //E_FILE_ERROR = 4;
 //E_NETWORK_ERROR = 5;
 //E_HARDWARE_NOT_SUPPORTED = 6;
 //E_BUSY = 7;
 //E_AUTH_REQUIRED = 8;
 //E_INTERNAL_ERROR = 9;

Если все хорошо, то мы возвращаем ответ.

В случае работы с веб-сервером:

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

	Если ЗначениеЗаполнено(ID) Тогда
		ОписаниеДанных = Новый Соответствие;
		ОписаниеДанных.Вставить("Key", ID);	
		Массив.Вставить(0,ОписаниеДанных); 
	КонецЕсли;
	
	ТелоСообщения = УтилитыACODEСлужебный.Сериализовать(Массив);
	
	Попытка
		Соединение = Новый HTTPСоединение(АдресСервера,ПортСервера,,,,5);
		Заголовки = Новый Соответствие;
	
		Запрос = Новый HTTPЗапрос("/", Заголовки);
		Запрос.УстановитьТелоИзСтроки(ТелоСообщения);
		ОтветСервера =Соединение.ОтправитьДляОбработки(Запрос);
		Если ОтветСервера.КодСостояния = 200 Тогда // Данные получены, обрабатываем их
			Возврат УтилитыACODEСлужебный.ОбработкаОтвета(ОтветСервера.ПолучитьТелоКакСтроку());
		КонецЕсли;
		//"Не получен ответ от сервера! " + Ответ + ОтветСервера.КодСостояния
		Возврат Неопределено;
	Исключение
		//Не удалось установить соединение с сервером
		Возврат Неопределено;
	КонецПопытки;
	
КонецФункции

Тут, как видите – мы в тело запроса добавляем xml, ну и получаем тоже xml, все точно так же, как и с интентами. За исключением одного – если вызов сервера идет не с локального устройства, то необходимо еще и указать IDклиента. Это сделано для безопасности, т.е. не зная связку IP + ID– не получится что-то выполнить на устройстве.

Ответ же обрабатывается следующим кодом:

Функция ОбработкаОтвета(Ответ) Экспорт
	Попытка
		МассивРезультатов = Десериализовать(Ответ);
	Исключение
		Сообщить("Ошибка десериализации ответа!");
		Сообщить(ОписаниеОшибки());
		Возврат Неопределено;
	КонецПопытки;
	
	Для Каждого СтрОтвета Из МассивРезультатов Цикл
		//Обрабатываем только первый элемент. Ответ от цепочки - надо анализировать самостоятельно
		Если СтрОтвета.Получить("Result") = 0 Тогда
			Возврат СтрОтвета.Получить("Data");
		Иначе
			Сообщить("Ошибка выполнения (утилиты) " + СтрОтвета.Получить("Result"));
			Возврат Неопределено;
		КонецЕсли;
	КонецЦикла;
	
КонецФункции

Особенности работы с утилитами

Утилиты делятся на две части:

1.     Предопределенные функции

2.     Произвольные скрипты

Т.е. есть ряд предопределенных функций, которые мы реализовали для того, чтобы программист 1С не вникали в программирование под Android.

К таким функциям относятся следующие:

      Push-сообщения

      Toast-сообщения

      Получение конфигураций оборудования:

      модель,

      бренд,

      версию андроид,

      ip адрес,

      уникальный ID устройства;

      Запуск мобильных приложений на сервере;

      Работа с Bluetooth сканерами

      Motorola CS3070

      Cipherlab 1660

      Работа с NFC;

      Проигрывание звука, или системного, или из файла;

      Включение GPS трекинга с возможностью забрать трек;

      Запись данных в logcat;

      Проверка на включен/выключен:

      wi-fi,

      gps,

      мобильный интернет,

      И т.д.

      Проверка наличия интернета;

      Виджет с выводом html страницы из мобильной 1С или переходом на сайт;

      Возможность заархивировать файлы в zip;

      Работа с ftp (отправка и получение файлов);

      И др.

И выполнением произвольного кода Android, на основе скриптов BeanShell. Про это мы поговорим позже.

Теперь я предлагаю рассмотреть суть дополнительного функционала, т.е. легкий экскурс в то, какие параметры за что отвечают и т.д.

Что надо для работы с утилитами

Ну ясное дело – их необходимо установить. Для этого – я предлагаю взять конфигурацию и подключить ее к вашей мобильной платформой.

Как это сделать – я рассказывал тут (http://infostart.ru/public/242857/).

Вы можете скачать конфигурацию из раздачи к этой публикации и подключить ее.

Если же нет особого желания возиться с этим, то можете подключить конфигурацию по пути: http://acode.pro/~mu.

После запуска приложения – вас встретит вот такое вот окно:

После этого – нажимаем на самую первую кнопку «Установить утилиты». В этот момент – из макета 1С будет выгружен apk файл и будет запущенна установка приложения. Устанавливаем его. И самое главное – после этого приложение надо запустить. Если все ок, то у вас в статусах появится вот такое приложение:

Нажимаем на него. Откроется окно приложения:

Тут будут отображаться логи вызовов сервера, а так же ваши логи, которые вы будете записывать через функцию LogCat.

Далее – переходим в настройки, и видим вот такую картину:

Объяснять тут нечего, все вроде и так понятно.

После всех этих манипуляций – считаем, что с тем, что такое утилиты и их опциями – мы познакомились.

Теперь переходим к работе с ними.

Toast сообщения

Тоаст сообщения – это не навязчивая всплывающая подсказка, выглядит она вот так:

У нее только два параметра – само сообщение и длительность. Такие сообщения имеет смысл показывать только в контексте &НаКлиенте, так как в этот момент мы уверены, что человек работает с устройством и он увидит это сообщение.

Push сообщения

Пуши – это одна из самых важных опций для общения с пользователем.

Давайте разберем ее настройки:

 

Ну с заголовком, текстом и описанием – я думаю и так все понятно.

А вот действие (Добавить/Удалить) – тесно связанно с ID сообщением. Т.е. каждое сообщение имеет свой ID, и если вы добавляете сообщение с тем же ID, то оно обновит существующее.

Картинки доступны только 4, и увы, Андроид не позволяет добавлять картинки произвольные, только те, которые вшиты в само приложение. Поэтому – придется обходиться тем, что есть. Но если есть надобность добавить, обоснованная надобность, то пишите в камментах.

Галочка «Заблокировать» - закрепляет сообщение так, что вы не сможете его смахнуть. И в этом случае – удалить его можно только из 1С, обратившись к нему по ID.

Информация об устройстве

Это один из пунктов, про которые стоит поговорить подробней.

Выглядит это вот так:

На счет галочек:

Моб. инет – говорит о том, что сейчас используется мобильный интернет. Так что если вам надо синхронизировать 50 метров данных, то стоит задуматься – надо ли это делать сейчас?

Сеть – говорит о том, что есть некое сетевое подключение к инету, или моб инет, или wi-fi.

Wi-Fi – говорит о том, что wi-fiвключен и, главное, что есть подключение к ней сети. А есть ли выход в инет, можно узнать по предыдущей галочке.

Про остальное – ID устройства, это уникальный идентификатор текущего устройства. Он является не стационарным в контексте текущего устройства.

Если кому интересно – высчитывается он вот так:

String tmDevice, tmSerial, androidId;
     TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
     tmDevice = "" + tm.getDeviceId();
     tmSerial = "" + tm.getSimSerialNumber();
     androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);

     UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());
     Adler32 adler = new Adler32();
     adler.update(deviceUuid.toString().getBytes());
     _ID = (int)(adler.getValue() & 0xffffffff); 

Он будет изменен только в том случае, если была перепрошивка устройства, или же сброс на заводские настройки. Но не изменится, если вы будете переустанавливать 1С или утилиты. Т.е. он генерируется в момент первого запуска устройства.

Статус бренд – это данные полученные из файла настроек build.prop. Из этого файла можно получать разные данные, включая бренд устройства и т.д. Для того, что бы понять – что можно получить с вашего устройства – откройте сам файлик, это можно сделать при помощи разных программ, например вот этой, и смотрите ключ и значение. Передав ключ в параметры функции – вы получите значение в ответ.

Ну с IP адресами вроде и так все понятно.

LogCat – запись логов

LogCat – это некий аналог технологического журнала для 1С.

Данная опция – позволяет записывать данные в этот журнал и считывать их оттуда.

Я думаю не раз у тех, кто программировал под мобильную платформу, возникало желание сделать некую отладку данных, например фонового задания, или серверной функции.

Сделать это на мобильной платформе – задача не тривиальная. А так как это очень важный этап разработки, то мы не могли обойти эту функцию стороной.

Читать логи можно специальными программами, например вот этой. Но, logcat – это место, куда скидывается вся информация с андроида, поэтом и надо указывать плавильный тег. По этому тегу – среди всего этого мусора и ищется то, что вам нужно.

Но, кроме этого – лог дублируется в главное окно программы. Выглядит это вот так:

В самом низу – лог записанный из 1С. Так что нет необходимости ставить дополнительный софт. Достаточно просто переключаться между программами. Кроме этого – есть программы на компьютер, которые позволяют считывать этот лог, а это удобно, в случае если там есть данные, которые надо скопировать.

Тут же – удобно анализировать некие общие данные. Так как тут поддерживаются некие теги html, то вы можете цветами выделить нужные вам области. В Остальных программах – теги игнорируются.

Остальной функционал

К остальному функционалу описание давать смысла не имеет особого, смотрите в демо конфигурации.

Кроме этого, что делать, если надо сделать пуш сообщение, провибрировать и сделать звуковое сообщение?

Т.е. первая мысль – а давайте вызовем сразу три события. Отчасти это правда.

Но я думаю вы уже увидели, что передается массив структур, и не спроста.

А причина в том, что можно составить алгоритм и отправить и выполнить его.

Все функции будут выполнятся последовательно. Т.е. можно заархивировать файл, отправить на ftp, получить файл, разархивировать, прочитать и т.д. И все это можно сделать в фоне.

Вот пример решения описанной задачи:

            Массив = Новый Массив;
            Массив.Добавить(УтилитыACODEСлужебный.СформироватьСтруктуруТоастСообщения("Сейчас выполняется сразу 4 операции"));
            Массив.Добавить(УтилитыACODEКлиент.ПушСообщение("Некий пуш","Это 2 операция"));
            Массив.Добавить(УтилитыACODEКлиент.Вибрация(500));
            Массив.Добавить(УтилитыACODEСервер.ПроигратьЗвук("Sound","Balloon"));
            УтилитыACODEКлиент.ВыполнитьИнтенты(Массив);

Подключение Bluetoothсканеров

Поддерживается работа только со сканерами MotorolaCS3070 и CipherLab 1660. Возможно и с другими тоже, но их под рукой нету.

Для работы – необходимо сканер перевести в режим SPP (Serial Port Profile), обратите внимание – НЕ В HID режим.

Далее – спарить устройство, обычно надо ввести и там и там пин код 1234.

После этого – у вас НЕ будет сканировать сканер в активное поле.

Вы идете в 1С, получаете список спаренных устройств и подключаете нужное вам, теперь сканер подключится и все, что он будет сканировать – будет попадать в ACODEtools, далее, вы можете забирать данные оттуда.

Тестирование ТСД

Это опция только для тех, у кого есть терминал фирмы ACODE. Позволяет из 1С работать со сканерами терминала.

Плагины

Теперь одна из самых интересных вещей. Плагины.

Плагины основаны на BeanShell, суть этого действа заключается в том, что вы пишете некое свое решение под Android. Просто в текстовый документ. Помещаете документ в папку ACODE, и перезагружаете утилиты (кнопочка справа вверху).

После этого – утилиты компилируют код и подключают плагин. Теперь вы можете с ним работать.

Например, давайте решим задачу ввода некой строки. Или количества. Видь те формы, которые дает 1С для решения этой задачи – вообще не подходят.

Для этого – нажимаем в конфигурации Выгрузить плагины. Будет создан файлик из макета 1С. Это просто текстовый файл. Далее – перезагружаем утилиты и нажимаем кнопку Ввод строки. И видим вот такую картинку:

Т.е. красивое и элегантное поле. При вводе данных – всплывает клавиатура, и как видите совсем не для строки, а для чисел.

А вот какая клавиатура всплывет – отвечает параметр Тип. Сейчас он равен 1002.

Про типы можно прочитать тут - https://github.com/android/platform_frameworks_base/blob/master/core/java/android/text/InputType.java.

Суть типов сводится к следующему – последний символ говорит о том, что это будет за тип данных, а первый – маску ввода.

Давайте посмотрим пару примеров:

/**
* Variation of {@link #TYPE_CLASS_TEXT}: entering an e-mail address.
*/
public static final int TYPE_TEXT_VARIATION_EMAIL_ADDRESS = 0x00000020;

/**
* Class for a phone number. This class currently supports no variations
* or flags.
*/
public static final int TYPE_CLASS_PHONE = 0x00000003;

Ну и ясное дело, что если тип поля стоит строковый, то к нему подойдут маски только для этого типа.

Принцип написания плагинов

Теперь давайте разберемся с тем, как эти плагины пишутся.

Для этого можете посмотреть файлик sample.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.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Spinner;
import android.widget.EditText;
import android.widget.ArrayAdapter;

//Глобальные переменные
TYPE_EDITFIELD = 1;
TYPE_CHECKBOX = 2;

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

initializer = new ScriptHelper.Initializer() {
  onInit(descriptor) {
      descriptor.setWaitForUserFinish(true);  //указываем, что делаем модальный вызов
      descriptor.setName("SampleDialog"); //Имя сервиса. Именно по нему мы и обращаемся к этому плагину из 1С
//Далее мы уже описываем переменные. Можно и не описывать, но тогда надо делать контроль заполнения и проверку типов самому.
              //MethodParam - состоит из имени параметра, типа, и обязательности использования (Истина - не обязательный).
              //Типы могут быть:
              //decimal,string,bool,map,array,bytearray
//Тут мы говорим, что у нас есть параметр «Type», который должен быть числовым, и он должен таки быть. Ну и т.д.
//Этакой модуль проверки заполнения
      descriptor.params().add(newMethodParam("Type",MethodParamType.decimal,false)); // Булево параметр, может отсутсвовать
      descriptor.params().add(newMethodParam("Params",MethodParamType.map,false)); // Массив строк, может отсутствовать
  }
};

var type,inputField; // Объявляем глобальные переменные


//Это идет вызов события после нажатия кнопки. Т.е. мы помещаем в Value– результат ввода.
buttonListener = new DialogInterface.OnClickListener() {
  onClick(DialogInterface dialog, int button) {
     if(button == DialogInterface.BUTTON_POSITIVE) {
                        if(type == TYPE_EDITFIELD)
                            result.put("Value",inputField.getText().toString());
                        else if(type == TYPE_CHECKBOX)
                        result.put("Value",inputField.isChecked());
     }
  }
};
 

dismissListener = new DialogInterface.OnDismissListener() {
  onDismiss(DialogInterface dialog) {
     helper.finish(result);
  }
}; 

 

executor = new ScriptHelper.Executor() {

  onExecute(Context context, ValueMap params) {
     //А вот тут и идет само описание того, что нам надо выполнить.
      builder = new AlertDialog.Builder(context);
//Обратите внимание как мы получаем значение параметра.
      type = params.getInt("Type",-1);
              typeParams = params.getValueMap("Params");
              if(type == TYPE_EDITFIELD) {
                        layout = new LinearLayout(context);
        layout.setOrientation(LinearLayout.VERTICAL);
                        layout.setPadding(8, 8, 8, 8);
                        TextView label = new TextView(context);
                        label.setText(typeParams.getString("Title"));
                        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
                        lp.rightMargin = 4;
                        layout.addView(label,lp);
                        inputField = new EditText(context);
                        inputField.setInputType(Integer.parseInt(typeParams.getString("InputType"),16));
                        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
                        layout.addView(inputField,lp);
                        String Str = "";
//Проверяем, если у нас в Valueпередана строка, то мы заполняем это поле. Обратите внимание – мы не проверяем на заполнение, а именно проверку типов.
                        if(typeParams.isString("Value"))
                            Str = typeParams.getString("Value");
                        inputField.setText(Str.trim());
                        builder.setView(layout);                      
              }
              else if(type == TYPE_CHECKBOX) {
                        inputField = new CheckBox(context);
                        inputField.setText(typeParams.getString("Title"));
                        inputField.setChecked(typeParams.getBoolean("Value",false));
                        builder.setView(inputField);
              }
     builder.setPositiveButton(R.string.ok,buttonListener);
     builder.setNegativeButton(R.string.cancel,buttonListener);
     dialog = builder.create();
     dialog.setOnDismissListener(dismissListener);
     dialog.show();
     return result;

  }

};

helper = new ScriptHelper(initializer,executor); // Именавпакетахмогутсовпадать, ничегострашного
//initializer - тут описываем сам сервис, при перезагрузке утилит
//executor - интерфейс который вызван при вызове скрипта.

Вот и все, т.е. грубо говоря – все состоит из трех блоков:

1.     Проверка заполненных данных

2.     Описание возврата результат

3.     Описание алгоритма работы.

Конечно, отдельное приложение написать врядли выйдет, однако, простейшие формы заполнения, работы с гугл картами и т.д. – вполне не проблема.

Заключение

Вот на этом пока и все. Предлагаю теперь обмениваться интересными скриптами, для решения тех или иных задач.

Файлы

Наименование Файл Версия Размер Кол. Скачив.
ACODE утилиты
.cf 6,16Mb
11.02.16
63
.cf 2.08 6,16Mb 63 Скачать

См. также

Лучшие комментарии

23. WKBAPKA 13.11.2014 10:31

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


используйте Eclipse или Android Studio и изучайте язык программирования Java :)
Ответили: (24) (74)
# Ответить
57. Программулькин (файл скачал) 26.11.2014 05:38
Сижу на работе, читаю с большим интересом эту статью. В это время заходит работник отдела кадров. Задаёт вопрос: "Что такое интересно читаешь?"
Я отвечаю, что мол вот у 1 с появились новые возможности, что бла...блааа.. она такая вся модная, вот до мобильников добралась, может тебе WI-FI включить, сказать что за мобилка у тебя, какая ОСь стоит, и так далее, бла...блаа...(читаю некоторые выдержки из статьи, напрочь забыв, что передо мной не ITшник, а кадровик ). Она на меня смотрит своими большими круглыми глазами, хлопает несколько раз своими длинными ресницами, и выдаёт сногсшибательную фразу: "А зачем это 1с надо? Ведь у неё и так своих проблем хватает!"...под столам.
Ответили: (58)
# Ответить
24. DitriX 13.11.2014 14:10
(23) есть шанс не вернуться на 1с :)
# Ответить
46. DitriX 19.11.2014 15:21
(45) не так
Данные = Новый ДвоичныеДанные(ФайлКартинки);

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

а это uri, а не путь к файлу. Значит в вашем случае:
Данные = Новый ДвоичныеДанные( "/sdcard/Download/FotoTestFrom1C.jpg");
Ответили: (50)
+ 2 [ poligraff; abryazgin; ]
# Ответить
62. DitriX 13.01.2015 12:00
(62) в новой версии утилит - мы научили 1С ловить броэдкасты. :)
Ответили: (62) (63)
+ 1 [ AlxSch; ]
# Ответить
160. DitriX 13.04.2015 18:22
(159) это для стационарного они фиксированы, а для мобильного - нет. Читай ИТС:
26.3.6.9. Ориентация экрана

Платформа предоставляет информацию о некоторых характеристиках экрана устройства, на котором выполняется клиентское приложение (персональный компьютер или мобильное устройство). Для этого служит метод ПолучитьИнформациюЭкрановКлиента(). В результате возвращается массив структур, описывающих экраны, подключенные к устройству.

Каждый элемент массива описывает один экран, подключенный к устройству. Параметры Высота и Ширина описывают, соответственно, высоту и ширину экрана в точках. При этом для мобильного устройства эти параметры зависят от ориентации устройства (если это разрешено в настройках), а платформы для персонального компьютера всегда возвращает канонические параметры подключенных экранов. Таким образом, на мобильном устройстве можно анализировать, в каком положении находится устройство и на основании этого принимать решения о трансформации интерфейса приложения. Для облегчения работы с ориентацией существует событие ПриИзмененииПараметровЭкрана, которое можно обработать в модуле управляемого приложения и в модуле управляемой формы.

В качестве примера рассмотрим изменение отображения формы, отображаемой на рабочем столе. В указанной форме есть два списка, которые отображают некоторую информацию. При портретной ориентации экрана (узкая сторона устройства – нижняя) списки будут отображаться друг под другом, а при ландшафтной (широкая сторона устройства – нижняя) ориентации – списки расположены рядом. Для реализации такого поведения в модуле формы, расположенной на рабочем столе, следует разместить обработчик события ПриИзмененииПараметровЭкрана следующего вида:


&НаКлиенте
Процедура ПриИзмененииПараметровЭкрана()
    МассивИнформаций = ПолучитьИнформациюЭкрановКлиента();
    Если МассивИнформаций[0].Ширина > МассивИнформаций[0].Высота Тогда
        ЭтаФорма.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
    Иначе
        ЭтаФорма.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
    КонецЕсли;
КонецПроцедуры
...Показать Скрыть
Ответили: (164)
+ 1 [ clev; ]
# Ответить
61. CyberCerber (файл скачал) 13.01.2015 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С. Я так сделал запись звука в фоне.
+ 1 [ DitriX; ]
# Ответить

Комментарии

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

Далее - сформируйте лог при помощи программки logcat, ссылку на нее я указал в статье - сделайте отбор по acode - меню - отправить - как приложение и отправьте себе на почту или куда нибудь, потом прикрепите файл сюда.
Ответили: (16) (197)
# Ответить
16. dablack (файл скачал) 10.11.2014 18:32
(15) DitriX, Спасибо Вам большое за советы. Проблема видимо в блютузе конкретных КПК (Fly, Explay хотя в режиме HID с этими аппаратами проблем не было), взял Samsung и вуаля! сканер в Режиме BT Slave из 1с подключился (только пока не совсем понял реализацию сканирования, кнопку "обновить" надо нажать чтобы увидеть что отсканировано?, а по типу "Внешнее событие" как делать?). Logcat поставил, но он только под рутом работает, попозже попробую снять логи Fly и Explay почему они заразы не хотят работать. Еще раз большое спасибо за вашу разработку!
Ответили: (17)
# Ответить
17. DitriX 10.11.2014 18:46
(16) увы, 1с не поддерживает внешние события, так что по другому никак. По крайней мере - пока что.
Но, можно подключить обработчик ожидания, вот как с терминалами сделано и тогда все будет норм.
# Ответить
18. flyer (файл скачал) 11.11.2014 14:33
классная разработка однозначно что то подобное начинал делать но бросил. такая вещица мне сейчас на google play нужна к моим программам но у вас политика другая вы ее там размещать не будете.
Ответили: (19)
# Ответить
19. DitriX 11.11.2014 15:00
(18) если держать ее там, то это значит что надо поддерживать кучу вариантов апи, т.е. версионность, а это слишком сложно.
Проще в конфу добавлять их и все. 3 метра особой погоды не сделают, либо где то у себя ее выложить и оттуда устанавливать.
Ответили: (20)
# Ответить
20. dablack (файл скачал) 12.11.2014 16:37
(19) DitriX, Продолжил выяснение причин почему у меня не подключаются сканеры на ряде устройств. Сделал лог с помощью 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 - все работает.
Ответили: (21)

Прикрепленные файлы:

2014-11-12-17-23-41.txt
# Ответить
21. DitriX 12.11.2014 18:07
(20) спасибо, скоро обновим.
Ответили: (22) (29)
# Ответить
22. dablack (файл скачал) 12.11.2014 18:09
(21) DitriX, Вам спасибо! Буду очень ждать обновления.
# Ответить
23. WKBAPKA 13.11.2014 10:31

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


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

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

Но все равно это не решение, так как при использовании получения фото из 1С требуется меньше кликов по экрану (ровно один, против 2-х через запустить приложение: сделать фото, нажать вроде "ок", чтобы закрылось окно просмотра фото и данные можно было забирать в 1С).
Ответили: (28)
# Ответить
28. DitriX 15.11.2014 13:53
(27) а как вы убедитесь, что фото было сделано верно? Т.е. не смазано и т.д.?
По поводу той статьи - что именно у вас не получилось? Создать двоичные данные и поместить в хранилище?
Ответили: (41)
# Ответить
29. dablack (файл скачал) 17.11.2014 14:29
(21) DitriX, А когда примерно можно ждать обновления с исправленным подключением сканера?
Заметил еще одну проблему: если форма, в которой работает ОбработчикОжидания получающий каждую 1сек. штрихкоды открыта около 8 минут то мобильное приложение виснет, а потом просто закрывается. Поставил 3 секунды - зависло примерно через 24 минуты.
Ответили: (30) (31) (32)
# Ответить
30. DitriX 17.11.2014 15:26
(29) сейчас допиливаем новый функционал и выложим.
На счет вылета - какая версия платформы?
И пробовали ли вы переподключать обработчик каждые 8 минут? Это конечно через Ж, но что поделать...
# Ответить
31. DitriX 17.11.2014 15:32
(29) и посмотрите логкат, может там хоть что то попадает туда?
# Ответить
32. DitriX 17.11.2014 15:52
(29) Да, по ходу нашел ошибку :) Точнее - очередной прикол 1с, хотя, с другой стороны - вызывать интенты в цикле - тоже не совсем верно.
&НаКлиенте
Процедура АвтоОбновление(Команда)
	ОтключитьОбработчикОжидания("Обновить");
	ПодключитьОбработчикОжидания("Обновить",1,Ложь);
	УтилитыACODEКлиент.ТоастСообщение("Подключен обработчик опроса сканера раз в секунду");
КонецПроцедуры

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


Обратите внимание - вызов надо делать через сервер, а не клиент :)
Ответили: (33) (34)
# Ответить
33. dablack (файл скачал) 17.11.2014 17:12
(32) DitriX, Еще раз спасибо! Ближе к ночи смогу попробовать побороть проблему с вылетами.
# Ответить
34. dablack (файл скачал) 17.11.2014 19:14
(32) DitriX, Проверил, после 8 минут появляется сообщение: "Ошибка выполнения (утилиты) 2". Но главное, что ни чего не вылетает и убрав это сообщение можно след. 8 минут работать :) Как вариант в принципе все равно можно будет попробовать через 8 мин перезапускать обработчик.
Кстати такой вариант, наверное через одно место но все же: есть такой стандартный обработчик ПодключитьОбработчикSMSСообщений("ИмяПроцедуры"), а нельзя ли как нибудь в него с помощью андроид приложения эмулировать отправку смс, но в котором будет шк? Вот и был бы аналог внешнего события.
Ответили: (35) (36)
# Ответить
35. DitriX 17.11.2014 19:16
(34) подумаем. Спасибо за идеи. Такой же обработчик есть и сканирования штрихкодов. Вот сейчас думаем на эту тему.
А эта ошибка один раз появляется? А то у меня через интенты 1С зависала через минуту, а через сервер - я тестировал пол часа и было норм.
Ответили: (37)
# Ответить
36. Azathtot 17.11.2014 19:18
(34) dablack, Спасибо за идею. Разослать броадкаст о якобы приходе SMS не сложно,но есть ненулевая вероятность, что у других программ, читающих SMS от этого "снесет крышу".
Ответили: (38)
# Ответить
37. dablack (файл скачал) 17.11.2014 19:39
(35) DitriX, Ошибка (с одинаковым содержанием) у меня появляется каждый 8 мин, закрыл и продолжил дальше сканировать. А вот то, что у вас через сервер не виснет и не выдает ошибок странно, а период обработчика ожидания какой ? 1 сек.?
# Ответить
38. dablack (файл скачал) 17.11.2014 19:42
(36) Azathtot, У меня например нет на складских КПК других приложений кроме 1С :)
Ответили: (39)
# Ответить
39. Azathtot 17.11.2014 19:45
(38) dablack, Ага, а стандартного Messages тоже нет? :) Вроде нашли способ, сейчас буду разбираться. День-два нужно.
Ответили: (40)
# Ответить
40. dablack (файл скачал) 17.11.2014 19:57
(39) Azathtot, точно, есть, не подумал про него. Удачи!
Ответили: (49)
# Ответить
41. abryazgin 18.11.2014 14:18
(28) DitriX,
1) В предполагаемом приложении должен быть предпросмотр, там можно определить, если фото сделано плохо. Но я так понял, что 1с после нажатия кнопки сфотографировать еще фокус потом настраивает сама (на моем устройстве).
2) Да не получилось получить двоичные данные, чтобы в РС внести.
Что пробовал
				
ФайлКартинки = "file:///sdcard/Download/FotoTestFrom1C.jpg";
НовВз = Новый ЗапускПриложенияМобильногоУстройства("android.media.action.IMAGE_CAPTURE");
НовВз.ДополнительныеДанные.Добавить("output",ФайлКартинки,"Uri");
Если НовВз.Запустить(Истина) <> 0 Тогда
        //ЗапуститьПриложение(ФайлКартинки); -- работает

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

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

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


Вместо Хр - может быть реквизит справочника с типом ХранилищеЗначений.
Ну естественно надо распределить клиент и сервер, это я так, по памяти написал.
Ответили: (43) (45)
# Ответить
43. dablack (файл скачал) 18.11.2014 18:21
(42) DitriX, а вас не затруднит сообщить мне в приват, свои контакты, я пытаюсь отправить вам сообщение... и безрезультатно. Я бы хотел по ТСД ACode уточнить информацию.
Ответили: (44)
# Ответить
44. DitriX 18.11.2014 18:42
(43) Lex@dineva.net
# Ответить
45. abryazgin 19.11.2014 10:59
(42) DitriX,
У меня не выполняется строка
    Данные = Новый ДвоичныеДанные(ФайлКартинки);

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

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

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

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

а это uri, а не путь к файлу. Значит в вашем случае:
Данные = Новый ДвоичныеДанные( "/sdcard/Download/FotoTestFrom1C.jpg");
Ответили: (50)
+ 2 [ poligraff; abryazgin; ]
# Ответить
47. CyberCerber (файл скачал) 20.11.2014 08:25
Спасибо за ваши публикации по мобильной платформе!
С каждым разом они становятся все интересней и полезней.

Подскажите, пожалуйста... Скачал xml файл по пути "http://acode.pro/~mu". Создал в сборщике моб приложений apk файл, закидываю его на планшет, устанавливаю, запускаю. Появляется окно запуска 1С, потом иконка загрузки, и все на этом зависает. В чем может быть проблема?
Ответили: (48)
# Ответить
48. DitriX 20.11.2014 14:53
(47) ну обычно это бывает есл на arm установить образ x86
# Ответить
49. Azathtot 20.11.2014 20:33
(40) dablack, Собственно, решили мы проблему. Сделал через SMS механизм. DitriX на днях думаю выложит конфигурацию
Ответили: (53)
# Ответить
50. abryazgin 21.11.2014 11:16
(46) DitriX, Спасибо, огромное. Так работает.

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

Вот она и возвращает нормальный URI
# Ответить
53. dablack (файл скачал) 21.11.2014 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)
# Ответить
54. DitriX 21.11.2014 16:13
(53) обновления еще не было. Сейчас уже заканчиваю, скоро появится
Ответили: (55)
# Ответить
55. CyberCerber (файл скачал) 25.11.2014 08:32
(54) DitriX, а что ожидается в новой версии, не подскажите?
Ответили: (56)
# Ответить
56. DitriX 25.11.2014 14:24
(55)
1. Работа с графиками (живыми, т.е. растягивать можно и т.д.)
2. Глобальное оповещение для 1С с сервера
3. Переделанный механизм чтения нфц и сканеров, теперь вызывается событие по факту сканирование и при этом, если после включения сканирования 1С свернуть, то после скана - окно 1с всплывает и отрабатывает событие скана
4. Та и еще там всякие плюшки.

Но это будет доступно для общественности не раньше чем через месяца два или три, сейчас люди тестируют, исправляем баги.
# Ответить
57. Программулькин (файл скачал) 26.11.2014 05:38
Сижу на работе, читаю с большим интересом эту статью. В это время заходит работник отдела кадров. Задаёт вопрос: "Что такое интересно читаешь?"
Я отвечаю, что мол вот у 1 с появились новые возможности, что бла...блааа.. она такая вся модная, вот до мобильников добралась, может тебе WI-FI включить, сказать что за мобилка у тебя, какая ОСь стоит, и так далее, бла...блаа...(читаю некоторые выдержки из статьи, напрочь забыв, что передо мной не ITшник, а кадровик ). Она на меня смотрит своими большими круглыми глазами, хлопает несколько раз своими длинными ресницами, и выдаёт сногсшибательную фразу: "А зачем это 1с надо? Ведь у неё и так своих проблем хватает!"...под столам.
Ответили: (58)
# Ответить
58. DitriX 26.11.2014 11:45
(57) у нее случаем не iPhone? А то обычно любители яблок так отвечают - если чего нет, то это не надо :)
# Ответить
59. Vo-Va (файл скачал) 18.12.2014 02:37
Можно ли как то использовать эту утилиту для организации печати на мобильный принтер?
Ответили: (60)
# Ответить
60. DitriX 18.12.2014 18:10
(59) можно, но это индевидуально, под заказ.
# Ответить
61. CyberCerber (файл скачал) 13.01.2015 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С. Я так сделал запись звука в фоне.
+ 1 [ DitriX; ]
# Ответить
62. DitriX 13.01.2015 12:00
(62) в новой версии утилит - мы научили 1С ловить броэдкасты. :)
Ответили: (62) (63)
+ 1 [ AlxSch; ]
# Ответить
63. CyberCerber (файл скачал) 13.01.2015 13:00
(62) DitriX, ловить - это тоже круто, но пока мне еще не понадобилось.

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

Подскажите, а можно реализовать запуск утилит при загрузке конфигурации, и остановку при выходе из конфигурации? А то в памяти висит постоянно и ресурсы есть!!!
Ответили: (66)
# Ответить
66. DitriX 20.01.2015 18:40
(65) Ок, учли предложение. Реализуем в будующих версиях :)
Ответили: (111)
# Ответить
67. pro1c@inbox.ru 21.01.2015 13:54
надо iOS!
те кто платит на iOS сидят!

а так все нормуль. костыли конечно, но на безрыбье....
Ответили: (68)
# Ответить
68. DitriX 21.01.2015 17:29
(67) Если надо, то можно и на iOS, только вот это уже не за бесплатно :)
# Ответить
69. AlxSch (файл скачал) 28.01.2015 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)
# Ответить
70. DitriX 28.01.2015 18:14
(69) отлично. Рад, что смог помочь.
# Ответить
71. efin (файл скачал) 04.02.2015 16:36
DitriX, от меня тоже спасибо за такую замечательную разработку! Правда, от нее мне нужны были только вибро, DeviceID и Push.

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

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

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

Будет намного проще, если вы опишите задачу и ее критерии, а я вам может смогу что-то посоветовать
Ответили: (76)
# Ответить
73. imoby (файл скачал) 06.02.2015 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)
# Ответить
74. ZLENKO.PRO 06.02.2015 15:47
(23) WKBAPKA, "используйте Eclipse или Android Studio и изучайте язык программирования Java :)"

IntelliJ IDEA вместо Eclipse или Android Studio
# Ответить
75. DitriX 06.02.2015 20:10
(73) Добрый.
Будет. //E_INVALID_PARAMS = 2;
Это ваша ошибка, как вариант - вы могли не указать ID устройства.
Проверьте через конфу, которая есть тут. Для этого пропишите на первой вкладке тестов утилит IP и ID устройства, ID можно получить в этой же конфе на вкладке Информация - Инфо, это длинное число (обычно отрицательное, но писать надо его с минусом, если оно есть)
Ответили: (78)
# Ответить
76. efin (файл скачал) 06.02.2015 20:12
(72) DitriX, когда я увидел, что acode tools позволяют добавить функционал push, я, естественно, понял, что речь идет о возможности принимать и обрабатывать стандартные push-сообщения от GCM. Мобплатформа этого не умеет, и я надеялся, что ваши утилиты могут выступать приемником push'ей от GCM и ретранслировать их в мобильную платформу.

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

Задача простая - из основной 1С оповещать сотрудников о входящей информации, вне зависимости от того где и как они подключены и запущена или нет мобильная платформа.
Ответили: (77)
# Ответить
77. DitriX 07.02.2015 01:09
(76) тогда у вас два варианта - ждать 8.3.6 :) И то, проблема в GCM - нет увереннсоти что сообщение дойдет.
Или смотрите 8 урок про другой сервис, который гарантирует доставку и сообщает - успешна она или нет. И тут не надо никакой платформы 1С, но оно платное, но есть и бесплатное, вообщем смотрите видео, там все есть.
# Ответить
78. imoby (файл скачал) 07.02.2015 10:20
(75) DitriX, я написал что в локальной сети работает, ID и IP устройства указаны. Но стоит мне поменять IP на внешний, пишется такая ошибка. Хотя внешний IP виден в сети и 8090 порт прослушивается. Просто хотел узнать, может у вас какое-то ограничение стоит, чтобы только в одной локальной сети принимать данные.
Ответили: (79)
# Ответить
79. DitriX 07.02.2015 10:31
(78)ну а вы этот порт пробрасывали через роутер на телефон?
у меня все работает и по внешке.
Причины не работы чаще всего две:
1. Тупые роутеры, у которых если делать коннект по вненему IP, который равен IP роутеру, они его форсят на себя и не пусают дальше, если вы находитесь в подсети роутера.
2. Люди просто забывают пробросить порт с роутера на иелефон, или же пробросили, но забыли установить фиксированный IP для телефона.
Ответили: (80)
# Ответить
80. imoby (файл скачал) 07.02.2015 23:36
(79) DitriX, планшет с симкой со статическим IP-адресом без роутеров, если ввести его адрес и порт через браузер, то он виден, но сама утилита не может передать событие, пишет ошибка выполнения утилиты (2). Думал, может какое-то ограничение на подключение извне.
Ответили: (81)
# Ответить
81. DitriX 08.02.2015 01:06
(80) на симке - не проверял, может быть, всетаки это другой тип подключения.
Но если по вайфаю - то все ок. Мы подумаем над тем, можно ли эту проблему решить, если она есть, или не можем :)
# Ответить
82. ilyar 08.02.2015 17:58
Acode - суперская вещь, спасибо вам за это.
Я так понял что работа с FTP заключается в получении и отправки файлов. Это уже хорошо но если вот добавить возможность удалять/переименовывать/перемещать файлы ты будет супер. Если не сложно реализуйте пожалуйста в следующей версии.
Вопрос: Можно ли средствами BeanShell докрутить возможность удалять/переименовывать/перемещать файлы по FTP?
Ответили: (83) (88)
# Ответить
83. DitriX 08.02.2015 19:08
(82) а чего бы и нет?
Создавайте свой сервис и описание его, и работайте с ним :)
Мы эо делаьть не будем, во всяком случае до выхода 8.3.6 - точно, ибо там это все может появится.
# Ответить
84. Zasranec0 (файл скачал) 24.02.2015 15:07
Не плохая разработка. Как узнать при открытии формы ориентацию экрана?
Ответили: (85)
# Ответить
85. DitriX 24.02.2015 16:14
(84) хороший вопрос :)
Для этого надо где то в константе его хранить. Первую ориентацю можно вычислить пр помощи особенностей устройств с программными кнопками управления (домой, назад, меню) ну а потом внести текущее положение в константу, а дельше, при первом повороте - просто писать в константу.
Ответили: (86)
# Ответить
86. Zasranec0 (файл скачал) 25.02.2015 12:03
(85) DitriX, А через утилиту, можно же как то состояние это у андройда узнать? Не вижу сложностей реализации этого. Или это надо самому допиливать ?
К примеру
 УтилитыACODEКлиент.ПолучитьДанныеОбУстройстве("state.wifi");


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

Вот у меня запускается 1с, в этот момент открывается форма, в ней уже не понятно как расположить элементы. При первом повороте конечно же можно записать это делать в константу, но интересует именно при запуске командой узнать.
Ответили: (87)
# Ответить
87. DitriX 25.02.2015 13:45
(86) на днях ждем выхода 8.3.6, там появились новые функции работы с экраном. Пока она не выйдет - делать не будем, так как если оно уже будет сделанно там, то смысл его пилить тут.
А сделать вы это можете - для этого есть скрипты, пишите свой скрипт и получайте чаго хотите. Мы же специально систему плагинов сделали
# Ответить
88. Azathtot 04.03.2015 13:17
(82) ilyar,
Вопрос: Можно ли средствами BeanShell докрутить возможность удалять/переименовывать/перемещать файлы по FTP?

да, можно. beanShell предоставляет вам возможность доступа ко ВСЕМ классам утилиты и соответственно android API.
Для работы с FTP в утилитах используется apache.commons.net, все классы которой вам доступны.
# Ответить
89. solarisman (файл скачал) 06.03.2015 07:31
Добрый день!

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

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

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

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

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

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

Может быть, в манифесте поправить/добавть свойства?
Я слишком поверхностно знаю Android, но при разработке простейшего приложения в Android Studio курсор устанавливается уже при открытии окна и кликать лишний раз не надо.
Ответили: (92)
# Ответить
92. Azathtot 06.03.2015 19:08
(91) solarisman,
Вообще-то при работе утилит с БТ сканнером происходит 2 вещи, при сканировании
- расылка "СМС" с номера 04 c сосканированным кодом
- рассылка интента c action "ru.acode.control" и следующими параметрам Action - 2 (SCAN), Status - 0 (OK), Scanner - 4 (БТ сканнер), Data - баркод.
Вы можете принимать эти сообщения не используя никаких активных полей ввода
# Ответить
93. solarisman (файл скачал) 06.03.2015 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 (файл скачал) 06.03.2015 19:19
Это понятно с БТ сканнером, статью я прочитал и с конифгурацией ознакомился. Но хотелось бы, чтобы приложение "взлетело" на любом устройстве с режимом ввода с клавиатуры. А вообще заказали вот такой аппарат для тестирования, ждем посылку. Он работает в режиме ввода с клавиатуры
# Ответить
95. solarisman (файл скачал) 06.03.2015 19:23
Тут ведь есть еще один момент - подтверждение пользователем.

То есть, отсканировали - пользователь посмотрел - нажал "ОК" или скорректировал и потом нажал "ОК".
Например, если количество считывается из ШК. Чтобы скорректировать, ему опять придется сделать "тык" по экрану в форме и уже потом корректировать количество.
# Ответить
96. solarisman (файл скачал) 06.03.2015 19:30
Есть еще вот такая штука, похожая на описание поля ввода, файл называется "uiedit.xml"

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

<com.e1c.mobile.UIEdit
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:scrollbars="vertical"
  android:gravity="left|top"
  android:inputType="textLongMessage|text|textNoSuggestions|textVisiblePassword"
  android:imeOptions="flagNoExtractUi|flagNoFullscreen"
  android:singleLine="true"
  >
</com.e1c.mobile.UIEdit>
...Показать Скрыть
Ответили: (97)
# Ответить
97. DitriX 06.03.2015 21:33
(96) Давайте еще раз - сканирование в активное поле - это полный бред, который не подходит для решения реальных задач, пример - человек клацнул на ввод даты, или на таблицу, что вы будете дальше делать? Вешать везде обработчики событий и переводить активность? Ну реально :) Честно, мы так пробовали и если хотите сами попробовать - установите 8.3.4.17 и потестируйте, сами поймете бессмысленость этой затеи.
Это раз, а два - вы смотрели 8.3.6 и то, как там все сделано? Там вообще активность поля совсем не в тему. Поэтому - мы на эту тему не переживаем.
А три - без исходников 1С, я сомневаюсь что у вас что-то получится, а исходники - никто не даст. Можете написать еще одну заявку в 1С, будет уже 100500 заявка на эту тему :)

Но с другой стороны - у вас нет другого выхода, кроме как повторять все то, что ACODE разрабатывали на протяжении года (виртуальная клавиатура вам сможет помочь и т.д.)
А то что вы тут приводите - это xml описания стационарных форм, к примеру - форма создания и подключения базы, изменив тут что то, вы получите активность в той форме, а что дальше?
# Ответить
98. solarisman (файл скачал) 06.03.2015 23:37
Не понял:
сканирование в активное поле - это полный бред, который не подходит для решения реальных задач

Вы приложение для "1C: WMS4" видели для Win CE? что значит бред? Вообще как бы не вижу смысл тут полемику разводить и разъяснять, что мы о разных вещах говорим, бизнес-задачи у всех разные.

Суть задачи не меняется - необходимо, чтобы при открытии формы 1С открывался диалог редактирования первого поля ввода.
Вопрос: можно ли это реализовать при помощи ACODE Tools?

Понятно, что .apk декомпилировать и обратно собрать не позволит время. Вопрос был постольку, поскольку я считаю Вас специалистами и предполагаю, что Вы попробовали разные варианты работы и т.д.

Пробовал добавить "requestfocus" в описание поля ввода, не помогает. Видимо, что-то случилось :(
Ответили: (99)
# Ответить
99. DitriX 06.03.2015 23:41
(98) то что было раньше - это не значит, что так правильно, просто тогда не было возможности сделать по другому. Именно поэтому, я, как "специалист", а если точнее - человек который запускал такую модель на реальном предприятии - говорю, что это НЕ работает. Увы.
Вы сами можете в этом удостоверится. Установите 8.3.4.17 и попробуйте там сделать то, что вы хотите, вы сразу увидите - что работать оно не будет.

Те задачи, которые описали вы - решаются по другому, как именно - я рассказал выше.

Активность поля может починить ТОЛЬКО 1С :) И все.
# Ответить
100. solarisman (файл скачал) 06.03.2015 23:42
И да, 8.3.6 смотрел, подход совсем другой.
Более того, полно глюков, которые на "Testplatform@1c.ru" отправлены и якобы зарегистрированы, но в списке "bugreports" их нет (лично 1 ошибку нашел и отправил)

При вводе "Enter" даже завершения редактирования не происходит.. Ой, даже писать не охота про количество ошибок
# Ответить
101. solarisman (файл скачал) 07.03.2015 00:00
В общем, бидапичаль, нанимаем андроид-программиста
Ответили: (102)

Прикрепленные файлы:

128.png
# Ответить
102. DitriX 07.03.2015 03:30
(101) а что вы хотели от тестового релиза :) Скайп и поныне глючный, но нчего :)
Ответили: (105)
# Ответить
103. solarisman (файл скачал) 10.03.2015 09:56
Плюс Вам в карму, все работает быстро и без сбоев
Ответили: (104)
# Ответить
104. DitriX 10.03.2015 11:19
(103) это вы кому и о чем? :)
Ответили: (107)
# Ответить
105. pro1c@inbox.ru 10.03.2015 11:34
(102) DitriX,
вот поэтому у нас такое ПО!
глючный - это нормально! ох, да...
Ответили: (106)
# Ответить
106. DitriX 10.03.2015 12:39
(105) pro1c@inbox.ru, не понял - к чему это? Вы сравниваете "политический" релиз, который был выпущен спецом перед конференцией 1С с чем-то тем, на чем люди реально работают?
# Ответить
107. solarisman (файл скачал) 10.03.2015 12:42
(104) DitriX, Скачал, установил, протестировал ACODE tools, к этому
Ответили: (108)
# Ответить
108. DitriX 10.03.2015 12:43
(107) solarisman, ну тогда - спасибо за отзыв :)
# Ответить
109. DeniNikitin (файл скачал) 20.03.2015 14:49
Здравствуйте!

Можно ли вашим функционалом сделать следующее:

1. При формировании push сообщения по его нажатию в трее открывать моё приложение?
2. Или хотя бы по нажатию на push сообщение в трее просто его закрывать, а не программно?
Ответили: (110)
# Ответить
110. DitriX 20.03.2015 16:38
(109) в этом уже нет смысла, смотрите в сторону 8.3.6, там есть все описанные вами функции.
Нашим функционалом - нельзя, увы. И развивать именно этот функционал, уже не имеет смысла.
# Ответить
111. DeniNikitin (файл скачал) 27.03.2015 16:05
(66) DitriX,
С выходом 8.3.6, ещё стоит надеятся на запуск и остановку процесса Acode?

Подскажите в чём может быть дело? Приложение свёрнуто, отправляю push сообщение, на одном телефоне высвечивается при свернутом и автоматически открывается приложение, а на других двух пока не подниму задачу не высвечивается!!!
Ответили: (112)
# Ответить
112. DitriX 27.03.2015 20:24
(111) уже сделали остановку и там еще пару моментов. Скоро будет обновление.
Вы про пуши от акоде? Или от 1С?
Ответили: (113)
# Ответить
113. DeniNikitin (файл скачал) 28.03.2015 13:27
(112) DitriX,
от Acode!
Ответили: (114)
# Ответить
114. DitriX 28.03.2015 14:21
(113) щас будет обновление, там будем использовать мехаизмы 1с, что позволит по нажатию пуша открыть нужную базу и передать в нее данные.
А по вашей проблеме - опишите подробней, как вариант, проблема может быть в том, что вы на одном телефоне вызываете пуши с клиента, а на других - с сервера.
но в любом случае - если надо открыть приложение, то ждите обновлений и используйте 8.3.6 - все остальное это костыли
Ответили: (197)
# Ответить
115. Zasranec0 (файл скачал) 30.03.2015 12:22
DitriX, появилась возможность узнать из 1с ориентацию экрана при запуске ?
Ответили: (116)
# Ответить
116. DitriX 30.03.2015 13:00
(115) че то я призабыл. Напомните - чем вас такой вариант не устраивает?
	Структура = Новый Структура("Высота, Длина, Ширина",0,0,0);
	#Если МобильноеПриложениеСервер Тогда
		Экран = ПолучитьИнформациюЭкрановКлиента()[0];
		
		Структура.Вставить("Высота",Экран.Высота);
		Структура.Вставить("Длина", Окр(Экран.Высота/Экран.DPI*2.54));
		Структура.Вставить("Ширина",Окр(Экран.Ширина/Экран.DPI*2.54));
		
	#КонецЕсли
	ПараметрыСеанса.ХарактеристикиЭкрана = Новый ФиксированнаяСтруктура(Структура);
...Показать Скрыть

И это можно вызвать при запуске 1С
Ответили: (117)
# Ответить
117. Zasranec0 (файл скачал) 30.03.2015 13:43
(116) DitriX, ориентацию экрана не узнать при этом. Только размеры экрана.
Ответили: (118)
# Ответить
118. DitriX 30.03.2015 16:44
(117) Как это не узнать?
Если высота больше ширины, то портрет, иначе - ландшафт.
Ответили: (119)
# Ответить
119. Zasranec0 (файл скачал) 01.04.2015 10:08
(118) DitriX,
ИнформацияЭкранаКлиента (ClientDisplayInformation)
Свойства:

DPI (DPI)
Высота (Height)
Ширина (Width)

Описание:

Предназначен для описания экрана устройства.
На мобильной платформе ширина и высота экрана всегда выдаются в оригинальной ориентации, без учета поворота устройства. Для телефонов и некоторых планшетов это портретная ориентация, для большинства планшетов - ланшафтная.
Ответили: (121)
# Ответить
120. mzelensky 01.04.2015 10:46
Доброго времени суток!
Мощная поделка, ничего не скажешь! Читаешь и слюни текут от всех тех идей и мыслей, которые в голову лезут. Осталось только найти заказчика на разработку и обкатывать сей функционал!!!
# Ответить
121. DitriX 01.04.2015 12:29
(119) это все немного кривая справка 1с:) Без учета поворота, это значит, что если мы привыкли, что телефон выше чем шире, то повернув его - программа будет считать его шире чем выше :)
Короче, все случиться как надо, и не забываем новую функцию в 8.3.6 - ПриИзмененииПараметровЭкрана
&НаКлиенте
Процедура ПриИзмененииПараметровЭкрана()
    МассивИнформаций = ПолучитьИнформациюЭкрановКлиента();
    Если МассивИнформаций[0].Ширина > МассивИнформаций[0].Высота Тогда
        ЭтаФорма.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
    Иначе
        ЭтаФорма.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
    КонецЕсли;
КонецПроцедуры
...Показать Скрыть
Ответили: (156)
# Ответить
122. solarisman (файл скачал) 02.04.2015 14:17
Можно ли каким-то образом прослушивать произвольный SerialPort, например, если я хочу "прикрутить" утилиты к ТСД (не ACODE)
Ответили: (123)
# Ответить
123. DitriX 02.04.2015 14:27
(122) ну если на beanshell напишите, то можно. Но сомневаюсь. Очень много зависит от терминала и его структуры подключения, потому что иногда - не обойтись без виртуальной клавиатуры, а иногда надо прописать действия на аппаратные кнопки и т.д.
В Acode - мы это называем Support модули, и они различаются не только от модели к модели, но и от партии к партии.
Так что вы в любом случае прийдете к тому, к чему пришли и мы.
Ответили: (124)
# Ответить
124. solarisman (файл скачал) 03.04.2015 10:31
(123) Можете поделиться куском кода для эмуляции входящего СМС? Мануалов, конечно, куча, но опыта маловато разобраться с этими интентами
Ответили: (125)
# Ответить
125. DitriX 03.04.2015 10:49
(124) Это уже устаревший механизм, мы теперь юзаем бродкасты в 8.3.6. Если Android программист решит поделиться, то он поделиться, а я не могу просто взять и кусок вырезать :) Он тут иногда отвечает на вопросы. Но предупреждаю, в текущей версии 8.3.6 - не работают смс, там баг в самой 1С
# Ответить
126. solarisman (файл скачал) 03.04.2015 20:51
Там код-то простенький должен быть вроде, типа

 final String ActionName = "com.google.android.c2dm.intent.RECEIVE";
 Intent intent = new Intent(ActionName);
 intent.addCategory("com.e1c.mobile");
 intent.putExtra("Data", "111");
 sendBroadcast(intent);
...Показать Скрыть


Но вот почему, зараза, не срабатывает - непонятно.

ЧЯДНТ?
Ответили: (127)
# Ответить
127. DitriX 03.04.2015 20:54
(126) Ну это бродкасты, в целом да, но есть нюансы, и вы уже сами это поняли :)
# Ответить
128. solarisman (файл скачал) 03.04.2015 21:10
Не понял только, почему 1С не отлавливает эти уведомления. Имя и категорию скопировал из платформы как в Permissions.xml написано, дальше - хз.
Ответили: (131)
# Ответить
129. ssmeta 05.04.2015 20:28
Доброго времени суток.
Спасибо, очень полезная статья.

Не удалось посмотреть возможности утилиты к сожалению.
Android 5.0.1

Загрузил её на телефон по пути "http://acode.pro/upload/1cema.xml" (возможности скачать приложенные к статье файлы у меня нет)

Нажал на кнопку установить утилиты. По идее написано было что утилита установлена, но после нажатия на кнопку "Запустить",
приложение утилиты выдаёт ошибку "в приложении AСode:Поддержка 1С произошла ошибка".

Есть версия в чём может быть проблема? Может кто-то может прислать мне файлики приложенные к статье, если не затруднит 4istij@list.ru?

.
Ответили: (130) (132)
# Ответить
130. ssmeta 05.04.2015 21:06
(129) ssmeta,

Сообщение об ошибке выдаёт, но тем не менее при тестировании например вывода сообщений, сообщения появляются.
Интересно, буду тестировать дальше.
# Ответить
131. solarisman (файл скачал) 06.04.2015 08:15
(128)
В общем, я разобрался. Правда, пришлось для этого декомпилировать платформу и научиться немного программировать на Java.
Ответили: (132)
# Ответить
132. DitriX 07.04.2015 09:54
(129) не поверите, нет устройства на 5 андрюше, а на виртуалке - все ок. Скиньте логкат, знаете как сделать?
(131) ну, как видите - ничего сложного, можете кстати сюда скинуть все возможные параметры пуша :)
Ответили: (133) (137)
# Ответить
133. ssmeta 07.04.2015 14:56
(132) нет, к сожалению не знаю что это такое (логкат) и как его делать.
Ответили: (134)
# Ответить
134. ssmeta 07.04.2015 15:04
(133) Вот нашел такую функцию в коде "Функция ЛогКат()", попробую сделать, если Вы это имели ввиду.
# Ответить
135. DitriX 07.04.2015 15:24
(135) Не совсем то, вообщем это что то типа журнала в 1с, куда сыпятся все ошибки в1с, вот в андроиде тоже такой есть, и есть программы, которые позволяют этот лог журнал просмотреть, например эта https://play.google.com/store/apps/details?id=com.nolanlawson.logcat, но для этого нужен рут на устройстве, иначе программу будет видеть только свои логи.
Ответили: (135) (136)
# Ответить
136. ssmeta 07.04.2015 15:58
(135) Ясно, жаль. Root прав нет. Ладно.
Кстати попытался посмотреть работу с FTP, тоже непонятки.
После выбора файла идет сообщение что файл не найден. Посмотрел, вроде причина в том, что content не разбирается. (предположение)
После выбора файла ФтпПутьКФайлуДляОтправки = пустая строка.
Возможно Android 5.0 шалит :)
Но все равно интересно, буду дальше изучать...
# Ответить
137. solarisman (файл скачал) 08.04.2015 13:33
(132) Да ничего особенного вроде нет

Уведомление в 1С отсылается так:
        final String ActionName = "com.google.android.c2dm.intent.RECEIVE";
        Intent intent = new Intent(ActionName);
        intent.addCategory("com.e1c.mobile");
        intent.putExtra("text", "Barcode:" + Barcode);
        intent.putExtra("title", "1C");
        sendBroadcast(intent);
...Показать Скрыть


Нативная обработка локальных уведомлений происходит методом
        NativeProcessNotification(str2, str1, str4, true)

где
str2 = localBundle.getString("base")
str1 = localBundle.getString("text")
str4 = localBundle.getString("data")

Далее нативную обработку уже не вскрыть, т.к. она зашита в скомпилированной библиотеке .so

При попытке установить какое-нибудь значение в поле "base" начинает валиться ошибка "Уведомление для неизвестной конфигурации [значение поля "base"]". Не помогает вставлять туда ни идентификатор базы, ни имя конфигурации, ни что-то еще. Не знаю, как Вы с этим справились в утилитах Acode
Однако, если база в списке одна, то работает и без этого, просто поле не добавляется

По непонятной мне причине, строка из поля "text" не сериализуется (при попытке запихнуть ее в XDTO валится ошибка), хотя нормально обрабатывается приложением и вставляется в строковые переменные. Пришлось написать функцию, которая оставляет только допустимые символы.

Жаль, что очень много скрыто в скомпилированной библиотеке. Особенно уродско, ИМХО, работа интерфейса
Ответили: (139)
# Ответить
138. Degustator 08.04.2015 21:17
День добрый. Набор утилит просто прекрасный, спасибо огромное. Но есть вопрос: при переводе мобильного приложения с 8.3.5 на 8.3.6 почему-то перестал отрабатывать конструктор WSОпределения. Выдает ошибку: "Ошибка при вызове конструктора (WSОпределения) по причине: Неверный формат". На 8.3.5 все прекрасно работает. На стационарной машине запускаю базу мобильного приложения под 8.3.6 - тоже все хорошо. Создал в центральной базе еще один веб-сервис полностью пустой, к нему тоже не хочет цепляться. Может подскажете, куда можно копать?
Ответили: (139) (140)
# Ответить
139. DitriX 09.04.2015 11:46
(137) это ID базы, раблотаем с ним отлично, другой вопрос что его получать надо через Ж для текущей базы :)
(138) Копать в сторону багов 1с :) Попробуйте последний релиз 8,3,6,138, я правда не проверял веб-сервисы там, но на 110 - точно не работает:)
Ответили: (141) (142)
# Ответить
140. solarisman (файл скачал) 09.04.2015 18:06
(138) У меня работает на 8.3.6.110 и на 8.3.6.138

Формирование адреса подключения

АдресСервера 	= Константы.АдресСервера.Получить();
	ИмяКаталога 	= Константы.ИмяКаталога.Получить();
	ИмяСервиса 		= Константы.ИмяСервиса.Получить();
	ПортСоединения 	= Формат(Константы.ПортСоединения.Получить(), "ЧГ=");	
	
	СтрокаАдрес = "http://%АдресСервера%%ПортСоединения%/%ИмяКаталога%/ws/%ИмяСервис­а%.1cws?wsdl";
	СтрокаАдрес = СтрЗаменить(СтрокаАдрес, "%АдресСервера%", АдресСервера);
	СтрокаАдрес = СтрЗаменить(СтрокаАдрес, "%ИмяКаталога%", ИмяКаталога);
	СтрокаАдрес = СтрЗаменить(СтрокаАдрес, "%ИмяСервиса%", ИмяСервиса);
		
	ПортСоединения = ?(ПустаяСтрока(ПортСоединения), "", ":" + ПортСоединения);
	СтрокаАдрес = СтрЗаменить(СтрокаАдрес, "%ПортСоединения%", ПортСоединения);
	
	Константы.АдресЦентральнойБазы.Установить(СтрокаАдрес);
...Показать Скрыть


Подключение

ПользовательЦентральнойБазы = ОбщегоНазначенияПовтИсп.ПользовательЦентральнойБазы();
	ПарольДляОбмена 			= ОбщегоНазначенияПовтИсп.ПарольДляОбмена();
	АдресПодключения 			= ОбщегоНазначенияПовтИсп.АдресЦентральнойБазы();
	URIПространстваИмен			= ОбщегоНазначенияПовтИсп.URIПространствоИмен();
	ИмяСервиса					= ОбщегоНазначенияПовтИсп.ИмяСервиса();
	ИмяТочкиПодключения			= ИмяСервиса + "Soap";
	ТаймаутПрокси				= 10;
	
	Попытка
		Определение = Новый WSОпределения(АдресПодключения, ПользовательЦентральнойБазы, ПарольДляОбмена,, ТаймаутПрокси);
		Прокси		= Новый WSПрокси(Определение, URIПространстваИмен, ИмяСервиса, ИмяТочкиПодключения,, ТаймаутПрокси);	
		Прокси.Пользователь = ПользовательЦентральнойБазы;
		Прокси.Пароль 		= ПарольДляОбмена;                                                     
	Исключение
		Возврат Неопределено;
	КонецПопытки;		

	Возврат Прокси;
...Показать Скрыть


URIПространствоИмен() - как оно задано у Вас в центральной базе в пакете XDTO
Ответили: (141) (142) (143)
# Ответить
141. Degustator 09.04.2015 18:15
(139) DitriX, Пробовал на 138, тоже самое - не работает
(140) solarisman, попробую Ваш код, но вроде, на первый взгляд, в нем принципиальных отличий нет от моего
Ответили: (143)
# Ответить
142. Degustator 09.04.2015 19:36
(140) solarisman, попробовал, не работает.
(139) DitriX, я правильно понял, что у Вас веб-сервисы на мобильной 8.3.6 тоже не работают?
# Ответить
143. DitriX 09.04.2015 19:38
(140)(141) отличие не в коде, а типх передаваемых данных, у вас скорее всего стоит хранилище, поставьте строку и тогда все взлетит, а вот с хранилищем - таки баг
Ответили: (144)
# Ответить
144. Degustator 09.04.2015 20:13
(143) DitriX, хранилище действительно есть в передаваемых данных. Но у меня на 8.3.6 не взлетает даже пустой веб-сервис.
# Ответить
145. Degustator 09.04.2015 20:26
Попробую зайти с другой стороны. Причина, по которой захотел перейти на 8.3.6 следующая: имеется сканер CipherLab 1661, на версии утилит 2.05 он не работает, а на версии 2.07 - работает. А для 2.07 и нужна новая платформа. Может можно как-то заставить работать данный сканер под 2.05? Подключается нормально, но при сканировании штрих-код не добавляется в таблицу на форме
Ответили: (146) (148) (168) (170)
# Ответить
146. solarisman (файл скачал) 10.04.2015 08:11
(145) Проверьте работу сервиса для начала через браузер. Там куча нюансов, вплоть до соблюдения регистра символов в строке адреса
Ответили: (147)
# Ответить
147. maks_v (файл скачал) 10.04.2015 08:47
(146) solarisman, да я же говорю, у меня не то что в браузере нормально работает, у меня под мобильной 8.3.5 все прекрасно работает, не работает только под мобильной 8.3.6.

Написал под другим пользователем :) но это я , Degustator :)
# Ответить
148. DitriX 10.04.2015 10:52
(145) ну так используйте 2.07 на 8.3.5, нам то какая разница? Вы просто переключите его в режим смс, и все.
Ответили: (149)
# Ответить
149. Degustator 10.04.2015 11:34
(148) DitriX, хорошо, спасибо, попробую
Ответили: (150)
# Ответить
150. DitriX 10.04.2015 12:03
(149) не за что, будут проблемы - пишите.
Ответили: (151)
# Ответить
151. Degustator 10.04.2015 18:42
(150) DitriX, начал пробовать и стало понятно, почему у меня сканер с 2.05 не работал. На планшете нет модуля телефонии :) Прямо и то не так, и так не эдак

Видимо, придется ждать следующей версии 8.3.6
Ответили: (152)
# Ответить
152. DitriX 10.04.2015 19:37
(151) ну тогда да, но зато вы знаете, что на 8.3.6 - все будет как надо :)
# Ответить
153. ksvd 13.04.2015 10:52
Заинтересовал момент передачи сообщений на мобильное устройство из центральной базы. В одной сети через WiFi все работает замечательно. Но если мобильное устройство в другой сети, его IP определяется как внутренний для его подсети - т.е. 192.168.0.1 например, и отправить на него сообщение неполучается. Так же не получилось отправить сообщение, если мобильное устройство в сети через симку. Из утилит нельзя узнать внешний IP мобильного устройства ?
Ответили: (154)
# Ответить
154. DitriX 13.04.2015 12:39
(153) это не проблема утилит, если телефн в другой сети, значит надо перенаправить порты с роутера на это устройство, ну и узнать IP адрес внешний, утилиты это не умеют, но это не проблема добавить скриптами, к примеру.
На счет симки - мобильные операторы не дают внешний белый IP адрес, и блокируют все запросы извне, т.е. там тоже так не выйдет.
# Ответить
155. ksvd 13.04.2015 13:05
Спасибо за ответ. Но тогда зачем эта возможность отсылать сообщения на мобильное устройство? Реально торговые работают через интернет мобильный (т.е. через симки), ну могут еще использовать бесплатный WiFi в торговых центрах. А получается, что использовать можно, только когда торговые в офисе.
Ответили: (157)
# Ответить
156. Zasranec0 (файл скачал) 13.04.2015 15:04
(121) DitriX, проверил, не работает, всегда выводит 720 / 1280. Этот вариант не подойдет.

Не могу при начале работы системы определить как повернут экран. Может кто помочь?
Ответили: (157)
# Ответить
157. DitriX 13.04.2015 15:47
(155) а на задачи склада, приемки, отдела ОТК - вы не смотрите? Почему мы не решаем вашу задачу, потому что ее уже решили 1с в 8.3.6, используя GCM - можно сделать то, что вам нужно. Какой смысл нам дублировать этот функционал. Но наш функционал работает там, где нет выхода во внешний инет и от там никому не нужен.
Так что вы пытаетесь решить одну проблему, но инструментом, который предназначен для решения других проблем :)
(156) ну тогда это баг, пишите в 1с :) Т.е. у вас при повороте экрана, всегда выводит одни и те же данные? И вы, конечно же, после каждого события повотра экрана - переинициализируете эти параметры, т.е. постоянно вызываете функцию ПолучитьИнформациюЭкрановКлиента() и смотрите данные там, верно?
Ответили: (158) (159)
# Ответить
158. ksvd 13.04.2015 17:56
(157) DitriX, Согласен, надо смотреть шире.
# Ответить
159. Zasranec0 (файл скачал) 13.04.2015 18:09
(157) DitriX, верно, работает как написано в справке. Ширина и высота от поворота не изменяется.

Получается что при старте 1с я не могу определить как у меня экран повернут...
Ответили: (160) (161)
# Ответить
160. DitriX 13.04.2015 18:22
(159) это для стационарного они фиксированы, а для мобильного - нет. Читай ИТС:
26.3.6.9. Ориентация экрана

Платформа предоставляет информацию о некоторых характеристиках экрана устройства, на котором выполняется клиентское приложение (персональный компьютер или мобильное устройство). Для этого служит метод ПолучитьИнформациюЭкрановКлиента(). В результате возвращается массив структур, описывающих экраны, подключенные к устройству.

Каждый элемент массива описывает один экран, подключенный к устройству. Параметры Высота и Ширина описывают, соответственно, высоту и ширину экрана в точках. При этом для мобильного устройства эти параметры зависят от ориентации устройства (если это разрешено в настройках), а платформы для персонального компьютера всегда возвращает канонические параметры подключенных экранов. Таким образом, на мобильном устройстве можно анализировать, в каком положении находится устройство и на основании этого принимать решения о трансформации интерфейса приложения. Для облегчения работы с ориентацией существует событие ПриИзмененииПараметровЭкрана, которое можно обработать в модуле управляемого приложения и в модуле управляемой формы.

В качестве примера рассмотрим изменение отображения формы, отображаемой на рабочем столе. В указанной форме есть два списка, которые отображают некоторую информацию. При портретной ориентации экрана (узкая сторона устройства – нижняя) списки будут отображаться друг под другом, а при ландшафтной (широкая сторона устройства – нижняя) ориентации – списки расположены рядом. Для реализации такого поведения в модуле формы, расположенной на рабочем столе, следует разместить обработчик события ПриИзмененииПараметровЭкрана следующего вида:


&НаКлиенте
Процедура ПриИзмененииПараметровЭкрана()
    МассивИнформаций = ПолучитьИнформациюЭкрановКлиента();
    Если МассивИнформаций[0].Ширина > МассивИнформаций[0].Высота Тогда
        ЭтаФорма.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
    Иначе
        ЭтаФорма.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
    КонецЕсли;
КонецПроцедуры
...Показать Скрыть
Ответили: (164)
+ 1 [ clev; ]
# Ответить
161. DitriX 13.04.2015 18:24
(159) короче, приложи сюда конфу и скажи на какой версии компилишь, а я протестю и дам знать.
Ответили: (162)
# Ответить
162. Zasranec0 (файл скачал) 14.04.2015 11:27
(161) DitriX, https://drive.google.com/file/d/0B-uCrBOTwUB1M2Z6VnVtYlNRQ2M/view?usp=sharing

Это ссылка на мобильное приложение, которое на андройд ставлю. Версия 8.3.5.96 ( не обновлял )
Конфигурация очень простая, при начале работы системы идет тот код который ты написал вышел. Всегда выдает одну и ту же циферку.

Может стоить обновить? Боюсь, что что то другое перестанет работать.
Ответили: (163)
# Ответить
163. DitriX 14.04.2015 11:44
(162) не, так не пойдет, что я буду смотреть без конфигурации.
Создайте простую конфу с одной формой, где будет два элемента, и при повороте экрана - группа, в которой они находятся, должна делать вертикальное или горизонтальное выравнивание и все. И приложите сюда тупо конфу, или саму обработку
# Ответить
164. Zasranec0 (файл скачал) 14.04.2015 11:46
(160) DitriX, Этот функционал работает только на 8.3.6
Ответили: (165)
# Ответить
165. DitriX 14.04.2015 16:35
(164) ну в 8.3.5 даже функции такой глобальной нету у форм. Чето я забыл уточнить, сори.
# Ответить
166. AlexBar (файл скачал) 16.04.2015 15:50
Шикарная публикация. Мне очень понравилась.
Автор, подскажите, указанные утилиты могут работать только с блютуз сканером или с usb тоже можно реализовать оповещение 1С?
Ответили: (167)
# Ответить
167. DitriX 16.04.2015 16:51
(166) не умеют. Но возможно все, вопрос или в деньгах, или в свободном времени :)
Ответили: (168)
# Ответить
168. AlexBar (файл скачал) 16.04.2015 23:46
(167) В вашем примере, указанном в видео №7 имеется следующий код:
	Если НомерСобытия = 1 Тогда
		Возврат "Сканирование 1D";

Какое событие обрабатывается с номером 1?
2.07 работает с версией 8.3.5? Пытаемся прикрутить сейчас CipherLab 1661 к планшету с обработкой оповещения от сканера, согласно ваших примеров.
В (145) указано что 1661 не работает с 2.05, а для 2.07 требуется вроде как 8.3.6.
Поясните что с чем работает, чтобы не наступать на чужие грабли. Пока работаем на 8.3.5 и до выхода рабочего релиза 8.3.6 переходить на него не планируем.
Ответили: (169)
# Ответить
169. DitriX 17.04.2015 11:47
(168) все очень просто.
2.05 - работает и с 8.3.5 и с 8.3.6, однако, принцип ее работы в эмуляции смс сообщения, из-за этого был ряд проблем:
1. Если нет gsm модуля в телефоне (например планшет без возможности звонить), то естественно ничего не работало.
2. В первой версии 8.3.6.106 - был баг, из-за которого она падала в крит, если подключали обработчик оповещения.

2.07 - работает по принципу смс, и по принципу броадкаста. (нужное включается в настройке)
Соответственно - 2.07 работает с 8.3.5 но только в режиме смс (так как в 8.3.5 нет режима бродкаста)
Ну а с 8.3.6 - работает в любом режиме.

Просто из-за багов 1С - иногда приходится делать чудные вещи :)
Ответили: (171) (225)
# Ответить
170. AlexBar (файл скачал) 20.04.2015 11:14
(145)
Вам удалось заставить 1661 работать с 1С? Если да, то на какой версии платформы и с какой версией утилит?
# Ответить
171. AlexBar (файл скачал) 20.04.2015 13:15
(169)
Мда.. мой случай оказался сложнее. Планшет не поддерживает СМС, так как отсутствуют средства телефонии. Специально подбирали такой планшет для производства. Тестовый релиз 8.3.6 глючный и тормознутый. так что с ним пока даже связываться не хочется.
А Вы не думали использовать для оповещения 1С от блютуз сканера или терминала сбора данных средства мультимедиа? Т.е. если сейчас Вы предприняли попытку создать ложный СМС для оповещения 1С. то почему бы не воспользоваться "ложным" штрихкодом из средств мультимедиа?
Ответили: (172)
# Ответить
172. DitriX 20.04.2015 13:26
(171) потому что там все намного сложнее, та и не имело смысла, ибо ранее смс нас устраивало - а теперь через уведомления делаем, 8.3.6 все арвно выйдет рано или поздно, а делать костыль ради текущей версии - смысла не имеет.
Ответили: (173)
# Ответить
173. AlexBar (файл скачал) 20.04.2015 13:40
(172) Возможно вы и правы. Придется отложить все работы до выхода рабочей версии 8.3.6 :(
# Ответить
174. s.kochnev 23.04.2015 09:32
Добрый день
Вопрос, возможно, глупый, но будет ли ACODE Tools работать на девайсе с процессором Intel?
Ответили: (175) (177)
# Ответить
175. Azathtot 23.04.2015 11:22
(174) s.kochnev, А почему нет? Там нет процессоро-зависимого кода.
Ответили: (176)
# Ответить
176. s.kochnev 23.04.2015 12:42
(175) Azathtot, ясно, спасибо. Я в apk заглядывал, бинарников не увидел, но поскольку с андроидом знаком мало, решил уточнить для верности :) Остаётся надеяться, что 1С под x86 будет работать нормально (есть подозрение, что эта сборка существует преимущественно для виртуалок с Android x86 %) ).
# Ответить
177. DitriX 23.04.2015 14:58
(174) без понятия, надо тестировать. Но по идее - должен
# Ответить
178. s.kochnev 28.04.2015 09:21
Ещё вопрос. При использовании утилит версии 2.05 возможно как-то сделать так, чтобы фэйковые SMS не сохранялись, а в идеале даже не вызывали стандартного уведомления?
Ответили: (179) (182)
# Ответить
179. DitriX 28.04.2015 11:34
(178) А они и не вызывают :) Во всяком случае - не должны. И уж тем более не должны сохранятся.
Это просто обманка для 1С, и все. Если у вас по другому, то опишите. Но в любом случае - исправлять мы уже не будем, так как в 8.3.6 механизм уже другой, более верный. А отправку по смс - оставили только для совместимости.
Ответили: (180)
# Ответить
180. s.kochnev 28.04.2015 14:00
(179) А что тут описывать? Приходят и сохраняются %) Отправитель и содержание обычные, то есть тип события и полезная нагрузка. Возможно, я зря воду мучу, потому что это наблюдается только в одном телефоне HTC (старый One S, Android 4.1), а у них messaging app какой-то оригинальный. Настолько оригинальный, что даже поставленные в качестве костыля приложения-фильтры ничего не фильтруют.

Нежелание чинить старые костыли понятно. Жаль, что 8.3.6 пока далека от готовности к продакшену.
Ответили: (181)
# Ответить
181. DitriX 28.04.2015 20:38
(180)А, ну да. Это видать то приложение слушает все типы сообщений, посему - у вас так и получается.
У всех кто тестировал на других устройствах - замечаний не было. :)
# Ответить
182. Azathtot 01.05.2015 14:06
(178) s.kochnev, А никак. Сообщение оно либо есть, и проходит полный цикл своего существования, либо его нет.
Единственный вариант - отправлять сообщения "адресно", т.е. определенному пользователю, под которым запущена 1С. Но вот в чем беда, 1С не имеет ни малейшего понятия о пользователе, под которым она запущена, и сообщить его не в состоянии.
# Ответить
183. Azathtot 04.05.2015 10:44
Пришел к выводу, что "мобильная 1С" - тупиковый путь развития. И соответственно необходимости развивать утилиты для нее не вижу.
И вот почему.
- лозунг "Мобильная 1С == Настольная 1С". Ничего подобного. Для мобильного решения не нужны отчеты,в 99% случаев нужен справочник номенклатуры и фиксация операций из серии "пришло-отправили". Для этого достаточно простейшего, нативного (в смысле написанного для конкретной платформы) приложения, которое умеет общаться с настольной 1С. Стоимость разработки такого приложения гораздо ниже, чем стоимость разработки мобильного решения 1С. Вполне возможно, что в дальнейшем переориентируюсь на разработку "конструктора" для создания такого приложения малой кровью.
- необходимость наличия мобильного решения. Сам этот факт опровергает предыдущий лозунг. Вся идея write once - run evrywhere идет за угол покурить. Ага, давайте напишем мобильное решение, возьмем настольный ПК, подключим к нему сканер и будем ждать что это все заработает сразу...
- стоимость разработки? См. пункты выше. Т.е. стоимость владения приложения на 1С и стоимость владения "нативного" приложения будут равные.
Ответили: (184) (185)
# Ответить
184. DitriX 04.05.2015 12:11
(183) это не верный вывод, и объяснить это просто - Андроид на рынке уже не мало времени, но до сих нет обильного желания у людей создавать решения такого рода, так как тут есть ряд существенных проблем.

Мобильная 1С != Настольная 1С, об этом все и везде твердят, и теперь, наконец, разработчики начинают это понимать, так как теперь уже появились "мобильные" возможности у платформы.

в 99% случаев нужен справочник номенклатуры и фиксация операций из серии "пришло-отправили".

Это вы где такое видели? Я нигде не видел, обычно нужно минимум 5 справочников (товары, единицы, склады, упаковки, виды товаров и т.д.), минимум несколько регистров, и несколько документов. Вы не решите ни одну задачу только при помощи справочника товаров и штрихкода, разве что, то только теоретическую.

Стоимость разработки такого приложения гораздо ниже, чем стоимость разработки мобильного решения 1С.

Опять мимо, сколько будет стоить только дизайн такого решения? Я скажу - в среднем около 100$ за одну форму. И это только дизайн.
Сколько будет доработка хотелок стоить? Вот я хочу уметь делать сортировку в списке и отбор по товару?
Сколько времени надо искать адекватного андроид программиста, которому не надо будет рассказывать все с нуля, и не надо объяснять как работает адресный склад? А ну да, найти можно, а сколько стоить он будет?
Если короче, то вы сейчас говорите о своем уровне. Для вас, возможно, решать такие задачи не сложно, но тогда вы просто станете одним из поставщиков программного обеспечения, типо клевернса, агент+ и т.д., а как показала практика - это не на столько гибкие, и уж точно не дешевые системы.

Вполне возможно, что в дальнейшем переориентируюсь на разработку "конструктора" для создания такого приложения малой кровью.

Видели конструктор у клеверенса? Посмотрите, вот там пытались малой кровью, вышел бред.И вы сами прекрасно понимаете - малой кровью не дается ничего. И то. где 1С применила малую кровь, вы уже говорите что это не работает. А тут все действительно малой кровью обошлось. Я могу писать конигурацию для настольной 1С, а потом, при надобности, немного ее изменитьи она будет работать на мобильной. А как сайты щас пишут?

Вобщем можно долго и нудно говорить о всяком, но 1с еще завоюет свой рынок :)
# Ответить
185. pro1c@inbox.ru 04.05.2015 23:20
(183) Azathtot,

я к этому уже давно пришел.
все верно!
Ответили: (186)
# Ответить
186. DitriX 05.05.2015 00:22
(185) обожаю такие высказывания, особенно я их любил когда вышла 8, и все ей пророчили путь вникуда, потом когда вышли управляемые формы, потом когда такси, теперь когда вышла мобильная и вышла под эклипс :)
Я могу сказать только одно - где теперь все эти люди? Те кто принципиально не хотел работать с новыми технологиями - просто выдавливали из бизнеса.

И все равно всем приходится мириться с этим :) А 1С обильно во все новые конфигурации встраивает мобильные решения. Так что те, кто хотят придумывать свои велосипеды... ну что ж... У каждого свое право :)
Ответили: (187)
# Ответить
187. pro1c@inbox.ru 05.05.2015 20:26
(186) DitriX,
так никто не отказывается от новых технологий, просто верстать сайт на ассемблере или писать драйвера на JavaScript никому не приходит в голову!
при принятии решения разработки мобильной версии учетной системы все мои доводы будут не в пользу 1С, не потому что 1С, а потому как пользователи,
которые используют смартфон, привыкли к привычным интерфейсным решениям от гигантов Google или Apple и УВЫ !!! любые "велосипедные" решения ничего кроме
отторжения не вызывают!
И действительно, весь функционал десктопной версии приложения нафик никому не нужен на мобилках.
Нужны только те функции, которые удобны при мобильном (в "поле") использовании устройства!
Как то так...
Ответили: (188)
# Ответить
188. DitriX 06.05.2015 20:21
(187) и базы никто не пишет на 1С, для этого существует другая среда разработки. Ага. Проходили, знаем.
Чем вам не по душе интерфейс 1с? Вы можете мне показать на рынке лучшие решения? Покажите, я вам спасибо скажу.
При чем тут десктопный функционал? Вы смотрели на мобильную платформу вообще? Там же половина функций урезана, и даже та, которая нужна.
Или вы о чем?

Какие функции, из тех что есть сейчас в мобильной платформе, и даже те, которые добавляют утилиты - вы считаете не востребованными? Вот мне просто интересно. А я вам под них приведу примеры решения, и даже реализации.
Может это просто вы узко смотрите на места применения мобильной платформы?
Давайте не говорить общими словами, подпишитесь под каждым своим пунктом. А то писать все горазды. Хабр - вообще не понимает зачем надо 1с? Ну т.е. видь есть нормальные языки, чего б на них не кодить? Так и вы, только в другом уровне абстракций.
И так, готовы подписаться под каждым словом и привести конкретные примеры и обоснования?
Ответили: (189)
# Ответить
189. pro1c@inbox.ru 06.05.2015 21:57
(188) DitriX,
то, что я написал подписываюсь под каждым словом!
то, что написали Вы, УВЫ нет!
я и слова не проронил про интерфейс 1с, хотя сказать могу, дайте мне приложение для Android в "материальном дизайне", где все интуитивно понятно и легко,
а не гриды с данными, которые, кстати не рекомендуют использовать на мобилах, потому как на десктопе это удобно, на мобилах НЕТ!
Ответили: (190)
# Ответить
190. DitriX 06.05.2015 22:15
(189) ладно, этот спор надо вести за бокалом пива, а не на форуме, ибо, как говорят нас в Одессе - сколько евреев, столько и мнений :)
Так что пусть каждый останется при своем. Историки расскажут - кто был прав.
# Ответить
191. DeniNikitin (файл скачал) 15.05.2015 15:26
Здравствуйте!

При открытии формы есть следующий код:
&НаСервере
Процедура УстановитьУтилитыСервер(Знач Путь, Парам)
	Если Парам = 1 Тогда
		ПолучитьОбщийМакет("Утилиты").Записать(Путь);
	Иначе
		ПолучитьОбщийМакет("Sound").Записать(Путь);
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ПроверитьПервыйЗапуск()
	ПервыйЗапуск = Истина;
	спрПользователи = Справочники.ПользователиМобильные.Выбрать();
	Пока спрПользователи.Следующий() Цикл
		ПервыйЗапуск = Ложь;
		Прервать;
	КонецЦикла;
	Константы.ПервыйЗапуск.Установить(ПервыйЗапуск);
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ПроверитьПервыйЗапуск();
	Путь = КаталогДокументов() + "/Acode.apk";
	Файл = Новый Файл(Путь);
	Если Файл.Существует() Тогда
	Иначе
		УстановитьУтилитыСервер(Путь,1);
		ЗапуститьПриложение(Путь);
	КонецЕсли;
	
	Путь = КаталогДокументов() + "/sound.mp3";
	Файл = Новый Файл(Путь);
	Если Файл.Существует() Тогда
	Иначе
		УстановитьУтилитыСервер(Путь,2);
	КонецЕсли;
КонецПроцедуры
...Показать Скрыть

Если запускаю из мобильной платформы всё устанавливает и создаёт, а после сборки apk запускаю приложение и ничего не устанавливается и не создаётся. Может кто сталкивался с проблемой или есть другие решения?
Ответили: (192)
# Ответить
192. DitriX 15.05.2015 18:27
(191) для начала - избавьтесь от вот этого КаталогДокументов(), так как туда имеет доступ только 1с, я не знаю почему оно у вас раньше работало :)
Во первых - укажите путь, например "/sdcard/Downloads/Acode.apk".
Далее проверьте - оно выгружает утилиты и не может дальше пойти, или же, даже утилиты не выгружает. Ну и опишите подробней - где и в чем проблема?
Ответили: (193)
# Ответить
193. DeniNikitin (файл скачал) 17.05.2015 18:47
(192) DitriX,
Не выгружало и не запускало, проблема в следующем форма расположена в области рабочего стола и по видимому открытие в таком режиме не является до конца запущенным приложением. Запустил форму из при запуске системы всё отработало, но всё же не понятно почему при запуске из платформы всё отрабатывало! И ещё вопрос а Ваша утилита не умеет урезать фото?
Ответили: (194)
# Ответить
194. DitriX 17.05.2015 22:40
(193) по поводу обрезки - вам сюда http://infostart.ru/public/301851/
# Ответить
195. DeniNikitin (файл скачал) 03.06.2015 17:21
У вас написано что добавлена возможность выгрузки версия 2.07. Подскажите как реализовать при запуске загрузку при закрытии выгрузку? А то просто выход из приложения не выгружает смотрю по утилите!
Ответили: (198) (201)
# Ответить
196. DeniNikitin (файл скачал) 03.06.2015 17:23
И ещё как работать с "Добавили возможность работать с пушами 1С, теперь можно отправлять сообщения в саму базу 1с, через ее механизм локальных уведомлений." Где описание и пример можно посмотреть?
Ответили: (200) (201)
# Ответить
197. DeniNikitin (файл скачал) 03.06.2015 17:45
(114) DitriX,
Вызываю везде клиента, но на одном мобильном телефоне при свёрнутом приложении выскакивает пуш, а на другом при свёрнутом приложении не выскакивает, в чём может быть проблема? Приложение одно и код такой:
Путь = КаталогДокументов() + "/sound.mp3";
УтилитыACODEКлиент.ПроигратьЗвук("Ringtone",Путь);
УтилитыACODEКлиент.Вибрация(15);
PushДействие = "Set";
PushЗаголовок = "Новая заявка";
PushТекст = СокрЛП(Строка.Наименование) + " - " + СокрЛП(Строка.Количество);
PushОписание = "Оповещение";
PushИДСообщения = Ном;
PushНеВозможноУбрать = Ложь;
PushИконка = 2;
УтилитыACODEКлиент.ПушСообщение(PushЗаголовок,PushТекст,PushДействие,PushОписание,PushИДСообщения,PushНеВозможноУбрать,PushИконка);
...Показать Скрыть

Думал с обновлением что-то поменяется, но нет поведение такое же, проверял на трёх телефонах на двух не выскакивает пуш, на третьем без проблем!
Ответили: (201)
# Ответить
198. DeniNikitin (файл скачал) 03.06.2015 17:56
(195) DeniNikitin,
Нашёл в примере Демо конфигурации!
Ответили: (199)
# Ответить
199. DeniNikitin (файл скачал) 03.06.2015 18:03
(198) DeniNikitin,
ПриНачалеРаботыСистемы - Не запускается, ПриЗавершенииРаботыСистемы - Не выгружается!
# Ответить
200. DeniNikitin (файл скачал) 03.06.2015 18:55
(196) DeniNikitin,
Пример нашёл в демо, а как использовать к примеру с базы сервера через webservice не нашёл можно пример? Ситуация следующая: Есть база сервер опубликованная на apache, и клиент через ws-ссылки обращается на сервак, как-то можно послать мобильному приложению сообщение?
Ответили: (201)
# Ответить
201. DitriX 03.06.2015 23:00
(195) смотрите в обработке утилит, там есть код:
&НаКлиенте
Процедура ОстановкаУтилит(Команда)
	//Если есть виджеты - то остановка не сработает.
	Сервис = Новый Соответствие;
	Сервис.Вставить("Service", "Halt");
	
	УтилитыACODEКлиент.ВыполнитьИнтенты(Сервис);
КонецПроцедуры


&НаКлиенте
Процедура ЗапускУтилит(Команда)
	//Просто что-то дергаем чрез интенты.
	УтилитыACODEКлиент.ПолучитьДанныеОбУстройстве("version")
КонецПроцедуры
...Показать Скрыть

(196) вкладка Оповещение, в той же обработке.
(197) проверьте вот этот код:
&НаКлиенте
Процедура ПримерСложногоСкрипта(Команда)
	Массив = Новый Массив;
	Массив.Добавить(УтилитыACODEСлужебный.СформироватьСтруктуруТоастСообщения("Сейчас выполняется сразу 4 операции"));
	Массив.Добавить(УтилитыACODEСлужебный.СформироватьСтруктуруПушСообщения("Некий пуш","Это 2 операция"));
	Массив.Добавить(УтилитыACODEСлужебный.СформироватьСтруктуруДляВибрации(500));
	Массив.Добавить(УтилитыACODEСлужебный.СформироватьСтруктуруДляПроигрыванияЗвуков("Sound","Balloon"));
	УтилитыACODEКлиент.ВыполнитьИнтенты(Массив);
КонецПроцедуры
...Показать Скрыть

Кнопка в обработке - Помощь - Тест - кнопка Пример сложного скрипта.
(200) если он уже обращается к серваку - то смысл оповещать устройство о чем то? А вообще - можно, то смотрите видео, там про это есть. Есть разные варианты оповещения - через GCM и через веб-сервер утилит, для этого надо передать в него ID и IP знать надо.
Ответили: (202) (204)
# Ответить
202. DeniNikitin (файл скачал) 04.06.2015 06:08
(201) DitriX,
На кнопках я разобрался как останавливать и запускать, не получается атоматизировать ПриНачалеРаботы и ПриЗавершенииРаботы!
Ответили: (203)
# Ответить
203. DitriX 04.06.2015 11:38
(202) ну значит 1С закрывается раньше, чем отрабатывает эта команда, попробуйте задержку вставить.
# Ответить
204. DeniNikitin (файл скачал) 04.06.2015 17:01
(201) DitriX,
&НаКлиенте
Процедура ПримерСложногоСкрипта(Команда)
    Массив = Новый Массив;
    Массив.Добавить(УтилитыACODEСлужебный.СформироватьСтруктуруТоастСообщения("Сейчас выполняется сразу 4 операции"));
    Массив.Добавить(УтилитыACODEСлужебный.СформироватьСтруктуруПушСообщения("Некий пуш","Это 2 операция"));
    Массив.Добавить(УтилитыACODEСлужебный.СформироватьСтруктуруДляВибрации(500));
    Массив.Добавить(УтилитыACODEСлужебный.СформироватьСтруктуруДляПроигрыванияЗвуков("Sound","Balloon"));
    УтилитыACODEКлиент.ВыполнитьИнтенты(Массив);
КонецПроцедуры
...Показать Скрыть

Тоже не помогло, не пойму почему на одном всё корректно отрабатывает, на других нет! Наверное что-то с андроидами связано или настройками!
Ответили: (205)
# Ответить
205. DitriX 04.06.2015 18:32
(204) посмотрите, как вариант в настройки приложения, Настройки - Приложения - Acode утилиты - проверьте стоит ли галочка "Включить уведомления"
Ответили: (206) (207) (208)
# Ответить
206. DeniNikitin (файл скачал) 04.06.2015 19:15
(205) DitriX,
Всё стоит! Просто сейчас на семи телефонах проверил на двух только отработало! Может я чего ни так делаю, хотя после установки "открыть" нажимаю!
Ответили: (209)
# Ответить
207. DeniNikitin (файл скачал) 04.06.2015 19:15
(205) DitriX,
Везде андроид 4.0 - 4.4
# Ответить
208. DeniNikitin (файл скачал) 04.06.2015 19:16
(205) DitriX,
Для 2.... не тестировал даже!
# Ответить
209. DitriX 04.06.2015 23:17
(206) я даже не знаю что сказать, так как на всех устрйоствах которых я пробовал, знакомые и клиенты - такого не было 100%.
Можете рассказать на каких моделях не работает?
Попробуйте скачать обновленный файл. Сейчас обновил к статье.
Ответили: (210) (217)
# Ответить
210. DeniNikitin (файл скачал) 05.06.2015 09:25
(209) DitriX,
Просто обновить макет вашим новым apk?
Ответили: (211)
# Ответить
211. DitriX 06.06.2015 14:48
(210) можно и так, а можно просто установить на теелфон
# Ответить
212. M.Shalimov (файл скачал) 09.06.2015 16:42
Дмитрий, добрый день!
Большое спасибо за полезные статьи и полезный в работе инструмент.

Возможна ли локализация Acode tools на английский язык, что бы неподготовленные пользователи не боялись кириллицы?

В нашей разработке Ваши инструменты скорей всего пригодятся, но отсутствие локализации пока сильно мешает. Готов помочь с переводом, если требуется.
Ответили: (213)
# Ответить
213. DitriX 09.06.2015 17:05
(212) вы имеете в виду что локализовать? Просто описание и прочее? Видь сами утилиты, когда используются в конечной среде - скрываются от пользователя, они даже значек в панеле уведомления не увидят. А в настройки и подабно лезть не будут. Функции все - на инглише.
Так что вы уточните что вы хотите локализировать :)
# Ответить
214. DeniNikitin (файл скачал) 10.06.2015 16:03
Здравствуйте!

Загрузил ваш новый перезалитый apk в шаблон своей конфы при запуске пишет:Ошибка при синтаксическом анализе пакета! Как поправить, т.к. установка должна производится из 1с?
Ответили: (215)
# Ответить
215. DitriX 10.06.2015 16:31
(214) DeniNikitin, такое бывает если файл поврежден. Попробуйте перезагрузить в конфу этот файл. А для начала - вообще отделньо поставить, вне 1с, может с браузера не удачно скачался.
Ответили: (216)
# Ответить
216. DeniNikitin (файл скачал) 10.06.2015 17:40
(215) DitriX,
Действительно браузер скачал 200 кб, из-за этого и не пошло!
# Ответить
217. DeniNikitin (файл скачал) 10.06.2015 19:41
(209) DitriX,
Завтра запишу видео и характеристики телефонов, чтобы сам убедился! Сегодня опять начал проверять и только на одном работает в видео сделаю сначало все настройки, потом запуск приложения и.т.д.!
# Ответить
218. DitriX 12.06.2015 14:11
(217) Давайте так - вы снимите логи и скиньте мне. Я не исключаю ошибок, но надо понять - где они.
Вот тутрассказывается как снять логи. Ищите команду Logcat, если телефон рутованый, то можно скачать вот эту программу , дать ей рут.
После получения файла лога любым способом - удостоверьтесь что в файле есть упоминания про acode, прям поиском. А то скините пустой лог, и буду просить повторно :)
Можно логи со всех устройств, вдруг ошибки разные.
Ответили: (219)
# Ответить
219. DeniNikitin (файл скачал) 15.06.2015 18:11
(218) DitriX,
Хорошо попробую!
# Ответить
220. flyer (файл скачал) 03.09.2015 11:47
Ditrix если не сложно напишите как все таки можно с помощью Acode прочитать штрихкод со сканера в режиме клавиатуры?
Ответили: (221)
# Ответить
221. DitriX 03.09.2015 15:03
(220) не понял вопроса.
# Ответить
222. flyer (файл скачал) 08.09.2015 06:56
подключаем 1d ручн.сканер к телефону и необходимо считывать в программе все штрихкоды. если можно без вывода диалоговых окон.
# Ответить
223. DitriX 08.09.2015 10:13
Ну так сканер какой? блютуз? или USB? Если USB, то мы этого не делали. А если блютуз, то смотрите пример прям в этой конфе. Там никаких окон, все идет внешними событиями
# Ответить
224. flyer (файл скачал) 08.09.2015 14:31
да usb. просто в демоконфе в коде нашел "1d" думал что есть возможность. в будущем планируете добавить? функция не сложная а удобство для многих.
# Ответить
225. AlexBar (файл скачал) 09.09.2015 09:50
(169)
День добрый.
Android 4.2.2, 1С 8.3.6.201. Версия утилит - последняя. Сканер Cipherlab 1660, подключен по блютуз SPP Slave. Утилиты установлены и запущены. В демо конфигурации, в обработке тестирования блютуз сканеров он в списке так и не появляется. Что не так, куда смотреть?
Ответили: (226)
# Ответить
226. DitriX 09.09.2015 15:11
(225) Все очень просто, откройте обработку ТестированиеСканеров, откройте форму, найдите элемент формы Сканеры и установите свойство ЗапросОбновления - Потянуть сверху.
Обновите конфу на мобильном устройстве и зайдите в форму, потяните список вниз, для обновления и все будет ок.
Это ли я не поставил запрос на обновление, или не верно конвертнулась конфа.
Ну или просто вынесите код функции ПолучитьСписокСканеров на отдельную кнопку.
Ответили: (227)
# Ответить
227. AlexBar (файл скачал) 09.09.2015 16:59
(226) DitriX, После простоя сканера, при повторном подключении получаем ошибку утилиты 7. Приходится перезапускать утилиты.
Ответили: (228)
# Ответить
228. DitriX 09.09.2015 22:09
(227) AlexBar, ну тут да. Ставьте время отключения больше.
Тут все сложно с блютузом. Что бы обрабатывать переподключения - надо слишком много кожа писать и отлавливать это все. Тем более многое зависит от прошивки и сканера. Тоже самое с расстояниями. Т.е. Вместо простого поручения данных, надо ещё и постоянно мониторинг делать доступности, что усложняет задачу и садит батарею. Так что проще вывести кнопку, которая будет переподключать сканер. Так что как то так.
Ответили: (229) (231)
# Ответить
229. AlexBar (файл скачал) 09.09.2015 22:43
(228)
Тут стоит вопрос не только переподключения сканера, но и перезапуска утилит.
Ответили: (230)
# Ответить
230. DitriX 10.09.2015 11:37
(229) не перезапустить утилиты можно, для этого их достаточно остановить специаальной коммандой.
Т.е. вас по факту интересует только стоп, а когда вы вызовите переподключение - утилиты сами стартанут.
# Ответить
231. AlexBar (файл скачал) 10.09.2015 13:21
(228)
DitriX, проблема появляется и без простоя сканера. Подключаем сканер. получаем сигнал от сканера об успешном подключении. Далее нажимаем на отключение сканера. Внешне ничего не происходит. Снова нажимаем Подключить, вываливается ошибка утилиты 7.
Мы решили обойтись без кнопки и сделать так, как делается во всех конфах при работе с ТО: при открытии нужной формы подключаем ТО, при закрытии формы отключаем ТО.
Вот только возникла проблема с повторным подключением сканера.
Создается впечатление что сканер не отключается, поэтому и возникает ошибка при повторном подключении.
Чего еще не хватает: если сканер находится в спящем режиме, то при подключении выпадает ошибка утилиты 6. Хотелось бы чтобы в 1С пришло извещение об этой ошибке, чтобы выдать предупреждение пользователю о том, что необходимо активировать сканер. Так же если бы ошибка 7 приходила бы в 1С, то при попытке повторного подключения, получив эту ошибку, мы бы понимали что сканер уже подключен.

После команды на отключение сканера он отключается только после первого же сканирования. После этой операции сканер повторно подключается без проблем. Т.е. без сканирования он не отключается. Считаю это ошибкой.
Ответили: (232)
# Ответить
232. DitriX 10.09.2015 17:47
(231) увы, боюсь что тут ничем помочь не можем, мы эту функцию вообще реализовали, что называется - на коленке, для того, что бы люди которые считают что модель сканер + телефон - живая модель.
Конкретно с этим функционалом, мы не претендуем на 100% работоспособность, в силу причин описанных выше, плюс, те проблемы, которые вы описали, это только не значительная часть проблем, которые вас могут поджидать на данном пути.

Если бы мы делали простое приложение, нативное, то все было бы проще и стабильнее (из-за того, что утилиты могут перезагружаться, если андроид решит, что ему мало памяти и убъет их, а это проблема всех слабых устройств). А так как это все должно быть в связке с 1С - то проблем немерянно. Если нативное решение - оно открыто, андроид его не убъет, так как оно активно и вы с ним работаете, а сервис (чем и являются утилиты) - это андроид может запросто грохнуть, и тогда утилиты перезагрузятся. Для всего функционала, кроме блютуз сканера - это не проблема, так как там нигде не надо держать открытое соединение, и даже если утилиты перезагрузятся, то ничего страшного не будет, но не с блютузом. Был бы у всех блютуз 4.1, то может и проблем было бы меньше, там не надо вечно открытый канал, то такой блютуз не используется в сканерах, и его практически нет, пока, на телефонах.

Так что боюсь - наше решение (конкретно модуль сканирования в связке с блютуз), скорее просто демонстрационное.

И заниматься мы этим врядли будем, так как все силы брошены на терминалы сбора данных на Андроиде, в которых сканер уже встроен.

Так что у вас по сути два варианта - или использовать то, что есть, или же нанять андроид разработчика который сделает все "как надо" с учетом всех ваших особенностей.

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

Потому что редко кто доходил до вашей стадии, обычно все бросали всё это на этапе пересопряжения, и переходили на терминалы, так как в итоге - выходит дешевле (как финансово, так и трудозатрат).
Ответили: (233) (234)
# Ответить
233. AlexBar (файл скачал) 10.09.2015 17:56
(232)
Какой командой из 1С можно перезагрузить утилиты?
# Ответить
234. AlexBar (файл скачал) 11.09.2015 10:27
(232)
Нам удалось разобраться с перезапуском утилит.
В результате мы реализовали связку планшет+сканер. Еще раз большое спасибо авторам разработки.
Конечно можно спорить на тему того что лучше использовать: терминал сбора данных или планшет+сканер. К примеру кладовщик получает задание на отгрузку ряда товаров, идет с ТСД по складу, собирает товар и сканирует его. На определенном этапе ему необходимо проверить все ли он собрал из списка. В тех ТСД. что у нас имеются, нужно просматривать каждую запись из списка чтобы увидеть "отметилась" она или нет, потом искать по складу то, что не отмечено. Возможен другой вариант: кладовщику дали бумажную накладную, он собирает товар, сканирует его и параллельно отмечает в накладной что собрал? Ну это несколько через... Если смотреть образцы новых терминалов, то даже если у терминала 5-ти дюймовый монитор просматривать на нем список, когда номенклатура ведется и по характеристикам и по сериям, достаточно неудобно, мелковато. Я не претендую на истину, так как не имел дело с андроидными терминалами. У нас же сбором продукции занимается кладовщик-карщик. Планшет закреплен на самой каре, там же и запитан. От логистов кладовщик получает на планшет разнарядку на отгрузку, в которой указан список всех товаров, номер машины для погрузки, номер стоянки, где находится машина. отгрузка началась, кладовщик сканирует погруженный в машину товар сканером, в планшете все это отмечается. В процессе погрузки кладовщик без дополнительных манипуляций видит на экране что погружено. что осталось погрузить и где это находится. После завершения погрузки он отмечает разнарядку как выполненную и она по wi-fi тут же попадает в центральную базу. Логист получает извещение о том. что такая-то машина загружена. Накладная уже готова, так как получена от кладовщика. Логист отправляет смс водителю о том, чтобы отъехал от рампы и подошел за товаросопроводительными документами. Я понимаю что все разнарядки, документы, списки товаров можно сделать на ТСД, но размеры экранов и цены на более менее качественные ТСД отпугивают.
К тому же мы используем не бытовые планшеты, а специализированные, защищенные (TOREX PAD2) + сканер cipherlab 1661.
Возможно я просто не верно понимаю как правильно организовывать работу с ТДС.
Еще раз спасибо автору за разработку.
Ответили: (235)
# Ответить
235. DitriX 11.09.2015 11:31
(234) AlexBar, ну да, в вашей специфике - действительно, это самое оно будет, и не поспоришь.
Ну раз все таки удалось запустить утилиты и они работаю - тогда отлично :)
Расскажите потом через месяц - как успехи, если не сложно.
Ответили: (236)
# Ответить
236. AlexBar (файл скачал) 11.09.2015 11:40
(235) DitriX, Если не забуду. :) После реализации спарки планшета со сканером решена самая больная тема. Далее будем только расширять возможности.
Вот мы в теме сетовали на то, что данные механизмы не реализованы в самой мобильной платформе, при этом все забывают о том, что и "стационарная" 1С не работает ни с портами, ни с торговым оборудованием напрямую. Для всего этого создаются внешние обработки для работы с торговым оборудованием и драйвера, для взаимодействия оборудования с обработкой. Ваша утилита по сути и есть и драйвер и внешняя обработка для работы со сканером (один из функционалов утилиты). Большое вам спасибо за нее. Надеюсь что у вашей команды все же дойдут руки и до исправления ошибок и до расширения функциональности (usb сканер). Тогда в некоторых случаях можно удешевлять стоимость оборудования. Планшет на ремне + usb сканер в руках, чем не ТСД? :)
# Ответить
237. maxx 28.09.2015 16:08
Можно ли с помощью ваших утилит как-то запустить вспышку при фотографировании?.
Т.е. есть мобильное приложения на 8.3.5 делаем фото , но нужно в этот момент вспышка
Ответили: (239)
# Ответить
238. Leport (файл скачал) 07.10.2015 13:08
При подключении Cipherlab 1661 первый раз тестирование сканеров заработало. После этого пытался подключить сканер снова, все время выдает ошибку 6, хотя сканер подключен в режиме SPP. Тестировал Bluetooth Tedrminal. Пробовал ставить утилиты 2.08. Безрезультатно.
Ответили: (239)
# Ответить
239. DitriX 07.10.2015 19:24
(237) используйте просто нормальную программу для фото, например, focal или типо того.
(238) это ошибка //E_HARDWARE_NOT_SUPPORTED = 6; Описание ошибок доступны в модуле, в самом верху.
Почему возникает такая ошибка - сказать сложно, поспроизвести ее не выходит.
Попробуйте переустановить утилиты, если это не поможет, то дело не вних, а в неких настройках самого устройства, например, защита на устройстве стоит, которая блокирует утилиты или еще чего то, тут уже не скажу. Вы хоть данные воодные даные, типо модели, версии андроида и т.д.
# Ответить
240. flyer (файл скачал) 28.10.2015 12:04
подскажите хотим попробовать возможность вызова методов на моб.приложении из конфигурации 1с. т.е. например записываем документ и на моб.устройствах выполняем синхронизацию для получения этого документа. устройства будут обмениваться внутри одной сети. я так понимаю ваш механизм отработает в такой схеме. а если например устройства не одной сети и база смотрит наружу так получиться?
Ответили: (241)
# Ответить
241. DitriX 28.10.2015 19:04
(240) flyer, начиная с 8.3.6 - этот функционал уже не нужен особо, так как появились глобальные уведомления, вот в их сторону и копайте.
# Ответить
242. rhtr (файл скачал) 06.11.2015 22:27
Ещё бы добавить функционал создавать текстовый файл (Новый ТекстовыйДокумент).
Но и без этого очень хорошо.
Ответили: (244)
# Ответить
243. vervolf9 07.11.2015 11:28
Bluetooth сканер motorola cs3000 протестирован, все работает. Нужно предварительно перевести его в режим Serial Port Profile (SPP). В инструкции все есть. Спасибо за набор инструментов.
Ответили: (244)
# Ответить
244. DitriX 07.11.2015 13:27
(242) rhtr, Зачем? Эта функция есть в мобильной, называется ЗаписьТекста
(243) не за что.
# Ответить
245. Leport (файл скачал) 16.11.2015 10:42
Подключить ChipherLab 1661 к утилитам ACDE Tools на Android 4.2.1 удалось, но вот на Android 5.1 даже с использованием утилит ACodeTool (Android 5) 1.apk выдает ошибку 6. (устройство не поддерживается). Возможно ли подключение сканера на Android 5.1?
Ответили: (246)
# Ответить
246. DitriX 16.11.2015 16:13
(245) Leport, Увы, в наличии нет устройство с такой версией Андроид. Кроме этого - просто нет времени. Как только появится и то и другое - мы попробуем исправить.
# Ответить
247. Tahallus (файл скачал) 23.11.2015 17:18
Если на аппарате есть клавиши, цифровой блок, F1, F2, можно ли как-то отслеживать их нажатие ?
Ответили: (248)
# Ответить
248. DitriX 27.11.2015 18:30
(247) уже можно, для 401 и 420
# Ответить
249. latviano 30.11.2015 13:27
Подскажите полажуйста, как можно отловить момент сканирования со встроенного сканера?
У нас сканер Honeywell CT-50 на android 4.4.4 и хотелось бы без поля ввода сканировать.
Спасибо!
Ответили: (250)
# Ответить
250. DitriX 30.11.2015 19:45
(249) latviano, очень просто - написать свой модуль сканирования для терминала, где реализовать весь тот же функционал, что и в терминалах Acode :)
У каждого терминала свои api работы, поэтому наши модули не подойдут, а acode tools - вообще не преднзначена для этих целий, они умеют работать только с блютуз.
# Ответить
251. DKuzmin33 (файл скачал) 29.12.2015 10:37
я так понимаю в данной конфиге нереализовано чтение ID метки? я прав?
Ответили: (252)
# Ответить
252. DitriX 29.12.2015 17:39
(251) вы про NFC? Если да, то верно, стандарты есть разные, если надо под конкретный стандрат - то пишите какой, и мы доработаем
# Ответить
253. dj_serega (файл скачал) 08.02.2016 23:38
Какая-то лажа... Все работало отлично. Пришел новый планшет на android 4.4.4. Методом тыка выяснилось что ошибка на:
Соединение = Новый HTTPСоединение(АдресСервера, ПортСервера,,,,35);

Выпадает в исключение:
	Исключение
		Уведомить("Не удалось установить соединение с сервером");
		Возврат Неопределено;
	КонецПопытки;


upd: уже и перезагружал, и скачал новую версию acode, и проверял обновления, и переустанавливал 1С с приложением... Вообще никак :(
# Ответить
254. DitriX 09.02.2016 14:15
Проверьте - порт цифрами написан? А то 1с раньше переводило строку в число, а с какой то вресии перестало.
Это раз. Два - убедитесь что утилиты запущены и работают через намерения. Три - установите телнет клиент и попробуйте подключится через него.
Четыре - убедитесь что адрес введенный вами существует. Локаьный адрес может быть localhost, 127.0.0.1, [::] и т.д., т.е. в хзависимости от прошивок и настроек.
Попробуйте подключить wi-fi и указать адрес устройства.
Ответили: (255)
# Ответить
255. dj_serega (файл скачал) 10.02.2016 00:03
(254) DitriX, Забыл уточнить это я на ftp пытаюсь отправить данные.

upd: Это строки с модуля подключения (я cf акода не менял):
АдресСервера = "127.0.0.1";
ПортСервера = "8090";


upd2: Помогло. Написал "ПортСервера 8090". Жесть.
Проверьте - порт цифрами написан? А то 1с раньше переводило строку в число, а с какой то вресии перестало.

Может стоит обновить публикацию?

upd3: платформу не менял. Как была 8.3.6.182 так и осталась.
Ответили: (256)
# Ответить
256. DitriX 11.02.2016 15:17
(255) обновили утилиты, проверьте теперь
# Ответить
257. vervolf9 16.02.2016 15:09
У меня не открывается приложение Acode tool, журнал ошибки и информацию об устройстве прилагаю. Прошу помочь.

Журнал ошибки:
java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.acode.supporttool/ru.acode.ui.Main}: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=ru.acode.1c.service }
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2464)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2526)
at android.app.ActivityThread.access$800(ActivityThread.java:169)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5549)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)
Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=ru.acode.1c.service }
at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:1795)
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1824)
at android.app.ContextImpl.startService(ContextImpl.java:1808)
at android.content.ContextWrapper.startService(ContextWrapper.java:515)
at ru.acode.ui.Main.onCreate(Main.java:51)
at android.app.Activity.performCreate(Activity.java:5975)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
... 10 more
Ответили: (261)

Прикрепленные файлы:

Screenshot_2016-02-16-14-06-27_com.android.settings.png
# Ответить
258. bb2005 (файл скачал) 16.02.2016 15:57
Добрый день.
Заинтересовала ваша статья... но т.к. я не программист, а обычный менеджер то прежде чем дать задачу нашему отделу IT хочу предварительно выяснить один вопрос:
цель производить сканирование используя камеру телефона.
- для работы используется мобильное приложение на Андроид 1 С Предприятие 8.3 (телефоны на андроид 5.1)
- т.к. внутренний сканер работает не важно использовали сцепку с "мобильными утилитами" с ресурса http://курсы-по-1с.рф/мобильная-платформа/мобильная-утилита/
но сканер встроенный в утилиту не совсем подходит...
- теперь собственно вопрос: можно ли используя приложение Acode использовать для сцепки по аналогии выше но с другим маркетным приложением (например https://play.google.com/store/apps/details?id=com.scandit.demoapp&hl=ru)

Спасибо за ответ.
Ответили: (259) (260)
# Ответить
259. vervolf9 16.02.2016 16:26
(258) bb2005, Можно использовать сторонние программы.
# Ответить
260. DitriX 16.02.2016 19:35
(258) bb2005, вам сюда http://курсы-по-1с.рф/1c-v8/1c-mobile-2016/.
Там так раз поднимается такая тема, можете посмотреть пару видео, т.е. задача которую вы описали - это частный случай. Но в целом - можно, но можно ли именно то приложение - не знаю, надо его анализировать, и для его запуска вам даже утилиты не потребуются.
Часть информации есть еще тут http://infostart.ru/public/301851/
# Ответить
261. DitriX 16.02.2016 19:37
(257) vervolf9, сомнительно что мы тут поможем, так как с вашей оболочкой - вечно какие то приколы :) Но мы посмотрим.
Ответили: (262)
# Ответить
262. vervolf9 17.02.2016 11:17
(261) DitriX, Спасибо большое, как то неожиданно подкрался косяк. Я окончил уже курс http://курсы-по-1с.рф//1c-mobile-2016/ - очень полезен и понравился, сейчас прохожу по КД 3.0.
Данное мобильное устройство, а именно: Xiaomi Redmi Note 2 как раз подходит для целей написания и использования мобильных приложений на 1С. Прошу помощи. Хотя Acode tools мне нужен только для работы с мобильным сканером CS3070. Может поможете куда копать что использовать мобильное приложение 1С со сканером в режиме SPP .

P.S. Опубликуйте, пожалуйста, последнюю версию по адресу: http://acode.pro/upload/1cema.xml .
Ответили: (263)
# Ответить
263. DitriX 17.02.2016 13:36
(262) vervolf9, ничего обещать не могу, для решения проблемы - надо купить устройство с MIUI на борту, а у нас весь этот проект и так идет одним большим минусом :)
Ответили: (264) (265) (266)
# Ответить
264. vervolf9 17.02.2016 13:43
(263) DitriX, Может я могу помочь? В режиме реального времени, готов тестировать, ставить, снимать отчеты. Все что будет нужно. Уж очень обидно...
# Ответить
265. vervolf9 17.02.2016 13:45
(263) DitriX, Или может куском кода можете поделиться с приложения Acode или направить как со сканером этим связать работу в 1С.
# Ответить
266. vervolf9 17.02.2016 14:04
(263) DitriX, Методом тыка проб и гугла нашел новую версию по адресу http://acode.pro/forum/forum6/topic339/ 2.0.9. Приложение не крашится. Но теперь на форме не отлавливается обработка оповещения. Помогите, пожалуйста.
Ответили: (267)
# Ответить
267. vervolf9 17.02.2016 16:01
(266) vervolf9, Все получилось. Натупил с выбором баз при подключении к сканеру.
Итоги: Xiaomi Redmi Note 2 с MIUI работает стабильно с версией Acode tools 2.09.

Спасибо Вам и мне.
# Ответить
268. vervolf9 17.02.2016 18:03
Новый вопрос:
Код подключения сканера:
Сервис = Новый Массив;
	ПараметрыДанных = Новый Соответствие;  
	ПараметрыДанных.Вставить("Service","BTReader");
	ПараметрыДанных.Вставить("Address",ТекСтр.Адрес);
	ПараметрыДанных.Вставить("Action","Start"); 
	ПараметрыДанных.Вставить("SMS",Ложь); //Указываем, что работаем через смс
	ПараметрыДанных.Вставить("Notify",Истина); // указываем, что работает через локальные уведомления
	//ИД = ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений().ИдентификаторИнформационнойБазы;
	//УтилитыACODEКлиент.ТоастСообщение(Строка(ИД));
	ПараметрыДанных.Вставить("BASE",БазаДанных); //указываем, если используем больше чем одну базу на устройстве
	
	Сервис.Добавить(ПараметрыДанных); 	
	УтилитыACODEКлиент.ВыполнитьИнтенты(Сервис);
...Показать Скрыть


Как указать в сервисе для данного приложения событие (использую скомпилированное приложение).
Так как в итоге через тестирование сканеров получаю сообщение параметра (во вложении)
Ответили: (269)

Прикрепленные файлы:

Screenshot_2016-02-17-16-57-36_ua.chemelements.sklad.arm.sklad.chem.png
# Ответить
269. DitriX 17.02.2016 19:27
(268) ограничение на - только одну платформу 1С на устройстве. Увы. Так что снесите платформу для разработчиков и оставьте одну :) И смотрите на путь получения списка баз, по умолчанию он берется отсюда:

Процедура ПрочитатьДоступныеБазы()
	ДанныеОБазах = Новый ЧтениеТекста ("/data/data/com.e1c.mobile/files/1C/1cem/ibases.v8i");
Ответили: (270)
# Ответить
270. vervolf9 18.02.2016 11:27
(269) DitriX, Да, спасибо. Все заработало.
Две платформы не учел и в управляемом приложении при начале работы системы указал:
УтилитыACODEМодульДляОповещений.ПодключитьГлобальноеСобытиеОповещения()


Спасибо.
# Ответить
271. Justindj (файл скачал) 27.02.2016 17:02
Привет. Помогите кто нибудь пжл, борюсь уже не первый день. В 1С получилось отправить пуш сообщение и загрузке из центральной базы новой заявки, но вот как теперь открыть этот документ из пуш сообщения???
# Ответить
272. bgxz 03.03.2016 16:03
Добрый день!
Хотелось бы узнать вот какую вещь. Когда в 1С на ТСД Acode (421) происходит запуск приложения "ru.acode.support.1c" оно постоянно мониторит состояние сканера? Суть вопроса - можно отключить данное приложение, скажем, в целях экономии ресурсов? Т.е. не просто не обрабатывать оповещение, а именно, чтобы не было самого оповещения.
Ответили: (273) (274)
# Ответить
273. DitriX 03.03.2016 19:19
(272) не понятно с какой целью? Это приложение висит в службах, и его задача - ретрансляция события сканера в 1С.
Больше оно ничего не делает. выключив его - вы ресурсы не освободите.
Отвечая на ваш вопрос - да, его можно отключить, и даже удалить, если под рутом сделать, но учтите - тогда в 1с ничего не будет транслироваться.
Если вы не используете 1С, то разницы вы не должны заметить.
# Ответить
274. DitriX 03.03.2016 19:22
(272) плюс не понятно про какое оповещение вы говорите :) Он делает глобальные (броадкаст) оповещения, но вы их просто так никак не увидите.
Единственное, что вы можете увидить - это оповещения в виде пушей от 1С, когда она свернута или закрыта.
Но это особенности 1С, и вы от них никуда не денетесь.
С другой стороны - их можно отключить, зайдя в настройки приложения 1С и поставив галочку - блокировка уведомлений.
Но в этом случае - вы не увидите вообще никаких уведомлений в строке состояния, даже те, которые вам могут быть нужны
Ответили: (277)
# Ответить
275. dj_serega (файл скачал) 08.03.2016 17:29
а где apk? :(
Ответили: (276)
# Ответить
276. DitriX 08.03.2016 23:18
(275) в конфигурации, в макете :)
# Ответить
277. bgxz 09.03.2016 10:12
(274) Понятно. Просто мне думалось, что эта компонента кушает память. И хотелось ее отключать, когда нет в этом необходимости.
Что ж, спасибо за ответ.
# Ответить
278. Vo-Va (файл скачал) 16.03.2016 18:17
В приложении "Acode: Инструменты" произошла ошибка.

Nexus 5, версия андроид 6.0.1

Печаль(. Очень нужна работа с блютуз сканером.
# Ответить
279. iliabvf (файл скачал) 18.04.2016 12:07
Планируется ли поддержка Android 6.0.1 ?
Спасибо.
Ответили: (280)
# Ответить
280. DitriX 19.04.2016 19:20
(279) iliabvf, пока нет. У нас просто нет устройств для теста :( А наше оборудование максимум на 5.1 андроиде. Поэтому это пока не приоритетная задача, но если сильно хотите помочь - можете скинуть логи ошибок, посмотрим что можно сделать.
# Ответить
281. SyachinS 25.04.2016 16:27
Android 5.0.2, LG D618, при запуске приложение крешится без отображения ошибок.
# Ответить
282. adnvl 27.04.2016 09:15
Будет ли работать расширение возможностей на Android 2.3 ? А есть в наличии вот такой ТСД. но на нем эта компонента не работает, может есть версия Acode tools которая работает с Android 2.3. Заранее спасибо!
# Ответить
283. begemot (файл скачал) 03.05.2016 14:31
DitriX, во-первых огромное спасибо за очень полезный материал!

Подскажите, не могу сообразить, возможно ли с помощью вашей утилиты сделать "ОбработкуВнешнегоСобытия" ?
А конкретнее, - есть ТСД с сканером ШК. Есть мобильное приложение 1С. Сканер считывает штрихкод в буфер и вставляет данные в виде строки. Но делает он это только в строковое поле! Т.е. если курсор находится не в строковом поле, то 1С никак не реагирует на сканирование.
Хотелось бы, отловить Внешнее событие, понять, что это сканер ШК, прочитать данные, и дальше уже выстроить логику работы программы.
Ответили: (284)
# Ответить
284. DitriX 03.05.2016 17:57
(283) увы, такого сделать не выйдет просто так, в случае наших ТСД Acode - нам пришлось написать саппорт модули под каждую модель отдельно, для того, что бы работало как внешнее событие.
С помощью утилит - вы это очень врядли сделаете.
Там очень многое зависит от методов, которые использует производитель. Иногда то броадкасты, иногда события клавиатуры, иногда - еще какая то хрень.
Так что увы... Но тут мы вам не поможем.
# Ответить
285. vpaull (файл скачал) 24.05.2016 13:23
Проблема с плагином FTP - в плагине используется режим общения с сервером Mode B, который в свою очередь не поддерживается практически ни кем из серверов. Написать свой плагин - проблема - надо подключать внешнюю библиотеку. Кто-нибудь изменял режим работы FTP Клиента?
# Ответить
286. clev 26.05.2016 15:27
С нетерпением жду версию с поддержкой Android 6.0.1!
# Ответить
287. Orgalit (файл скачал) 15.06.2016 15:47
Добрый день!

Поддерживается ли в Acode tools работа с sftp?
Ответили: (288)
# Ответить
288. ksvd 17.06.2016 11:03
(287) Orgalit, Да, две функции Отправить на ftp и получить с ftp.
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл






IE 2016