Чем меньше воинов и лучше они подготовлены, тем ближе победа




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

41 Comments

  1. venger

    (0) Холивар фореве:-) Покой нам только снится:-)

    Reply
  2. biv75

    Грамотно, аргументировано, по существу

    Reply
  3. beigka

    вы уж извините, я не думала семерошников обижать. тема моей статьи была — обратить внимание людей, занимающихся разработкой ПО или заказчиков проектов к тому что команды обычно недоукомплектованы, что приводит к рискам и снижению качества продукта.

    я не продавец и не рекламщик, я внедренец.

    но за то что прочитали и свое мнение сказали — спасибо.

    Reply
  4. larisab

    Если заглянуть в профайл автора статьи http://infostart.ru/blogs/1054/ и почитать первую ее статью и комменты, становится ясно, что вести речь о чем-то глобальном нет смысла:))). Цели другие у статьи, в конце они и сформулированы: «На ком будем экономить?», и всеее:))). ИМХО.

    Reply
  5. larisab

    + 4 в кризис тестировщиков и консультантов сокращают:((

    Reply
  6. beigka

    2 larisab (4) пытаться объять не обьятное не хочу.

    не сильно приятный коментарий от вас…

    Reply
  7. larisab

    (6) Простите, не хотела обидеть, но такое впечатление сложилось у меня, лично у меня (ИМХО).

    Reply
  8. Шёпот теней

    с таким же успехом можно написать и критику на критику статьи beika, господином Венгером … пока нет Цели и ОбъЁма работ и неизвестно количество отпущенных Ресурсов на вЫполнение то обе эти статьи можно считать правильными и хорошими … всЁ зАвисит от точки отсчЁта …

    .. и если желание заработать «+» для одного это и нормально то для другого заводить новую ветку для обсуждения мне кАжется нЕ крАсивым … тема то с бОрОдОй … настолько старая и столько РАЗ обсуждаемая, что невероятно пытаться еЁ ещЁ рАз обсуждать сЕрьЁзно …

    … трАвА зЕлЁнАя а нЕбО сИнИе …

    …воооОооотмОёмнЕние….

    Reply
  9. O-Planet

    Удивлен, блин. Вот такое и пиши… 😉

    Reply
  10. Арчибальд

    (3)>я внедренец…

    Вот об этом и шла речь в той статье. О том, что злые дяди не хотят оплачивать накладные расходы внедренца, который знает заранее, что будет внедрять, а цели и задачи автоматизации для него вторичны.

    Reply
  11. Vitek

    А это только у меня одного шрифт такой ку..вый?

    «Так что рецепт простой…» — где то читал (не могу щас найти) что команда программистов это как улей с пчелами. И управлять ей надо соответствующе 🙂

    Reply
  12. venger

    (3),(6) beigka, воспринимайте это как веселую игру в «столкновение мнений», не принимайте близко к сердцу:-) Более того, рад, что Вы не стесняетесь и пишите статьи — это хорошо! А критика — это самое ценное, что можно получить, ибо даже проигрывая в споре — Вы выигрываете, на самом деле, т.к. получаете живую, актуальную информацию на интересующие Вас темы, знакомитесь с аргументами других точек зрения, начинаете видеть проблему более многогранно…

    Reply
  13. Vitek

    (12) Оно 🙂

    Reply
  14. venger

    (12), (14) Я скинул это к нам в рабочую е-mail конференцию, пусть манагеры почитают, позлятся….:-)))

    Reply
  15. WKBAPKA

    относительно ООП хотелось бы добавить, что появление ООП это не только способ оформления алгоритмов, это новая парадигма, новая философия программирования…

    Reply
  16. WKBAPKA

    без команды внедрить УПП можно но будет очень долго 😉

    Reply
  17. venger

    (17) Команды бывают разные 😉

    Reply
  18. beigka

    пчелиный рой — это бардак.

    если ктото верит что рой — это клево и с этим можно работать, ну пусть работает. а я хоть вокруг себя разгребу…

    Reply
  19. venger

    (19) > пчелиный рой — это бардак.

    Вы так плохо знаете пчел? 😉 Жаль — у природы надо учиться 😉

    З.Ы. Ту статью я не защищаю, просто если о пчелах, то там четкая организация;)

    Reply
  20. Арчибальд

    (19) Пчелиный рой — это объективная реальность. Ну, с элементом гротеска, конечно.

    Если же радикального креатива не требуется, наведение порядка вполне возможно. Мед на 98% состоит из сахара, который делается отнюдь не пчелами.

    Reply
  21. Арчибальд

    (20) Нет, все правильно. В 19 подразумевается не сам рой, а связка рой — директор. Это бардак, ясное дело.

    Reply
  22. venger

    (22) Связка рой — директор, директор попадет в реанимацию от множественных укусов;) А вот связка матка — рой, это хоть как-то смахивает на аналогию. Т.к. в противном случае, по таким аналогиям может существовать связка рой пчел — медведь;) И в чем польза такой аналогии?;)

    Reply
  23. venger

    (22) +23, Кстати, аналогия пчеловод — рой пчел, как-то ближе к теме;-) И хде там бардак?

    Reply
  24. Арчибальд

    (23)У директора достаточное количество средств защиты.

    Матка же не взаимодействует с семьей, она в ней живет. В смысле, не живет вне семьи => не может противостоять ей.

    Reply
  25. venger

    (25) Аналогия неряшлива, пчеловод — рой, вот аналогия. А так не понимая процесс, им всегда плохо получается управлять. Пусти на пасеку хоть министра, он тоже дров наломает и скажет, что у пчел бардак 😉

    Reply
  26. Арчибальд

    (26)Пчелы живут не только на пасеке, в том-то и проблема. На всех пчел пчеловодов не хватает. 8)

    Reply
  27. WKBAPKA

    как и во всем, все зависит от организатора… если проектный менеджер хороший, значит и команда будет работать хорошо, а если нет, значит нет 🙂

    Reply
  28. venger

    (28) Это лишь часть истины, если команда никакая, то никакой менеджер не поможет. Более того, что вкладывается в понятие «проектный менеджер хороший»? У нас в последнее время (я про Украину, например), вот в том же строительстве, хорошие архитекторы и проектировщики уже в пенсионном возрасте, а молодых специалистов нет или исчезающе мало, я про тот уровень, который должен быть, а не про пыль в глаза. И строят так, что (это мнение изнутри многих) волосы иногда дыбом встают, помимо того, что воруют на каждом уровне, откаты, отмывка денег, фиктивные бюджеты, работы, да и еще чиновники на лапу просят. И до кризиса квадратный метр по этому так дофига и стоил, при низком качестве строительства, хотя и материалы лучше стали и инструменты, и научно-технический прогресс вроде куда-то идет;)

    Reply
  29. WKBAPKA

    ну, это отголоски советской системы образования… откаты и взятки, это менталитет народа, не думаю, что в нашей стране в ближайшее время что то измениться к лучшему, некому менять, да тот же Кролик купленный с потрохами… а хороший проектный менеджер это как хороший руководитель, компетентный прежде всего, и хороший организатор… умение организовать работу, своевременно контролировать исполнение ну и умение общаться с людьми и находить общий язык + владение технологиями- это хороший проектный менеджер. А одному даже УТП внедрить качественно будет очень сложно и очень долго, т.к. затрагивается большое количество областей автоматизации, а во всем быть ассом мало кому удается…

    Reply
  30. venger

    (30) Я никогда не утверждал, что можно все и всегда в одиночку, но логика, что сто грузчиков разгрузит вагон быстрее десяти, не совсем адекватна в случае программирования, это раз. И все должно быть сбалансировано, и руководитель грамотный и команда грамотная и численность разумная, это два. Но это уже отдельный разговор;)

    Reply
  31. venger

    (30) +31, а ну и инструменты соответствующие задачам, а не наоборот 😉 Типа во все дырки эту восьмерку и УПП пихать;)

    Reply
  32. vladsol

    Такое большое количество красивых цитат меня это обычно настораживает, все эти сравнения, конечно говорят о начитанности автора, но как-то от сути уводят.

    А вцелом действительно крупный проект одному выполнить в сжатые сроки не возможно, нужно собирать команду. Максимум на проекте у меня была команда 5 человек, причем большая часть времени уходила на согласования и переговоры. И это совсем не «руками водить», приходиться практически каждый день «компилировать» проект в голове, чтобы принимать новые решения, так что мое мнение — один в поле не всегда воин, просто не устоялся еще регламент для 1с-ников по организации работы на крупных проектах. Вышло под новый год сценарное тестирование, вполне можно пробовать экстремальные подходы по организации работы на проектах, раньше отсутствие возможностей автоматического тестирования мне казалось серьезным препятствием.

    А то, что количество программистов на проекте, совсем не обязательно приводит к сокращению сроков его выполнения и качеству, совершенно согласен. Бывает очень трудно объяснить «недалекому» клиенту, что «мы» выполнить проект быстрее не сможем и количество людей работающих на проекте на это не повлияет, что «мы» не вагоны подряжаемся разгружать.

    Reply
  33. Майкопчанин

    Я хотел одновременно и плюс и минус поставить 🙂 , но система поддерживает только какой-то один знак. Оставил плюс…

    Плюс за труд и попытку осмысления проблемы.

    Минус за открытие Америки и изобретение велосипеда.

    Reply
  34. venger

    (27) Кстати, о пчелах (две ссылки — две страницы) Александр Гордон Диалоги (июль 2003 г.) Интеллект муравьёв:

    http://fictionbook.ru/author/gordon_aleksandr/besediy_20_7_dialogi_iyul_2003_g/­read_online.html?page=1

    http://fictionbook.ru/author/gordon_aleksandr/besediy_20_7_dialogi_iyul_2003_g/­read_online.html?page=2

    Reply
  35. alex_4x
    Reply
  36. vinsentfire

    Мда, сермяжная правда жизни:)

    Reply
  37. vinsentfire

    Просто видел свооими глазами, как один человек пришел и заменил целую команду, так и еще сделал то, что им так толком и не удалось и в более короткие сроки. Просто пришел и сделал, без лишних разговорив и телодвижений. Где нужно убедил, где нужно расспросил и решил как лучше и т.д.

    Reply
  38. venger

    (38) Бывает и такое, но редко:-)

    Reply
  39. Alice

    «без команды внедрить УПП можно но будет очень долго ;)»

    а с командой порой еще дольше…

    — а за неделю управишься?

    — ну, можно…

    — а за две?

    — нет, барин, тут помощник нужен.

    (с)

    Reply
  40. musatov1c.ru

    (38) vinsentfire, вы правы и это подтверждает слова автора. Но как мало таких людей. И как самому стать таким? Вообще не понятно. 🙁

    Reply

Leave a Comment

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