Внешняя компонента для мобильного приложения

Публикация № 1544296 02.11.21

Приемы и методы разработки - Разработка внешних компонент

внешняя компонента Android мобильное приложение

Внешняя компонента для дополнения мобильной платформы некоторыми функциями.

ВК имеет следующие функции:
1. Перехват широковещательных сообщений ОС андроид по заданному фильтру и ключу данных (extras).
2. Получать ИД устройства (с 10 версии ОС это не аппаратный ИД - https://developer.android.com/training/articles/user-data-ids).
3. Получать архитектуру процессора устройства (ABI - в терминологии ОС Android).
4. Сжимать (и разжимать обратно:)) двоичные данные (Deflate).
5. Сжимать файлы (Deflate).
6. Распознавать штрихкод с картинки (zxing).
7. Изменять разрешение и качество картинки.
8. Работать с файловой системой средствами ядра linux.
8.1. Возвращать массив объектов в заданной директории
8.2. Проверять, директория-ли объект файловой системы
8.3. Удалять объект файловой системы
8.4. Создавать файл
8.5. Создавать директорию
8.6. Писать двоичные данные в файл
8.7. Читать двоичные данные из файла
8.8. Переименовывать объект файловой системы
8.9. Проверять на существование объекта файловой системы
9. HTTP - сервер. (Прием входящих POST и PUT запросов и обработка запросов на стороне 1с (через внешнее событие). Ответ на запрос формируется в коде 1с).

10. Отображать производителя и модель устройства.

11. Получать геоданные устройства.

 

Функции из п.п. 1-7, 10 используются в бою длительное время, т.е. протестированы основательно. Другие - просто протестированы.

Тестирование производилось на платформах 8.3.19.51, 8.3.18.60, 8.3.20.40.

Работа компоненты на версиях OS и архитектурах:

ARM 5.1
x86 5.1
ARM64 8
x86_64 8

 

Описание функций.

//--------Установка компоненты--------//
УстановитьВнешнююКомпоненту("ОбщийМакет.TestPro");
ПодключитьВнешнююКомпоненту("ОбщийМакет.TestPro", "Component", ТипВнешнейКомпоненты.Native);
ВК = Новый("AddIn.Component.Hermes");
//---------------------------------------------------------------------------//
//ЗапуститьПерехватБроадкастов//
//Может перехватывать любой броадкаст с известным фильтром и ключом данных   //
//---------------------------------------------------------------------------//
Процедура Запустить()
    м = новый массив;
    М.Добавить(новый структура("filter, extra",
    "com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST",
    "EXTRA_BARCODE_DECODING_DATA"));
    
    ЗаписьJSON = Новый ЗаписьJSON;    
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, М);
    Джейсон = ЗаписьJSON.Закрыть();
    Рез = ВК.ЗапуститьПерехватБроадкастов(Джейсон);
    Если Рез = "ok_en" тогда
        Предупреждение("Перехват установлен")
    иначе
        Предупреждение(Рез);
    КонецЕсли;
КонецПроцедуры
    
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    Если стрСравнить(СокрЛП(Источник),"Hermes") = 0 тогда
        Если стрСравнить(СокрЛП(Событие),"BroadcastCatched") = 0 тогда
            Попытка
                
                локДанные = РазобратьJSON(Данные);
                
                action     = Неопределено;
                _key     = Неопределено;
                Data    = Неопределено;
                
                локДанные.Свойство("action",action);
                локДанные.Свойство("key",_key);
                локДанные.Свойство("Data",Data);
                
                Если стрСравнить(сокрлп(action),"com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST") = 0 тогда
                    Если стрСравнить(сокрлп(_key),"EXTRA_BARCODE_DECODING_DATA") = 0 тогда
                        Оповестить(Событие, новый структура("Данные, Тип", СокрЛП(Data), "hell_sighn"), Источник);
                    КонецЕсли;
                КонецЕсли;
            исключение
                ОШ = ОписаниеОшибки();
                Предупреждение(ОШ);
            КонецПопытки;
        иначеЕсли СтрСравнить(СокрЛП(Событие), "http_request") = 0 тогда
            
            J = РазобратьJSON(СокрЛП(Данные));
            J.data = "qwerqwerqwerqwer";
            
            ВК.HTTPСервер_Ответить(СформироватьJSON_(J)); 
                        
        КонецЕсли;
        Возврат;
    КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Данные, Источник)
    Если стрСравнить(Источник,"TestPro")=0 тогда
        Если стрСравнить(ИмяСобытия,"BroadcastCatched")=0 Тогда
            Если СтрСравнить(Данные.тип,"hell_sighn")=0 тогда
                штрихкод = Данные.Данные;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры
    
//---------------------------------------------------------------------------//

 

//---------------------------------------------------------------------------//
//ОстановитьПерехватБроадкастов//
//---------------------------------------------------------------------------//

    Рез = ВК.ОстановитьПерехватБроадкастов();
    Если Рез = "ok_en" тогда
        Предупреждение("Перехват снят")
    иначе
        Предупреждение(Рез);
    КонецЕсли;
//---------------------------------------------------------------------------//

 

//---------------------------------------------------------------------------//
//=============================ИДУстройства==================================//
//Это не настоящий DeviceID, а некий синтетический идентификатор, выдаваемый //
//ОС вызывающему приложению  при вызове метода                               //
//Settings.Secure.getString(m_Activity.getContentResolver(),                 //
//Settings.Secure.ANDROID_ID),                                               //
//преобразованный к формату GUID                                             //
//(Начиная с 10 Андроида доступ "обычных" приложений к аппаратным            //
//идентификаторам устройства ограничен.)                                     //
//---------------------------------------------------------------------------//
    ИД = ВК.ИДУстройства();
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//АндроидИД//
//То-же самое, что и ИДУстройства, только передаваемый в 1с "как есть",      //
//т.е. без приведения к виду GUID                                            //
//---------------------------------------------------------------------------//
    ИД = ВК.АндроидИД();
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//Архитектура//
//Возвращает архитектуру процессора устройства (ABI - в терминологии Андроид)//
//---------------------------------------------------------------------------//
    Арх = ВК.Архитектура();
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//HTTPСервер_Запустить//
//---------------------------------------------------------------------------//
//Запускает локальный http-сервер на базе Nano, который принимает входящие   //
//POST/PUT-запросы. Каждый запрос обрабатывается в своем потоке и ему        //
//(запросу)присваевается ThreadID. После этого поток синхронно отправляет    //
//данные запроса в 1с - как внешнее событие. 1с должна в течение 60 секунд   //
//обработать запрос и вернуть ответ в компоненту.                            //
//Если ответ 1с'ом не возвращен, то клиент получит 500 ответ с описанием     //
//ошибки =  "SERVER INTERNAL ERROR: превышено ожидаемое время обработки      //
//запроса на стороне 1с."                                                    //
//Есть нюанс работы: если сервер долго не принимает запросов, а приложение, в//
//контексте которого он запущен, свернуто, то ОС через некоторое время       //
//останавливает поток сервера и его приходится перезапускать                 //
//---------------------------------------------------------------------------//
    Порт = 8086;
    Ответ = ВК.HTTPСервер_Запустить(Порт);
    Если СтрСравнить(сокрЛП(Ответ),"ok_en") = 0 тогда
        Предупреждение("HTTP сервер запущен на порту: " + Строка(Порт));
    иначе
        Предупреждение("Ошибка: " + ответ);
    КонецЕсли;
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//HTTPСервер_Остановить//
//---------------------------------------------------------------------------//
//Останавливает локальный http-сервер                                         //
//---------------------------------------------------------------------------//
    Ответ = ВК.HTTPСервер_Остановить();
    Если СтрСравнить(сокрЛП(Ответ),"ok_en") <> 0 тогда
        Предупреждение(Ответ);
    иначе
        Предупреждение("HTTP сервер остановлен");
    КонецЕсли;
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//HTTPСервер_Ответить//
//---------------------------------------------------------------------------//
//Выполняется в контексте обработчика внешнего события глобального модуля.   //
//Возвращает в http-сервер ответ, котрый будет переправлен клиенту.          //
//---------------------------------------------------------------------------//
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    Если стрСравнить(СокрЛП(Источник),"Hermes") = 0 тогда
        Если стрСравнить(СокрЛП(Событие),"BroadcastCatched") = 0 тогда
            Попытка
                
                локДанные = РазобратьJSON(Данные);
                
                action     = Неопределено;
                _key     = Неопределено;
                Data    = Неопределено;
                
                локДанные.Свойство("action",action);
                локДанные.Свойство("key",_key);
                локДанные.Свойство("Data",Data);
                
                Если стрСравнить(сокрлп(action),"com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST") = 0 тогда
                    Если стрСравнить(сокрлп(_key),"EXTRA_BARCODE_DECODING_DATA") = 0 тогда
                        Оповестить(Событие, новый структура("Данные, Тип", СокрЛП(Data), "hell_sighn"), Источник);
                    КонецЕсли;
                КонецЕсли;
            исключение
                ОШ = ОписаниеОшибки();
                Предупреждение(ОШ);
            КонецПопытки;
        иначеЕсли СтрСравнить(СокрЛП(Событие), "http_request") = 0 тогда
            
            J = РазобратьJSON(СокрЛП(Данные));
            J.data = "qwerqwerqwerqwer";
            
            ВК.HTTPСервер_Ответить(СформироватьJSON_(J)); 
                        
        КонецЕсли;
        Возврат;
    КонецЕсли;

