Если бы архитекторам пришлось работать так же, как программистам…




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

35 Comments

  1. Автор — МОЛОДЕЦ

    Reply
  2. Очень жизненно, прямо читал и плакал, плакал и смеялся — короче улёт!

    Reply
  3. Очень похоже на работу программера… просто класс…

    Reply
  4. Просто копия нынешней моей работы, дал прочесть напарнику — до слез…

    Reply
  5. Качество программы, как и дома определят клиент, а не программист или архитектор. Поэтому ненадо ныть!

    Reply
  6. BOB’у:

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

    Вы текст-то читали? С проектами когда-либо работали?

    Автору пять.

    Reply
  7. Супер!!!

    Я плачу!

    Автору — пять однозначно.

    Reply
  8. Вован

    Пять с плюсом, очень похоже.

    Reply
  9. Nickotin

    12 баллов!

    Штормит от слез и смеха! Вот она вся наша работа господа программеры, особенно жизненнно про то шо не тока лучше но и дешевше 🙂

    Reply
  10. Рыдала. Очень

    Reply
  11. Перец

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

    но смешно 🙂

    Reply
  12. Бывает и наоборот.

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

    :))

    Reply
  13. vasilykushnir

    Хм… Прикольно, прикольно, батенька.

    Довольно точный портрет внедруна (или внедренца?). По сути, это характеристика того, кто мы еси. Подгонка (заточка?) уже чего-то готового под требование заказчика (порой маразматическое — СПАСИБО автору!!!) — это ли можно назвать программированием? И не от того ли у заказчика такие требования потому что внедрун не сумел толком объяснить ему, что предсмтавляет собой устанавливаемая система и, что если заказчик полный м***к, то пусть хоть немного скрывает это.

    Вообще-то, читая статью, хотелось бы хохотать навзрыд, но больше почему-то было второго (навзрыд)….

    Reply
  14. Снусмумрик

    это Тз от клиента, однозначно

    Reply
  15. Да, это то, что от нас хотят те кто пользуется 1с предприятием. Хочу то не знаю что, а ты хоть тресни пополам а сделай!!!!

    Reply
  16. От души написано

    Reply
  17. WWWolfy

    а кто автор то?

    Reply
  18. support

    автор неизвестен

    Reply
  19. Martyn

    Мдя..

    Как то очень близко к жизни

    Слезы аж до смеха..

    Reply
  20. newreactive

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

    Reply
  21. TimA

    Постоянно с таким изначальным ТЗ встречаюсь. 🙂 Приходится показывать визуально нормальное ТЗ, хотя не всегда помогает: «Что вы мне показываете!? Я в этом ничего не понимаю. Мне всего-то надо чуть-чуть».

    Теперь еще буду показывать и эту статью. Спасибо автору. 🙂

    Reply
  22. Это вещь!!! Встречается сплошь и рядом! пять баллов =)

    Reply
  23. Anselm

    Очень похоже 🙂

    Reply
  24. Я ржал!

    Reply
  25. Ворона

    Пожалуйста, не беспокойте меня мелкими деталями. !!!!!!!!!!!!!

    Reply
  26. orbis

    Прям как в жизни 🙂

    Reply
  27. janic

    Точно!!!

    Reply
  28. krolya

    Отлично. Прям как в жизни 🙂

    Reply
  29. PochekutovOleg

    Они бы повесились

    Reply
  30. Программулькин

    Автор жжот и попал в точку. Однозначно плюс. Дата публикации статьи 03.02.2006, на дворе 2012г. ситуация нисколько не изменилась. Печально…

    Reply
  31. Denler

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

    Reply
  32. mulla1979

    Ахахаха, жесть, как она есть!

    Reply
  33. DenisCh

    Если бы строители строили так, как программисты пишут программы, то первый залётный дятел разрушил бы цивилизацию (с)

    Reply
  34. Demosagro
    Reply
  35. user899774

    Ребята, нам необходим специалист, полуштатный. Готовы работать по тз, оплата как за тз, или оклад, все обсуждаемо. Работы много, хватит на долго. Вопросов много, нужен специалист, готовый не только объяснить что не так, но и исправить. Офис в Тюмени, предпочтение кандидатам из нашего города (присутствие в офисе, хотя бы частичное) Я сам руководитель, а разговаривать надо и с бухгалтерией и с отделом продаж, поэтому пишите- назначим встречу.

    Reply

Leave a Comment

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