Организация эффективного процесса внедрения на проектах промышленного масштаба




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

12 Comments

  1. Yashazz

    Говорил уже и повторю ещё: все эти красивости совершенно не имеют значения. Ни квалификация внедренцев, ни качество продукта, ни проработка бизнес-процессов не имеют значения. Важно только одно — наличие административного ресурса. Если он будет, то и самую кривую конфу будут юзать «на ура», а несогласных просто нагнут приказным порядком; а если явление «кулаком по столу» отсутствует, то и трижды крутая разработка с отличным теоретическим обоснованием и опытом внедрения тихо отправляется на помойку, а люди копошатся в привычных экселях.

    Reply
  2. pumbaE

    (1) Тупейший холивар, если-бы легко и просто было-бы «всех нагнуть, а кто не хочет, может идти искать себе работу», тогда везде еще dos и foxpro(клиппер) стоял бы.

    Reply
  3. pumbaE

    (0) по Тест-центр, овчинка выделки не стоит. Никаких метрик не собирается, ни по железу, ни по 1с. Вроде тест есть, а понять в относительных величинах «при увеличении пользователей на 20% насколько у нас будет простаивать железо или увеличится среднее ожидание на транзакции» ответа получить не возможно, или например «сейчас в день 1000 документов, при увеличении до 2000 на что необходимо обратить внимание на железо и конфгурацию?» и т.д. Конечно, может у меня были большие ожидания от тест-центра, но вот анализ и сравнение показателей я там не увидел, поиск корреляций, даже простейшие метрики «средняя длина транзакции», количество ошибок, количество отмененных транзакций и т.д. я не увидел.

    Reply
  4. AlX0id

    (3) pumbaE,

    Метрика есть — как в мультиках про богатырей — «Упал»/»Не упал» )

    Reply
  5. bondar_vy

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

    Reply
  6. ogre2007

    Автор, отличный материал! А можно выложить схему управления инцидентами в лучшем качестве? Или статейку, по личному опыту на эту тему, а то эти все itil и pmbook вяло в практику серых будней вливаются, особенно на малых проектах. Интересует не описание хелпдеска, а скорее принципы, фундамент, на котором он строится.

    Спасибо.

    Reply
  7. i_lo

    (0) Со многими пунктами согласен, но есть вопросы.

    Государственные предприятия, особенно крупные, работают через механизм открытых тендеров. Для этого им нужно ТЗ на все работы от начала до конца. И договор на основании ТЗ на полную стоимость проекта. Как от водопадной модели безболезненно перейти к итеративно-цилической? Или все равно мухи отдельно, а котлеты отдельно? Гибкие технологии гораздо имеют массу плюсов, но и б’ольшие расходы для достижения того же результата. В водопадной модели мы как-никак идем прямо к результату, а в гибкой на каждой итерации стараемся направиться более точно к видимой цели. При отказе от следования ТЗ нет страховки, что заказчик на n-ом шаге не поймет, что ошибался в начальных требованиях, и не попросит вернуться к первому шагу. Как юридически строить отношения с крупными государственными заказчиками в случае гибкой разработки?

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

    Reply
  8. jobkostya1c8

    Ничего не понятно в статье. Как-то сумбурно. Одно вот заинтересовало. Пишите

    у нас достаточно крупные и проблематичные заказчики – типа ГазпромНефти и Почты России.

    С вторым, да, согласен. Особенно когда работать в штате с целью наработки опыта внедрения. А вот с первым удивлен. Там же денег куры не клюют?

    Reply
  9. danila_inf

    Статья интересная -спасибо.

    Но есть немного рекламы DB2. Если можно уберите ее))

    Reply
  10. Yashazz

    (2) pumbaE, именно. Оно бы так и было, если б 1С не пропихнула свой стандарт сдачи отчётности в качестве государственно принятого и единственно возможного. Видел десятки организаций, вынужденных работать в 1С только из-за этого.

    Reply
  11. Yashazz

    (5) bondar_vy@mail.ru, вы, вероятно, не поняли. Я не призываю к внедрению кривого-ушатанного продукта, я указываю на вероятность успеха и основные факторы. Адекватный адм.ресурс — это сферический конь в вакууме. Как максимум можно рассчитывать на дядю, который поинтересуется финальным «работает-не работает», или случайно оказавшегося «во власти» собрата-айтишника. Далее адекватность кончается. Можно сделать супер-продукт и убиться об стену, пытаясь сделать так, чтобы он использовался, даже при адекватном начальстве; это я вам как руководитель множества проектов говорю. Есть итальянская забастовка и прочие способы тихого саботажа, потому что » ну мне так привычнее» и «я этой вашей 1С не доверяю, я лучше параллельно в эксельчике буду всё вести». И повторяю, это никак не связано с качеством «вашей 1С».

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

    Ковбойская пословица: «и один человек может привести лошадь на водопой, но даже десятеро не заставят её пить».

    Reply
  12. nookie

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

    Как вы решали эту проблему ?

    Понятно что при многоитерационном подходе рождались десятки мини-ТЗ и мини-бюджетов. И неужели ни один из них не сказал: «Эй, ребята, а сколько еще надо чтобы это все закончилось ?» ?

    Reply

Leave a Comment

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