КонецПроцедуры

//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//ZLIB_Архивировать//
//Архивирует двоичные данные алгоритмом Deflate
//---------------------------------------------------------------------------//
    масМарки = новый массив;
    джМарки = JSON.СформироватьJSON(масМарки);
    
    ДД = ПолучитьДвоичныеДанныеИзСтроки(джМарки);
    
    ДДАрх = ВК.ZLIB_Архивировать(ДД);
    Если ТипЗнч(ДДАрх) = Тип("ДвоичныеДанные") тогда
        ДДРазарх = ВК.ZLIB_Разархивировать(ДДАрх, ДД.Размер());
    КонецЕсли;
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//ZLIB_Разархивировать//
//Разархивирует двоичные данные, заархивированные алгоритмом Deflate
//---------------------------------------------------------------------------//
    масМарки = новый массив;
    джМарки = JSON.СформироватьJSON(масМарки);
    
    ДД = ПолучитьДвоичныеДанныеИзСтроки(джМарки);
    
    ДДАрх = ВК.ZLIB_Архивировать(ДД);
    Если ТипЗнч(ДДАрх) = Тип("ДвоичныеДанные") тогда
        ДДРазарх = ВК.ZLIB_Разархивировать(ДДАрх, ДД.Размер());
    КонецЕсли;
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//ZLIB_АрхивироватьФайл//
//Архивирует файл алгоритмом Deflate
//---------------------------------------------------------------------------//
    ДДист = ПолучитьДвоичныеДанныеИзСтроки("Какие-нибудь данные");
    ИВФИст = ПолучитьИмяВременногоФайла("dat");
    ИВФНазн = ПолучитьИмяВременногоФайла("dat");
    ДДист.Записать(ИВФИст);
    Р = ВК.ZLIB_АрхивироватьФайл(ИВФИст, ИВФНазн);
    ДДАрх = новый ДвоичныеДанные(ИВФНазн);
    УдалитьФайлы(ИВФИст);
    Р1 = ВК.ZLIB_РазархивироватьФайл(ИВФНазн, ИВФИст);
    ДД1 = новый ДвоичныеДанные(ИВФИст);
    УдалитьФайлы(ИВФИст);
    УдалитьФайлы(ИВФНазн);
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//ZLIB_РазархивироватьФайл//
//Разархивирует файл, сжатый алгоритмом Deflate
//---------------------------------------------------------------------------//
    ДДист = ПолучитьДвоичныеДанныеИзСтроки("Какие-нибудь данные");
    ИВФИст = ПолучитьИмяВременногоФайла("dat");
    ИВФНазн = ПолучитьИмяВременногоФайла("dat");
    ДДист.Записать(ИВФИст);
    Р = ВК.ZLIB_АрхивироватьФайл(ИВФИст, ИВФНазн);
    ДДАрх = новый ДвоичныеДанные(ИВФНазн);
    УдалитьФайлы(ИВФИст);
    Р1 = ВК.ZLIB_РазархивироватьФайл(ИВФНазн, ИВФИст);
    ДД1 = новый ДвоичныеДанные(ИВФИст);
    УдалитьФайлы(ИВФИст);
    УдалитьФайлы(ИВФНазн);
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//PHOTO_ИзменитьКартинку//
//Изменяет разрешение и качество картинки. Под качеством подразумевается      //
//величина, обратная степени сжатия картинки алгоритмом JPEG                 //
//---------------------------------------------------------------------------//
    ФайлКартинки = КаталогДокументов()+"MobileFoto.jpg";
    ФайлКартинки = СтрЗаменить(ФайлКартинки,"\","/");
    ФайлКартинки = "file://" + ФайлКартинки; 
    НовВз = Новый ЗапускПриложенияМобильногоУстройства(
    "android.media.action.IMAGE_CAPTURE");
    
    НовВз.ДополнительныеДанные.Добавить("output",ФайлКартинки,"Uri");
    Если НовВз.Запустить(Истина) <> 0 Тогда
        ИВФВых = ПолучитьИмяВременногоФайла("jpg");
        
        Р = ВК.PHOTO_ИзменитьКартинку(ФайлКартинки,
        ИВФВых,
        ЭтаФорма.РазрешениеХ, 
        ЭтаФорма.РазрешениеУ, 
        ЭтаФорма.Какчество);
        
        ДД = новый ДвоичныеДанные(ИВФВых);
        ОтобразитьКартинку(ДД);
    КонецЕсли;
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//Версия//
//Возвращает версию компоненты
//---------------------------------------------------------------------------//
    Сообщить(ВК.Версия());
//---------------------------------------------------------------------------//
//-----------------------------------------------------------------------------//
//ZXING_РаспознатьШтрихкод//
//Пытается прочитать любой 1- и 2-мерный штрихкод.
//Функция имеет 2 перегрузки:                                                  //
//1. в качестве параметра принимается строка - имя файла картинки с штрихкодом //
//2. в качестве параметра принимаются двоичные данные картинки                 //
//-----------------------------------------------------------------------------//
    &НаКлиенте
    Процедура РаспознатьQRCodeСКартинки(Команда)
        //1.Вариант с чтением картинки из файла
        Картинка = ЗаписатьКартинкуВФайл(КаталогДокументов());
        стр = ВК.ZXING_РаспознатьШтрихкод(Картинка);
        стк = JSON.РазобратьJSON(стр);
        Если стк.status тогда
            УдалитьФайлы(Картинка);
            Предупреждение(стк.data);
        иначе
            Предупреждение(стк.description);
        КонецЕсли;
        
        
        //2.Вариант с чтением картинки из ДД
        стр = ВК.ZXING_РаспознатьШтрихкод(ПолучитьДДКартинки());
        стк = JSON.РазобратьJSON(стр);
        Если стк.status тогда
            Предупреждение(стк.data);
        иначе
            Предупреждение(стк.description);
        КонецЕсли;
        
        
        Данные = СредстваМультимедиа.СделатьФотоснимок(ТипКамерыУстройства.Задняя, 
        новый РазрешениеКамерыУстройства(800, 600), 
        100,
        ,
        ТипПодсветкиКамеры.Выключена);
        
        Если Данные <> неопределено тогда
            стр = ВК.ZXING_РаспознатьШтрихкод(Данные.ПолучитьДвоичныеДанные());
            стк = JSON.РазобратьJSON(стр);
            Если стк.status тогда
                Предупреждение(стк.data);
            иначе
                Предупреждение(стк.description);
            КонецЕсли;
        КонецЕсли;
    КонецПроцедуры
    
    &НаСервере
    Функция ЗаписатьКартинкуВФайл(КаталогДокументов)
        ИВФ = КаталогДокументов + "MobileFoto.png";
        ПолучитьДДКартинки().Записать(ИВФ);
        ИВФ = СтрЗаменить(ИВФ,"\","/");
        ИВФ = "file://" + ИВФ; 
        Возврат ИВФ;
    КонецФункции
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//ФС_ПрочитатьКаталог//
//Возвращает массив объектов каталога файловой системы - если у приложения   //
//в этот каталог есть соответствующий доступ.                                //
//---------------------------------------------------------------------------//
    &НаКлиенте
    Функция УдалитьФсеФСОРекурсивно(вхКаталог, ВК)
        Если РазобратьJSON(ВК.ФС_ОбъектФССуществует(вхКаталог)).Status тогда
            сткРез = РазобратьJSON(ВК.ФС_ПрочитатьКаталог(вхКаталог));
            Если сткРез.Status тогда
                сткРез0 = РазобратьJSON(сткРез.Data);
                Для каждого эстк из сткРез0 Цикл
                    Если эстк.Значение = ".." или эстк.Значение = "." тогда 
                        продолжить 
                    КонецЕсли;
                    
                    П = вхКаталог + ?(прав(вхКаталог,1)="/","","/") + 
                    эстк.Значение;
                    сткЭтоДиректорияСтатус = 
                    РазобратьJSON(ВК.ФС_ЭтоДиректория(П));
                    
                    Если сткЭтоДиректорияСтатус.Status тогда
                        Если РазобратьJSON(сткЭтоДиректорияСтатус.Data).
                        IsDirectory тогда
                            УдалитьФсеФСОРекурсивно(П, ВК);
                        КонецЕсли;
                    КонецЕсли;
                    ВК.ФС_УдалитьФайлИлиКаталог(П);
                КонецЦикла;
            КонецЕсли;
        КонецЕсли;
        ВК.ФС_УдалитьФайлИлиКаталог(?(прав(вхКаталог,1)="/", 
        Лев(вхКаталог,стрДлина(вхКаталог)-1), вхКаталог));
    КонецФункции
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//ФС_ЭтоДиректория//
//Проверяет: объект файловой системы - директория или файл.
//---------------------------------------------------------------------------//
    сткЭтоДиректорияСтатус = РазобратьJSON(ВК.ФС_ЭтоДиректория(П));
    Если сткЭтоДиректорияСтатус.Status тогда
        Если РазобратьJSON(сткЭтоДиректорияСтатус.Data).IsDirectory тогда
            УдалитьФсеФСОРекурсивно(П, ВК);
        КонецЕсли;
    КонецЕсли;
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//ФС_УдалитьФайлИлиКаталог//
//Удаляет объект файловой системы.
//---------------------------------------------------------------------------//
    Ответ = ВК.ФС_УдалитьФайлИлиКаталог(
    "/data/data/com.e1c.mobile/files/1C/1cem/test/test.txt");
    
    стк = РазобратьJSON(Ответ);    
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//ФС_СоздатьФайл//
//Создает файл
//---------------------------------------------------------------------------//
    Ответ = ВК.ФС_СоздатьФайл(
    "/data/data/com.e1c.mobile/files/1C/1cem/test/test.txt");
    
    стк = РазобратьJSON(Ответ);
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//ФС_СоздатьКаталог//
//Создает каталог
//---------------------------------------------------------------------------//
    Ответ = ВК.ФС_СоздатьКаталог(
    "/data/data/com.e1c.mobile/files/1C/1cem/test", 511);
    стк = РазобратьJSON(Ответ);
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//ФС_ПереименоватьФайлИлиКаталог//
//переименовывает файл или каталог
//---------------------------------------------------------------------------//
    
    Ответ = ВК.ФС_ПереименоватьФайлИлиКаталог(
    "/data/data/com.e1c.mobile/files/1C/1cem/test/test.txt",
    "/data/data/com.e1c.mobile/files/1C/1cem/test/test1.txt");
    
    стк = РазобратьJSON(Ответ);    
    Если стк.Status тогда
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//ФС_ЗаписатьДанныеВФайл//
//Пишет двоичные данные в файл                                               //
//---------------------------------------------------------------------------//
    Ответ = ВК.ФС_ЗаписатьДанныеВФайл(
    "/data/data/com.e1c.mobile/files/1C/1cem/test/test.txt", 
    ПолучитьДвоичныеДанныеИзСтроки("СтрокаДляДД"));
    стк = РазобратьJSON(Ответ);    
    Если стк.Status тогда
        Ответ = ВК.ФС_ПрочитатьДанныеИзФайла(
        "/data/data/com.e1c.mobile/files/1C/1cem/test/test.txt");
        Если ТипЗнч(Ответ) = тип("ДвоичныеДанные") тогда
            стр = ПолучитьСтрокуИзДвоичныхДанных(Ответ);
        КонецЕсли;
    КонецЕсли;
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//ФС_ПрочитатьДанныеИзФайл//
//---------------------------------------------------------------------------//
    Ответ = ВК.ФС_ЗаписатьДанныеВФайл(
    "/data/data/com.e1c.mobile/files/1C/1cem/test/test.txt", 
    ПолучитьДвоичныеДанныеИзСтроки("СтрокаДляДД"));
    
    стк = РазобратьJSON(Ответ);    
    Если стк.Status тогда
        
        Ответ = ВК.ФС_ПрочитатьДанныеИзФайла(
        "/data/data/com.e1c.mobile/files/1C/1cem/test/test.txt");
        
        Если ТипЗнч(Ответ) = тип("ДвоичныеДанные") тогда
            стр = ПолучитьСтрокуИзДвоичныхДанных(Ответ);
        КонецЕсли;
    КонецЕсли;
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//ФС_ОбъектФССуществует//
//Проверяет: существует-ли каталог или файл                                  //
//---------------------------------------------------------------------------//
    Ответ = ВК.ФС_ОбъектФССуществует(
    "/data/data/com.e1c.mobile/files/1C/1cem/test");
    
    стк = РазобратьJSON(Ответ);
    КаталогСуществует = ложь;
    Если стк.Status тогда
        КаталогСуществует = истина;
    КонецЕсли;
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//Общий пример для работы с файловой системой: удаляет все файлы внешних     //
//компонент из каталога ExtCompT мобильной платформы.                        //
//---------------------------------------------------------------------------//
    &НаКлиенте
    Процедура СканироватьФайловуюСистему(Команда)
        
        //stat.h
        //#define S_IRWXU 00700
        //#define S_IRUSR 00400
        //#define S_IWUSR 00200
        //#define S_IXUSR 00100
        //#define S_IRWXG 00070
        //#define S_IRGRP 00040
        //#define S_IWGRP 00020
        //#define S_IXGRP 00010
        //#define S_IRWXO 00007
        //#define S_IROTH 00004
        //#define S_IWOTH 00002
        //#define S_IXOTH 00001
        
        
        БазовыйКаталог = "";
        
        Ответ = ВК.ФС_ОбъектФССуществует(
        "/data/data/com.yourapp.tsd/files/1C/1cem");
        
        стк = РазобратьJSON(Ответ);
        Если стк.Status тогда
            БазовыйКаталог = "/data/data/com.yourapp.tsd/files/1C/1cem";
        иначе
            Ответ = ВК.ФС_ОбъектФССуществует(
            "/data/data/com.e1c.mobile/files/1C/1cem");
            
            стк = РазобратьJSON(Ответ);
            Если стк.Status тогда
                БазовыйКаталог = "/data/data/com.e1c.mobile/files/1C/1cem";
            КонецЕсли;
        КонецЕсли;
        
        Если БазовыйКаталог <> "" тогда
            Ответ = ВК.ФС_ПрочитатьДанныеИзФайла(БазовыйКаталог + 
            "/ibases.v8i");
            
            Если ТипЗнч(Ответ) = тип("ДвоичныеДанные") тогда
                стр = ПолучитьСтрокуИзДвоичныхДанных(Ответ);
                
                Попытка
                    ИВФ = ПолучитьИмяВременногоФайла("txt");
                    ЗаписьТекста = новый ЗаписьТекста(ИВФ);
                    ЗаписьТекста.ЗаписатьСтроку(стр);
                    ЗаписьТекста.Закрыть();
                    
                    ЧтениеТекста = новый ЧтениеТекста(ИВФ);
                    стр = "";
                    Пока стр<>Неопределено Цикл
                        стр = ЧтениеТекста.ПрочитатьСтроку();
                        Если СтрНачинаетсяС(стр,"[Tsd test]") тогда
                            стр = "";
                            Пока стр<>Неопределено Цикл
                                стр = ЧтениеТекста.ПрочитатьСтроку();
                                Если стрСравнить(Лев(стр,стрДлина("Connect=File=")),"Connect=File=")=0 тогда
                                    масСтр = СтрРазделить(стр,"/1cem/");
                                    Если масСтр.Количество()>1 тогда
                                        сткРез0 = РазобратьJSON(ВК.ФС_ПрочитатьКаталог(БазовыйКаталог + масСтр[1]));
                                        Если сткРез0.Status тогда
                                            сткРез1 = РазобратьJSON(сткРез0.Data);
                                            Для каждого эстк из сткРез1 Цикл
                                                Если эстк.Значение = ".." или эстк.Значение = "." тогда продолжить КонецЕсли;
                                                П = БазовыйКаталог + масСтр[1] + ?(прав(БазовыйКаталог + масСтр[1],1)="/","","/")+эстк.Значение;
                                                сткЭтоДиректорияСтатус = РазобратьJSON(ВК.ФС_ЭтоДиректория(П));
                                                Если сткЭтоДиректорияСтатус.Status тогда
                                                    Если РазобратьJSON(сткЭтоДиректорияСтатус.Data).IsDirectory тогда
                                                        Р = УдалитьФсеФСОРекурсивно(П + "/ExtCompT",ВК);
                                                        Если ЗначениеЗаполнено(Р) тогда
                                                            Попытка 
                                                                ВызватьИсключение "Не удалось зачистить кэш: "+Р;
                                                            исключение
                                                                Ош = ОписаниеОшибки();
                                                                //ДИАГНОСТИКА
                                                            КонецПопытки;
                                                        КонецЕсли;
                                                    КонецЕсли;
                                                КонецЕсли;
                                            КонецЦикла;
                                        КонецЕсли;
                                    КонецЕсли;
                                    Прервать;
                                КонецЕсли;
                            КонецЦикла;
                            прервать;
                        КонецЕсли;
                    КонецЦикла;
                    
                исключение
                    Ош = ОписаниеОшибки();
                    //ДИАГНОСТИКА - 
                КонецПопытки;
                
                Попытка
                    УдалитьФайлы(ИВФ);
                исключение
                    Ош = ОписаниеОшибки();
                    //ДИАГНОСТИКА - ошибка удаления ВФ
                КонецПопытки;
                
            КонецЕсли;    
        иначе
            Попытка 
                ВызватьИсключение стк.Description;
            исключение
                Ош = ОписаниеОшибки();
                //ДИАГНОСТИКА
            КонецПопытки;
        КонецЕсли;
        
        
        //Ответ = ВК.ФС_ОбъектФССуществует("/data/data/com.e1c.mobile/files/1C/1cem/test");
        //стк = РазобратьJSON(Ответ);
        //КаталогСуществует = ложь;
        //Если стк.Status тогда
        //    КаталогСуществует = истина;
        //иначе
        //    Ответ = ВК.ФС_СоздатьКаталог("/data/data/com.e1c.mobile/files/1C/1cem/test", 511);
        //    стк = РазобратьJSON(Ответ);
        //    Если стк.Status тогда
        //        КаталогСуществует = истина;
        //    КонецЕсли;
        //КонецЕсли;
        //
        //Если КаталогСуществует тогда
        //    Ответ = ВК.ФС_СоздатьФайл("/data/data/com.e1c.mobile/files/1C/1cem/test/test.txt");
        //    стк = РазобратьJSON(Ответ);
        //    Если стк.Status тогда
        //        Ответ = ВК.ФС_ЗаписатьДанныеВФайл("/data/data/com.e1c.mobile/files/1C/1cem/test/test.txt", ПолучитьДвоичныеДанныеИзСтроки("СтрокаДляДД"));
        //        стк = РазобратьJSON(Ответ);    
        //        Если стк.Status тогда
        //            Ответ = ВК.ФС_ПрочитатьДанныеИзФайла("/data/data/com.e1c.mobile/files/1C/1cem/test/test.txt");
        //            Если ТипЗнч(Ответ) = тип("ДвоичныеДанные") тогда
        //                стр = ПолучитьСтрокуИзДвоичныхДанных(Ответ);
        //            КонецЕсли;
        //        КонецЕсли;
        //        
        //        Ответ = ВК.ФС_ПереименоватьФайлИлиКаталог("/data/data/com.e1c.mobile/files/1C/1cem/test/test.txt","/data/data/com.e1c.mobile/files/1C/1cem/test/test1.txt");
        //        стк = РазобратьJSON(Ответ);    
        //        Если стк.Status тогда
        //            Ответ = ВК.ФС_УдалитьФайлИлиКаталог("/data/data/com.e1c.mobile/files/1C/1cem/test/test1.txt");
        //            стк = РазобратьJSON(Ответ);    
        //        иначе
        //            Ответ = ВК.ФС_УдалитьФайлИлиКаталог("/data/data/com.e1c.mobile/files/1C/1cem/test/test.txt");
        //            стк = РазобратьJSON(Ответ);    
        //        КонецЕсли;
        //    КонецЕсли;
        //    
        //    Ответ = ВК.ФС_УдалитьФайлИлиКаталог("/data/data/com.e1c.mobile/files/1C/1cem/test");
        //    стк = РазобратьJSON(Ответ);
        //КонецЕсли;
        //
        //
        ////Для а = 0 по 10000 цикл
        //
        ////Ответ = ВК.ФС_ЭтоДиректория("/data/data/com.e1c.mobile/files/1C/1cem");
        ////стк = РазобратьJSON(Ответ);
        ////Если стк.Status тогда
        ////    стк0 = РазобратьJSON(стк.Data);
        ////    //Для каждого эстк из стк0 цикл
        ////    //    
        ////    //КонеЦЦикла;
        ////КонецЕсли;
        ////КонеЦЦИкла;
        
    КонецПроцедуры

    &НаКлиенте
    Функция УдалитьФсеФСОРекурсивно(вхКаталог, ВК)
        Если РазобратьJSON(ВК.ФС_ОбъектФССуществует(вхКаталог)).Status тогда
            сткРез = РазобратьJSON(ВК.ФС_ПрочитатьКаталог(вхКаталог));
            Если сткРез.Status тогда
                сткРез0 = РазобратьJSON(сткРез.Data);
                Для каждого эстк из сткРез0 Цикл
                    Если эстк.Значение = ".." или эстк.Значение = "." тогда продолжить КонецЕсли;
                    П = вхКаталог + ?(прав(вхКаталог,1)="/","","/")+эстк.Значение;
                    сткЭтоДиректорияСтатус = РазобратьJSON(ВК.ФС_ЭтоДиректория(П));
                    Если сткЭтоДиректорияСтатус.Status тогда
                        Если РазобратьJSON(сткЭтоДиректорияСтатус.Data).IsDirectory тогда
                            УдалитьФсеФСОРекурсивно(П, ВК);
                        КонецЕсли;
                    КонецЕсли;
                    ВК.ФС_УдалитьФайлИлиКаталог(П);
                КонецЦикла;
            КонецЕсли;
        КонецЕсли;
        ВК.ФС_УдалитьФайлИлиКаталог(?(прав(вхКаталог,1)="/", Лев(вхКаталог,стрДлина(вхКаталог)-1), вхКаталог));
    КонецФункции
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//ОписаниеУстройства//
//Свойство компоненты - показывает производителя и модель устройства         //
//---------------------------------------------------------------------------//
    стрПроизводительИМодель = ВК.ОписаниеУстройства;
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
//Запустить получение геоданных//
//---------------------------------------------------------------------------//

//1й параметр - получать данные от провайдера GPS, 
//2й параметр - получать данные от провайдера NETWORKPROVIDER
//Данные от разных провайдеров приходят разными событиями
Р = ВК.ГЕО_НачатьПолучениеКоординат(истина, истина);

ВК.ГЕО_ОстановитьПолучениеКоординат();

//1й параметр - получать данные от провайдера GPS, 
//2й параметр - получать данные от провайдера NETWORKPROVIDER
//Данные от разных провайдеров приходят разными событиями
Р = ВК.ГЕО_ПолучитьСейчас(истина, истина);
    

Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    Если стрСравнить(СокрЛП(Источник),"Hermes") = 0 тогда
        Если СтрСравнить(СокрЛП(Событие), "GEO_location") = 0 тогда

			//Что-то сделать с геоданными...
			
        КонецЕсли;
        Возврат;
    КонецЕсли;
КонецПроцедуры


//---------------------------------------------------------------------------//
Это JSON, который приходит во внешнем событии:

{
	"data": "",
	"description": "",
	"object": [
		{
			"accuracy": 603.0,
			"altitude": 0.0,
			"latitude": 37.4218964,
			"longitude": -122.0840582,
			"provider": "NETWORK",
			"speed": 0.0
		}
	],
	"status": true
}

Исходники:

https://github.com/KotVezdehod/Hermes

https://github.com/KotVezdehod/dreamcatcher_gith

Частично использован код из //tf21.ru/1c/articles/987286/

Скачать файлы

Наименование Файл Версия Размер
Внешняя компонента для мобильного приложения:

.zip 4,02Mb
2
.zip 4,02Mb 2 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. sadiv 21 08.11.21 13:26 Сейчас в теме
Доброе время суток! Скажите, при распаковке zip-файлов каталоги восстанавливаются?
3. Prometeus2011 154 08.11.21 16:44 Сейчас в теме
(1) Архивация каталогов не поддерживается. Допускается сжимать только каждый файл по-отдельности.
2. SinglCOOLer 216 08.11.21 13:44 Сейчас в теме
1. Перехват широковещательных сообщений ОС андроид по заданному фильтру и ключу данных
Наивно полагал, что моб платформа уже научилась это делать
4. Prometeus2011 154 08.11.21 16:50 Сейчас в теме
(2) Согласен. Очень странно. Причем, в релизе 8.3.21 мобильной платформы был сделан анонс работы с zip-архивами (очевидно нашли в android-NDK библиотеку ZLIB ;)), но перехвата броадкастов так и нет). Забавно.
5. zaoproxy 34 11.11.21 15:02 Сейчас в теме
Хороший набор функций. Надо будет потестить.
Вопрос: если 1С свёрнута, т.е. не активна на текущий момент, будет ли продолжаться обработка внешних событий? будь то перехват широковещательных сообщений или входящих POST или PUT запросы?
6. Prometeus2011 154 12.11.21 10:07 Сейчас в теме
7. lion-killer 22 12.11.21 13:07 Сейчас в теме
Добрый день. Поддерживается ли перехват компонентой событий сканирования штрихкодов в терминалах сбора данных Cipherlab? Особенностью этих устройств является то что в поле Data они передают не строку, а двоичные данные.
8. Prometeus2011 154 12.11.21 15:29 Сейчас в теме
Добрый день!

