На чьей стороне мячик? Алгоритм определения исполнителя задачи




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

42 Comments

  1. itriot11

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

    Reply
  2. Octopus

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

    Reply
  3. plevakin

    На схеме после «2. решение задачи описано в «руководстве пользователя»?», если пойти по пути «Нет», еще раз спрашивается. «2. решение задачи описано в «руководстве пользователя»?». А что, а вдруг?

    Reply
  4. itriot11

    (3) ошибка, сейчас исправлю! Там, конечно, руководство разработчика.

    Reply
  5. itriot11

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

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

    (4) Поправил.

    Reply
  6. acanta

    Ветки — это ошибка релиза — обращение в франчайзи. Это ошибка платформы — обращение на хотлайн.

    Устарели?

    Reply
  7. itriot11

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

    Reply
  8. itriot11

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

    Reply
  9. itriot11

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

    Reply
  10. Wildsou1

    Видимо нужен пример из 1фирмы 🙂 Как раз таки столкнулся пришел на работу Говорят внедряем ERP 2. Ок давайте программеров и заинтересованных работников. Ах да забыли они совсем что нужно не просто внедрить, а еще в идеале и переписать на 1с самописную программу которая писалась лет 10 ,а то и больше, и ERP по определению не умеет делать то что наша самописная делает каждый день. Намекаем что не наш уровень без программистов такую задачу не решить и получаешь в ответ , что ты только покажи как она умеет работать эта ваша ERP , а дальше и программистов дадим и остальное.:) То что умеет ERP из коробки конечно было показано , а то что умеет самописная почему то не смог я показать на 1с 🙂 и услышал что я не грамотный сотрудник :).

    Reply
  11. asved.ru

    (9) Все верно. Постановщик задачи, как правило, человек. А если человек — дурак, то это как минимум надолго.

    Reply
  12. mp40

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

    Reply
  13. Aphanas

    На предыдущей работе постоянно приходилось разгружать технику — принтеры, сканеры и т. п., таскать ксероксы.

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

    Reply
  14. itriot11

    (12) Я рассматриваю ваш пример так:

    — есть задача N1 «Cобрать данные и предоставить их кому-то». Пуляю ее через блок схему: задачу можно сделать в режиме «1С: Предприятия» — > как пользоваться отчетами написано в «Рук-ве пользователя» + описание отчетов из методичек к конфигурации — > доступ пользователь имеет — > «Бинго!» пользователь пошел выполнять ее задачу.

    — есть задача N2 «Ускорить сбор данных для составление отчета определенной формы». Идем по блок схеме: задачу нельзя сделать в режиме «1С: Предприятия» * — > вон на 563 стр. тема «Схема компоновки данных» в «Руководстве разработчика ч. 1» — > пнули разраба.

    При этом будет ли выполнена задача N2 не имеет значение, т. к. задачу N1 в любом случае будет выполнять пользователь.

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

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

    * Не помогут консоли запросов, т. к. надо будет описать в модуле отчета постобработку результата.

    Reply
  15. itriot11

    (13) никогда не забуду как на одной из работ прошлый штатный программист вел кадровый УУ в УПП. При этом в отделе персонала сидело 3 специалиста.

    Reply
  16. itriot11

    (10) а что за функционал в той программе, который Вы не смогли показать на 1С? Я не совсем понял в какой роли Вы участвовали)

    Reply
  17. Wildsou1

    (16)ПО хорошему программа по производству начиная от болта до конечного изделия (вагон и тыды) , функционал на самом деле это АРМ по производству , в 1с реализовано это отчетами , а в программе самописной это выведено как рабочее место и в реальном времени видно какая деталь находится в производстве и где она сейчас и куда пойдет дальше ,На самом деле там очень много возможностей от АРМ до информации местонахождения кладовщика на рабочем месте (ставит сам что ушел).Я и сейчас участвую в этом проекте , но решено было на данном этапе зацепиться через 1с к базе и брать информацию из нее и выводить ее на вновь написанные формы которые максимально приближены к действующим формам.А в дальнейшем как пользователи привыкнут к интерфейсу 1с постепенно дописывать и перетягивать информацию уже в базу 1с .А да по факту я администратор баз 1с с постановкой задач для программиста . сам не пишу. но функционал знаю.:)

    Reply
  18. t.v.s.

    (13) Не мое, но очень в тему

    — У меня стол что-то шатается, посмотри…

    — Я программист, а не столяр, с чего ты взяла, что это моя работа?

    — Ну он же компьюууутерный!
    Reply
  19. mp40

    (14) Да согласен, это уже выходило за рамки задачи 1с. Я потом уже делал в экселе сводными таблицами, ради одного раза. Но мячик на моей стороне получается. )))

    Reply
  20. itriot11

    (19) Не думаю, что этим можно похвалиться при устройстве на должность программиста 1С ))

    Reply
  21. mp40

    (20) В программировании не плюс, но экономия времени огромная. )

    Reply
  22. itriot11

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

    Reply
  23. user605780_L.Alexander8

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

    — Мария Николаевна (имя отчество изменены), мне нужна садовая плитка такого-то размера. Будьте любезны, сделайте, пока с микроволновкой разбираюсь.

    — ?! Но я же БУХГАЛТЕР! Как я тебе плитку сделаю?!

    — Но ведь Вы бухгалтер на ЗАВОДЕ ЖЕЛЕЗОБЕТОННЫХ КОНСТРУКЦИЙ.

    Reply
  24. pm74

    (1)

    раз HR попросила очистить шредер .

    я — » почему уборщица не сделает »

    ответ (дословно) — » этим должны заниматься специально обученные люди »

    ок вытряхнул . (потом уборщицу нашел и ей показал)

    В общем если кому нибудь в Че нужны квалифицированные услуги по очистке шредера, замене картриджа , распечатке на принтере или отправки е-майл обращайтесь. Качественно. Дорого.

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

    Reply
  25. Wildsou1

    Тут еще вспомнил забавный случай с директором на фирме, он по образованию электрик. Делали объект тянули там сеть и электрику,объект приняли , ну и в какой то момент вырубает электричество . меня вызывют типо мол иди разбирайся почему нету его.0_0 Объясняешь нету у меня навыков электрика и я не в состоянии разобраться с этой проблемой .Вызывайте тех кто делал пусть ищут поломку , но директор был уверен что если в названии есть корень Элект то системный администратор знает и умеет в этом разбираться и дал мне план проводки в чертежах:) . Естественно пришлось долго доносить что это не сфера ИТ .

    Reply
  26. Aphanas

    (23) Мне даже выдали халат синий как у грузчика. Причем я не просил, просто пришли, сказали — вот держи, в нём будешь всё таскать.

    Привезли например фуру принтеров — кто будет разгружать? А кто у нас за принтера ответственный? Конечно, программист.

    Потом разгружал все — новогодние подарки, шкафы таскал и т. д.

    Reply
  27. itriot11

    (26) Ваша история, по моему мнению, пока самая жесткая)

    Reply
  28. GubinDenis

    Работаю в медицинском учреждении. Программист формирует счета на оплату по ОМС, врачи периодически интересуются каким МКБ шифровать болезни, какой поставить мэс. Руководство отписывает все бумаги, которые связаны с словом электронный или сайт (ощущение что фильтр у них на эти слова настроен). Про получение ПК, оргтехники и ее транспортировку уже сказано, в том числе и при переезде из кабинета в кабинет. Но и периодически приходят с вопросами починки всяких электроприборов и с удивлением уходят что программисты их делать не должны.

    Reply
  29. VmvLer

    С точки зрения логики грамотный руководитель не допустит ситуации когда относительно своего подчиненного/коллеги

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

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

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

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

    Reply
  30. capitan

    Только сегодня переслал бухгалтерам )

    Когда бух просит найти ошибку в регл. отчетности

    на самом деле вопрос алгоритмического решения не имеет

    надо по возможности строить нормальные человеческие отношения: не давать садиться себе на шею и не бросать утопающих в беде

    это любой работы касается и не только работы

    Reply
  31. itriot11

    (29)

    тема о дураках и способах выживаний в их сфере влияния

    Отлично сказано.

    Reply
  32. itriot11

    (30) Согласен. Однако, случается, что на той стороне не собираются строить человеческие отношения. Или считают, что чел. отношениями с тех специалистами можно поступиться ради укрепления чел. отношений с другими. Как раз ради «не давать садиться себе на шею» была создана публикация? как один из возможных инструментов сопротивления.

    Reply
  33. capitan

    (32) в мире нет иной правды, чем та которую мы хотим видеть

    Это крик души и плач в жилетку)

    Думаете бухи не приходят домой и не жалуются на бесчувственных программеров ?

    Со временем обычно все налаживается, а если не налаживается меняйте контору.

    К сожалению наша действительность что к ИТ относятся как к уборщицам, хотя в нормальной фирме и к уборщицам хорошо относятся.

    Что интересно, хозяева обычно недоделки от технического образования, фарца бывшая как раз хорошо к ИТ относится

    Reply
  34. itriot11

    (33)

    к ИТ относятся как к уборщицам

    Да потому что те в свою очередь так позволяют. Собственно, озвученная Вами пассивная позиция — потерпеть и подождать, как раз и приводит к такому отношению.

    Reply
  35. capitan

    (34) Ключевые слова поняли правильно.

    Мудрейшие говорят — с любой проблемой нужно переспать )

    Понятно что за один рабочий день вас в веках не прославят.

    А дальше как пойдет.

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

    Reply
  36. itriot11

    (35)

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

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

    В прочем, обсуждение терпимости — вне рамок темы этой публикации и в целом мне мало интересен.

    Прежде чем задавать вопрос, Вы бы сперва пояснили значения «на такой работе» и «с таким отношением».

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

    Меня огорчило, что данная публикация Вас может навести на мысль, будто у меня возникает желание «копать».

    Собственно, Ваш вопрос так же не имеет прямого отношения к этой статье. На мой взгляд, его обсуждение мало на что влияет.

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

    Reply
  37. pm74

    (33)

    К сожалению наша действительность что к ИТ относятся как к уборщицам,

    ИТ уборщица )) — класс

    Если за хорошую оплату, да без проблем .

    Reply
  38. capitan

    (36) а вы запретите комментарии к публикации и никто вас не обидит.

    Но мне сдается вы ради комментариев ее и написали.

    А раз так будьте спокойнее, как на работе, так и на сайте.

    Дорастете и будете всех гнобить или сеять доброе вечное, тогда и посмотрим.

    Reply
  39. itriot11

    (38)

    Разве я сказал о своей обиде?

    Быть может я Вас чем то обидел, если Вы переходите на хамство указывая как мне себя вести?

    Reply
  40. pm74

    (17) Интересно. Занимаюсь тем же на унф

    Reply
  41. YuriFm

    Эта публикация является попыткой

    В точку.

    Предложенная схема в статье спецу не поможет.

    Поможет только голова на плечах.

    Reply
  42. user1218675

    «к ИТ относятся как к уборщицам»

    не знаю, у нас к ИТ относятся уважительно, думаю тут дело в том, что вы позволяете по отношению к себе

    Reply

Leave a Comment

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