ТОП 10 самых раздражающих факторов для программиста




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

28 Comments

  1. Abadonna

    Плюсовать не буду из принципа (надеюсь всем уже известна моя позиция по плюсам в блогах, да еще не авторских вещей), но понравилось 😉 +1 в уме

    Reply
  2. WiseSnake

    Человек старался переводил. Тем более это у него первый блог. Он зарабатывал честным путем :).

    К тому блог отличный, тут + однозначно

    Reply
  3. o.nikolaev

    Кажется похоже на Лу Гринзоу из книжки «Философия программирования для Windows»…

    Но все равно +

    Reply
  4. su_mai

    клево

    Reply
  5. z-alexey

    Ребят, внесу ясность. Я не переводил это, ссылка на источник дана.

    Не видел высказываний Abadonna по поводу плюсов в блогах, но считаю, что мешать плюсы за программы и за блог некорректно. По себе вижу сколько времени нужно, чтобы поставили плюс за разработку, а тут повесил текст в блоге и за день 16 плюсов — приятно… но не честно 🙂

    Вообщем можете минусовать блог. Мне хватает плюсов за свои разработки 🙂

    Reply
  6. CheBurator

    вообще-то п.10 изначально (в середине 80-х) звучал так: бессмысленные комментарии, например:

    GOTO M; //переход к метке М

    ..

    для мну очень, критичен, например п.9

    ..

    п.7 — это вообще не про наших «манагеров»…

    ..

    ну и п.1 — это истинная правда…

    Reply
  7. pm74

    подписываюсь за п.8 и п.3 абсолютно точно

    Reply
  8. pm74

    еще раздражает слово «компьютерщик»

    Reply
  9. vasilykushnir

    9, 8, 3 и 1 — это даже не в точку, а прям по печени… Как реально…

    Reply
  10. logarifm

    Да это про нас родимых. (+1)

    Reply
  11. Pic_nic

    Скучно, чуть не уснул…

    Впервые смотрю в монитор и меня тянет спать!!!!

    Дочитал до конца, и… слишком много «не нужных слов», для программиста!!!!!!!!

    Reply
  12. tango

    п.4 — только что вытащил из машины одну из трех 256М-линеечек… заработала хрюня 🙂

    правда, забыл обратно вставить батарейку 🙁

    Reply
  13. Поручик

    пoдпиcyюcь. п. 3, 6, 7, 9

    Reply
  14. tigold

    п.1 Как хорошо что я не один такой:)

    Reply
  15. O-Planet

    (5) То, что плюсуют — говорит о том, что народ еще думает, а не только что-то качает…

    ПС Абадонна всех напужал 🙂

    Reply
  16. O-Planet

    + Вот сейчас сижу и матерюсь, что клиент в готовой работе просит всего лишь поменять штриховку линии в некоторых секциях таблицы! Для него — это всего лишь другой тип линии, а для меня добавление новых областей в прототип, смена алгоритма в порядка десяти

    Reply
  17. Abadonna

    (5)>ПС Абадонна всех напужал 🙂

    Планет, ты глянь авторский пост (5).

    «По себе вижу сколько времени нужно, чтобы поставили плюс за разработку, а тут повесил текст в блоге и за день 16 плюсов — приятно… но не честно :)»

    Он это не писал, он это не переводил, а рейтинг ЕМУ идет. Так что при чем тут «что народ еще думает»?

    НЕ ДОЛЖНЫ ТАКИЕ ВЕЩИ РЕЙТИНГОВАТЬСЯ — вот и все, а право на существование они безусловно имеют. По-моему мысль настолько простая, что даже и обосновывать её как-то неловко

    Reply
  18. z-alexey

    (16) Почему не выставить счет, если это действительно занимает много времени. А на отказ оплачивать привести все аргументы. Если и после этого он отказывается, то говорим: «Берем в руки линейку и карандаш и обводим штриховую линию в сплошную (или им волнистую нужно)». Пусть задумается 🙂

    P.S. Хотя, не мне вам объяснять 🙂

    Reply
  19. Pari

    Обращаю внимание z-alexey на необходимость более тщательного выбора темы для публикации блогов, объявлений о поиске работы и т.п. При чем здесь «Юмор»? Здесь скорее подходит «Подстава» или, на крайний случай, «Грусть».

    Reply
  20. stepman1

    про коментирование — это про меня. Когда писал задачки на заказ студентам. Просто вапче ниче не знали, ну просто вапче ниче …

    Reply
  21. Abadonna

    11-й и самый раздражающий фактор. Берем, к примеру, АЛьФа:

    ВК без регистрации в реестре — 32

    Inserter — 38

    Открытие внешних отчетов 1С:Предприятия 7.7 из Проводника -58

    ____________________________________________________________­________

    А эта лабудень копипастенная уже 118 набрала. И самое забавное, что сам АЛьФ к такому положению дел руку приложил, или наоборот — не хочет приложить, чтобы как можно скорее положение исправить.

    Reply
  22. Greymem

    2 Abadonna

    Кстати да… стал замечать, что реально полезные АВТОРСКИЕ разработчики получают рейтинг<30. То что делал 1 человек… вкладывал душу и работал можно сказать за идею…

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

    Reply
  23. Abadonna

    2 Greymem. «растёт в рейтенге…. » Слушай, где-то по весне я под ником Annobad внаглую выложил свою же разработку DBFViewer, нигде не указывая, естественно, что Annobad=Abadonna. После того как рейтинг дошел до 20 я честно написал что и по чем и дал ссылку на действительно авторскую (Абадонновскую). И что ты думаешь? Нашлось еще как минимум пяток идиотов, которые и после этого Annobad_у плюсы поставили.

    Reply
  24. Pari

    2 Greymem, Abadonna

    Вот один из последних примеров http://infostart.ru/projects/2453/

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

    Reply
  25. nickVZ

    Хе-хе… На первом, кажись, розыгрыше призов главный приз пришелся на убогенькую поделку. Да еще с методическими ошибками…

    Ну и что? «Плюсовали» за нее такие же по квалификации.

    Я так обратил на нее внимание только после розыгрыша. Из-за любопытсва. Ибо подобных заготовок у самого много.

    P.S. Уточнять не буду. Лень ковырять поиск. Здесь, и на Т1С. Если в архивах существует.

    Reply
  26. cruse

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

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

    Было у меня лет 15 когда я не то что бы не мог вспомнить кто написал код (хоть это был я сам), но я даже не мог понять что вообще автор хотел этим кодом сказать, какую мысль выразить. Все конструкции написаны на языке программирования, который я знаю и от которого есть документация, а что этот код хочет сделать не понятно. Слава богу больше такого не повторялось, на самом деле даже приятно открывать старые разработки.

    Reply
  27. opx

    Отвечать пользователям на «У меня программа не работает» надо так: «Вы в отладчике посмотрите что не так» 🙂

    Хоть и перевод, но все равно зачетно!

    Reply
  28. mip128

    (27) opx, Я бы послал такого программиста

    Reply

Leave a Comment

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