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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *