Золотой франч. Финал




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

62 Comments

  1. Rustig

    (0) красава)

    Reply
  2. genayo

    Есть еще куда расти в части качества материала статей, есть. Иначе бы все эти разъяснения не понадобились…

    Reply
  3. Hans

    Ты уже вроде увеличивал выработку вдвое. Только запала на месяц хватило. Опять?

    Reply
  4. Infactum

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

    Reply
  5. KapasMordorov

    Похоже на балльную систему ПФ РФ.

    Reply
  6. Vovan1975

    ну пока очевидно одно — при помощи «баллов» можно эффективность подогнать под любую цифру. Это все какая-то абстрактная хрень.

    Reply
  7. sergathome

    (6) да, когда эффективность БИЗНЕСА оценивают не по прибыли, это наводит…

    Reply
  8. profiprog1c

    Напомнило классику жанра: Петя получал 10000$ в месяц, а Вася 500$. В среднем Петя и Вася получали по 5250$ в месяц. Ну и вторая классика: у Пети было 10 яблок и он их съел, а у Васи было 0 (ноль) яблок и он не съел ни одного яблока. НО!!! В среднем Петя и Вася съели по 5 яблок. С цифрами можно играться по разному.

    Reply
  9. herfis

    (8) Есть же прекрасное «по данным статистики у человека в среднем одно яйцо и одна сиська».

    Reply
  10. genayo

    (8) Так надо медиану использовать, а не среднее :))

    Reply
  11. forseil

    Вот вы циники) Надо порадоваться за человека. что у него есть какие-то сдвиги в работе. И сказать спасибо, за то что делится своими мыслями и наработками.

    Reply
  12. Kaval88

    Зачем размазывать статью на 4 части? Напоминает индусский код. Краткость сестра таланта.

    Reply
  13. Adam12345678

    Вывод по всем статьям этого цикла лично для меня: меньше «тупи», больше работай. И будут тебе баллы и профит. Однако, когда загоняешь себя в непрерывный цикл разработки — очень сложно потом возвращаться к нормальной жизни. Теряется полезное умение расслабляться и отдыхать.

    Reply
  14. Lapitskiy

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

    Reply
  15. pashamak

    Отличная статья. Спасибо.

    Reply
  16. Артано

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

    Reply
  17. &rew

    (16)Побально, похоже так (не ручаюсь за правильность, как понял):

    Раньше:

    Разраб 1; Тип задачи 1; 1 час

    Разраб 2; тип задачи 1; 1 час

    Итого 1 балл на Тип задачи 1;

    Теперь;

    Разраб 3; Конультант Разраб 1; Типз задачи 1; 0,3 часа.

    Возможно еще 0,2 часа будет от Конультанта плюсоваться, но всё-равно прирост!

    Reply
  18. 1c-intelligence

    (16) более подробно система измерения была описана здесь, прям первый раздел статьи.

    Задача не делится на баллы, а оценивается в баллах.

    Например, решили вы, что разработка простого отчета (один оборотный регистр, вывод всех измерений и ресурсов, установка формата сумм, никакого УО) стоит 3 балла.

    А отчет по двум регистрам — например, остаточному и сведений, не очень сложно соединенным — будет стоить 5 баллов.

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

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

    Ну дальше понятно. Сейчас вы решаете, например, задач на 100 баллов в месяц, а сможете на 200.

    Reply
  19. 1c-intelligence

    (13)

    Вывод по всем статьям этого цикла лично для меня: меньше «тупи», больше работай

    ну, для этого вывода не надо статьи читать — он очевиден.

    Вопрос в том, как именно надо больше работать, что делать, а чего не делать.

    Reply
  20. Adam12345678

    (19)Иван, у меня природное чутьё))) Приходится зачастую бороться с ленью и прости господи…прокрастинацией) Если мой движок разогнать — мне уже трудно иной раз остановиться. Поэтому и отметил, что умение расслабляться и отдыхать для эффективной работы также важно, как и умение настраиваться на работу. Жаль, что об этом пока никто подробно не пишет((

    Reply
  21. 1c-intelligence

    (20) могу я написать, на заказ.

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

    Ну и структурой личного времени.

    Reply
  22. acanta

    (18) По поводу баллов — споры возникли по системе постепенного развития дорабатываемого функционала.

    Т.е. есть простой отчет 3 балла. К нему добавлено 2 колонки, которые требуют обращения к регистру сведений. Всего с нуля это 5 баллов, но если брать за основу первый, простой отчет — то само приращение функциональности — 2 балла.

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

    Обсуждается целесообразность написания с нуля простого отчета второй, третий.. десятый раз, которая вполне за месяц может сложиться в 100 баллов дополнительно, за которую: а ) (не) будет оплачивать клиент-заказчик б) (не) будет оплачивать руководитель проекта со стороны франчайзи.

    Когда клиент понимает, что он ВСЕГДА платит за развитие уже существующего функционала — проблем договориться о ценах обычно не возникает.

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

    Reply
  23. Артано

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

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

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

    Reply
  24. Артано

    (13) В этом случае мне помогла Библия. Каждый раз в 18:00 я вспоминаю слова которыми Иисус исцелял больных параличом — «встань и иди». А чтобы не забыть, я ставлю напоминалку.

    P.S. Да не воспылают гневом религиозные фанатики, ибо истинно верующие возрадуются чудесному превращению занудного офисного эксперта в любящего мужа и отца.

    Reply
  25. qwinter

    Осталось только дождаться, когда Иван осчастливит хоть какой нибудь франч своим присутствием)

    Reply
  26. qwinter

    (25) школота покусала только автора)) додуматься написать об «золотом франче» не проработав во франче не дня, это серьезно)) Назвал бы он это «золотой разработчик типовых решений» стеба было бы на порядок меньше)

    Reply
  27. leemuar

    (28) откуда инфа, что «не проработал во франче ни дня»? Автор вроде как более 4х лет во франче был

    Reply
  28. leemuar

    (27) Окнософт разве не франч? Приведенные графики результатов — не результаты применения методики в отдельном франче?

    Reply
  29. qwinter

    (30) окнософт не франч.

    Reply
  30. leemuar

    (31) странно, видимо на сайте 1С ошибочно включили в список аттестованных франчей: http://1c.ru/rus/partners/franch.jsp?id=34548

    Reply
  31. Артано

    (28) А разве Окнософт не франч? Что за глупый наброс?

    Reply
  32. Артано

    (32) 1С тут не авторитет, в треде полно экспертов, кто лучше 1С знает кто франч, а кто нет =)

    Reply
  33. qwinter

    (32)

    (34)

    В этом списке несколько тысяч ИП из одного человека, описанные выше рекомендации однозначно озолотят эти франчи xD

    Reply
  34. 1c-intelligence

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

    Я за баллы, или пойнты.

    Рад, что у вас получилось. Много у кого получается, только никто, почему-то, не делится результатами и практиками. А это, вроде, важнее техники.

    Reply
  35. 1c-intelligence

    (23) вы описали проблемы недовнедренной системы, когда людям ничего не объяснили, не согласовали мотивацию, не донесли цель и смысл, а просто заставили оценивать задачи в незнакомой единице.

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

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

    Reply
  36. 1c-intelligence

    (11) не, мне «спасибо» не надо. Мне надо, чтобы вы пробовали и достигали успехов.

    Reply
  37. 1c-intelligence

    (12) по двум причинам:

    1. Следующая часть зависит от реакции на предыдущую (не только в комментариях ИС);

    2. Нужно много объяснять по ходу. Хотелось бы просто дать алгоритм, но его должен хоть кто-то в команде понимать.

    Reply
  38. 1c-intelligence

    (8)

    С цифрами можно играться по разному.

    можно, если есть такая цель.

    У меня нет.

    Reply
  39. 1c-intelligence

    (7) я где-то оценил эффективность бизнеса?

    По одной прибыли вроде никто не оценивает. Иначе наемный менеджер прекратит развитие компании.

    Reply
  40. 1c-intelligence

    (6) ответ есть в статье.

    Reply
  41. 1c-intelligence

    (5) не знаком, но спасибо, изучу.

    Reply
  42. 1c-intelligence

    (4) так и не смог понять, о чем вы написали. Что значит «подгорело»?

    «На порядок хуже» — это в 10 раз? Как вы оценили?

    У кого можно поучиться? В вашем профиле пока не нашел опубликованных статей.

    Reply
  43. 1c-intelligence

    (3) приятно, что следите за моей судьбой.

    Увеличивал, и вдвое, и вчетверо. И свою, и чужую.

    Но в условиях, описанных в статье, увеличением выработки занялся впервые. Там сознательно нет цифр о моей выработке — только общая и ключевого разработчика. С разработчиком такого уровня работал впервые.

    Reply
  44. 1c-intelligence

    (2) и того, что написано — мало. Вы ведь даже пробовать не будете.

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

    Но на Business Programming Days мест свободных не было.

    Reply
  45. genayo

    (46) Комментарий был про то, что многие тут совсем элементарных вещей не понимают, от того пишут в комментах откровенные глупости… По сути методики я нигде против не высказывался, вполне годная методика, ибо здравому смыслу ни в чем не противоречит.

    Reply
  46. TODD22

    (46)

    Но на Business Programming Days мест свободных не было.

    А сколько всего было мест? Ну так что бы понимать масштабы события.

    Reply
  47. Infactum

    (44)

    так и не смог понять, о чем вы написали. Что значит «подгорело»?

    Просто метафора, которая, на мой взгляд, отлично описывает вашу реакцию. Судя по наличию +, оценил не я один. ИС не то место, где надо разводить дискуссии на тему метафор и интернет мемов — для этого есть профильные ресурсы.

    (44)

    «На порядок хуже» — это в 10 раз? Как вы оценили?

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

    (44)

    У кого можно поучиться? В вашем профиле пока не нашел опубликованных статей.

    В моем профиле «статей» нет. И что с того? Нельзя критиковать статьи не будучи автором аналогичных? Ясно, понятно.

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

    Что надо делать автору – не имеет никакого значения
    Reply
  48. 1c-intelligence

    (49)

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

    да я не против, просто понять не могу эту метафору. Можете другой метафорой ту же самую мысль выразить?

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

    да кто вам запрещает-то, критикуйте на здоровье.

    Просто понять хочу, у кого лучше, раз у меня хуже.

    Reply
  49. Артано

    (35) Есть два вида людей имеющих собственное суждение:

    1. Опираются на факты, которые обобщают и интерпретируют

    2. Опираются на фантазии.

    Вот второй пункт как раз проиллюстрирован 31-м и попытками оправдаться в 35-м посте

    Reply
  50. qwinter

    (51) факт в том, что на франч не аттестуются, а заключается договор. Его может заключить кто угодно, и это совершенно не значить, что эта фирма будет выполнять работы которые подразумевает бизнес «франчайзи 1С». В этом списке есть государственные университеты, крупные заводы и еще куча всяких разных фирм. Но 90% фирм занимается вполне конкретными работами.

    И кстати среди аттестованных хоть по одному направлению Окнасофт нет.

    Reply
  51. genayo

    (52) А по существу, почему вы считаете, что описанное автором работать не будет? Только по тому, что он не франч?

    Reply
  52. qwinter

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

    Reply
  53. Артано

    (52) Посмотрел список внедренных решений на сайте 1с. Во-первых — он есть. Во-вторых, там фигурирует какая-то тиражная отраслевая, судя по всему разработанная Окнософтом. Чем не франч? Впрочем, специализированный, тут согласен.

    Reply
  54. 1c-intelligence

    Друзья, прошу прощения за спам — поучаствуйте в голосовании.

    Reply
  55. 1c-intelligence

    Кстати, график стоимости балла (единицы работ) теперь доступен в онлайне — https://business-programming.ru/flowcon/diagram?grid=3

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

    Можете за нами следить.

    Reply
  56. AntonSm

    (57) Поясните, пожалуйста, как считается показатель «Затраты на производство единицы работ».

    Reply
  57. 1c-intelligence

    (58) оцениваем задачи в баллах, делаем работы, записываем потраченные часы.

    Полгода назад тратили почти 1 час на производство одного балла работ.

    Сейчас тратим 15 минут на один балл работ.

    Один балл — это единица измерения работ.

    Reply
  58. AntonSm

    (59) А насколько подробная фиксация потраченного время с вашей точки зрения оптимальна?

    Reply
  59. 1c-intelligence

    (60) она не подробная, даже по задачам не расписана. Просто валом — время.

    Для франчей это не проблема вроде. Время там в любом случае фигурирует, в листах учета времени.

    Теперь достаточно добавить к задачам оценку в баллах, применить рекомендации «Золотого франча», и все получится.

    Reply
  60. 1c-intelligence

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

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

    Можно, конечно, не фиксировать время вообще — просто смотреть на количество баллов. Но там же есть отпуска, отгулы и т.д.

    Reply
  61. AntonSm

    (62) Теперь понятно. Спасибо.

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

    Reply
  62. 1c-intelligence

    (63) не, тут котловой метод.

    Главное — ввести оценку в баллах. Потому что часы только все путают, особенно во франче.

    Там всегда минимум две оценки — сколько потратил, сколько оплатили. И обе — в часах. И надо как-то оценивать, как одно с другим соотносится.

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

    Reply

Leave a Comment

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