Прикол над пользователями. 1 апреля




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

19 Comments

  1. rsu5

    ошибок масса 😉

    Reply
  2. Serj1C

    (1) всего то в двух строках

    Reply
  3. DrAku1a

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

    Reply
  4. Serj1C

    (3) Всегда можно вернуться к конфигурации поставщика

    Reply
  5. IDija

    (0) Мне очень даже симпатично!!!Да и пользователи довольны! А изменение кода — ерунда! Можно и откатить…

    Reply
  6. esa35

    да, прикольненько!надо будет попробовать подшутить!

    Reply
  7. Lokiy

    Чето ломает меня конфу ради прикола такого обновлять, еще в переферийки ее тащить.

    Reply
  8. balabani

    Спасибо хорошая обработка

    Reply
  9. dardroze

    поставлю, посмотрим, что скажут бухгалтера

    Reply
  10. lilly

    Хм… попробую…

    Reply
  11. andreysan

    Да ладно, до ума довести недолго , доработать под личные нужды, а идея неплохая

    Reply
  12. curys

    отличная шутка, спасибо автору, попробую сейчас заюзаем=)

    Reply
  13. glek

    Пошутить — можно. Только не массово. Потому что замаешься по клиентам откатывать. Не хватает какого-то отключения.

    Reply
  14. KillHunter

    хорошая обработка!

    Reply
  15. dj_serega

    Если бы было внешней обработкой было бы круче.

    Reply
  16. taste

    кто оценил данную приколюху ??

    Reply
  17. shuhorov

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

    Reply
  18. Xleo777

    Можно сделать свой общий модуль

    #Если Клиент Тогда

    Функция РаскраситьСтрокиРадиШутки() Экспорт // 01.04.2011

    глГСЧ = Новый ГенераторСлучайныхЧисел;

    Если Формат(ТекущаяДата(), «ДФ=ddMM»)=»0104″ Тогда

    Возврат Ложь;

    КонецЕсли;

    Если глГСЧ.СлучайноеЧисло(0, 100)>13 Тогда

    Возврат Ложь;

    КонецЕсли;

    Возврат Истина;

    КонецФункции

    Процедура РаскраситьТЧ(Элемент, ОформленияСтрок) Экспорт // 01.04.2011

    Попытка

    Сч = 0;

    глМассивЦветов = ПолучитьМассивЦветов();

    макс = глМассивЦветов.Количество();

    ЭтоТЗ = ТипЗнч(Элемент.Значение)=Тип(«ТаблицаЗначений») Или Найти(ТипЗнч(Элемент.Значение), «табличная часть»)>0;

    Для Каждого Оформление Из ОформленияСтрок Цикл

    Если ЭтоТЗ Тогда

    Оформление.ЦветФона = глМассивЦветов[ Элемент.Значение.Индекс(Оформление.ДанныеСтроки) % макс];

    Иначе

    Оформление.ЦветФона = глМассивЦветов[ Сч % макс ];

    Сч = Сч+1;

    КонецЕсли;

    КонецЦикла;

    Исключение

    КонецПопытки;

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

    #КонецЕсли

    Функция ПолучитьМассивЦветов()

    глМассивЦветов = Новый Массив;

    глМассивЦветов.Добавить(Новый Цвет(255, 255, 255));

    глМассивЦветов.Добавить(Новый Цвет(254, 251, 251));

    глМассивЦветов.Добавить(Новый Цвет(254, 192, 192));

    глМассивЦветов.Добавить(Новый Цвет(254, 106, 106));

    глМассивЦветов.Добавить(Новый Цвет(254, 68, 62));

    глМассивЦветов.Добавить(Новый Цвет(254, 84, 62));

    глМассивЦветов.Добавить(Новый Цвет(254, 116, 62));

    глМассивЦветов.Добавить(Новый Цвет(254, 164, 62));

    глМассивЦветов.Добавить(Новый Цвет(254, 215, 62));

    глМассивЦветов.Добавить(Новый Цвет(249, 249, 64));

    глМассивЦветов.Добавить(Новый Цвет(165, 234, 74));

    глМассивЦветов.Добавить(Новый Цвет(99, 207, 86));

    глМассивЦветов.Добавить(Новый Цвет(62, 230, 200));

    глМассивЦветов.Добавить(Новый Цвет(62, 237, 254));

    глМассивЦветов.Добавить(Новый Цвет(62, 181, 232));

    глМассивЦветов.Добавить(Новый Цвет(62, 109, 190));

    глМассивЦветов.Добавить(Новый Цвет(160, 62, 185));

    глМассивЦветов.Добавить(Новый Цвет(254, 95, 219));

    глМассивЦветов.Добавить(Новый Цвет(254, 207, 243));

    Возврат глМассивЦветов

    КонецФункции

    Reply
  19. Niberu

    И может в подписку на какое-нибудь событие запихать.

    Reply

Leave a Comment

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