Мобильное приложение — Учет личных финансов




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

17 Comments

  1. mazahaka29

    оно работает?

    Reply
  2. DoomI

    Конечно работает.

    Reply
  3. NOVOPRO

    Добрый день.

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

    Reply
  4. _also

    А чем Ваше приложение лучше типового от 1С? Тем, что бесплатное? 😉

    Reply
  5. DoomI

    (3) NOVOPRO, здравствуйте.

    В планах серьезная поддержка этой программы, можно будет обновляться через Play Market. Так что глюки выявляемые будут устраняться.

    Уже лет 5 пишу всяческие программы на эту тему. В данном приложении заложил 3 идеи:

    1.Ввод данных о расходах должны вводиться сразу после покупки

    2.Должна быть возможность обрабатывать данные позже на десктопе

    3.Должен быть какой то стимул вводить туда данные помимо понимания, что нужно следить за своими расходами. Такой мини стимул — получение новый званий за ввод данных. А новые звания в будущем откроют новые возможности в программе. И возможно создам таблицу рейтинга.

    Reply
  6. DoomI

    (4) _also, здравствуйте. Я надеюсь что данная программа в итоге будет не лучше и не хуже. Начитавшись всяких умных людей про то как важно управлять своими финансами ,начав с их инвентаризации, хочу помочь людям действительно этим заняться. И основной упор в программе будет на то ,чтобы людям было интересно это делать.

    Reply
  7. eugeniezheludkov

    чет не смог скачать как не пытался , хотя $m сняли 🙁 … надеюсь программа написана на java + sqlite, а не на 1с?

    Reply
  8. TMV

    (7) eugeniezheludkov, судя по скринам, написана она на мобильной платформе 1С

    Reply
  9. DoomI

    (7) eugeniezheludkov, написано на мобильной платформе 1с. Скачиваться должна без проблем.

    Reply
  10. GAMLET

    В новой версии 1С Денег изменены названия многих объектов, загрузка работать не будет

    Reply
  11. DoomI

    (10) GAMLET, проверю. Если подтвердится — выложу новую версию импорта.

    Reply
  12. DoomI

    (10) GAMLET, выложил новую версию импорта

    Reply
  13. mirkwood89

    чего то я не сообразил как обмен с настольной версией провести — просветите? десктопная программа файл из телефона забирает — и всё, ничего больше не происходит

    Reply
  14. DoomI

    (13) mirkwood89, а обработку по импорту скачали? Открыли ее в 1С:Деньги? Выбрали в ней ваш файл для загрузки?

    Reply
  15. pinkinni

    так файл даже получить не получается.Путь для сохранения копии кривой,редактированию не поддается,вдобавок по этому пути выгрузки не наблюдается.Короче без подробной инструкции обычный чел выгрузить данные в десктопную версию не сможет.Да и разместите обработку для импорта на версию 1с деньги 1.0 так же как и на 2.0 на другом серваке,не все могут качать от сюда.Если можно объясните подробно как сделать выгрузку в десктопную версию.А так прога зачетная,мне понравилась.

    Reply
  16. DoomI

    (15) pinkinni, на разных аппаратах выгружается по разному. У меня путь такой — storage/emulated/0/Android/data/ru.asist.finance/files либо с точки зрения пользователя — Меню/Мои файлы/Device storage/Android/data/ru.asist.finance/files

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

    Reply
  17. DoomI

    Разместил новые версии файлов

    Reply

Leave a Comment

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