Метод анализа иерархий для принятия решений




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

14 Comments

  1. Dimka74

    Вот такая ошибка появилась 🙁

    {Форма.Форма(616)}: Значение не является значением объектного типа (НомерСтроки)

    стрк = н.Первый.НомерСтроки — 1;

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

    Это серьезно.

    Reply
  3. kitminsk

    Хотелось бы пощупать исправленный вариант ❓

    Reply
  4. kitminsk

    Запускаю на платформе 8.1.14.72

    выбираю «Загрузить из XML»

    Выбираю файл «Выбор работы»

    Получаю указанное выше сообщение.

    Смотрю заполнение таблиц

    Закладка цель — все заполнено

    Закладка критерии — 2 строки — исследование,рост

    Остальные закладки пустые

    Reply
  5. zheleznov

    Виноват. Как внешняя обработка действительно не работает. Буду исправлять. А пока можно вставить обработку в отдельную конфигурацию и запускать оттуда.

    Reply
  6. Slash

    пока минус ибо с типами данных надо быть внимательнее

    Reply
  7. Шёпот теней

    строится модель — модель принимает решение …

    везде и всюда проблема построения моделей — стоимость, время, повторяемость, идентичность и т.д. … иногда проще принять решение перебором а иногда пренебречь некоторой ошибкой …

    вероятность получить: львы рыжи — мы рыжи — мы львы весьма высока …

    опять же проблема «наблюдателя» в построении иерархий … здесь видать основная проблема …

    спАсибо за идею … будем почитать и посмотреть … вот …

    Reply
  8. Шёпот теней

    общие математические методы принятия решений: http://www.olap.ru/best/analysis.asp

    …вот…

    Reply
  9. Шёпот теней

    тут: http://www.citforum.ru/consulting/BI/resolution/

    «Важным требованием, обеспечивающим обоснованность применения метода, является квалифицированность экспертов, принимающих участие в создании структуры модели принятия решения, подготовке данныхRules_DatePreporation и в интерпретации результатовMethodUse_ResultInterpritation, т.е. их способность давать правильную непротиворечивую информацию. Во многом обоснованность решения, принятого с помощью иерархического анализа проблемы, связана: 1) с полнотой учета факторов, определяющих рейтинг решений, 2) с полнотой учета связей между целью рейтингования, факторами и возможными решениями, 3) адекватностью формулировок критериев для парных сравненийAdvice_TwineCompareCriterion тем целям, которые преследуются для построения модели»

    «Метод наиболее подходит для тех случаев, когда основная часть данных основана на предпочтениях лица, принимающего решения.»

    видимо покупка квартиры (и подобное) это наиболее подходящие вариант применения данного метода …

    … вот …

    Reply
  10. zheleznov

    (7-9) Спасибо за критику метода и ссылки!

    И все же для многих лучше иметь хоть какую-то модель, чем выбирать наугад или под воздействием «вау»-эффекта.

    Ценность МАИ в превращении качественных (субъективных) оценок в количественные показатели. Да и структурирование задачи в любом случае идет на пользу.

    Reply
  11. Шёпот теней

    (10) … во всЁм с вами согласен… вот …

    Reply
  12. zheleznov

    Выложил версию 1.2: Исправлены ошибки. Добавлена проверка неоднозначности выбора, когда несколько вариантов имеют равные глобальные приоритеты. Добавлены примеры.

    Reply
  13. sanvlasko

    где скачать программу

    Reply
  14. user1007916

    Отличное применение МАИ!

    Reply

Leave a Comment

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