Психология клиента и как с ней бороться




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

24 Comments

  1. andrey995

    Вероятно потихоньку сюда перекочуют все бояны из области IT ?

    -1

    Reply
  2. wolfsoft

    2 andrey995: Для тебя — «боян», а я вот первый раз на статью «наткнулся», мне она понравилась.

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

    зы: Весь мир «крутится» вокруг тебя?

    Reply
  3. CheBurator

    +1

    Reply
  4. CheBurator

    Насчет почему трудно получить 100$ от ген.дира. В статье названы 2 причины.

    но они не основные. основная причина — ген.дир ОТДАЕТ СВОИ ДЕНЬГИ. Поэтому — торгуйтесь и предлагайте свои улуги людям, которые распоряжаются ЧУЖИМИ ДЕНЬГАМИ — как пример — главбух.

    Reply
  5. wolfsoft

    2 Сhe Burashka: Спасибо за комментарий. Отчасти согласен. Хотя иногда бывает наоборот, невероятно, но факт.

    На днях принес в одну коммерческое:

    Директор (радостно): — Нормально, когда сделаете?!!

    Главбух (завывающе): — А че как дорого???…

    Но все равно они согласились 🙂

    Reply
  6. d.snissarenko

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

    Reply
  7. wolfsoft

    2 Drock: На счет 100 бакинских в месяц, пожалуй, соглашусь. Сам сейчас так работаю. Не хотите — не надо.

    Но вот когда речь идет о крупном проекте… Мне кажется, там в любом случае придется «бороться» с чьей либо психологией — слишком много разных людей Заказчика будет в этом участвовать. А стоящие «на верху» подобных организаций-заказчиков люди в основном все… хм… «сложные» 🙂 Некоторые из них «не могут» сразу говорить «да», им нужно, чтобы их убедили.

    Хотя, наверное, я уже отклонился от темы статьи.

    Reply
  8. support

    Молодец, хорошая статья, пускай будет в каталоге, а то затеряется в недрах интернета. +1

    По теме статьи: может вообще отказаться от абонентского обслуживания. Пускай вызывают на часовой ставке.

    Reply
  9. wolfsoft

    2 support:

    > Молодец, хорошая статья, пускай будет в каталоге, а то затеряется в недрах интернета. +1

    За плюсик спасибо, а кстати, где он (плюсик)? ;)))

    > может вообще отказаться от абонентского обслуживания. Пускай вызывают на часовой ставке.

    Абонентское обслуживание дает некоторую стабильность: одной стороне — в затратах, другой стороне — в поступлениях.

    Reply
  10. support

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

    Чтобы быть конкуретноспособным, необходимо не навязывать абонентское обслуживание клиенту, раз уж ему психологически это неприемлимо. Зачем с ним бороться, лучше с ним согласится. Но обеспечить прибытия специалиста по вызову в течении часа, по ставке 25$. Так и договорится. Руководитель понадеется на то, что вызывать не придется, а раз уж пришлось, то не жалуйся, как договорились, так и будет. В течении часа приезжает специалист. Берет 25$ за вызов и 25$ за каждый час работы. Клиент несколько раз повызывает, и сам спросит о скидках. А лучше ему дать дисконтную накопительную карту, чтобы чем больше вызывает, тем меньше для него час будет стоить. В следующий раз будет звонить только вам, т.к. у вас час для него дешевле, чем у других.

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

    Reply
  11. wolfsoft

    > А абонентская плата, это торговля воздухом.

    Не согласен. Но нет времени приводить аргументы. Тем более, что они в любом случае будут субъективны, как с моей, так и Вашей стороны 😉

    Reply
  12. CheBurator

    Если абонентское обслуживание случается регулярно — рано или поздно вашему спецу предложать поработать на фирму.

    Reply
  13. wolfsoft

    2 Сhe Burashka: > Если абонентское обслуживание случается регулярно — рано или поздно вашему спецу предложать поработать на фирму.

    Причины:

    1. Абонентское обслуживание стоит значительно больше месячной зарплаты специалиста (скажем, для нашей местности, 35000р в месяц и более).

    2. Клиенту требуется постоянное наличие специалиста.

    3. Клиент — полный идиот, и не может подсчитать затраты на содержание своего специалиста.

    Если же имеется ввиду — просто поработать «налево», помимо фирмы, то это не зависит от абонентки. И при разовых вызовах поступают такие же предложения, но это уже дело контроля рабочего времени специалиста. Это уже совершенно другая глобальная тема. Единственное, что можно сказать, если спец захочет работать «налево», то он будет это делать. Контролировать специалиста абсолютно — не реально. Две меры предосторожности со стороны фирмы: хорошая зарплата, чтоб спец ценил свою работу, и немедленное увольнение в случае работы «налево».

    Reply
  14. KATPAH

    Хорошая статья,покажу другану он работае во франче,манагером отдела сопровождения

    Reply
  15. chev

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

    Reply
  16. huse

    (0) А вы знаете почему Вас покупают?

    PS Опишите как бы Вы покупали себе крутой телевизор? Единой суммой? Арендной платой? Вы бы изучили интернет? Вы бы послушали друга? Вы бы произвели математические расчеты?

    Reply
  17. nizarit
    wolfsoft пишет:

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

    У Вас ошибка. Получается, что «Абонентское обслуживание стоит 35000р в месяц» 🙂

    Клиент: «Что надо сделать, чтобы наши компьютеры никогда не ломались?»

    Техник: «Не включайте их и тогда они будут работать ВЕЧНО!»


    😎

    Reply
  18. Иероглиф

    Уффф… какое счастье что я не работаю более во франче, а в конкретной фирме на своем месте 🙂 — ей богу устаешь от беготни по клиентам, а выплачивают тебе копейки:) — и при этом почему то директор франча реально считает себя правым выплотить только десятую часть (хорошо если десятую) от того что ты заработал для фирмы. Или ещё другой нюанс — если у тебя есть сертификат 1С то ЗП твоя раза в 4 выше — хм.. а зачем он мне нужен если опыта моего напрмеир хватает на 4-х сертифицированных, если клиент звонит и говарит пришлите мне пожалуйста того то — с другими мы работать не хотим — потому что проверили, помтоу что знают — сделаю все быстро и качественно… Впрочем это вообще другая история 🙂 что то нахлынули грустные воспоминания про работу во франче 🙂

    Reply
  19. netserfer

    Да, готов подписаться почти под каждым словом)

    Reply
  20. Zoomby

    (18) но опыт работы во франче тоже чего то стоит.

    Reply
  21. AnryMc
    wolfsoft пишет:

    2 Сhe Burashka: Спасибо за комментарий. Отчасти согласен. Хотя иногда бывает наоборот, невероятно, но факт.

    На днях принес в одну коммерческое:

    Директор (радостно): — Нормально, когда сделаете?!!

    Главбух (завывающе): — А че как дорого???…

    Но все равно они согласились

    Главбух — выполняет функции финдиректора или бюджетного офицера!

    Reply
  22. karloson

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

    теме +

    з.ы.

    Однако, если поинтересоваться у такого существа, что такое алгоритм Лемпеля-Зива-Уэлча, то последует немая сцена из «Ревизора» Гоголя.

    правильно: Алгори́тм Ле́мпеля — Зи́ва — Ве́лча

    Reply
  23. MisKat

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

    Reply
  24. Andle

    Пойду народ, особенно, из тех кто пользуется архиваторами, поспрашиваю, что такое алгоритм Лемпеля-Зива-Уэлча, а то иш…

    Reply

Leave a Comment

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