Тест на логическое мышление




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

45 Comments

  1. Шёпот теней

    .. уффф … 30 вопросов … вот …

    Reply
  2. Alraune

    (1) Главное — количество правильных ответов ))

    Reply
  3. Tatitutu

    😀 кнопка «Получить результат» — отравь смс на номер ХХХХ чтобы получить правильный ответ. Добавь эту функцию и обработка будет золотой.

    Представте себе — в любом отчете , сформировать — отправь СМС и получишь печатную форму.

    ЗЫ: автор извини за флуд, так что то напомнило из сети. Спасибо.

    Reply
  4. malulig

    полгода назад на рамблере крутилась эта штука 😀

    Reply
  5. Alraune

    (4) Автор самого теста указан, если кто уже переносил его в 1С, извините, я не нашла.

    Reply
  6. malulig

    (5) Точно, тогда плюс!

    Reply
  7. Borisych

    27/30 😀

    Reply
  8. markers

    22/30 Боялся что и того не наберу! 🙂

    Reply
  9. yanat

    25/30 еще бы знать где логика подвела.

    Reply
  10. 24821

    Получил 28 из 30, но не понял — для чего на практике можно использовать этот тест? 😉

    Если, например, я ищу программиста 1С, и заставляю возможного кандидата этот тест пройти, а он получил 20 балов из 30 — что это значит? Можно его брать на работу или нет?

    Можно ли считать, что если у другого результат будет равен 25, то он однозначно лучше подходит, чем первый?

    Reply
  11. Alraune

    (10) Отличный результат!

    На практике ценность использования подобных тестов при приеме на работу — разумеется, очень и очень условна ))

    Reply
  12. Rusmus

    30/30

    ушел радовать бушек

    Reply
  13. Vovanches

    Прикольно! 27/30. 🙂 Вот вам в тему:

    Не все вопросы в тесте очевидные.

    1. Бывают и очевидные вопросы;

    2. Очевидность вопросов в тесте непостоянна;

    3. Не бывает всегда очевидных вопросов;

    4. Все вопросы в тесте неочевидные.

    Reply
  14. ТвояСовесть

    Ржака )))) Всем офисом развлекаемся ))))

    Сама прошла, 28/30. Где-то малек подкачала. 😀

    Reply
  15. Джиневра

    По внешнему виду формы обработки делаю логический вывод, что у автора широкоформатный монитор 😀

    У меня 28/30. Повеселилась, спасибо.

    Reply
  16. mctsimco

    29

    Reply
  17. newsky_34

    а ведь и правда, «все пуфелки радуют или умом или красотой» 😉

    Reply
  18. Alraune

    (17) Вы не дочитали условие: «а иногда даже и тем, и другим» )))))

    Reply
  19. bell-ka

    😀 😀 😀 30/30

    Reply
  20. YAN

    За тест спасибо и «+»

    а вот за способ реализации «-»

    🙂

    Reply
  21. Alraune

    (20) Спасибо за обе оценки ))

    Reply
  22. maxchaos

    Словечки напомнили ассортимент в Икеа 🙂

    28-й вопрос — самый неестественный для этого теста: вопрос про рядового Васю 🙂

    Появилась идея создать галерею образов персонажей этого теста среди отвечающих 🙂

    Reply
  23. fuxic

    30/30

    мило, но вот чтобы на каждый вопрос свою закладку — реализация хромает. Признаюсь иногда думал что тест вообще не даст результата а лишь шутка

    Reply
  24. Alraune

    (23)(24) Спасибо. Выставлять то, что не работает, было бы уж слишком. Реализация хромает, причем на обе ноги, согласна. Это одна из первых попыток что-то сделать самостоятельно ))

    Reply
  25. fuxic

    порадовал результат

    ИначеЕсли А >= 1 И А <= 2 Тогда

    Reply
  26. newsky_34

    предлагаю расширить тест процедурой, для ленивых…

    Процедура ТестПриСменеСтраницы(Элемент, ТекущаяСтраница)

    Если НЕ Подсказывать Тогда

    Возврат;

    КонецЕсли;

    СтрКоличПк = 3;

    НомерПервого = ТекущаяСтраница*СтрКоличПк-2;

    НомерПоследнего = НомерПервого+СтрКоличПк;

    Для i = НомерПервого По НомерПоследнего Цикл

    ТекЭлем = ЭлементыФормы.Найти(«Переключатель»+Строка(i));

    Если ТекЭлем = Неопределено Тогда

    Иначе

    Если ТекЭлем.ВыбираемоеЗначение = 1 Тогда

    Сообщить(«Вопрос №»+Строка(ТекущаяСтраница)+», «+ТекЭлем.Заголовок);

    Прервать;

    КонецЕсли;

    КонецЕсли;

    КонецЦикла;

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

    Reply
  27. Alraune

    (26) У меня получается по-другому:

    Процедура ТестПриСменеСтраницы(Элемент, ТекущаяСтраница)

    Если НЕ Подсказывать Тогда

    Возврат;

    КонецЕсли;

    ТекСтр=ЭлементыФормы.Тест.Страницы.Индекс(ТекущаяСтраница);

    НомВопр=ТекСтр-1;

    Для А = 3 по 5 цикл

    КК = ТекСтр*3-А;

    Тек = «Переключатель»+Строка(КК);

    ТекЭлем = ЭлементыФормы.Найти(Тек);

    Если ТекЭлем.ВыбираемоеЗначение = 1 тогда

    Сообщить («Вопрос№» + НомВопр + «: Правильный ответ: » + ТекЭлем.Заголовок);

    КонецЕсли;

    КонецЦикла;

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

    P.S. Прикрепила второй файл с новым вариантом теста

    Reply
  28. Alraune

    (28) Ну, извините ))

    Reply
  29. KukA.5

    Прошел тест — это «поднималка настроения» :), не более….

    Автору плюсик за креатив и юмор.

    (…и «девочек нельзя обижать»)

    Reply
  30. Alraune

    (30) Спасибо )))

    Reply
  31. KukA.5

    (25) Критиковать легко, выражать снобизм тоже… а помочь чем-то человеку, который ищет и поэтому обязательно найдет — это поступок. Тем более, что человек изучает и творит.

    Коллеги, давайте этой замечательной девушке поможем. У каждого есть что то, что можно дать или подсказать.

    Могу поделиться материалами (картинка), которые есть у меня.

    И, само собой, рекомендациями, советами.

    Reply
  32. Alraune

    (32) СПАСИБО !!!

    Reply
  33. citicat

    Прикольно! Надо ж отдыхать после «Объекта Плана видов Характеристик» не только за чтением Чехова или Тэффи 🙂

    Reply
  34. Alraune

    (34) Спасибо! Это точно)))

    А вот сообщения на почту о комментариях к материалам перестали приходить уже давно почему-то.

    Reply
  35. cool.vlad4

    (36) Тесты, это, конечно — хорошо! За любовь к 1С тоже спасибо! Все мы любим 1С — и теперь не отрываясь от него можем делать все, что захотим и тесты щелкать. У меня тоже тесты есть — целый набор. Я не стал мучится как внедрить его в 1С — через полеhtmlдокумента/activex можно, что угодно туда зафигачить, но вот проблема тесты весят около 60 метров, что делать? а пока прикреплю демоверсию…в принципе любой желающий может туда свои тесты поместить — если они на swf или на html, в общем всем том, что поддерживает браузер

    ЗЫ в демо версии только содержание тестов.

    Reply
  36. Alraune

    (36) Спасибо, завтра посмотрю, что это. А почему Вам не выставить это в собственную публикацию? Комментарии здесь, поверьте, мало кто читает, не удивлюсь, если, кроме меня, никто и не заметит.

    Reply
  37. cool.vlad4

    (37) ну потому, что там ничего особенного 😀 две строчки кода, а тесты не мои, где-то скачал

    Reply
  38. Canabis220

    (27) «Если ТекЭлем = Неопределено Тогда» Зря от этой строки отказались. Ошибка выскакивает: {Форма.Форма.Форма(15)}: Значение не является значением объектного типа (ВыбираемоеЗначение)

    Если ТекЭлем.ВыбираемоеЗначение = 1 тогда

    Reply
  39. Alraune

    (39) Спасибо. Возможно, в новых релизах выпадает ошибка? Раньше работало как-то. Завтра посмотрю. Единственная отмазка, что я не программист))) надо было просто этот тест сделать, чтобы хоть как-то, но работал 🙂

    Reply
  40. pv94384

    Плюсану ) Понравилось…

    Reply
  41. Kesr

    понравилась

    Reply
  42. start2000

    На одном крупном градообразующем предприятии, одного не крупного города, менеджеры крупного звена после крупного обучения, проходили крупный тест, по результатам которого решалась их судьба в дальнейшем по крупному управлять подразделениями того крупного предприятия. Я помогал прорешивать варианты того крупного теста. Там были разные задачи и на логику тоже. Пуфелки там тоже были =) . Вам-то что, решили и посмеялись, а крупные менеджеры если не решили, то понижение на ступень или две со всеми вытекающими последствиями.

    Reply
  43. PiccaHut001

    куздра бежит, страшнооо…

    Reply
  44. bulpi

    2 Alraune

    Если фото на аватаре реальное, то дополнительный плюс 🙂

    Reply
  45. Alraune

    (45) Реальное))) спасибо))

    Reply

Leave a Comment

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