Как с помощью навязчивого информирования пользователей добиться максимальной ответственности и исполнительности. Практический опыт




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

28 Comments

  1. vano-ekt

    пользователь про себя «дурацкая 1С, ни крестика, ни «ок» «

    Reply
  2. nimus

    (1) vano-ekt,

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

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

    Reply
  3. ashvik

    Не отображаются картинки.

    Reply
  4. nimus

    (3) ashvik,

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

    Перенес картинки на Инфостарт, подправил статью.

    Reply
  5. spetzpozh

    (2) nimus, коллега иронично это сказал 🙂

    Reply
  6. sweeex

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

    Reply
  7. V_V_V

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

    Reply
  8. CheBurator

    Аналогичные подходы использую у себя

    Работает

    На мой взгляд допущены две принципиальные ошибки

    Первая

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

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

    И контролирующие органы лучше уведомлять без напоминания исполнителям — внезапный вызов на ковер или лишение премии вдруг -они оказывают благотворное влияние

    Reply
  9. nimus

    (8) CheBurator,

    Осознанные альтернативы, действительно, присутствуют. Но в схеме предприятия отказ от потребности проходит согласование в электронном виде через контролирующие службы и директорат + требует обязательное пояснение причин изменения потребности. Т.е. не очень приятные альтернативы…

    Напоминание раз в 10 минут — это слишком жестко. А что если задержка вызвана отсутствием спец.транспорта для перевозки закупленных ТМЦ?

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

    И очень приятно было прочитать ОСОЗНАННЫЙ комментарий. Спасибо!

    Reply
  10. Franco

    + за идею

    Один мой знакомый в 2001-2002 годах взял за работу у одного регионального ГазПрома 60 тыс.руб. Внушительные тогда деньги в те годы. За то, что в 1С, тогда 7.5 сделал систему предпреждения и обучения. Бухгалтера предприятия были просто с

    Reply
  11. CheBurator

    (10) в общем согласен

    Но имею собственное мнение

    Конечно многое зависит от частностей

    Главное что отмечено — следует дорожить персоналом

    Согласен

    Но каким персоналом?

    Дорожить следует теми кто осуществляет или имеет навыки управления и организации работы персоналом

    Остальных то есть Исполнителей -их сейчас как грязи

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

    Както вот так

    И нефиг ими дорожить

    Если дорожить такими раздолбаями которым по три раза напоминать надо- откуда управленцы получат внятный линейный персонал на который можно опереться?

    Reply
  12. nimus

    (11) CheBurator,

    На крупных промышленных предприятиях «раздолбаев» большинство ) Обычно — подавляющее ))

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

    Reply
  13. Ak.1978

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

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

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

    Reply
  14. AlexSunS

    Под УПП 2.0 надо так же.

    Reply
  15. KiLLius

    Всё это хорошо, но есть ли какие нибудь рекомендации по реализации всей этой прелести?

    Ведь просто так взять и запустить систему информирования не так то просто.

    Reply
  16. dyak84

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

    Reply
  17. Terve!R

    Я считаю, что предупреждать о передачи информации в компетентные отделы нужно во втором окошке, а в третьем разместить единственную большую кнопку «Распечатать бланк заявления об увольнении» 🙂

    Reply
  18. chmv

    17 Это уж слишком, а если человек в командировке, в отпуске, и т.д.

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

    Reply
  19. antlys

    На предприятиях бывают разные подходы к управлению и разделению ответственности, главное, чтоб при описанном Выше подходе, когда пользователя хотят приучить к списку задач, не было обратного: «Я не сделал, потому, что у меня в задачах такого не было…».

    Reply
  20. mms76

    Не плохо бы еще реализовать напоминание через подключенное оборудование, например, электрошок.

    Reply
  21. DAnry

    По собственному опыту знаю, что «юзеры» 1С в большинстве своём крайне эгоистичны и не любят выполнять действия, которые напрямую не приносят им пользы. Например, менеджеры по продажам, делая всё возможное для увеличения продаж, мало заботятся о правильности бухгалтерских проводок своих документов, или правильности формирования налоговых накладных, или правильности движения и учета товаров на складе… Безусловно есть исключения, но сознательные исполнители попадаются очень редко. Потому и нужно придумывать инструменты и механизмы, подобные описаным в статье. Автору «плюс».

    Reply
  22. rootakasan

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

    А если серьезно, то Автор статьи прав и, полагаю, подобные методы напоминания должны работать.

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

    Reply
  23. nimus

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

    А по сути комментария — всё по делу, со всем согласен.

    Reply
  24. WalterMort

    Во всей компании не нашлось руководителя с твёрдым Х(арактером) чтобы поставить спящего кладовщика на место?

    Reply
  25. WalterMort

    Все боятся вступать в конфликт? А так, если что, никто ничего не говорил, это программа сама кляузу написала, автоматом.

    Какой грозный кладовщик, всех застроил. Без программы не обойтись.

    Reply
  26. adapter

    это попытка заменить административное воздействие автоматизацией. Столько сил впустую. Автору респект, потратил, написал, описал, думал, НО.. там где это не надо никому…. а компьютер не включил? у меня ваш монитор не показывает! каких СИЗ? у меня ваша программа не работает :))

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

    Reply
  27. ron1

    Нельзя так строго с пользователями. Больше всего русский человек ценит свободу. ))) Иначе нет творчества, нет фантазии, нет азарта.

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

    А как уверенность пришла, так и над пользователями можно диктат устроить? ;-)))

    Reply
  28. nimus

    (26) adapter, Это не реклама, продукт не продается. Всё тривиально и без меркантильности. Просто обмен опытом.

    Reply

Leave a Comment

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