Работа с бинарными данными в поле extra поддерживается.

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


extra = intent.getStringExtra(extra_key);
                                    if (extra == null) {
                                        b0 = intent.getByteArrayExtra(extra_key);
                                        if (b0 != null) {
                                            extra = new String(b0);
                                        }
                                    }
                                    if (extra == null || extra == "") {
                                        extra = "Доп. данные с ключом: '" + extra_key + "' не содержат данных!";
                                    }
Показать


Насчет получения данных из поля Data - сказать не могу, но столкнулся с ситуацией, когда метод getStringExtra возвращал null, при этом метод getByteArrayExtra() - работал нормально.
9. user790708 10.12.21 16:40 Сейчас в теме
Добрый день.
Можете добавить функцию для получения свойст системы (System.getProperty())?
Непосредственно интересует получение модели устройства и производителя (вот тут есть пример: https://stackoverflow.com/questions/1995439/get-android-phone-model-programmatically-how-to-get-device-name-and-model-prog), но и другие свойства могут пригодится.
10. Prometeus2011 154 13.12.21 10:23 Сейчас в теме
(9)Там это есть уже. Реализовано только не через функцию, а через свойство "ОписаниеУстройства" ("DeviceInfo") компоненты. Его можно увидеть в отладчике.

Свойство формируется конкатенацией из 2х полей: MANUFACTURER + MODEL.

wData = wManufacturer + L": " + wModel;
11. akR00b 21.01.22 13:07 Сейчас в теме
условия использования? можно ли в коммерческом проекте применять?
12. Prometeus2011 154 21.01.22 13:54 Сейчас в теме
13. Prometeus2011 154 21.01.22 17:17 Сейчас в теме
(11)Кстати, если будет идея насчет того, что можно еще добавить в компоненту, то пишите - добавлю.
14. akR00b 24.01.22 08:09 Сейчас в теме
(13)Хорошо, для полноты картины не хватает асинхронного снятия GPS координат, ну или просто метода для получения данных через внешние событие. Аналог тут https://infostart.ru/public/1497363/
15. Prometeus2011 154 24.01.22 09:45 Сейчас в теме
(14) Ок. Добавлю метод для получения координат и внешнее событие.
16. akR00b 24.01.22 10:55 Сейчас в теме
(15)Спасибо за оперативность! Ждем релиза;)
18. Prometeus2011 154 26.01.22 17:12 Сейчас в теме
(16)Добавил получение геоданных.
20. akR00b 27.01.22 12:54 Сейчас в теме
(18)а в архиве обработка с макетом компоненты или сразу собранное apk?
21. Prometeus2011 154 27.01.22 18:17 Сейчас в теме
(20)Архив, для целей моб платформы 1с - это макет типа внешняя компонента, выполненная по технологии Native. Чтобы ZIP-архив чудесным образом превратился в макет ВК, следует туда положить манифест, содержащий перечень файлов архива (библиотеки и apk-пакеты), а также указание разрядности и типа ОС, для которой предназначена конкретная библиотека или apk-пакет.
apk-пакет, содержащийся в архиве, выполняет одну единственную роль - служит контейнером для java-класса, который реализует в себе некоторые функции ВК (получение геоданных - в частности). В принципе, у него даже главной активити может не быть.
28. Prometeus2011 154 28.01.22 15:02 Сейчас в теме
(20)чего-то перечитал и понял, что написал много и не по делу. Архив из публикации - готовая внешняя компонента. Ее надо загрузить в общие макеты конфигурации и можно подключать, как подключаются все ВК native.
29. akR00b 01.02.22 09:26 Сейчас в теме
(28)Спасибо за подробный ответ, компоненту прикрутил, но я так понял что скачал старую версию. А новую с геоданными можно скачать только за новые SM?
Прикрепленные файлы:
17. user790708 26.01.22 16:39 Сейчас в теме
Сделал сервис, как описано в этой статье https://infostart.ru/public/1039819/

