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




Принцип обмена данными из 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='\

11 Comments

  1. Kosmovski

    на ios можно и без джейл брейка обойтись и без регистрации как разработчика, лично я сделал так: поставил из апп стора уже готовую программу на платформе 1с — (Конферометр если кому то интересно, програм на платформе 1с в апп сторе несколько десятков). поднял на своем компе вебсервер, опубликовал мобильное приложение на веб сервере. Потом просто добавил новую конфигурацию к конферометру через кнопку «+» и прописал путь к адресу обновления локальный ай-пи своего компа на котором работает веб сервер. Обновляем конфигурацию и все, моя конфигурация на невзломаном айфоне, и 100 дол за аккаунт разработчика секономил.

    Reply
  2. DitriX

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

    Дабы не голословить:

    1. Джейл брейк делать не надо, тут уже ответили (1)

    2. 1Су глубоко пофиг, у вас Note 3 или S3, с точки зения производительности — они работают на одном уровне (с 1С)

    3. Учите, что такое идетификатор строки, и как по нему получать строку, то что вы описали — это НОРМАЛЬНОЕ поведеие УФ

    4. Оформление можно делать, для этого надо туда куда вы добавляли мышкой условия — добавить программно.

    Ну и так дальше.

    Reply
  3. artspeed

    Большое Спасибо за критику и подсказки) Буду изучать, исправлять, дорабатывать.

    Reply
  4. V_V_V

    А это о чем: «Вроде бы все хорошо, но экран Iphone от дальнейшей разработки для этого телефона» ???

    Reply
  5. DAnry

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

    Reply
  6. artspeed

    (4) прошу прощения. Где то слова выпали из текста. Исправлю чуть позже.

    Смысл в том что дисплей iphone5s очень мал для работы с 1с мобильным приложением. + имеет ряд ограничений по установке конфигураций. Но В первом посте решили проблему

    Reply
  7. artspeed

    (5) развитие идет вперед конечно. Масштаб услуг растет. Специалистов выпускается все меньше, так как технологии усложняются.

    Это обратная сторона прогресса. Помню в 7.7 работало все топорно. А в 8.1 обычные формы. — нарисовал элемент задал действие к нему и вперед но уже технологичнее.больше возможностей. Запросы врем таблицы.

    Но сейчас клиент серверная концепция уф усложнила процесс разработки. Ограничила в возможностях.

    а мобильное приложение это ограничение и без того ограниченных уф.

    но надо подстраиваться.

    Опять же это сугубо имхо.

    Reply
  8. Ak.1978

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

    1. Сделать синхронизацию с настольным компьютером (например с 1с:деньги)

    2. Посмотреть на сайт http://www.rememberthemilk.com/ почерпнуть оттуда мысли о дальнейших доработках программы.

    3. Если научишь программу оцифровывать чеки из магазинов, будет просто супер (но тут мечты-мечты).

    4. Раздел органайзер переработать под нормальный тудушник с функцией напоминания.

    Например, я ввел задачу в понедельник в 12.00 позвонить васе,с установкой напоминания за 15 минут. от программы хотелось бы чтобы она не только напомнила, но и в самом напоминании тутже предложила набрать васин номер.

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

    5. От нормального тудушника хочется, чтобы он умел позволять создавать задачи, с разверткой по подзадачам (и т.д. до определенного уровня вложенности). И помимо прочего задавать время планируемое для выполнения задачи.

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

    7. Evernote рулит, но отдельная функция для составления простеньких текстовых заметок была бы к месту.

    Reply
  9. artspeed

    (8) Теперь есть задачи для развития. Спасибо за подсказку. Довольно интересные функции предложили!

    Reply
  10. Ak.1978

    (9) Надеюсь со временем эксперимент превратиться в качественный коммерческий софт.

    Reply
  11. dreamcreal

    Очень интересно было читать)

    Легкий стиль подачи информации.

    Reply

Leave a Comment

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