Аки Феникс




Принцип обмена данными из 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. 3vs

    Хорошее чтиво в субботу!

    По товарищу Плутарху — «Ученик — это не сосуд, который надо наполнить, а факел, который надо зажечь.“

    Автор вполне уже созрел для преподавания! 🙂

    Может стать спичкой/зажигалкой/линзой/кремнем.. для зажигания множества факелов!

    Reply
  2. for_sale

    А сканворды будут? Можно тогда сразу в сборник для чтения в электричках.

    Reply
  3. SirStefan

    (1), кстати да. Как Максиму Дорофееву оформить свой продукт и продавать его. Ездить по городам, читать лекции.

    Reply
  4. acanta

    Например такие, со шведским столом. И все включено.

    https://youtu.be/riF7GLRzg90

    Reply
  5. riposte

    tl;dr

    Я всех ненавидел, но потом переустал.

    Бизнесы надо использовать для реализации собственных амбиций.

    Работать надо преследуя личные цели и заниматься только интересными вещами, тогда все будут счастливы.

    В жизни и работе нужна цель, тогда все будет хорошо.

    Ни один вымышленный персонаж этих историй не пострадал.

    Мы за все хорошее и против всего плохого.

    Reply
  6. CheBurator

    на работе мы проводим — суммарно — полжизни. полжизни отдавать на работу? — это же нонсенс. есть два выхода — или чтобы работа стала твоим домом или ну ее нафиг такую работу. дома мы работаем и делаем все для кого? — для себя и родных. Ну так и на работе — делать надо для себя. Если это удается — ну и хорошо. Не удается (по разным причинам, как внешним так и внутренним) — НАХЕР такую работу. Уходим и ищем другое. Да, возможно потеряем в деньгах. но деньги вещь такая — воспроизводимая. а потраченное время — нет. Выбирайте что важнее.

    Reply
  7. TODD22
    Но я не собираюсь тащить на себе всю компанию.

    Уровень ЧСВ овермного.

    Как я всё это ненавижу. Работу, начальника, программирование, среду разработки, задачи, систему, в которую они записаны, подчиненных с их соплями, цели, электронную почту, интернет, социальные сети, где все поразительно успешны, показушную любовь к компании, лозунги, собрания, коридоры, туалеты, лица, рожи, дресс-код, планирование. Я ненавижу всё, что происходит на работе.

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

    Reply
  8. Manoshkin

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

    Reply
  9. kredko
    И, если честно, я не видел ни одного человека, который сказал бы «а, мне деньги не нужны».

    Вот и я такой же. Есть немного, но их хватает. А зачем еще надрываться?

    Reply
  10. acanta

    (7) два раза в месяц ты чувствуешь что все коллеги тебя ненавидят

    Reply
  11. Quantum81

    Хорошо написано.

    Но мне вот вспомнилось как лет так 15 назад, на предмете менеджмента мы рисовали табличку 9 на 9. Где на одной оси — интересы компании, на другой интересы сотрудника. Так вот точки 9,1 и 1, 9 — это плохие компании. Идеально 5,5.

    Это я к чему? 🙂 Всё давно уже придумано, а мы как всегда не прочитав инструкции, пытаемся настроить телевизор :)))

    Reply
  12. 1c-intelligence

    (11)

    Идеально 5,5.

    а на предмете менеджмента рассказывали, как прийти к этой цифре?

    Reply
  13. Quantum81

    (12) конечно нет. Всё-таки это был технический вуз. Основное — это было показать что кроме интересов работодателя, есть интересы сотрудников, и считаться с ними надо прилично.

    Reply
  14. TODD22

    (10)зарплату начисляешь?

    Reply
  15. Alistan007

    Это дополнительная, очень серьезная нагрузка на руководителей, управлять коллективном индивидуалистов. Гораздо проще управлять «роботами». Наверное по этому такой подход встречается в основном на стартапах.

    Reply
  16. swenzik

    у этой статьи должно быть продолжение про то, как носишься вот так по компаниям, находишь вот такие интересные цели, проходит 5-10-15 лет и начинаешь думать — а что дальше то? невозможно же так до бесконечности. одни пытаются сменить 1с на с# или меняют предметную область, другие открывают своего франча, третьи подаются в управление проектом/консалт/аналитику, четвёртые становятся узкоспециализированными высокооплачиваемыми. но дальше то что? может быть свой интерес в чужом проекте — хорошо, но свой интерес в своём проекте — ещё лучше. простите за сумбурный поток мыслей.

    Reply
  17. Painted
    А фразу «деньги не могут служить целью» придумали работодатели

    Вообще-то, я немного верю в эту фразу.

    Когда-то работал на заводе слесарем, учился на сварщика по вечерам. Мой приятель, сварщик, получал очень неплохо плюс нехилые шабашки. За выходные он мог нашабашить мою месячную зарплату. Но старшие товарищи на заводе и мои родители говорили, не ведись на длинный рубль, иди в институт, получай образование и я послушал их. И не пожалел. И до сих пор настороженно отношусь к «длинному рублю». Это настороженность уберегла меня в свое время от МММ и других неприятностей, на которых подорвались масса моих знакомых и друзей.

    Reply
  18. 1c-intelligence

    (13) вы просто написали, что всё уже придумано. Необходимость учитывать интересы — придумана. Как именно это делать — не так хорошо придумано. Примеров — вообще единицы.

    Reply
  19. Астиг

    Спасибо за чтиво! Все по делу. Во многом пересекается с моими установками. Невозможно ходить на работу просто чтобы выполнять чьи-то задачи, просто ради денег. Всегда должен быть фоновый процесс, вытканный из своих целей и задач. Так интереснее. И полезнее для всех. И тебе польза пока ты «свои дела делаешь», и компании хорошо — «устойчивость» сотрудника повышается.

    Reply
  20. Tavalik
    Своя цель выступает в роли инъекции, генной модификации для работы. Любую задачу, которую мне дают, я тыкаю шприцем своей цели, и задача становится «моей». А мою задачу я делаю с удовольствием.

    Примерно все таке. С мотивацией и установкой целей особых проблем никогда не было.

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

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

    Reply

Leave a Comment

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