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




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

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 не будет опубликован. Обязательные поля помечены *