Еще одна тестовая задача при приеме на работу




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

64 Comments

  1. tango

    Как-то так получается:

    вот только-только принята модератором, а не то, что на главной странице даже не мелькнуло, найти нельзя, если не автор и не знаешь где искать.

    То есть чтобы хоть как-то мелькнуть перед посетителем сайта, надо потратиться на рекламу/»рейтинг»?

    Reply
  2. TODD22

    (1) С чего бы? Я вот зашёл и увидел на главной странице.

    Reply
  3. cargobird

    (1) есть такая штука, да, они объясняют это так:

    Обращаем внимание, что дата создания публикации могла быть присвоена будущим временем.

    В связи с этим на главной странице сайта она может появиться не сразу. Точную дату публикации

    Вы можете узнать на детальной странице по ссылке выше.

    Так всегда так и происходит, по-другому у меня ни разу не было.

    Reply
  4. Sybr

    Поспорил бы на счет грамотной постановки. «Стоимость корма увеличивает себестоимость рыб пропорционально количеству.» Что это значит? Стоимость корма распределяется равномерно на всех присутствующих в аквариуме рыб на момент поступления этого корма или то, что считается что все рыбы едят равное количество корма?

    Reply
  5. uri1978

    (4) Sybr,

    Возможно это все таки тестовое задание, а не ТЗ.

    Reply
  6. Nadushka74

    Блин какая идеальная система, я бы еще добавла.

    1. Убрать из документа продажи Аквариум

    2. Добавить документ перемещения между аквариумами. А уж после десятка документов попробуйте сформировать правильный отчет.

    вот тогда это будет хоть немного похожая на рабочую ситуация!!!

    Reply
  7. tango

    (2) TODD22, просто небольшая задержка на сервере

    Reply
  8. mulla1979

    Помню в дополнение к подобной задаче дали установку: Рыбы могут быть совместимы и несовместимы! Типа нельзя несовместимых рыб в один аквариум садить… Ну понятно если их всего 10 или 100, а если 1000 или больше?

    Reply
  9. tango

    (5) uri1978, это реальное тестовое, на работу устраивался

    о работодателе умолчу, скажу лишь, что отрицательная симпатия оказалась взаимной

    Reply
  10. tango

    (6) Nadushka74, по п.1 — только в том случае, если распределение рыбок по банкам регламентировано, и регламент соблюдается

    и это будет значить, что связь рыбка-банка должна быть где-то в другом месте

    по остальному — не вижу траблов. математика — в запросах, запросы к регистрам, а не к документам

    Reply
  11. tango

    (4) Sybr,

    Стоимость корма распределяется равномерно на всех присутствующих в аквариуме рыб на момент поступления этого корма или то, что считается что все рыбы едят равное количество корма

    автор (то бишь я, а не автор задачи) нуждается в грамотном объяснении, в чем тут (или)разница

    Reply
  12. tango

    (6) Nadushka74, но за

    какая идеальная система

    спасибо

    Reply
  13. tango

    (8) mulla1979, тогда действительно придется делать еще одну связь.

    но указание банки в расходе все-таки оставить

    кроме перемещения обязательно нужно «списание за естественной убылью» (в том числе кошки и дети)

    Reply
  14. uri1978

    (9)

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

    Reply
  15. Sybr

    (11) Разница принципиальная. В аквариуме 10 рыбок, сегодня приходит корм на 1000 рублей, которого 10 рыбкам хватит на месяц. Завтра одну рыбку продают, её себестоимость должна увеличиться на 100 рублей или на сумму на которую она съела корма за день?

    Reply
  16. tango

    (14) uri1978, это да

    вообще, по нашим временам задание запредельное

    соискателей просят написать запрос к одному справочнику с условием по одному реквизиту — без конструктора не могут. ни один!

    Reply
  17. tango

    (15) Sybr, логично.

    тогда еще один контур закупка корма — кормление

    но в условии прописано увеличение себестоимости сразу

    Reply
  18. tailer2

    1. Списание

    2. Контур кормления

    3. Контур сопутствующих товаров (тот же корм, баночки для проданных рыбок).

    4. Совместимость рыбок

    5. Размещение банок по торговому залу

    6. График очистки банок

    так глядишь, выйдет отраслевое

    Reply
  19. bpc222

    (18) tailer2,

    +1

    7. Учет коэффициента распределение корма в период кормления

    Reply
  20. Craig

    Ну тогда надо еще и сезонность добавить, рыбки в зависимости от сезона могут больше или меньше кушать. А так же нужен склад хранения корма. а Спец добавки для рыбок?! Да, задачу можно усложнить… А так интересная задачка, даже появилось желанием самому написать конфу. Кстати сколько по времени выделяется на решение такой задачки?

    Reply
  21. tailer2

    Больше шансов на коробочное решение, если сделать это настройкой к БП

    Можно к базовой — завести забалансовых счетов и комплект типовых операций

    Reply
  22. tango

    (19) bpc222, «учет коэффициента» ?

    **

    в целом, очень приятно такое внимание к прошлогодней безделице

    спасибо, коллеги

    **

    (20) Craig,

    сколько по времени выделяется на решение такой задачки

    задание высылалось письмом, до назначения встречи

    встреча — по результату

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

    Reply
  23. (9) да уж …мне просто было бы лениво такое городить в тестовом задание. да еще и за бесплатно да еще и возьмут не возьмут) если к каждому работодателю ходить решать такие задачи, то можно и не устраиваться на работу, а работать на них всех бесплатно))

    не воспринимай серьезно…шутка просто. Скоро при приеме на работу будут просить выполнить тестовое задание в размере проекта с бюджетом пару лямов.

    Reply
  24. tango

    (23) trade70, мой опыт участия в собеседованиях по обе стороны стола говорит о том, что ищут в порядке:

    — подходит — не подходит прежде всего по психологическому фактору.

    запах (перегар), опрятность в одежде, нормальная речь — само собой)

    но подойдет ли в сложившуюся «корпоративную» атмосферу, сможет ли начальник командовать соискателем — в первую и основную

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

    — ну, и, конечно, существенный фактор — ожидания зарплатополучателя vs готовность (степень созрения) работодателя

    очень важна удаленность места от жительства

    по конкретному случаю задача была явный перебор (не без причины). но если бы не оно, то не было бы и этой публикации 🙂

    Reply
  25. (24)

    по конкретному случаю задача была явный перебор (не без причины).

    Я о том-же….;-)

    Reply
  26. Taktic

    (1) Если не секрет — сколько времени заняло решение этой задачи?

    Reply
  27. orfos

    Документ «Покупка рыб» и «Продажа рыб» некорректен, реквизит аквариум там не нужен. «Аквариум» и «Рыба» это номенклатура. Да и в покупке корма «Аквариум» не нужен, даже рассмешило меня. :0)

    Reply
  28. (27) orfos, Блин ты попробуй еще из тестового задания диссертацию защитить))

    Reply
  29. orfos

    (28) trade70, да нет просто зачем неоправданно усложнять задачу из прикладной области, для этого существуют олимпиадные задачки

    Reply
  30. tango

    (26) Taktic, вечером. вот типо как сейчас. чистое время не засекал

    Reply
  31. tango

    (29) orfos, с фига ж оно прикладное? типичный тест, не сказать чтобы самый простой

    Reply
  32. cleaner_it

    (9) это моя задача со Специалиста по УТ. Взяли то, что могут проверить)

    Reply
  33. tango

    (32) cleaner_it, блин, сильное подозрение было, что тот мальчик был не умный, а хитрый :)))

    Reply
  34. avto1c

    Банальная попытка срубить sm на пустом месте. Конфу будут скачивать не далекие новички и рекрутеры. А таких не мало. Решение этого задания говорит, что соискатель закончил недельные курсы по 1С.

    Reply
  35. avto1c

    (24) (24) задача примитив — отражает знание рассчета по среднему.

    Reply
  36. (34) avto1c,

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

    А что-бы разместить данную публикацию бесплатно, я например не нашел в своем разделе нечего кроме этого «Скачивание за StartMoney. Рекомендованный уровень доступа.»))

    Reply
  37. lvictor58

    (27) orfos,

    Да и в покупке корма «Аквариум» не нужен, даже рассмешило меня

    Аквариум — это типа склад. Или цех по продукции которого и считается себестоимость!

    Reply
  38. tailer2

    (34) avto1c, ну ты крутой, это козе понятно

    Reply
  39. crea3y

    Ну, сделал. Ожидал худшего.

    Reply
  40. tango

    (39) crea3y, даже не знаю

    это ко мне?

    может, не стоило?

    Reply
  41. tango

    как-то поутих интерес, да?

    надо еще чего-нибудь замутить

    Reply
  42. Glebis

    Чет мне не понятно, в какой момент увеличивается себестоимость рыбок…

    В момент отражения покупки корма документом? Дык документом покупки мы ещё не списываем (скармливаем) корм рыбам, тогда на каком основании мы увеличиваем себестоимость рыбок?. Мы же можем продать голодную рыбу, на которую корм закуплен , но ей не скормлен.

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

    Reply
  43. tango

    (42) Glebis, Ваш звонок очень важен для нас 🙂

    Reply
  44. Glebis

    (43) Так моё решение, о том что текущая задача заказчика не соответствует его желанию, правильное или нет?

    Reply
  45. tango

    (44) Glebis, в каментах коллеги указали, что задача украдена из тестов вендора

    Reply
  46. Aparatus

    Одного знакомого тестировали при приёме на работу, в ходе удалённого собеседования он получил задание от буха по разгребанию навоза в базе после него же самого. В итоге, после того, как он не без труда решил поставленную задачу, она сказала спасибо и не взяла его на работу. То есть, на работу никто не нужен был 🙂 Класс, да? Зато про жизнь.

    Reply
  47. TODD22

    (46) Aparatus,

    Класс, да? Зато про жизнь.

    То же знаю такую историю. Только там интересней. Одна энергичная девушка работала консультантом во франче, но при этом не умела программировать. Устроилась в одну компанию на фикси.

    Дают ей задание на работе что то накодить, она открывает вакансию на программиста. С очень хорошей зарплатой и тд. Но условие выполнить тестовое задание…

    После выполнения тестового задания она даёт второе тестовое… типа первое решение сделали не правильно и она даёт второй шанс и задание попроще….

    Вот так за неё и кодили…. знаю людей которые по 2 задания ей делали…

    Reply
  48. Petr54-ru

    (46) Aparatus,

    У меня была крайний раз почти аналогичная ситуация. Когда брали на работу, была убита напрочь себестоимость в УТ 11.1, разгрести эту конюшню быстро и сразу возможности не было, я написал свой костыль, который как-то рассчитывал себестоимость остатков по средневзвешенному. Костыль был признан удачным и таким образом я испытательный срок прошел. Уныло только то что на испытательном сроке платят меньше, чем после.

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

    Reply
  49. TODD22

    (48) Petr54-ru,

    Уныло только то что на испытательном сроке платят меньше, чем после.

    Если на испытательном сроке ЗП меньше чем после то даже не рассматриваю такие вакансии….

    Reply
  50. Petr54-ru

    (49) TODD22,

    В наших краях, если набирают «с улицы», «по объявлению» и не на топовые позиции, то других вакансий просто не будет. 1С программисты могут долго на одном месте сидеть на фикси и если припекло со сменой работы, то будут вписываться туда, где на испытательном сроке зарплата больше чем они сейчас получают.

    Я слежу за спросом на 1С -ников, последние пару-тройку лет с нормальными вакансиями просто засада. Одни и те же вакансии, от одних и тех же контор висят непрерывно месяцами, а в тех, что появляются «свеженькими» зарплаты которые предлагаются реально, существенно ниже, чем написано в объявлениях. Можно даже сказать, что в наших краях спрос на 1-сников относительно низкий и зарплаты стагнируют, на фоне того, что все дорожает.

    Reply
  51. tailer2

    (50) Petr54-ru, Ынок, чё

    Reply
  52. tailer2

    (47) TODD22, Однажды я прямо сказал на собеседовании владельцу ли, зиц-оператору ли, что тест буду решать, только если это действительно тест.

    Собеседник выглядел как вполне солидный муж.

    Но разговор сразу скомкался и продолжения не имел

    Reply
  53. TODD22

    (52) tailer2,

    Но разговор сразу скомкался и продолжения не имел

    Меня в одну организацию собеседовал франч которого просили подобрать сотрудника. Мне на собеседовании дали сделать задачу на спеца по платформе. Я спросил у дающего может ли он сам решить эту задачу. Он сказал что нет. После чего я спросил а как он поймёт правильно я её решил или нет он сказал что не знает….. 🙂

    Reply
  54. succub1_5

    ага, в тему про ушлую девушку-франчи.

    Искал работу с большей з/п — пошел в одну не маленькую компанию, вроде все солидно: вахта, тестирование и т.п. Потом собеседование — принимает какой-то парнишка (представился начальником отдела 1С программистов), спрашивает про 1С, но с акцентом на знания менеджминга да процессов (бухучет, документооборот и т.п), ну я из опыта все рассказываю, описываю. В конце собеседования дает задание на 2 недели — в УПП добавить бизнесс-процесс (а я пока работу искал несколько работ делал в пределах 5 рублей, ну одна из них тоже на бизнесс-процесс), а то что мне дает рублей эдак на 20 потянет. Я ему говорю что та и так, некрасиво это, сперва устроюсь и пока буду 3 месяца на испытательном тогда и сделаю. Он говорит ну как хотите, а без тестового задания не принимают. В общем я лучше работу нашел в 15 минутах хотьбы от дома, да и з/п повыше чем в той фирме, а они так до сих пор на hh объявление не убрали все 1С программиста ищут, кстати уже 2 год =)

    Reply
  55. user_2010

    (54) succub1_5, тоже имела подобный опыт: Рарус дал несколько заданий из реального проекта — так и сказали… потом никакого ответа от них получить не удалось, даже отрицательного… Больше франчайзи не интересны…

    Reply
  56. tailer2

    Что я делаю не так?

    Reply
  57. tailer2

    (56) или так

    Reply
  58. v3rter

    (57) Прикладываете .doc документ в виде фала .png?

    Reply
  59. tailer2

    (56) вот еще

    Reply
  60. tailer2

    о параллаксе

    Reply
  61. crea3y

    Как то так.

    Reply
  62. user1061129

    Может кто скинуть запрос на увеличение себестоимости?

    Reply
  63. Ella_Iv

    А здесь еще отвечают?)

    Скачала пример для самообразования и повторяю его пошагово.

    В отчет данные не выводятся. Никак не могу понять почему.

    Заметила что при формировании таблицы в ВыручкаОбороты и ВквариумеОбороты не попадают период и регистратор. Соответственно по ним не могу задать связи.

    В предприятии при проведении не отображаются движения по Выручке.

    Что я сделала не так или не сделала?

    Reply

Leave a Comment

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