<?php // Полная загрузка сервисных книжек, создан 2025-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='\
    
поставил бы еще плюс за пример
всё ж методологий, нотаций великое множество и порой не всегда просто понять каким образом их использовать в конечном виде
приложенный пример — это ТЗ же? Это конечный документ для разработчика? Или еще как-то детализируете?
(1) romansun,
Спасибо.
Нет, приложение — это только часть довольно большого ТЗ по проекту. Из-за того, что вырезал, нумерация пунктов сбилась.
По поводу стандартов IDEF0, IDEF1 и еже с ними, я вами полностью согласен: не прижились они у нас. На самом деле меня очень беспокоит тот факт, что 1С до сих пор не предложило им достойной замены. Зато нам досталось непаханое поле. Лично я считаю, что идти на крупные и средние проекты без более-менее формальной методики обследования – верх безрассудства. Лично мы используем модернизированную под особенности 1С методологию IDEF1х, однако она лишь отражает физическую модель данных.
Для графического описания бизнес процессов хорошо подходит
eEPC.
Практические рекомендации по оптимизации бизнес-процессов я постарался осветить в статье Не сочтите за рекламу — просто в тему.
(4) Evgen.Ponomarenko,
Спасибо за отзыв. Почти все замечания принимаются.
Но с небольшими поправками. Мы никогда не презентуем подобное описание именно как SIPOC. Т.е. и для нас и для клиентов это просто удобный способ отображения проанализированной информации.
Описание всегда словесное, кроме случаев, когда клиент решил сам описать процессы. Т.е. интервьюер слушает, записывает и вопросами направляет диалог по схеме снизу-вверх справа-налево.
(5)
А чем обусловлено обратное направление? Понятное дело удобнее идти от цели к средствам,
но как показывает практика циклы вперед-назад-вперед-назад-вперед итерационно-последовательно
приближают результат к адекватному. Почему выбрано обратное направление?
(6) Evgen.Ponomarenko,
Это не обязательное требование. Это методика работы.
Можно от нее отклоняться, но тогда будет существовать большая вероятность, что вы опишите процесс с погрешностями по «высоте» (а значит возможно ошибетесь со многими этапами, которые не будут соответствовать «высоте»), т.к. только в конце сможете оценить требуемый уровень «высоты обзора» процесса. А первоначально «высота обзора» задается именно конечным продуктом процесса и его потребителями.
При прямом, а не обратном обследовании есть риск «заблудиться» в последовательности, когда в описании вы начнете уходить в другие процессы (например, когда в процесс продажи разойдется на продажу со склада и продажу под заказ, тогда начинают описывать запросы поставщикам, анализ оплаты поставщику и пр). В обратном обследовании с конца процесса, вы описываете прямую линейную последовательность от конца к началу и вам придется соблюдать линейность путем повышения абстракции этапов процесса (а значит автоматически и корректировку высоты обзора). Это сразу же дает возможность выделять простые служебные процессы, которые описываются в других картах.
Эту последовательность не обязательно соблюдать, если описываются уже оптимизированные рабочие процессы, но в этом случае они, как правило, уже формализованы кем-то и в каких-то нотациях.
Еще не обязательно соблюдать последовательность, если есть опыт. Тогда интервьюер просто не даст перескакивать с процесса на процесс в ходе интервью, но это уже не методика, это личный опыт и навык.
(7)
Спасибо, за совет. Действительно, со временем многие вещи делаешь мгновенно, на автопилоте.
Двигаясь от конечной цели к первоисточнику легче держать курс:
по горизонтали — не отвлекаясь на посторонние процессы
и по вертикали — не углубляясь в детали.
Пошел ставить обновленную прошивку на автопилот )
«Иногда клиенты либо не имеют средств на обследование, либо просто не понимают за что собственно они платят и как следствие жадничают. В этом случае я им предлагаю вариант, когда они самостоятельно заполняют и детализируют процессы. Получается такой поверхностный консалтинг, который иногда приводит к проектам. Это происходит в переписке, где я им скидываю уже готовые брифы, а они их заполняют. Мы созваниваемся, когда возникают вопросы. Такой подход позволяет не прерывать отношения, поддерживать диалог и при этом не тратить времени, если клиент жадный до денег, находится в ситуации вынужденной экономии или просто не понимает за что платить консультантам. Вкусив горечи консалтингового труда, он либо выдает результат, с которым можно начинать работать, либо соскакивает, квалифицируя себя как нецелевого клиента, либо покупает нормальное обследование. В любом случае, при таком подходе мы остаемся в сильной позиции. В первом случае мы помогли, не затрачивая своего времени, нам это зачтется потом. Во втором случае мы сэкономили кучу времени и нервов на нецелевых действиях. И в третьем мы заработали на обследовании.» Вот только за это плюс) только я бы написал не иногда, а в большинстве случаев
Автору: не сочтите за рекламу, но моя статья о SIPOC в википедии сильно порезана, поэтому привожу дополнительные материалы по теме:
Примеры SIPOC можно посмотреть в проектах зеленых поясов шести сигм, также опубликованных на сайте. Ссылки не привожу, дабы не вызвать гнев администрации.
(10) DMAgIC,
Да я вроде ссылку на ваш сайт в статье дал.
Там ссылка на «SIPOC. Руководство пользователя». Я подумал, что будет уместно привести дополнительные публикации, так как инструмент, не смотря на свою простоту, довольно сложен при первом использовании.
Ну а то, что осталось в вики… тихий ужас. Кстати, поначалу вообще хотели удалить, так как считали, что статья о SIPOC не имеет энциклопедического значения.
(12) DMAgIC,
Пусть будет, мне не жалко
Спасибо, полезно