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




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

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 не будет опубликован. Обязательные поля помечены *