Регистрация любых изменений объектов конфигурации




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

20 Comments

  1. Chieftain

    А «Bloodhound.Morphine» — это новая ВК?

    Reply
  2. yu

    Это криптовщик PE-файлов.

    Reply
  3. steban

    Может уберешь этот криптовщик?

    У меня сразу пропало желание потестить твою ВК.

    Reply
  4. brr

    При регистрации пишет: Не найден указаный модуль. 🙁

    Reply
  5. brr

    Это для yu: Symantec antivirus products exclusively use the virus name Bloodhound.Morphine when a potentially unknown virus is found using Symantec Bloodhound technology. Bloodhound technology consists of heuristic algorithms used to detect unknown viruses. The actual file detected under Bloodhound.Morphine is likely to be infected with a new, packed, 32-bit Windows virus.

    Bloodhound.Morphine is detected only in Portable Executable (PE) files. Bloodhound.Morphine can detect any threat within a packed file.

    Но у меня Avira молчит.

    Reply
  6. yu

    по поводу Bloodhound.Morphine уже говорил — это полиморфный криптовщик.

    Morphine v2.7 — в яндексе наберите кому интересно.

    Reply
  7. Все то оно хорошо.

    Вот только из архива не извлекается addin.dll

    Reply
  8. CheBurator

    +1 вроде то, что надо…

    Каково дальнейшее развитие…?

    ВК переименуте, а томного с таким именем…

    Nod32 — промолчал.

    Reply
  9. yu

    В планах свой УРБД, только более гибкий, с правилами и возможностью обмена между разными конфами. Необходимые наработки уже есть, и регистрация изменений и создание объектов с заданным ID. Одного нехватает, как всегда, времени.

    Reply
  10. А возможно ли заиметь ВК без вывода сообщения + хорошо было бы если бы кроме самого объекта присутсвоал и тип события (изменение, новый, пометка на удаление, удаление..)…?

    Reply
  11. artbear

    А с разработчиками 1С++ не хочешь пообщаться по поводу реализации подобного поведения в ВК 1С++ ?

    Сам что-то подобное давно хочу в 1С++ добавить — например, у меня сейчас в 1С++ реализован перехват любых событий 1С для глобальника и модулей форм, а также перехват любых событий, вызываемых из других ВК.

    Reply
  12. lustin

    Есть изменения в планах?

    Может что-то изменилось за три месяца

    Или идея не развивается?

    Reply
  13. CheBurator

    Близится время активно затестить…

    Как эта ВК соотносится с аналогичной ВК romix’а?

    Reply
  14. yu

    Всё банально, работы больше чем времени, поэтому и не развивается. По поводу ВК romix’а — у него отслеживаются изменения документов, у меня любых объектов (как в УРБД). Правда у меня пока невозможно понять что произошло, изменение/перепроведение и т.д. , но для задач которых компонента планировалась это и не нужно.

    Reply
  15. varelchik

    А как на счет предложения artbear2?

    Reply
  16. varelchik

    Хотелось бы узнать а будет ли продолжение развития компоненты?

    И повторный вопрос по предложению artbear2?

    Reply
  17. alexols

    А где компанента то ? в архиве только база

    Reply
  18. ROM_1C

    Почему в архиве троян? Нод материться!!!!

    Reply
  19. Cryless

    При регистрации компоненты addin.dll выдает ошибку: отсутствует CLSID

    Reply
  20. Cryless

    (25) Cryless, Помог перенос компоненты в папку платформы + 25 платформа. Сначала пробовал с 27.

    Reply

Leave a Comment

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