В сервисе передаю строку так:
Intent intent = new Intent();
intent.putExtra("KeyEvent", eventString);

В конфигурации настроил получение широковещательных сообщений с помощью вашей компоненты:
Интенты = Новый Массив;
Интенты.Добавить(Новый Структура("filter, extra", "com.example.SendBroadcast", "KeyEvent"));

В 1с вызывается событие по сообщению сервиса, но в данных пустая строка (заполнены только Источник и Событие).
Что это может быть?
19. Prometeus2011 154 26.01.22 17:29 Сейчас в теме
(17) Сложно так сказать. Вроде, тут все просто. Попробуйте использовать LogCat, чтобы увидеть, какие данные идут в вашем броадкасте.
Потом попробуйте реализовать собственный перехватчик вашего-же броадкаста. Возможно, это покажет изъян).
Вот кусок кода, который ищет данные в броадкасте. Может это поможет вам.
Этот код также можно посмотреть и в репозитории программы - на GitHub.

for (int i = 0; i < bk_filters.length(); i++) {
                        try {

                            intent_action = bk_filters.getJSONObject(i).getString("filter");
                            if (intent_action.equals(action)) {
                                extra_key = bk_filters.getJSONObject(i).getString("extra");
                                if (extra_key != "") {
                                    extra = intent.getStringExtra(extra_key);
                                    if (extra == null) {
                                        b0 = intent.getByteArrayExtra(extra_key);
                                        if (b0 != null) {
                                            extra = new String(b0);
                                        }
                                    }
                                    if (extra == null || extra == "") {
                                        extra = "Доп. данные с ключом: '" + extra_key + "' не содержат данных!";
                                    }

                                    cl_bk_result loc_ob = new cl_bk_result();
                                    loc_ob.action = intent_action;
                                    loc_ob.key = extra_key;
                                    loc_ob.Data = extra;

                                    OnBroadcastCatched(m_V8Object, gson.toJson(loc_ob));
                                } else {
                                    OnBroadcastCatched(m_V8Object, "ok_en");
                                }
                                break;
                            }
                        } catch (Exception ex) {
                        }
                    }


