АНАЛИЗ КАДРОВЫХ ДАННЫХ по периодам + проверка статистической гипотезы (метод ХИ-квадрат) ver 1.01




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

37 Comments

  1. ZOMI

    Прошу если не жалко — поделиться результатом проверки гипотезы по знаку Зодиака…. А к знатокам вопрос (на мисте уже спрашиваю )) — насколько правильно для исследования зависимости в этом случае использовать ХИ-квадрат ? И какие методы посоветуете посмотреть ?

    Reply
  2. serpent

    За обработку(отчет) БОЛЬШОЙ плюс от аналитика по кадрам… Ему очень понравилось 💡

    Reply
  3. ZOMI

    (2) Рад)) А результат теста по Зодиаку какой ? Интересно ….

    Reply
  4. serpent

    Результат в прикрепленном файле

    Reply
  5. ZOMI

    (4) Огромное спасибо ! Просто по результатам тоже проведу анализ и результаты думаю интересно будет на большой выборке смотреть))

    Reply
  6. serpent

    (5) Всегда пожалуйста, если что пишите 😎

    Reply
  7. samadurov

    Отличная работа!!! Конечно +

    Reply
  8. ZOMI

    (7) Благодарю !

    Но есть недостатки,например — в Комплексной не заработала ….

    В ближайшее время выложу для ЗиК+Комплл….

    Еще пожурили меня за использование в коде парочки глобальных функций ЗиК ,,,

    причем пустяковых типа глСтатусСтрока ))) Это тоже поправлю ) 🙂

    Reply
  9. samadurov

    (8) Это все поправимо 🙂

    Reply
  10. marsohod

    Насколько мне известно, основное применение критерия хи-квадрат — это определение достоверности.

    Честно, так и не понял нафига козе баян?

    Reply
  11. AntiBuh

    неплохо

    Reply
  12. oxumoron

    При анализе количества работавших в 2008 г. по знаку зодиака была выявлена зависимость) В 2009 зависимости не стало…

    Reply
  13. ZOMI

    (10) Из тех статей что мне попались (два источника я в описании привожу) мне показалось что этот метод можно использовать для анализа зависимости

    каких-либо показателей от теоретических …. Допустим у нас 1200 сотрудников на конец года . Логично ожидать что каждого зака Зодиака их примерно по 100 …. Сравнивая отношение теоретических частот с реальными данными мы получаем значение ХИ- квадрат — которое сравниваем с табличным значеием (критическим ) и уже из сравнения делаем вывод о подтверждении или опровержении нулевой гипотезы ….

    Я с радостью выслушаю какий метод мат статистики для этой задачи использовать лучше ))

    Reply
  14. ZOMI

    (11) (12) Спасибо 🙂 Поделитесь результатами 😳

    Reply
  15. ZOMI

    Выложил новую версию (также добавил архивом )

    ///////////////////////////////////

    ver1.01 27 января 2010 список изменений

    1) Добавлена возможность формирования в конфигурациях ПУБ и Комплексной

    2) Добавлена проверка на вид кнофигурации в которой открывается отчет

    Если это не типовая ЗиК,ПУБ или Комплексная (вернее если отсутствуют справочники и нужные реквизиты из этих типовых)

    то отчет не откроется ( выдаст предупреждение о причине )

    3) Убрано использоване глобальных функций ( спасибо OFF за замечание )

    4) некотрые несущественные корявости кода поправлены

    Reply
  16. marsohod

    (13) астрология — это не наука 😀

    Reply
  17. ZOMI

    (16) 🙂 Так почему бы это не проверить научной методой ?

    Reply
  18. marsohod

    (17) Еще немного и Вы докажете ее ненаучность. 🙂

    Ведь астрология считает, что характер и события в жизни человека определяются датой его/ее рождения.

    Reply
  19. ZOMI

    (18) А вдруг окажется что зависит ?))Вот потеха будет…Резюме будут отвергаться по принадлежности к Зодиаку претендента 🙂

    Reply
  20. marsohod

    (19) ну это вряд ли … 😉

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

    Ну хорошо, для определенности есть ли у Вас возможность применить критерий хи-квадрат для темперамента (холерик, сангвиник, меланхолик, флегматик)? Такие данные есть у Вас в БД?

    Reply
  21. ZOMI

    (20) Типы темперамента такая же скользкая тема как астрология )) Почти все оценки зависят от интерпретатора …. А это идея!!! — заносить в базу тип темперамента )) Пока только самоличные оценки расставлю ….Тестировать несколько сотен сотров из-за моего любопытства не дадут бюджет )) Нужна идея как обосновать перед руководством выкидывание денег ))

    Reply
  22. marsohod

    (21) 😀

    А вдруг какой-нибудь институт профинансирует? 😮

    Может у них грант есть? 😮

    Reply
  23. ZOMI

    (22) Ну если какой-нибудь Астрологический Фонд предложит хороший гонорар то возможно процент зависимостей может значительно вырасти )))

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

    ЗиКа не имею. Но сделаю из этого для своих кадровиков отчет 😎

    Reply
  25. Матильда

    Все супер — работает! Кадровикам теперь будет Чем заняться в рабочие и выходные дни =) Пять баллов с «+ + +» автору сего проекта…

    Респект, и жду новых творений! 😀

    Reply
  26. Kurt

    У нас Комплексная. И в ней ведется многофирменный учёт. Порядка 10 фирм. Нужно для комплексной вводить дополнительный фильтр по «разделителю учета» (РУ) — это фирмы. А то отчет хапает без разбору всех сотрудников подряд. А так идея интересная…

    Reply
  27. ZOMI

    (26) В следующем обновлении — добавлю. Это — да,- важный фильтр.

    Reply
  28. hasp_x

    Помнится, в 90-х были популярны программы на Бэйсике и Паскале, показывающие интеллектуальные, физические и эмоциональные периоды человека. Что якобы в Японии за этим серьезно следят, и когда все эти периоды сходятся в минимуме (где-то раз в году) японцу даже выдают отгул, т.к. с ним что-нибудь может случится в этот «черный день», например, кирпич с крыши свалится или поезд с рельсов сойдет 😀 .

    Reply
  29. ZOMI

    (28) помню сотни вариантов тестов на IQ ))) …и множество психологических тестов…. про отгулы японцам не помню ))

    Reply
  30. Kurt

    (28) (29) Это называлось модным словом «биоритмы».

    Например:

    http://www.bioritmy.ru

    Reply
  31. eryomenko

    Спасибо, хороший отчет. Особенно понравилась статистика по знакам Зодиака.

    Reply
  32. maribukina

    Отчет работает в 1С зуп версии 2.5?

    Reply
  33. ZOMI

    (32) maribukina, нет, это же для ЗиК 7.7 /Комплексной и др.

    Reply
  34. maribukina

    (33) ZOMI, Печально

    Reply
  35. maribukina

    Печально((

    Reply
  36. CheBurator

    (28)фигня полная

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

    В дневнике

    Тщательно

    Потом анализировать

    Reply
  37. CheBurator

    Гораздо полезнее посчитать динамику невыходов

    Reply

Leave a Comment

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