Внешние компоненты. Мобильное приложение 1С




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

35 Comments

  1. IgorKissil

    А СредстваМультимедиа.ВоспроизвестиЗвуковоеОповещение чем не устраивает?

    Reply
  2. Tahallus

    (1) ну началось, Вы видимо не поняли смысл статьи.

    Reply
  3. dreamadv

    Реальное использование например печать на ESC/POS bluetooth термо-принтере. На данный момент у нас свое android приложение на Java. Присматриваемся к мобильной платформе. Это как раз то что останавливало от ее использования.

    Reply
  4. flyer

    (3) с такими принтерами не работал. у вас sdk есть по этой модели?

    Reply
  5. dreamadv

    (4) У нас есть код печати в Java приложении который работает и печатает товарные чеки на данный момент. Предполагаем если вынести его в ВК то можно использовать его же в мобильной платформе. Принтеры Zebra и что-то типа ноунейм с aliexpress под оба разные языки печати.

    Reply
  6. flyer

    (5) если у вас получиться переделать на ВК то можете статью тут накидать. я думаю многих такое решение заинтересует. а если исходники к статье добавите то от меня плюс(+)

    Reply
  7. headMade

    (5) вы стандартные драйвера от 1С для работы с принтерами из мобильной платформы смотрели?

    Описание есть (но оно не полное) тут http://v8.1c.ru/libraries/celmob/mob_certified.htm

    Лучше установите себе на телефон/планшет «1С:Библиотека подключаемого оборудования для мобильных приложений». (там сразу можно и потестить работу с оборудованием).

    Reply
  8. flyer

    (7) Анатолий подскажите вы пробовали запустить данную библиотеку в работу? например для печати на принтере.

    Reply
  9. headMade

    (8) Да, мы использовали драйвер «1С:Принтер чеков» для печати на bluetooth принтере ZEBRA EM220. (т.е. можно использовать бесплатный apk от 1С и не заморачиваться с разработкой собственного )

    Надо сказать что с помощью «1С:Библиотека подключаемого оборудования для мобильных приложений» можно быстро протестировать работу оборудования со стандартными драйверами от 1С (и от др. разработчиков).

    При необходимости за пару часов можно вставить код и в свое собственное мобильное приложение (пример работы опять же можно посмотреть в библиотеке).

    Reply
  10. flyer

    Анатолий если не сложно может статью накидаете о своем опыте? я постараюсь интересные материалы собрать в нашей группе Мобильные приложения 1С (http://infostart.ru/community/groups/1185/)

    Reply
  11. dreamadv

    (7) Спасибо, ранее когда обращали внимание в сторону мобильной платформы данного функционала просто не было. Да нам скорее всего подойдет драйвер от 1С ESC/POS по bluetooth

    Reply
  12. dima1c

    То что нужно, а то ЗапуститьМобильноеПриложение не совсем устраивает.

    Reply
  13. MarryJane

    Может у кого нить есть пример работы со сканером штрих-кода на IOS вешняя компонента. Или кто может написать

    Reply
  14. flyer

    (13) лучше в бирже заказов накатать заявку. там быстрее можете найти исполнителя.

    Reply
  15. Evil Beaver

    Реквестирую вторую статью: как быстро скачать все что нужно и куда тыкнуть, чтобы собрать Helloworld.

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

    Даешь вторую статью! 🙂

    Reply
  16. flyer

    (15) я статью примерно оценивал на контингент который уже работал с native java и собирал проекты. а то получается человек понятие не имеет как работать с android studio то это лучше курсы пройти сначала и практику получить по программированию.

    Reply
  17. Evil Beaver

    (16) позвольте не согласиться. Тут контингент такой, что хоть с чем сможет работать. И если будет статья для профи, но при этом в стиле Quick Start — контингент (в т.ч. и я) скажет огромное спасибо.

    Возьмем абстрактного меня: я на чом хошь напишу, мне лишь нужна помощь по сборке Helloworld, а дальше сам.

    И еще раз: статья отличная, еще бы таких побольше, побольше! 🙂

    Reply
  18. flyer

    ладно попробую дополнить статью

    Reply
  19. Широкий

    Скачал с ИТС и установил приложение на телефон.

    Тестирую — ничего не происходит.

    Единственно при обращении к «ВК.ПолучитьТипДвижения» — выдает что типа обращение к процедуре как к функции.

    Попробовал на 3 разных планшетах — одно и то же.

    В чем может быть проблема — не подскажете?

    Reply
  20. Широкий

    Ваше скомпилированное приложение работает

    Reply
  21. Широкий

    Разобрался. Инструкция написана крайне неточно.

    Надо будет править пути в хедерах. Описаны не все файлы, которые надо скинуть.

    До кучи содержимое «ANDROID_MANIFEST_EXTENTIONS.XML» — с ошибками запостил.

    Компоненту удалось скомпилировать, но в работе, при быстром нажатии кнопок, 1с крашится. Почему — не понятно.

    Reply
  22. flyer

    (21) укажите что в хедерах не так. какие еще файлы скидываете? архив скинул с рабочего проекта.

    Reply
  23. Широкий

    В проекте от 1с доп классы прописаны по пути » Include» — у вас в «binder».

    В «jni» не хватает «stdafx».

    По хорошем — надо было указать, что все кидать по пути «appsrcmain», а то я по первости создавал указанные папки в корне проекта (ну нет у меня опыта).

    И как, я писал, в «ANDROID_MANIFEST_EXTENTIONS.XML» закрывающие теги пропущены.

    Reply
  24. dattk

    https://drive.google.com/file/d/0BxhvUtsBIz6sY0t0SWtHNF8tZ1k/view?usp=sharing

    проект xcode мобильного приложения с вибрацией для ios с интерфейсом вк, как в статье

    Reply
  25. nytlenc

    В шапке StepCounterClass.java

    добавить

    import android.os.Vibrator;

    иначе

    public void runVibrate()
    {
    long mills = 500L;
    Vibrator vibrator = (Vibrator)  m_Activity.getSystemService(Context.VIBRATOR_SERVICE);
    vibrator.vibrate(mills);
    }
    

    не взлетит

    Reply
  26. andrey314

    Народ, подскажите какая все-таки технология сборки примера ВК для мобильного приложения от 1C «StepCounter». Собирать проект нужно только в Visual Studio или Android Studio. Или и в том и другом?

    Если в Visual Studio то какая версия должна быть? 2012 подойдет?

    Reply
  27. leobrn

    не нашел файлы AddInDefBase.h, com.h, ComponentBase.h, IAndroidComponentHelper.h, IMemoryManager.h, mobile.h, types.h в «VNCOMPSVNCOMP83exampleNativeAPIMobile».

    Reply
  28. PROF1L

    Друзья, поделитесь пожалуйста рабочим проектом. Опыта в студии можно сказать почти нет, скачал данный шаблон, а оно не работает как по инструкции написано…

    Reply
  29. PROF1L

    (28) И да, пытаюсь в студии запустить

    Reply
  30. PROF1L

    (27)Коллега, у Вас получилось запустить данный шаблон в итоге?

    Reply
  31. leobrn

    (30) нет.

    Reply
  32. ivazzz82

    (29) Комрады получилось ли у кого собрать этот шаблон. если получилось скиньте исходники. Спасибо

    Reply
  33. bulpi

    (32)

    И не получится. Он под какую-то устаревшую версию студии. Не компилируется в новой.

    Reply
  34. yarsort

    Плюс в проекте Андроид в манифест надо добавить право на использование вибрации:

    <uses-permission android:name=»android.permission.VIBRATE»/>

    Reply
  35. Ignat87

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

    Скачиваю шаблон для мобильных платформ с ИТС, делаю новый проект, подтягиваю туда все необходимые файлы из шаблона (файлы .h и .cpp), собираю проект ARM, делаю .zip файл. Все четко по инструкции. Собираю, кстати, в Visual Studio 2019 Community.

    Вообщем, при подключении 1с просто сворачивается на девайсе и всё. Мне кажется, дело в самой Visual Studio 2019. Может версия не подходит, ума не приложу.

    В шаблоне ничего не менял, по идее компонента, собранная по пустому должна просто вернуть Ложь, а на деле просто крашится ((

    Reply

Leave a Comment

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