Agile для внутренней разработки




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

14 Comments

  1. mulla1979

    Спасибо, очень познавательно!

    Reply
  2. Кузьмич

    ууу … сколько много «умных слов». Сразили.

    Software Engineering

    Все, о чем тут расписано определяется «устаревшим» понятием «экстремальное программирование». Только напридумывали новые технологии и методологии. А суть осталась там же.

    зы. Презентация конечно труд еще тот. Снимаю шляпу за оформление.

    Reply
  3. Designer1C

    Тема важная. Для меня самое интересное в статье : как не делать лишнюю работу.

    Есть просьба использовать русские слова вместо слэнга.

    Либо в начале статьи писать словарик. Лично мне было бы более понятно.

    Reply
  4. maxx

    А при каких размерах проектов стоит применять подобнве технологии?

    Например, у меня часто есть проекты на 200-300 часов срок исполнения от 2 нед до месяца. Разработчиков от 2 до 6. Список задач составлен, бюджет задачи в среднем 4-5 часов ( отчеты, печ.формы, мелкие механизмы)

    Есть ли время на большое количество показов?

    Reply
  5. ВикторП

    3.То что здесь написано — не XP(экстремальное программирование..) Agile Scrum- про управление и организацию, а xp- про инженерные практики,то же парное программирование, к примеру

    Reply
  6. ВикторП

    4.Для вас подходит хорошо. Заодно скорость команды узнаете

    Reply
  7. brr
    А для этого достаточно делать регулярные показы заказчику. Это могут быть даже не показы, нам просто нужна качественная грамотная обратная связь.

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

    Нужное подчеркнуть, отсутствующее добавить

    Reply
  8. Yashazz

    Много картинок, много пыщь-пыщь, всё очень красиво, наглядно, увлекательно, и как всегда на практике заканчивается полным уродством, провалом и жестью немерянной. Любимый приём всех этих многознатцев-консультантов от эйджила — напустить пыль в глаза, очаровать сладкими сказками, как всё будет круто, потом сгрести бабла и сбежать. А реальный проект потом имеет только проблемы.

    Я б за попытку распространять все эти agil’ы, особенно применительно к разработке 1С, сажал бы как за вредительство и мошенничество.

    Reply
  9. KSy

    (8) Поддерживаю.

    Пусть они без ТЗ с частыми показами заказчику попробуют хотя бы УТ 11 (я не беру ERP) с доработками по планированию закупок/продаж+бюджетирование внедрить.

    Такие статьи в стиле «кукушка хвалит петуха…» проходят на ура на хабре.

    Reply
  10. karapuzzzz

    (9)Для внедрения продукта используйте Waterfall, а для разработки — Agile. В чем проблема? Каждая методология имеет свою применимость. Хороший PM будет применять то, что необходимо именно в этом случае.

    Reply
  11. karapuzzzz

    (8)А какую методологию вы используете?

    Reply
  12. Yashazz

    (11) Никакую. Мы методологиями не заморачиваемся, мы работаем. Дело делаем. Конфигурации создаём, доработки выполняем. Некогда нам, знаете ли, дурью маяться.

    К наступлению авралов, частоте факапов, проблемам с клиентами итд — наличие либо отсутствие упомянутой «методологии» и прочей заумной хрени не имеет, как показывает опыт, ни-ка-ко-го отношения.

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

    Reply
  13. karapuzzzz

    (12)

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

    Та и не должен бизнес об этом знать. Точнее, желание бизнеса готового на вчера не должно встречать «у нас же спринт» или что-то подобное. Бизнес захотел — делаем. Добавляем новые задачи в спринт и делаем. Эджайл именно так и говорит: «Готовность к изменениям важнее следования первоначальному плану»

    Методологиями не заморачиваются, методологиями следуют. Ни один проект не может существовать без управления. А значит, или вы не ведёте проектную деятельность (что мало вероятно при разработках конфигураций) или ведёте, но вы не в курсе.

    Reply
  14. Rico17

    Методология нужна когда «все плохо» 😉

    Когда «мощность» разработчика не справляется с необходимым объемом в необходимые заказчику сроки.

    Reply

Leave a Comment

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