Показать
22. user790708 28.01.22 03:39 Сейчас в теме
(19)
Выяснил в 1С:
В процедуре ОбработкаВнешнегоСобытия в модуле формы данные приходят.
А в процедуре ОбработкаВнешнегоСобытия в модуле Приложения - Данные пустая строка.
Событие в модуле Приложения вызывается позже.
Можете подтвердить такое поведение?

Я использую обработку в модуле Приложения, так как в мобильном приложении если последовательно открыто несколько форм и в каждой форме есть Обработка внешних событий, то она будет вызвана в каждой форме, а не один раз.
В типовых конфах от 1с реализовано тоже через обработку в модуле Приложения.
23. Prometeus2011 154 28.01.22 10:51 Сейчас в теме
(22)Не подтверждаю. Что-то странное у вас происходит с платформой. Тестировалось все на платформах с 18 по 20ю.
Внешнее событие с данными приходит и в форму и в глобальный обработчик. Попробуйте использовать другу версию платформы.
Прикрепленные файлы:
2022-01-28_9-38-33.mp4
25. user790708 28.01.22 12:48 Сейчас в теме
(23)Понял. У меня мобильная платформа 8.3.16.142 выше использовать не могу, там финт с автообновлением конфы в приложении не работает.
26. user790708 28.01.22 13:23 Сейчас в теме
(23)Все работает. Спасибо!
Была ошибка в коде.
Prometeus2011; +1 Ответить
27. Prometeus2011 154 28.01.22 14:59 Сейчас в теме
30. user1759157 14.04.22 10:02 Сейчас в теме
(0)
Метод "ВК.ГЕО_ПолучитьСейчас(истина, истина);" возвращает строку: "{"data":"","description":"","object":[{"GPS":true,"NETWORK":true}],"status":true}" так и должно быть?
31. Prometeus2011 154 18.04.22 15:16 Сейчас в теме
32. user1759157 19.04.22 06:29 Сейчас в теме
Оставьте свое сообщение

