Поздравление с новым годом 2011




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2018-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='\

25 Comments

  1. kenshin

    Пока есть еще время пишите может что отредактирую

    Reply
  2. vladismi

    Баловался с публикацией Поздравление… для Семерки, скачал с Windows Live персонажиков, позапускал их.

    А теперь, когда зашел в эту восьмерочную обработину, увидел совсем не Мерлина, а блондинку из закачанных персонажей.

    Странный эффект…

    Reply
  3. vladismi

    Скачанный персонаж прописался у меня как SystemCharacter в ветки HKEY_CURRENT_USER/Software/Microsoft/Microsoft Agent и HKEY_USERS/…/Software/Microsoft/Microsoft Agent реестра. И примененный в восьмерочном поздравлении вызов Мерлина блондиночку не перебил. Только исправлением реестра.

    Reply
  4. artbear

    (1) Авторство исходной версии все-таки нужно указывать, особенно если выполнил минимальную доработку 🙁

    Я лично сразу указал твое авторство в своей обработке для 8.1 по новому году 2010 — хотя твоего кода использовано по минимуму, да и платформы разные, только идея.

    А ты не желаешь этого делать 🙁

    Поэтому и стоит минус.

    За твою версию для 77 для 2011 г. ставлю +

    Reply
  5. Abadonna

    (0), (4)

    хм… лично я со всякими Мерлинами-@@ермлинами отбаловался еще году в 2002-ом.

    А идея… вот она… на все времена, для всех платформ, и для любых праздников 😉

    http://infostart.ru/public/59436/

    И не говорите мне, мол, ВК.. Один фиг и тут код править надо, чтобы вовремя заработала

    Reply
  6. Abadonna

    (3)

    Скачанный персонаж прописался у меня как SystemCharacter в ветки HKEY_CURRENT_USER/Software/Microsoft/Microsoft Agent и HKEY_USERS/…/Software/Microsoft/Microsoft Agent реестра.

    При путнем админе, или при работе UAC он вообще никуда прописаться не должен.

    Эдак под каждым юзверишкой проги начнут прописываться куда ни попадя — страшно подумать! 🙁

    Reply
  7. kenshin

    блин народ вам не угодить одни сделайте другие нафиг нужно

    Reply
  8. Abadonna

    (7) Ну, что касаемо меня, то я вовсе не против баловства, если это кому-то радость доставляет 😉

    У меня-то на работе стоит супер-пупер чат, 1С-независимый, с системой заявок (и их контроля) и такой кучей наворотов (и удаленное администрирование, и файловый обмен… и чего только нет), что больше ничего и не надо. Потому как сисадмин офигенный.

    Какового всем и желаю в новом, 2011 году 😉

    Reply
  9. Abadonna

    +(8) Поэтому раскидать в run once прогу, которая в нужный момент и поздравит, и порнуху про Деда Мороза со Снегурочкой покажет, и сама себя потом истребит — один клик 😉

    Зато ВСЕ увидят, в том числе конструктора, которые в гробу 1С видали

    Reply
  10. Amali

    Если б на картинках не было рекламы АФАЛИНЫ, было бы замечательно, а то все равно потом для себе переделывать пришлось(

    Reply
  11. kenshin

    (10) следующий раз учту спешил выложить могу переделать но народу все равно мало качает

    Reply
  12. artbear

    (9) Клубника про Деда Мороза и Снегурку где?

    выкладывай 🙂

    Reply
  13. Abadonna

    (12) В общественных местах я в себе Ржевского убиваю 😉 Хоть и с трудом

    Reply
  14. Сисой

    Для тех, кому нужна более примитивная поздравлялка, выложил тут:

    Поздравлялка

    Reply
  15. artbear

    Все-таки поставлю минус 🙁

    Зачем на картинках ставишь свой логотип?

    Мне, например, не хочется поздравлять своих бухов и менеджеров от имени непонятной конторы 🙁

    Reply
  16. Abadonna

    (15)Артур, блин… не наигрался что ли еще? :)))

    Поздравлять в 1С — моветон 😉

    Reply
  17. artbear

    Наверное, ты не видел, как тетки радуются 🙂

    Люблю радовать народ.

    ЗЫ а после подобных поздравлений народ больше начинает ценить меня 🙂

    Reply
  18. Abadonna

    (17)

    Люблю радовать народ.

    Вот в нашем холдинге ты как раз и не порадовал бы как минимум 70 человек, которые при компах, а 1С в гробу видали.

    А я вот порадую ВСЕХ 😉

    Да!.. А если только «одноэснегов», то как минимум по 15 базам распихивать бы пришлось

    Reply
  19. artbear

    (18) Фишка в чем — те, кто в 1С, они видят, а остальные завидуют 🙂 и бегают для просмотра к 1С 🙂

    Reply
  20. Abadonna

    (19) А как быть с базами, начиная от 77 ЗИКи бухни, заканчивая 81 УПП и 82 КА? 😉

    И кто кому там должен завидовать? 😀

    Reply
  21. artbear

    (20) На то мы и разработчики, чтобы у всех все работало 🙂

    Reply
  22. Abadonna

    (22) Работать-то он у меня будет хоть на Луне, другое дело захочется ли мне по базам скакать, если я могу это сделать безболезненно без всяких баз 😉 На то мы с тобой и разработчики не только на 1С

    Reply
  23. lushka

    Спасибо, очень пригодилось в свое время, сейчас хочу сделать нечто подобное под 2012. Какой размер картинок необходим?

    Reply
  24. 6a3ujI

    спасибо, всем понравилось 🙂

    Reply
  25. milkers

    (0) Поздравление на управляемых формах https://infostart.ru/public/960899/

    Reply

Leave a Comment

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