МОЗГОДЕР 3 — универсальное решение для пользователей 8.2




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

30 Comments

  1. Tatitutu

    (1) Со всем уважением к тебе. Но это не Life ! про каких «снеговиков и снежных баб» ты тут говоришь, на дворе лето. Описание сам то смотрел — зачем 2 раза одно и тоже. Где скрины ?

    Reply
  2. Altair777

    Имхо, в клюшке скрин красивее, чем в бабе 🙂

    Reply
  3. fishca

    (1) поправил, что-то не сразу как-то выложилось 🙂

    Да, придеца нам мозги наизнанку вывернуть при написаниии в 8.2, все с ног на голову переставлять быдем.

    (2) на вкус и цвет, товарищей нет.

    Reply
  4. Tatitutu

    (3) описание все равно «двоится» убери лишнее и будет тебе счастье

    Reply
  5. fishca

    (4) поправил, спасибо за замечания.

    Reply
  6. venger

    (0) АктивИкс-Мозгодер еще кто-нить может написать;-) Еще ВК-Мозгодер;-) Пора уж для программистов Мозгодер написать, неустанно пишущих мозгодеры для пользователей;-)

    Reply
  7. fishca

    (7) точно!

    Reply
  8. Tatitutu

    )))))))) (7) ты уже сам с собой разговариваешь — молодЭц !

    Reply
  9. fishca

    (8) жара, хотца снежную бабу слепить 🙂 и не только 😀

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

    Утомил…

    Reply
  11. fishca

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

    Это первая разборка с внешними обработками 8.2, так что зря ты минусанул. А есчо бы было клево, если бы сам хоть строчку написал под 8.2 да и выложил на всеобщее обозрение как и что в 8.2 делаеца. Можешь попробовать вывести печатную форму сам из внешней обработки, не заглядывая в мою обработку и партнерский форум.

    Reply
  12. Tatitutu

    (11)Ты не ругайся (10) сказал тебе по сути названия.

    Вот если бы ты написал (как я тебя предупреждал) что это первая обратобка с внешними обработками 8.2 — новый вывод печатной формы смотрите и учитесь…

    Поверь у тебя уже плюсов штук 20 было.

    Один раз интересно, два-повтор, три — надоедает

    Reply
  13. venger

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

    (11) Действительно, заканчивай чужую идею эксплуатировать:-)

    Вот можно, например, просто обучаловки-статьи-примеры по 8.2 писать, в конце концов. И тебе респекта больше будет и пользы всем тоже…

    Reply
  14. fishca

    (10) Утомленные солнцем 🙂

    (12) Кому это надо будет, тот увидит и качнет, посмотреть как и что. А кому попой потарахтеть просто в комментах, тот пусть в тупую их (+/-) ставит.

    Reply
  15. fishca

    (13) ужо пишу…

    Reply
  16. venger

    (14) См. 13-й коммент… а то резкий, как понос детский:-)

    Reply
  17. Tatitutu

    (15) посмотри в личку !!! и сделай то что я тебе сказал.

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

    (11)Ну, тогда разложу по полочкам.

    Tatitutu выложил прикол. Получил от меня плюс.

    Ты напрямую перевел на восьмерку и скопипастил описание. Получил от меня критику и плюс. Мотивация: ты сделал полезное дело, обеспечив восьмерочникам доступ к приколу. Перевод функционала, наработанного в семерке, на восьмерку — вполне нужное дело…

    Что теперь? В описании опять неряшливый копипаст. Новые возможности платформы (а 8.2. их таки дает) не задействованы, т.е. на иллюстрацию возможностей не тянет. Пользоваться почти некому (тех, у кого есть платформа, по пальцам пересчитать).

    ТакоОоеВотМнеееЕеениЕЕ…

    Reply
  19. fishca

    (18) Новые возможности платформы (а 8.2. их таки дает) не задействованы

    — вот тут ты не прав на 100 %

    Ты открой обработку или еще лучше напиши сам такую же.

    Reply
  20. Altair777

    (11) > Это первая разборка с внешними обработками 8.2, так что зря ты минусанул

    Что-то мне вспомнился Тот-Кого-Уже-Нет…

    Напишет фигню какую-то никому неинтерсную и гордиться как он круто все загнул в ней.

    Имхо, прав Tatitutu в (12).

    Reply
  21. fishca

    (20) кому не интересно тот и не минусует и не плюсует, а идет лесом мимо 😉

    Reply
  22. Altair777

    (21) А вот не надо мне говорить, куда мне идти.

    > кому не интересно тот и не минусует и не плюсует

    это я исправлю сейчас 😉

    Reply
  23. Tatitutu

    (21) какой ты настырный !!! Это похвально но не всегда.

    Скажу прямо ты уж не обижайся

    только как пример (ничего личного)

    лежит куча говна (даже без бумажки) а в ней лежит алмаз

    , но про него знаешь только ТЫ.

    И вот ты стоить и думаешь, какие люди идиоты и не видят своего счастья.

    а вот если бы ты написал

    Алмаз хоть и измазанный в ….. это было бы более интересно

    ты пишешь мне (из личного)

    РеквизитФормыВЗначение(«Объект»).ПолучитьМакет(«Макет»); — догадаться на счет этого не так просто было 🙂 Тем более в документации ни слова про работу с внешними обработками не написано.

    Вот это изюминка — этим и гордись что нашел и победил.

    Reply
  24. fishca

    (22) ноу проблем, отрицательный результат, тоже результат 😉

    Reply
  25. fishca

    (23) с чего ты взял что я на кого-то обиделся 😉 ?

    Reply
  26. Altair777

    (24) что-то глючит, не могу минусануть. Попробую комменты. Не против?

    Исключительно в целях диагностики.

    🙂

    Reply
  27. Altair777

    +(26) упс.. получилось наконец-то…

    Reply
  28. fishca

    (26) нет конечно же, не против 🙂

    Reply
  29. fishca

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

    Reply
  30. fishca

    ушёл за мороженным 🙂

    Reply

Leave a Comment

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