См. также

Дневник времени. Простое мобильное приложение 1С для телефона на Андроид Промо

Мобильная разработка v8::Mobile Абонемент ($m)

Дневник времени. Для адептов тайм-менеджмента и всех тех, кто ценит свое время. Предназначен для ежедневных записей в телефоне расхода времени на различные задачи. Отчет по записям программы позволяет увидеть, сколько времени, на какие задачи расходовалось и проанализировать траты времени за месяц. Можно выгрузить записи в csv файл и анализировать на дескопном компьютере, например в Экселе. Можно составлять планы на день и отмечать, что удалось сделать, а что нет.

1 стартмани

12.03.2021    4233    4    pricec    1    

Пишем внешнюю компоненту для 1С, NativeAPI на С++, для ОС Linux, с использованием Qt Creator

Разработка внешних компонент v8 1cv8.cf Россия Абонемент ($m)

В статье рассмотрен процесс создания внешней компоненты для 1С в среде Qt Creator для операционной системы Linux (ubuntu, debian, mint и им подобных). На примере компоненты для сбора данных от внешней аппаратуры и сохранение их в базе, посредством 1С. В качестве внешней аппаратуры в данном примере будем использовать Arduino UNO.

1 стартмани

13.05.2022    2389    2    user1779098    22    

Внешняя Native API компонента совместно с функционалом фреймворка Qt

Разработка внешних компонент v8 Абонемент ($m)

В данном примере реализована интеграция внешней компоненты, написанной с использованием технологии Native API и фреймворка Qt.

1 стартмани

20.02.2022    2461    2    tav_74    0    

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

Разработка внешних компонент v8 Абонемент ($m)

Перехват нажатия клавиш в 1С реализован с привязкой к фокусу формы. Если форма (или главное окно процесса 1С) теряет фокус, то перехват перестает работать. Чтобы решить эту проблему, была разработана соответствующая внешняя компонента.

1 стартмани

29.11.2021    3955    11    Prometeus2011    6    

Внешняя компонента: Android tools Промо

Мобильная разработка Разработка внешних компонент v8 v8::Mobile Абонемент ($m)

Несколько дополнительных функций для мобильного приложения\клиента под Android. Размер архива внешних компонент под архитектуры ARM и x86 - 230KB.

1 стартмани

12.01.2021    8796    27    KAV2    22    

1Scan. Интеграция веб-клиента 1С с устройством Android (смартфон, планшет, ТСД)

Мобильная разработка WEB v8 Абонемент ($m)

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

15.11.2021    3994    2    kild    23    

Пример формы авторизации на Javascript для мобильного приложения

Мобильная разработка v8 v8::Mobile 1cv8.cf Абонемент ($m)

Пример формы авторизации на Javascript для мобильного приложения

3 стартмани

25.10.2021    3067    5    rail21    11    

Внешняя компонента для работы по Web-socket протоколу x32 x64 Промо

Разработка внешних компонент WEB v8 Абонемент ($m)

Кто когда-нибудь сталкивался с обменом данными по Web-Socket (wss) протоколу из 1С, тому известно, что в платформе отсутствуют данные механизмы (не путать с HTTP запросами и WebServices). Предлагается использовать внешнюю компоненту, написанную по технологии NativeAPI, для подключения и обмена с серверами из 1С-Предприятия, работающими по протоколу Web-Socket.

2 стартмани

30.03.2018    42170    100    Ditron    115    

Распознавание речи в мобильном приложении 1С на Android

Мобильная разработка Разработка внешних компонент v8::Mobile Абонемент ($m)

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

1 стартмани

15.07.2021    5910    6    salexdv    6    

Мобильное приложение для 1C:Drive для фотоотчетов с сохранением фотографий в Microsoft Azure Blob storage

Мобильная разработка v8::Mobile Абонемент ($m)

Пример реализации мобильного приложения, которое использует Microsoft Azure Blob storage для сохранения фотографий и передает сведения о сделанных фотографиях в 1C:Drive.

1 стартмани

26.02.2021    4671    4    keypax    2    

Авторизация в мобильном приложении 1С

Роли и права Мобильная разработка v8 v8::Mobile 1cv8.cf Абонемент ($m)

Реализация входа по паролю (личному коду) в мобильном приложении 1С.

10 стартмани

23.02.2021    7965    6    kaiman_fedor_yandex    0    

TextRadar - нечеткий поиск в тексте Промо

Разработка внешних компонент Поиск данных v8 1cv8.cf Абонемент ($m)

В отличие от нечеткого сравнения строк, когда обе сравниваемых строки равнозначны, в задаче нечеткого поиска выделяются строка поиска и строка данных, а вычислить необходимо не степень похожести двух строк, а степень присутствия строки поиска в строке данных. Нормированный коэффициент, находящийся между 0 и 1 позволяет отсечь заведомо низкие результаты, организовать поиск по синонимам и т.д. Наглядное отображение результатов в кратком и детальном виде поможет быстро найти интересующий фрагмент.

1 стартмани

19.09.2018    26683    33    TSSV    19    

Выбор документов на мобильном устройстве (iOS)

