Жизненный цикл задачи




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

15 Comments

  1. HAMMER_59

    Был когда-то такой продукт «Доширак бизнес-ланч», какой бизнес такой и ланч.

    Очередная статья с крайне низким уровнем полезной информации, просто писанина.

    Вы пробовали записывать задачи?

    И как?

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

    Reply
  2. t.v.s.

    Ад своими руками. Почему не надо внедрять системы управления задачами

    Вы либо крестик снимите, либо трусы наденьте

    Reply
  3. Артано

    (3) Не путайте тёплое с мягким. По ссылке яркий пример как любое благое можно обратить во зло. Здесь же говорится о необходимости с задачами работать вплоть до её логического завершения. Чтобы уметь работать, необходимо иметь представление о жизненном цикле задачи и возможных проблемах. Статья по ссылке хорошая иллюстрация, но не опровержение.

    Reply
  4. Infactum

    Read-only этому господину надо, чтоб отдохнул.

    Reply
  5. vano-ekt

    (2)

    Очередная статья с крайне низким уровнем полезной информации, просто писанина.

    да ладно вам, на превью автор самоиронично показал процесс выкатывания очередной статьи 🙂

    Reply
  6. 1c-intelligence

    (2)

    Вы пробовали записывать задачи?

    Цитата из статьи: «Первое, что нужно исповедовать – запись всех задач.»

    Reply
  7. IssakN

    Пишите товарищ — всем не угодить, кому то нравится, кому то нет.

    Reply
  8. o.nikolaev

    А мне статья очень понравилась. А хейтеры, они всегда и у всех будут.

    Reply
  9. webcisp

    Все как обычно, комментарии с мелкой кочки в собственном болоте , из которой мало что видно .. БлагоДарю Иван что еще находите силы делиться своим опытом и рассуждениями, мыслями и знанием. Только одна ваша идея, «Проверка данных» (1С.ИИ) стоит на несколько порядков выше , чем комментарии наших коллег ?. ли. РАд, вашим публикациям, БлагоДарю еще РАз.

    Reply
  10. beefit

    как то очень скупо. Я не хейтер, кстати. Прямо совсем. Вообще автора не знаю.

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

    Если в системе управления задачами у задач нет статуса или по ним нельзя фильтровать, то может это не система управления задачами,а холодильник, например?

    Reply
  11. 1c-intelligence

    (13) статус — это инструмент. Фильтровать — самое простое, что можно делать с помощью этого инструмента.

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

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

    Reply
  12. acanta

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

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

    1с никам следует внимательно относиться к сроку нахождения каждой из задач в определенном статусе и повышать качество и доступность услуг. Глубоким заблуждением будет считать, что клиенты обязаны грызть гранит новейших ит технологий и штурмовать офисы 1с с целью заказать внедрение по техническому заданию согласно ГОСТ, составленному бухгалтерией и офис менеджером за несколько сверхурочных часов.

    Reply
  13. dmarenin

    (15) «будут очень значительные потери ВВП» — сколько?

    «1с никам следует внимательно относиться к сроку нахождения каждой из задач в определенном статусе и повышать качество и доступность услуг» — вы начали уже?

    Reply
  14. acanta

    (16) не поверите..

    Reply
  15. 1c-intelligence

    Друзья, прошу прощения за спам — поучаствуйте в голосовании.

    Reply

Leave a Comment

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