<?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='\
Полезная статья. Вроде бы интуитивно понятные вещи написаны, но, как было верно замечено, применяют их обычно не анализируя и не рассматривая как часть общей системы работы/обучения. Всегда полезно разложить всё по полочкам и посмотреть «сверху».
Уже не в первый раз встречаю совет ознакомиться с GTD. Надо будет выйти за пределы Вики и книжки почитать.
Благодарю!
Иногда самые оригинальные идеи решений находятся при смене деятельности — например, когда наступает время шагать домой или прерваться на обед. Думаю, этому как раз помогает ‘Умение видеть проблему максимально широко в любой момент времени’. То есть смог посмотреть на свою работу с другой точки зрения.
Интересная статья.
Вообще, моделирование и оценка модели помогают решать проблемы не только в программировании, но и в жизненных ситуациях. Чем больше ты знаешь, тем более комплексное твое вИдение.
Как говорится — за деревьями видишь лес.
(3) kirmancino, Это как? Сто верст до небес… и все лесом-лесом…
(2) Franco, запостой решение приходит во время езды между клиентами))))) или домой, но чаще по дороге к клиенту))))). Ведь частенько времени в обрез)
Замечательная статья! Концепция обучения новичка подразумевает лишь подачу основ. То есть говорят — учи, но странно, что вооще никто не хочет научить человека учиться, это считается должно прийти с опытом. Если бы детям в школе давали материал по способам запоминания, алгоритмике решений, и т. д. у нас бы интелект нации был бы на очень высоком уровне.
Мир этому дому!
Статья интересная и полезная (и не только для программистов). Жду продолжения.
Хорошие идея по работе программиста. Раньше переживала, а сейчас беру себя в руки, выслушиваю всех и пишу, рисую на бумаге, затем анализирую, и лишь потом начинаю творить. Но лучше всего всегда иметь ТЗ, чтобы сто раз не приходилось изменять наработанное, у пользователей хотелки постоянно растут. А в большинстве случае они просят такое, что волосы дыбом. Фильм Профессионал нарисуйте мне 9 перпендикулярных линий прозрачным цветом =)))
Спасибо за статью. Безусловно она имеет право на существование. Так сказать научная организация интелектуального труда програмиста. Плюс элементы психологического тренинга.
Но мне кажется не следует усложнять.
хорошо написано, показал начинающему разработчику, он нашел себя в статье
Пока написано ни о чем, в стиля аля Ошо. Может в других статьях что то дельное будет.
Спасибо за комментарии!
В статье нет особо глубоких идей или техник. Все достаточно знакомо.
Но по моему опыту, больше всего бесполезно потраченного времени как раз и получаются из-за ошибок в простых казалось бы для понимания вещах.
Причем человек вроде как все понимает, но в нужный момент начинает делать все не так.
Поэтому проговаривание и анализ основных проблем как раз и помогает поставить в памяти очередную, но более видимую зарубку. И шанс увидеть ее и обнаружить не оптимальность своих текущих действий становиться больше.
Статья ни о чем, самое главное в ней подпись с указанием фирмы.
Ступор начинающего одноэсника порождается не знанием предметной области, объектно-ориентированного программирования вообще и реализации в конкретной платформе в частности и неумением пользоваться отладчиком. Поэтому и рецепт один: много работать над своими знаниями и умениями.
(13) OneS, спасибо за ваш комментарий.
Но проблема, которая рассматривается, как раз и написана про ту ситуацию, когда, цитирую: «по какой-то .. причине мы не можем пробежаться по коду отладчиком и понять весь алгоритм».
Это чаще всего как раз проблемы платформы.
(14) andmakarov, а теперь процитируем всю фразу:
или по какой-то другой причине мы не можем пробежаться по коду отладчиком и понять весь алгоритм (или не хотим, так как слишком много кода и столько времени тратить просто не рентабельно).
Вот неумение в купе с незнанием и отбивает всё желание.
Проблемы платформы ищутся в доступном информационном поле: коллеги, интернет. У Вас как бы есть про изучение, но для начинающего реально важно научиться постановке правильного вопроса, что бы получить внятный ответ.
(11) DoctorRoza, вот с этим согласен. Не нашел в статье того что ожидал увидеть прочитав название.
Автор заметил проблему, хорошо ее описал, и на этом фактически остановился приведя лишь общие рекомендации.
(15) OneS, да, про ситуации, когда не рентабельно пробегаться по всему коду с отладчиком, возможно я зря написал 🙂 В этом случае правильнее всегда пробивать заказчика на, то чтобы разобраться до конца в коде.
(Это у меня просто была ситуация, когда проблему надо было решить сейчас и быстро, а проверка результата «чтобы все было хорошо» брал на себя заказчик).
Но вообще вы правы, что такая ситуация неправильная и от нее надо открещиваться и разбираться до конца.
Спасибо за указание на этот момент!
За умение задавать вопросы отдельное спасибо. Да, это я не описал.
(16) Spacer, это первая часть статьи.
Вторая часть будет непосредственно про процесс анализа и решения таких проблем, а так же про фиксацию результатов.
Надеюсь там необходимой информации будет больше 🙂
А мне статья понравилась. Это как-раз опыт человека, который видит и понимает весь комплекс решения задачи. Взгляд глобально на процесс. Способ мышления топ-менеджера. Прочитав статью до конца люди теряют смысл заголовка, а ведь без этой преамбулы основной смысл этой книги будет во много непонятен… Да, книги. Потому как это только вступление.
Не однозначная статья, полезна будет не всем, наверное, многое от мировозрения читателя зависеть будет.
Кстати, очень полезно не замыкаться только на 1С. ООП изучить на питон и C#, запросы по классическим учебникам по SQL. Вместо механического запоминания тут нужно писать вот так, придёт ясность и понимание физики процесса. Что, опять же, избавит от ошибок и стресса. 🙂
от общего к частному.
+Спасибо за статью. Подписываюсь на продолжение.
А мне очень понравилось — дать проблеме имя. Точно работает на успокоение, т.к. имя очерчивает границы проблемы в твоей жизни.
Спасибо за статью.
Программирование — это инструмент. Конечному потребителю интересно то, что вы этим инструментом умеете.
Сильный навык в узкой предметной области в сочетании даже со слабым навыком программирования нередко зарплатее сильного навыка программирования.
Учите предметную область. Ту самую, с которой предполагаете работать — продажи, бухгалтерия, складской учет, производство и т.д.