Мобильная разработка v8::Mobile Абонемент ($m)

При внедрении мобильного приложения, имеющего в своём функционале работу с файлами, возникла необходимость прикреплять к документам не только фотографии из библиотеки мультимедиа или тут же созданные фотографии, а документы (pdf, doc, xlsx, и др.). В операционной системе iOS файловая система скрыта для пользователя и взаимодействие с файлами осуществляется средствами самого приложения и только с файлами, расположенными в директории приложения (контейнере приложения). Т.е. задачей было поместить файлы в директорию приложения и организовать взимодествие с этим каталогом.

1 стартмани

29.11.2020    5213    0    OlegK    0    

Программа расчёта питательной ценности ежедневной диеты по тридцати восьми нутриентам (мобильное приложение 1С для Андроид), APK + исходная конфигурация

Мобильная разработка v8::Mobile Домашние учет и финансы Абонемент ($m)

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

5 стартмани

12.10.2020    5198    1    ovasiliev    4    

Использование сборок .NET в 1С 7. и 8.x. Создание внешних Компонент. Промо

Разработка внешних компонент v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Данная разработка создана для использования сборок .Net в 1С через преобразование объектов и классов в COM-объекты, которые можно использовать в 1С. Достигается это путем создания класса, реализующего методы интерфейса IReflect public class AutoWrap: IReflect.

1 стартмани

28.11.2013    98027    303    Serginio    77    

Использование встроенного сканера ТСД на Android в мобильном клиенте и мобильном приложении (драйвер сканера Android для 1С)

Разработка внешних компонент Мобильная разработка v8 Абонемент ($m)

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

3 стартмани

09.10.2020    31818    251    ltfriend    169    

1C.QuickPhoto - мобильное приложение для быстрой отправки фотографий в присоединенные файлы БСП

Мобильная разработка Обработка справочников Адаптация типовых решений v8 УНФ ERP2 УТ11 КА2 Абонемент ($m)

Приложение предназначено для быстрого прекрепления фотографий к документам и справочникам программ 1С. Требуется установить расширение для своей конфигурации и опубликовать http-сервис.

2 стартмани

17.09.2020    7191    17    suepifanov    35    

Мобильная платформа. Штрихкоды в Android.

Разработка внешних компонент Мобильная разработка Сканер штрих-кода v8::Mobile Абонемент ($m)

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

3 стартмани

14.09.2020    6111    4    kinan    19    

Приложение Android для идентификации/распознавания образов (с обучением с одного раза, One-Shot Learning) с возможностью работы с 1С через веб-сервис Промо

Мобильная разработка v8 Абонемент ($m)

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

1 стартмани

19.06.2018    21705    5    informa1555    16    

Мусорная корзина, или удаление помеченных объектов для мобильной платформы

Мобильная разработка Чистка данных v8 v8::Mobile 1cv8.cf Абонемент ($m)

Обработка удаления помеченных объектов для встраивания в Ваши мобильные приложения.

2 стартмани

18.08.2020    5411    4    GAMLET    0    

Расширение "PUSH уведомления для мобильного клиента".

Мобильная разработка v8::Mobile КА1 ERP2 УТ11 1С:CRM Россия Абонемент ($m)

Расширение для отправки PUSH уведомлений в мобильный клиент на Android. Подходит для типовых конфигураций, протестирована на конфигурации КА 2.4.

1 стартмани

04.08.2020    7929    18    romanpolyashov@yandex.ru    0    

Диагностика контекста выполнения (внешняя компонента)

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Небольшая экспериментальная внешняя компонента для получения дополнительной информации о контексте выполнения.

1 стартмани

24.07.2020    10917    2    YPermitin    14    

Tool1CD Beta в деле Промо

Разработка внешних компонент v8 Абонемент ($m)

Пс, парень! Не хочешь немного сырых байтов?

1 стартмани

09.05.2018    34649    32    dmpas    32    

Универсальная обертка для использования NATIVE компонент на платформе 1С 7.7, 8.0 и 8.1

Разработка внешних компонент v8 Абонемент ($m)

Используете 1С 7.7, 8.0 или 8.1 и вас раздражает, что под вашу 1С уже не выпускаются современные компоненты. А хотелось бы?

1 стартмани

07.07.2020    9189    8    karpik666    5    

Нано HTTP сервер - внешняя компонента для мобильного приложения 1C, на Android

Разработка внешних компонент Мобильная разработка v8 v8::Mobile 1cv8.cf Абонемент ($m)

Нано HTTP сервер на терминале сбора данных "ATOL Smart.Lite android 7.0". Работает только с GET и POST запросами. Аутентификация BASE64. Не поддерживает HTTPS и не передает файлы. В прикрепленном архиве исходники на компоненту (С++ и java для Android Studio 3.6.2), ЦФ - мобильного приложения и тестовая обработка.

1 стартмани

22.06.2020    8913    15    SanyMaga    23    

miniWms. Программное решение для автоматизации склада

Мобильная разработка Склад и ТМЦ v8 УТ11 Оптовая торговля, дистрибуция, логистика УУ Абонемент ($m)

Готовое Android приложение для автоматизации складских операций УТ 11. Доработка конфигурации не требуется. Навыки разработчика не требуются.

1 стартмани

16.06.2020    5910    7    Basili02    7    

Мобильное приложение "Отчет по проделанной работе" Промо

Мобильная разработка Учет рабочего времени v8 Россия УУ Абонемент ($m)

Приложение выполняет фиксацию рабочего времени у клиентов, а также заявок на работы, пригодится как шаблон для разработки своего или как готовое решение для работников в сфере услуг, которые фиксируют время у клиентов. В приложении 2 документа: первый "отчет за день", второй "заявка" и полезный инструмент "Отчет задачи", который в свою очередь создан для просмотра, анализа и закрытия заявок. Тестировал на Iphone 6s.

10 стартмани

01.12.2017    31246    10    olejnikov_m    6    

Перехват сканирования Android Native API

Разработка внешних компонент Мобильная разработка v8::Mobile Абонемент ($m)

Native компонента для перехвата сканирования шк и передачу в мобильную 1С.

1 стартмани

29.04.2020    14003    73    evgeny43    57    

Мобильная платформа. Уникальный идентификатор устройства Android при помощи внешней компоненты. Не IMEI

Разработка внешних компонент Мобильная разработка v8::Mobile Абонемент ($m)

Идентифицируем устройства, на которых установлены копии нашего приложения.

3 стартмани

23.04.2020    9291    10    kinan    19    

Внешняя компонента Native API для управления окнами и буфером обмена, получения снимков окон Windows и Linux

Разработка внешних компонент v8::УФ Россия Абонемент ($m)

Внешняя компонента Native API для Windows и Linux с исходными кодами на C++. Возможности компоненты: получение списка окон и списка процессов, управление размерами и положением окна, снимок окон и снимок экрана, доступ к данным буфера обмена, взаимодействие по протоколу WebSocket.

2 стартмани

16.04.2020    9007    14    kandr    13    

NativeDraw: Компонента рисования для 1С [V2.6.2] Промо

Разработка внешних компонент Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

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

3 стартмани

13.07.2015    56507    475    ПерваяСистема    147    

Мобильная платформа. Шифрование строк в Android при помощи внешней компоненты

Разработка внешних компонент Защита ПО и шифрование v8::Mobile Молдова Абонемент ($m)

Внешняя компонента для мобильной платформы на Android. Шифруем строки.

3 стартмани

15.04.2020    6940    1    kinan    0    

Android Java и NativAPI C++ внешняя компонента для широковещательных сообщений (отправка и прием). Подключаем сканер ШК и клавиатуру к "1С мобильное приложение"

Оптовая торговля Розничная торговля Сканер штрих-кода Разработка внешних компонент Мобильная разработка v8::Mobile Оптовая торговля, дистрибуция, логистика Абонемент ($m)

Подключаем сканер ШК и клавиатуру к "1С мобильное приложение", на терминале сбора данных "ATOL Smart.Lite android 7.0". Работаем с буфером обмена. В архиве к теме; 1. исходник компоненты (папка package готовый zip); 2. исходник "AccessibilityService" для перехвата клавиатуры (папка package готовый apk); 3. cf - тестовая конфигурация

