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




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *