Типовые задачи при приеме на работу




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

25 Comments

  1. slazzy

    А что серьезно такие задачи задают при приеме на работу 1С программиста?

    Reply
  2. sparklemal

    (1) slazzy, ага, в связной 🙂

    Reply
  3. dbaser

    Мне кажется, полный бред… задачи не связанные с реальной работой программиста 1С, а больше похожи на олимпиадные (1, 3, 5)…

    Работодателю нужен выпускник надрюканный на такие задачи или программер с опытом по реальным задачам, так сказать «Вам нужны шашечки или ехать?»

    Сам бы не пошел к такому геморному работодателю ни в штат, ни тем более на сделку.

    Reply
  4. alexinzaz

    Ни разу не попадались такие задачи на собеседованиях:-). Обычно всех интересует ФИФО, остатки, ну и всякие там пересчеты сум по курсу валют на даты в отчетах.

    Reply
  5. ruskiy1

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

    Reply
  6. ruskiy1

    непонятно только зачем ответы на такие лоу левел «задачки» выкладывать (ведь решить их не составит труда даже для студента), да еще и за 1$m?

    Reply
  7. tsiiinf

    Да

    Reply
  8. tsiiinf

    (3) dbaser, Думаю для руководителей IT такие задачки должны буть в кармане для отсеивания большого количества участников при прийоме на работу работу.

    Reply
  9. tsiiinf

    (6) ruskiy1, задачки простые, но если простые тогда зачем платить?

    Reply
  10. Nadushka74

    а обычно все проще. если ищут на управленческий учет, то ФИФО. партии, остатки по складам. Если на Бу, то минимальное знание счетов, кредит дебет, двойная запись (ой как тут многие валятся).

    по ЗиУП веселее, тут либо ты знаешь и быстро по программке найдешь решение либо ни в зуб нагой и все.

    Reply
  11. Gureev

    (3) dbaser, +1

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

    Reply
  12. glassman

    Я всем предлагаю найти что не так с запросом и как правильно:

    ВЫБРАТЬ
    ПартииТоваровНаСкладах.Номенклатура,
    СУММА(ПартииТоваровНаСкладах.Количество) КАК Количество,
    СУММА(ПартииТоваровНаСкладах.Стоимость) КАК Стоимость,
    СУММА(ПартииТоваровНаСкладах.Стоимость / ПартииТоваровНаСкладах.Количество) КАК СрСебестоимость
    ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
    ГДЕ
    ПартииТоваровНаСкладах.Регистратор = &Регистратор
    СГРУППИРОВАТЬ ПО
    ПартииТоваровНаСкладах.Номенклатура
    

    Показать

    Отвечают только люди с Платформами и опытом. В 80% случаев ничего вообще сказать не могут. 🙁

    Reply
  13. Pasha1st

    Очень странная подборка. Решения всех кроме №4 от знания 1С вообще не зависят — решения примерно одинаково выглядят на любом языке, особенности и возможности платформы не используются. Разве что набор на должность сверхмладшего кодера с последующим обучением.

    (12) glassman, для нахождения среднего суммируем среднее по позициям вместо деления сумм? Оррригинально! Ну и проверку на 0 я бы тоже поставил.

    Reply
  14. glassman

    (13) Pasha1st, Молодец )

    Не знаю, может на собеседованиях народ нервничает сильно.

    Reply
  15. Гость

    Знаю кучу людей, которые не ответили бы сразу на эти задачки, но влет нашли бы ошибку в расчете себестоимости и ответили бы на (12).

    Значит не достойны они быть программистами?? 🙂

    Если бы мне такие вопросы задавали бы на собеседовании — зачем мне такая работа???

    «Реализовать функцию перевода числа в строковое представление, без использования встроенной функции 1С» — Еще бы написали — без использования 1С и компьютера.

    Reply
  16. aerodeck89

    «Написать отчет в СКД по нахождению остатков на складе (-ах) на произвольную дату» попадалась похожая задача. Только нужно было ведомость оп счету сделать.

    Reply
  17. PiccaHut001

    » Написать отчет в СКД по нахождению остатков на складе (-ах) на произвольную дату.» — чего сложного-то?

    Reply
  18. PiccaHut001

    (13) Pasha1st, если нужны остатки, то надо РегистрНакопления.ПартииТоваровНаСкладах.Остатки КАК ПартииТоваровНаСкладах и убрать условие на регистратор, или, что плохо, вернуть реальную таблицу РН, анализировать вид движения(Приход+,расход ).

    Reply
  19. slazzy

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

    Если кому-то дают задание написать отчет по остаткам, то это грустно

    Reply
  20. PiccaHut001

    (19) slazzy, если берут на испытательный срок, во время которого делаешь тестовое задание. Если ещё и по ЗП не сильно теряешь, можно поваять. У меня прошлое задание было-тупо кусок билета на спеца по платформе, сильно не разгуляешься.

    Reply
  21. slazzy

    (20) PiccaHut001, нуу нет у меня было по-другому 🙂 я работал на работе и особо не собирался уходить, когда мне собственно предложили выполнить вот это задание о котором я сказал выше(кстати абсолютно реальная задача, а не выдумка хедхантера) и сделал я её за несколько дней. Когда её проверили, уже после этого я пошел на собеседования с нач.отдела и тд

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

    А так конечно задачки из спеца на собеседованиях и я решал

    Reply
  22. mzelensky

    Тоже получал такие задачки в качестве тестовых.

    Reply
  23. maxis33

    Первую задачу решал на олимпиаде в 9 классе 😉

    Reply
  24. avto1c

    Не понял почему в разделе Сертификация.

    ИМХО это очередной способ заработать мани с возможных соискателей и работодателей не IT -шников.

    Reply
  25. tsiiinf

    (24) avto1c, очень хороший вопрос, сам себе его задавал, и ничего более чем Сертификация не нашел, поскольку здесь рассматриваются решения разных задач.

    Reply

Leave a Comment

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