Дребеденьги. Домашняя бухгалтерия.




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

20 Comments

  1. JohnyDeath

    Есть демо-аккаунт для пробы.

    Логин: demo@example.com, Пароль: demo

    Reply
  2. marsohod

    Да щаз… Так я и выдал все свои секреты в интернет… 😀

    Reply
  3. steep

    😉 поздравляю вы получите 100 руб. на счёт (Light аккаунт).

    Reply
  4. JohnyDeath

    (3) А вы автор проекта? И как вы узнаете на какой аккаунт кидать сто рублей? ))

    Reply
  5. JohnyDeath

    (2) А кому они нужны? И как кто-то узнает, что это вы?

    (3) Кстати, я уже честно положил на счет проекта немного денежек (на текущий момент имею Premium аккаунт).

    Еще б мои небольшие хотелки реализовали и ещё положу.

    Reply
  6. steep

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

    Reply
  7. GSoft

    а чем не нравятся конфы на той же 1С, или сторонние программки?

    Reply
  8. JohnyDeath

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

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

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

    Reply
  9. GSoft

    (8) доля истины в этом есть)))

    проблемнее ее вообще приучить к ведению домашнего бюджета 😀

    Reply
  10. marsohod

    (5) При желании или необходимости — могут 😉

    Ведь может же администратор почтового сервера читать почту?.. Не обязательно читает, но — может…

    Reply
  11. JohnyDeath

    (9) как ни странно, но несколько месяцев назад она сама выдвинула такую идею, после чего я стал активно тестировать различные программки. Понял, что это очень не удобно (а особенно неудобно — это делать такую хреновину на 1С). Создал для жены книгу в Excel-е. Потихоньку шел учет, но меня такой вариант вообще не радовал и поэтому я свои расходы туда практически не вносил, в следствии чего через месяц этот «проект» приказал долго жить. 😀

    И вот недавно набрел на этот ресур. И я понял, что это именно то, что я хотел. Впервые в жизни начал вести нормальный учет дохода/расхода. Всегда хотелось, но почему-то никогда не доходили руки. Уж не знаю насколько меня сейчас хватит. Теперь есть другая маленькая проблема — жена переболела этим делом 😀 пока вношу её расходы сам вечером ))

    Reply
  12. JohnyDeath

    (10) ну, если так рассуждать, то вообще нигде регистрироваться нельзя и пользоваться электронной почтой для переписки — тоже.

    Или вы говорите про администратора почтового сервера на вашем предприятии?

    Reply
  13. marsohod

    … ничего себе «небольшая перестройка индексов» 😮

    В соответствии с призывом «жить будущим» пока перестраивался индекс я скачал себе «Интересную механику» №1 за 2010 год 😉

    (12) можно и нужно (!)

    только для конфиденциальных писем надо использовать PGP (или аналог) 🙂

    Что касается данного сайта, то он использует недействительный сертификат безопасности — это если поставить флажок SSL при входе. Firefox сразу на это среагировал и предупредил, что:

    «Даже если вы доверяете этому сайту, эта ошибка может означать, что кто-то вклинивается в ваше соединение с сайтом»

    Так что — нехай подпишут сертификат в VerySign 😉

    Reply
  14. JohnyDeath

    (13) да, владельцам сайта уже писали по поводу подписи сертификата, думаю, что исправят.

    А вообще, кому может быть интересно куда я потратил свой аванс??

    Reply
  15. marsohod

    (14) правильно поставленный вопрос уже содержит в себе ответ 🙂

    …маркетологам, рекламщикам и тому подобным «манипуляторам»…

    А вопрос «сколько?» может интересовать другие «компетентные органы»…

    Вот если бы конфиденциальные данные хранились у них на сервере в зашифрованном виде, а расшифровывались только(!!!) на стороне клиента — тогда другое дело…

    Reply
  16. JohnyDeath

    (14) Вы, батенька, параноик похлеще Бёрда Киви 😉

    Кстати, можешь вот сюда зайти, отметиться? И про «Интересную механику» рассказать?

    Reply
  17. artbear

    (0) Жень, поставил плюс за само описание, но ИМХО все-таки вести финансы в инете не очень удобно.

    Есть один большой плюс — автосинхронизация данных разных пользователей.

    Но все остальное только минусы:

    1. работа через инет — дополнительные затраты на его оплату + возможные тормоза при вводе данных.

    2. инет не везде доступен — в каком-нибудь подвале не порулишь данными.

    3. не думаю, что ввод данных в инете намного проще, чем ввод данных в 1С или других прогах.

    Я лично пока предпочитаю ввод данных через коммуникаторы.

    У меня и у жены коммуникаторы на базе Windows Mobile 6.1, есть куча разных программ — например, мы пока пользуемся AceMoney.

    Но самое главное — нужна очень большая сила воли на внос всех затрат постоянно, ежечасно и каждодневно 🙂

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

    Далее месяц вносили данные вместе, ужаснулись итоговой сумме еще больше.

    Сейчас у меня интерес пропал 🙂 — жена пока держится, но уже не так активно!

    Reply
  18. JohnyDeath

    (17) Артур, отвечу по пунктам:

    1. работа через инет — дополнительные затраты на его оплату + возможные тормоза при вводе данных.

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

    Какие тормоза?? Вообще никаких. ИМХО, 1С тормозит сильнее. Даже через ЖПРС всё прекрасно работает (ПДА-версия).

    2. инет не везде доступен — в каком-нибудь подвале не порулишь данными.

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

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

    3. не думаю, что ввод данных в инете намного проще, чем ввод данных в 1С или других прогах.

    А ты попробуй. Приятно удивишься.

    Кстати, из полезных фишечек там есть «тэги» — как бы произвольные группировки/свойства. В других программах такого не видел.

    Я лично пока предпочитаю ввод данных через коммуникаторы.

    У меня и у жены коммуникаторы на базе Windows Mobile 6.1, есть куча разных программ — например, мы пока пользуемся AceMoney.

    У меня нет коммуникаторов (у жены тоже). Если бы был и было жалко инета не него, то также — ставим оффлайн версию и радуемся.

    Кстати, показал жене. Она вынесла свой вердикт: «Прикольно! Удобно.» Это значит 5 баллов! 😉

    Reply
  19. KapasMordorov

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

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

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

    Должны быть цели. Нет цели — зачем учет?

    Можно про тайм-менеджмент почитать — деньги и время для учета примерно одинаковые ресурсы.

    Учет становится интересен при примении финансовых инструментов (кредиты, депозиты, акции) и долгосрочном планировании (покупки, отпуск, недвижимость).

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

    Для ежедневного учета удобнее всего КПК.

    Reply
  20. JohnyDeath

    (19)

    Учет становится интересен при примении финансовых инструментов (кредиты, депозиты, акции) и долгосрочном планировании (покупки, отпуск, недвижимость).

    В моем случае именно для планирования всё и затевалось. Там есть модуль планирования. Но мне он пока не очень нравится. Написал тамошним админам пару хотелок.

    Были и другие мотивации:

    -куда ушли деньги

    -наглядно посмотреть куда они ушли и в какой пропорции распределились.

    А вообще давно хотел попробовать навести порядок в этом деле. Надеюсь, что меня надолго хватит.

    Для ежедневного учета удобнее всего КПК.

    Ну тут вроде бы никто и не спорил про КПК и ПК. 😉

    Reply

Leave a Comment

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