Если шефу хочется секса – ему трудно отказать




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

29 Comments

  1. director04

    Босс предлагает заняться сексом секретарше:

    — Светлана, у меня «встал один вопрос», может быть мы… «отчетик», у меня на столе, составим, м?

    — Извините, но у меня месячный «отчет»…

    Босс, в обломе уходит к себе в кабинет. Через 15 минут возвращается секретарша:

    — Владимир Сергеич, может быть Вам устно, ну или задним числом?

    — Нет, спасибо… я уже от руки набросал.

    Перейти к публикации

    Reply
  2. serega3333

    Определенно + за позитив, нифтяк

    Reply
  3. serpent

    Плюс однАзначно за юмор в «шапке» публикации…

    за обработку само сабой.

    Reply
  4. DoctorRoza

    Надо будет шефу отправить .. пусть поржет! А так плюс однозначно! )))

    Reply
  5. Irek-kazan

    борода

    Reply
  6. Ponommax

    Очень информативное начало публикации. Накипело? Или намек секретарше, только ходит ли она по инфостарту?

    Reply
  7. director04

    (5) Ponommax,

    Очень информативное начало публикации. Накипело? Или намек секретарше, только ходит ли она по инфостарту?

    Ходит, ходит…. И не только по Инфостарту, но по вечерам еще и математический анализ в универе преподает.

    Вот тут http://izhevsk.ru/forummessage/92/2683923.html лежит ответ на ваш вопрос )))) Там, чуть ниже, есть и фото нашего секретаря (фото реальное, не с инета). Только плиз не пошлить! ))))

    Reply
  8. Misanets

    (6) улыбнуло

    Reply
  9. BEPTEP

    Да, хорошее лицо фирмы 😉

    Reply
  10. director04

    (8) BEPTEP,

    Да, хорошее лицо фирмы 😉

    И не только лицо… но и другие части тела ))

    Кстати, вакансия еще свободна! )))

    Reply
  11. Созинов

    За юмор +.

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

    Reply
  12. EarlyBird

    Перешёл по ссылке, поржал, спасибо :)))))

    [quote=director04]Рашид, дело втом, что конфигурация «Конвертация данных» служит не для обменов, как вы ошибочно предположили, а для написания их планов (обменов).[/quote]

    Спасибо, очень хорошо! :))))))

    Похоже, я скоро стану вашим преданным читателем и подписчиком на все темы.

    Reply
  13. EarlyBird

    [quote=]Рашид, по вашим коментариям сразу чувствуется конкретный человек — не балабол.

    Именно для ГУРУ, таких каким видимо являетесь вы, в объяве написано «…В случае недюжинных профессиональных способностей, допускаются особые условия достижения консенсуса.»[/quote]

    Reply
  14. fuxic

    Выложил такую же шутку для клиентов, но без просьбы записать документ и с возможностью сортировать по нескольким полям

    Reply
  15. benoev

    отдельный + за анекдот )))) жизненная ситуация )))

    Reply
  16. Ламия

    Заголовок безусловно впечатлил, чувствуется как «тепло» человек относится к своей работе

    Reply
  17. CheBurator

    тьфу, елы-палы.. ничего нового.. но хоть работает и то хорошо…

    Reply
  18. ta44ik

    А я бы предпочел с начальницей.. Она очень даже ничего)

    Reply
  19. dyh

    уххахахахахахахахах

    Как говорят, автор Петросян..

    PS Кнопочка АЯ рулят в т.ч. и с номерами.

    Reply
  20. Фред

    Отличный ход! Просмотрели все, даже те, кому не все слова в ваших объяснениях знакомы… (Сужу по себе…Остальные точно все слова знают…. А если не знают, то не сознаются…))

    Reply
  21. 1cKiller

    За анекдот плюс несомненно!

    По теме: штука полезная, давно столкнулся с тем что в обычных формах нельзя сортировать табличные части по значению реквизита поля.

    Reply
  22. Evgenych

    🙂

    Reply
  23. Psylocibine

    (19) dyh, не замечали, что кнопочки не всегда доступны, м?

    Автору плюс, на досуге обязательно гляну обработку:)

    Reply
  24. director04

    (19) dyh,

    PS Кнопочка АЯ рулят в т.ч. и с номерами.

    вы просто не поняли идеи… Кнопочками АЯ можно отсортировать все, что имеем. А если чего то нет — а отсортировать охота?

    Что тогда вы будете сортировать этими А и Я? :)))

    Для тех, кто не доконца понял идею поясняю на картинке.

    — Табличная часть отсортирована по колонке «Счет-фактура» кнопочками «АЯ» (выделено зеленым квадратом)

    — Есть желание , чтобы эта колонка была отсортирована по дате счета-фактуры, а не по ее порядковому номеру (или вернее представлению). При этом, программе на это наплевать (см. красный квадратик)

    — Сортировать по колонке «Дата зачета аванса» бесполезно — см. Синий квадратик.

    Вот в этом случае выручит данная обработка. Смоьтри основной рисунок публикации.

    Теперь ясно?

    Reply
  25. KroVladS

    😀

    поднял настроение.

    Reply
  26. necropunk

    Хоть пару слов бы про принцип алгоритма написали… Для тех кому интересно, а лишних денег инфостартовских нету 🙂

    Reply
  27. director04

    (26) necropunk,

    Хоть пару слов бы про принцип алгоритма написали…

    Да какие там принципы.

    Обработка сперва определяет тип значения в текущей колонке. Если этот тип содержит реквизит Дата, то сортировка производится по дате (в случае на картинке — это дата документа «Поступление товаров и услуг»). Если текущий столбец даты не содержит, то проверятюся все столбцы. И если в котором то из них найден реквизит «Дата», то сортировка производится по этой дате.

    Reply
  28. maxim305

    Смешно!

    Reply
  29. Twixoed

    Что только на форумах не пишут…

    Reply

Leave a Comment

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