Поздравление с 8 Марта




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

16 Comments

  1. Alraune

    А не слишком рано, народ еще только-только НГ закончил отмечать.

    Reply
  2. kenshin

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

    Reply
  3. MaxDavid

    Если два раза нажать на кнопку кнКак, вылетает сообщение об ошибке:

    Персонаж.Speak(массивКакВстречать[СчетчикКак]);

    {D:1С_РАЗНОЕПОЗДРАВЛЕНИЕ 8МАРТА_.ERT(338)}: Значение индексного выражения находится за границами массива

    Reply
  4. sound

    А также смотрите раздел «ДРУГИЕ ПУБЛИКАЦИИ АВТОРА» 🙂

    Reply
  5. kenshin

    Если есть пожелания по изменению вида или внесению чего то нового то пишите, другие отчеты не выкладываю так как пишу под определенную конфигурацию для Белоруссии думаю тут это мало кому надо ))

    Reply
  6. kenshin

    (3) Процедура КакВстречать()

    Персонаж.Stop();

    Если (СчетчикКак = 1) Тогда

    Персонаж.Play(«Alert»);

    Персонаж.Speak(массивКакВстречать[СчетчикКак]);

    //Форма.кнКак.Заголовок(Форма.кнКак.Заголовок()+» >>»);

    СчетчикКак = СчетчикКак + 1;

    ИначеЕсли (СчетчикКак = 10) Тогда

    // Персонаж.Speak(массивКакВстречать[СчетчикКак]);

    Персонаж.Play(«Congratulate»);

    Форма.кнКак.Заголовок(СтрЗаменить(Форма.кнКак.Заголовок(),» >>»,»»));

    СчетчикКак = 1;

    Иначе

    Если (СчетчикКак = 2) Тогда

    Персонаж.Play(«Congratulate_2»);

    ИначеЕсли (СчетчикКак = 3) Тогда

    Персонаж.Play(«Suggest»);

    ИначеЕсли (СчетчикКак = 4) Тогда

    Персонаж.Play(«Pleased»);

    ИначеЕсли (СчетчикКак = 5) Тогда

    Персонаж.Play(«Pleased»);

    ИначеЕсли (СчетчикКак = 6) Тогда

    Персонаж.Play(«Pleased»);

    ИначеЕсли (СчетчикКак = 7) Тогда

    Персонаж.Play(«Congratulate_2»);

    ИначеЕсли (СчетчикКак = 8) Тогда

    Персонаж.Play(«Pleased»);

    ИначеЕсли (СчетчикКак = 9) Тогда

    Персонаж.Play(«Think»);

    КонецЕсли;

    // Персонаж.Speak(массивКакВстречать[СчетчикКак]);

    Если (СчетчикКак = 4) Тогда

    Персонаж.Play(«Processing»);

    Конецесли;

    СчетчикКак = СчетчикКак + 1;

    КонецЕсли;

    КонецПроцедуры

    за комментируйте как тут и будет все гуд. он будет делать всякие штуки прикольные ))) и ошибка не будет вылазить.

    Reply
  7. Rusk51

    (1) Ну да, как до Китая.. Автор пропустил Рождество Христово и Крещенье. Скоро 23 февраля. Автор, давай-давай…;)

    Кстати можно пару тройку мусульманских добавить, чтобы братьев мусульман не обижать.Типа:

    Маулид ан-Наби — рождение Пророка Мухаммеда 15 февраля

    Рамадан 1 Августа

    Ид уль-фитр (Рамадан Байрам, Ураза Байрам) 30 августа

    Евреев не забудь тоже.Помни, что евреи тоже люди.

    Только с картинками поаккуратней , а то будет как всегда 🙂

    Reply
  8. rom-x

    Microsoft Agent не установлен!

    Агент.Characters.Load(«Char», Файл);

    {F:ПОЗДРАВЛЕНИЕ 8МАРТА_.ERT(36)}: Значение не представляет агрегатный объект (Characters)

    Reply
  9. kenshin

    (8) просто у вес не стоит пакет данного агента то есть его попросту нет в системе (мерлина он обычно идет с офисом(полной версии) либо в установках виндовс) его можно доставить отдельно если нужно могу выложить

    Reply
  10. rom-x

    (9)

    Спасибо, установил, все заработало!

    Reply
  11. Mefist
    kenshin пишет:

    Если есть пожелания по изменению вида или внесению чего то нового то пишите, другие отчеты не выкладываю так как пишу под определенную конфигурацию для Белоруссии думаю тут это мало кому надо ))

    Какая конфигурация?

    Reply
  12. kenshin

    (11) Sway

    Reply
  13. Veduin

    Мне нравится, я даже другие праздники встроил!

    Reply
  14. taha-173

    Прикольная вещь, и всем кому отправляла понравилась.

    Reply
  15. Rockman

    Спасибо

    Reply
  16. www2007

    Прикольная штука, отработала восьмое марта, день рождения бигбосса, теперь к новому году готовится..

    Reply

Leave a Comment

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