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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *