<?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='\
Привет !
(1) Steelvan, Игорь, привет! Необычное место для «поздороваться»))
Статья содержательная. Все оценки и риски разложены по-полочкам. В своей практике обычно я все возможные риски закладываю в договор. Как например, у Вас есть описание в одной из ошибок — изменение процессов в ходе реализации проекта. Наверно самый распространенный риск, если разложить его на количество внедрений.
Я всегда руководствуюсь двумя правилами:
1. «Что для Заказчика СЛОЖНО — значит для Исполнителя будет ПРОСТО. И наоборот. Что для Заказчика ПРОСТО — для Исполнителя ОЧЕНЬ СЛОЖНО». Например, если Заказчик говорит (очень утрировано): «Мне надо чтобы я нажал одну кнопочку и всех была вся информация, все пересчиталось, СМС отправлены, письма всем клиентам отправлены, отчеты на мониторе у руководителя». Значит я понимаю, что придется попотеть, чтобы выполнить его требования. Соответственно, закладываюсь на увеличенное количество работ + привлечение квалифицированных специалистов. И таким образом обосновываю стоимость работ. Но если мне Заказчик говорит: «Сделайте мне 1-2 отчета, мы его потом выгрузим в Excel и сами выполним все дальнейшие расчеты и т.п.» Соответственно и стоимость будет небольшая. Тогда и к конечному результату претензий я не принимаю.
2. Так называемая трех-факторная модель «ДЕШЕВО — БЫСТРО — ХОРОШО». Выполняются всегда только 2 фактора, при этом третий фактор принимает противоположное значение». Вот с этих позиций и оценивать проект. Понятно, что каждый фактор величина относительная, и тем не менее….
Где-то я этот текст уже видел.
Автор, вы Автор или просто перепостили?
Текст полезный? не спорю.
«плюс» статья хорошая
надеюсь «заказчики» тоже со временем начнут понимать
Содержательная статья, большое спасибо за то что все разложено по полочкам. Добавлю к себе в Избранное, чтобы по необходимости перечитывать.
Спасибо за статью очень полезно и содержательно.
(4) Nikola23, Вы ничего не курили? )) Может на Инфостарт приезжали и в зале слушали?
Считаю что автор описал всего 2 метода:
1. На основании опыта (пилотный проект или коммерческое предложение);
2. Составление укрупненной сметы (с максимальной детализацией за оплаченное время).
Но это не разные методы, а разные этапы проектирования.
Причем оба этапа убыточны (чаще), но нормализуют отношения с клиентом и формализуют этапы выполнения проекта.
Рекомендую ознакомится с ГОСТОМhttp://www.it-gost.ru/content/view/101/51/
🙂
В идеале лучше разделить программистов и аналитиков. Хотя и сыр и масло и сливки — молочные продукты.
(9) sergsqvo, так всё таки считаешь, что описал два метода?
Замечательная статья. Добавил бы еще три нюанса при оценке проектов:
1. Загруженность очереди проектов. Если работы мало — демпингуем, если работы много — задираем ценник повыше и меньше тратим времени на ухаживание за Заказчиком
2. Стратегическая важность проекта. Например если хотим зайти на новую отраслевую специфику, или Заказчик уж очень перспективный для будущих задач, то иногда стоит снизить ценник.
3. Объективно отлаженные технологии позволяют держать низкий ценник и сохранять достойную рентабельность — но требуется специализация, что, в свою очередь, требует отлаженный процесс продаж и масштаб.
(11) SunShinne,
+ за п.3
(9) sergsqvo, а что там в ГОСТе про оценку сказано?
(11) SunShinne, Да, все 3 пункта справедливы. Но с «меньше тратим времени на ухаживания за Заказчиком» надо осторожнее, чтобы не сказалось на качестве и репутации. Иногда лучше совсем отказаться, чем сделать плохо.
(11) SunShinne, (14) ну так, и по какому методу оценивать? По 6-ти, по 3-м, по 1-му? И как затраты на оценку — лягут потом в общие расходы?
(15) AlexO, по поводу затрат на оценку я говорил на круглом столе на позапрошлой конференции. Советую придерживаться следующего подхода:
— если продажа состоялась, относить затраты на проект;
— если продажа не состоялась, относить затраты на общие затраты по продажам, т.е. на само направление продаж (отдел например, или компанию в целом — от структуры компании зависит).
А оценивать надо тем методом, которым чаще угадать получилось.
Добрый день!
По оценке проекта. Я оцениваю по личному опыту плюс 30% на непредвиденные (30% могут и не появится, т.е. опционально, о чем заказчик предупреждается заранее). Но это что касается, когда проект веду я. Когда начинаешь оценивать со своей колокольни, отдавая его другому исполнителю, то тут просто пальцем в мимо. Соответственно вопрос в оценке уровня компетенции исполнителей. Как с этим вопросом быть? Наличие сертификатов не в счет, иногда такие дубы колдуны с сертификатами попадаются…
(17)Добрый день, Андрей,
Проблема известная, сталкивался с таким. Я когда оценивал, всегда исходил из того, своей командой делать, или это просто оценка. На конференции упоминал об этой проблеме. Раз Вы умеете оценивать для себя, значит сможете и для других. Что делать: наиболее подходящим в такой ситуации является метод, который я назвал «сметный» (№5 в презентации). Еще лучше сделать оценку несколькими специалистами, затем сравнить.
(18) Проблема мне видится шире. Нет у нас в стране четкого понимания стоимости АйТи услуг у владельцев бизнеса. Я бы даже сказал хотя бы уровня затрат на АйТи. Многие относятся к этому как к неизбежному злу, а не как к реальной помощи и сокращению издержек (не будем употреблять слово Затарт). Посему оценка специалистом который даст меньше, будет заказчиком восприниматься как более объективная.
А где ищут(компания или специалист) оценщиков web-проектов или специалисты, которые проводят экспертизу в 1С-проектах, справятся?
(20) Хотя технологии оценки аналогичные, все же это разные проекты, разный опыт требуется. Необходимы компетенции именно в аналогичных проектах. Поэтому для WEB-проектов лучше к студиям разработки сайтов обращаться.