1 стартмани

15.04.2020    12858    79    SanyMaga    89    

Мобильная платформа. Реакция на внешнее событие в Android при помощи внешней компоненты

Мобильная разработка Разработка внешних компонент v8::Mobile Молдова Абонемент ($m)

Внешняя компонента для мобильной платформы на Android. Пришиваем платформе уши, чтобы лучше слышать.

3 стартмани

06.04.2020    10644    18    kinan    25    

Компоненты распознавания и печати штрих-кодов Промо

Разработка внешних компонент Сканер штрих-кода v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Комплект программного обеспечения для реализации функций оптического распознавания штрих-кодов различных систем при помощи обычной web-камеры, а также их отображения в печатных формах. Программы могут работать в составе конфигураций, созданных на базе платформ «1С-Предприятие» версий 7.7, 8.2, 8.3. Компонент чтения кодов реализован в виде внешней компоненты 1С с COM-интерфейсом. Компонент отображения создан по стандартной технологии ActiveX для Windows, и может быть встроен в любое приложение, поддерживающее встраивание ActiveX элементов управления, например в документ Word или Excel, или форму VBA. P.S. Добавлена новая версия программы распознавания. Новые функции: обработка видео в реальном режиме (а не по таймеру, как раньше), добавлена возможность распознавания штрих-кодов из графических файлов JPEG, PNG, GIF, BMP, а также передавать для распознавания картинки из 1С, теперь можно получить в 1С захваченное с камеры или файла изображение, как с выделением мест, содержащих коды, так и без, а также отдельные фрагменты изображений, содержащие код. Добавлены новые свойства и методы для программирования. Обновлена документация.

10 стартмани

10.07.2015    81363    92    igorberezhnov    121    

Получение фото с веб-камеры

Разработка внешних компонент v8 Абонемент ($m)

Получение фото с веб-камеры без ActiveX. Внешняя компонента по технологии Native API.

1 стартмани

25.03.2020    14706    124    berezdetsky    46    

Готовые решения для инвентаризации товаров и основных средств на мобильных устройствах для КА, УТ, ERP и БП 3.0 на базе Simple UI

Оптовая торговля Розничная торговля Учет ОС и НМА Мобильная разработка Склад и ТМЦ v8 ERP2 БП3.0 УТ11 КА2 БУ УУ Абонемент ($m)

В расширениях для Бухгалтерия 3.0 и КА2.4/УТ11.4/ERP2.4 представлены готовые рабочие места для онлайн и оффлайн инвентаризации товаров (для БП 3.0 также инвентаризации основных средств) на базе бесплатного конструктора мобильного фронта Simple UI. При этом используется расширенная работа с идентификацией товаров и ОС с помощью различных подходов – сканирование штрих кода, распознавание артикулов и инвентарных номеров и различные поиски. Также используются различные возможности платформы Simple UI. Данная разработка может быть полезна как конечным пользователям, так и разработчикам в качестве заготовки, так как на базе этих блоков можно сделать ввод любого документа конфигурации , связанного с товаром или с ОС. Тестировалось на 1С 8.3.13.1865, КА 2.4.8.63 и БП 3.0.74.69

5 стартмани

28.02.2020    19120    82    informa1555    76    

Обработка голосового ввода текста с использованием (intent)

Мобильная разработка v8::Mobile 1cv8.cf Абонемент ($m)

Обработка для голосового ввода текста с использованием дополнительных возможностей ОС Android.

1 стартмани

26.02.2020    7062    4    algabas    7    

7 причин, почему интеграция стала приятной. Не упускайте ряд потрясающих возможностей Промо

Внешние источники данных Мобильная разработка v8 1cv8.cf Абонемент ($m)

В статье показаны примеры получения данных без программирования на стороне «1С:Предприятие 8». Вам нужно проверить гипотезу и проанализировать данные, почему бы не интегрироваться с Excel? Используете технологии .NET и «1С:Предприятие 8», процесс связывания систем движется катастрофически медленно? Хотите native Android приложение с вашими данными всегда под рукой?

1 стартмани

01.10.2015    65600    52    pbazeliuk    23    

Быстрая печать этикеток (ZPL, EPL, TSPL, EZPL, GEPL, TSPL-EZ)

Разработка внешних компонент v8 v8::УФ 1cv8.cf Абонемент ($m)

Качественная и быстрая печать на внутреннем языке принтеров этикеток.

4 стартмани

02.02.2020    16857    67    Johny_v    17    

Наш путь к эффективной инвентаризации склада

Склад и ТМЦ Розничная торговля Мобильная разработка v8 УУ Абонемент ($m)

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

8 стартмани

12.01.2020    9548    1    Johny_v    23    

Сканирование по TWAIN в 1С (обычные и управляемые формы)

Разработка внешних компонент v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка показывает пример, как можно в 1С проводить сканирование с помощью компоненты TWAIN.

3 стартмани

03.01.2020    11972    39    Denr83    0    

Давайте подружим 1С и Android. Часть 1 - постановка задачи и подход к решению Промо

Мобильная разработка v8 Абонемент ($m)

Серия уроков по созданию простейшего приложения на платформе Android для взаимодействия с 1С.

1 стартмани

29.02.2016    37327    42    solarisman    32    

Обмен данными с Android через USB

Мобильная разработка v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка с примером обмена данными конфигурации 1С через USB. Без установки Web сервера и настройки WiFi.

1 стартмани

23.12.2019    8593    7    asdfgcom    2    

Simple UI: простой конструктор мобильных приложений для устройств на Android. Обновление от 14.05.22- изменения среды разработки

Мобильная разработка v8 УУ Абонемент ($m)

Simple UI – это полностью бесплатная платформа для создания мобильных рабочих мест на Android. Конструктор позволяет создавать мобильные клиенты для учетных систем и самостоятельные приложения на телефонах, ТСД (терминалах сбора данных), планшетах, электронных киосках и других устройствах. При этом не нужно разбираться в мобильной разработке, Android SDK ведь основная цель платформы – максимально упростить процесс разработки и поддержки, сделать его визуальным, собирать приложения из готовых блоков с минимумом кода. Причем код обработчиков можно писать на языке учетной системы либо задавать логику обработки событий с помощью команд REST, SQL и визуального конструктора. Проект постоянно развивается изыскивая новые способы упрощения разработки и повышения функционала и является пожалуй самым быстрым способом как создать MVP-проект так и продакшн-систему под конкретное внедрение или тиражный продукт.Тестировалось на 1С: Предприятие 8.3 релиз 8.3.13.1865.

1 стартмани

14.11.2019    37368    373    informa1555    217    

Получение AndroidID в мобильном приложении

Мобильная разработка v8::Mobile Россия Абонемент ($m)

Получаем Android DeviceID в мобильном приложении/клиенте, используя стороннее приложение.

1 стартмани

05.11.2019    13476    9    sam441    13    

Снимок экрана для 1С Промо

Универсальные обработки Разработка внешних компонент v8 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

08.02.2016    34519    34    linkforget    11    

Мобильное приложение для Android для отправки СМС из 1C

SMS рассылки Мобильная разработка v8 1cv8.cf Абонемент ($m)

Вашему вниманию предлагается мобильное приложение (конфигурация .cf) + HTTP сервис для отправки СМС из 1С8

2 стартмани

04.11.2019    11972    19    dimasikus31    7    

ODa - Android приложение для подключения к любой конфигурации 1С, используя OData протокол

Мобильная разработка v8 1cv8.cf Абонемент ($m)

В платформе 1С реализована прекрасная возможность работы с открытым веб-протоколом OData, который предоставляет любой другой платформе интерфейс доступа - возможность запрашивать и обновлять данные из базы 1С. Далее в статье будут описаны особенности работы мобильного приложения ODa, которое без программировании на стороне Android'a позволит разработчикам публиковать базы 1С, что даст возможность обычным пользователям взаимодействовать с объектами метаданных, используя нативные элементы интерфейса платформы Android.

1 стартмани

22.10.2019    16278    8    Kosigo    11