Двуглавый орел, Змей Горыныч и Гидра




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

36 Comments

  1. nyam-nyam

    «Ондатр по-прежнему лежал в гамаке.

    — Привет, дядя Ондатр, — сказал Муми-тролль.

    — Не мешай мне, я работаю! — ответил Ондатр.

    — Работаете?.. Над чем? — удивился Муми-тролль.

    — Я думаю, — сердито проворчал Ондатр — Думаю о тщете и напрасности всего сущего.

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

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

    Reply
  2. forseil
    Но программисты не хотят. Читают, проходят мимо, иногда лайкают, иногда дизлайкают, иногда ругаются, иногда вопросы задают. Но ничего не делают.

    А че делать то надо?)

    Reply
  3. TODD22

    (4)

    А че делать то надо?)

    Мир спасать!

    Reply
  4. forseil

    (5)Тех задание где?

    Reply
  5. TODD22

    (6)

    Тех задание где?

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

    Reply
  6. 1spectr

    Да действительно платформа 1с сильно ограничена в возможности создания интернет ориентированных интерфейсов. Но не все так плохо, есть http-сервисы, пожалуйста бери какой-нибудь js-Фреймворк(например dhtmlx) и рисуй какой-угодно интерфейс который будет работать с данными из базы напрямую без интеграционных прослоек. Понятно, что разработка такого решения будет стоить дороже чем нарисовать интерфейс на web-клиенте, но это это закономерно так как мы отказываемся от стандартных возможностей платформы по созданию интерфейса.

    Reply
  7. ArchLord42

    ИМХО

    (8)

    Да действительно платформа 1с сильно ограничена в возможности создания интернет ориентированных интерфейсов

    Что конкретно для вас является ограничением? 1С все верно сделала, дала Веб клиент, если устраивает его функционал, милости просим, нужна большая кастомизация, ваша цитата:

    тогда пожалуйста бери какой-нибудь js-Фреймворк(например dhtmlx) и рисуй какой-угодно интерфейс который будет работать с данными из базы напрямую без интеграционных прослоек.

    Вот без HTTP сервисов было туго.

    стоить дороже чем нарисовать интерфейс на web-клиенте

    Просто, те кто работает с 1С привыкли, что стоимость разработки сопоставима со стомостью разработчика «плагина» для WordPress.

    Я думаю всем понятно, что 1С создана как платформа для создания систем учета, почему многие сравнивают ее с более универсальными языками платформами?) Это как сравнивать автомобиль и самолет, ругая автомобиль за то, что он летать не умеет, а доработки для его полета стоит намного дороже, чем поменять резину.

    .

    Нужно полноценное веб мобильное приложение, берите для этого подходящие инструменты и пользуйтесь, зачем ругать 1С за то, что она делать и не должна?)

    Reply
  8. unpete

    (8) Статья, imho не про интерфейс, а про распределенные данные, коих в 1с никогда не было и не предвидится. dhtmlx и http сервисы протухли еще до рождения. В их основе — модель с центральным сервером, как единственным источником истины, а мир живёт по другим законам.

    Reply
  9. 1spectr

    (10)

    Разве статья не про ограничения платформы наличие которых заставляет обращаться к другим системам и как следствие делать неисчислимое множество интеграций?

    Reply
  10. genayo

    Есть что возразить и по сути статьи, но писать много, а результата не просматривается. Спрошу так — почему Метадата а не Куба, например?

    Reply
  11. CXY

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

    Reply
  12. palsergeich

    Поработав в кровавейшем энтерпрайзе могу сказать одно:

    Единая платформа — серебряная пуля, которая мало кому нужна, ну не сможет Ваш продукт конкурировать к примеру со связкой САП + 1С + сайт.

    Для примера — федеральный ритейл с несколькими тысячами точек в котором я имел честь работать: 5 разработчиков 1С(и это штат увеличили под один проект, было 3) + около 10 специалистов САП(внедрено несколько решений), + около 5-10 ВЕБ на корп портал и сайт, реально high load (техподдержку не учитываю, но ее штат тоже не сильно большой) и вся эта связка прекрасно и без сбоев работает годами, а если что то ломается, то на моей памяти не более 6ти часов исправляется и новый функционал весьма резво добавляется. Онлайн кассы — пожалуйста, любые изменения в законодательстве — к моменту обязательного исполнения есть везде. Через шину данных пошло очень много данных и начались проблемы — от вендора пол отдела приехало 2 недели разбирались и поправили. Возможно ли такое на пропиетарной системе, от без обид, неизвестного вендора, как быстро этот вендор будет поспевать за всем что происходит в мире и будет ли это дешевле существующего стека? Очень сильно сомневаюсь.

    Могу привести и обратный пример:

    Когда на 200 человек штата — 20 — 1С и веб разработка и никто нигде не успевает, потому что никто не знает что надо в итоге.

    Может быть дело не в стеке технологий/решений, а в том как этим стеком управляют?

    Reply
  13. palsergeich

    Конечно же я понимаю о чем статья.

    Но категорически не согласен с посылом — разные системы это дорого. Интеграции — не выгодно.

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

    САП — В нем реально настроил учет и забыл. Очень дорого, долго, надежно. Но да любое изменение через боль, или невозможно, но это и не нужно, это нищевой продукт с именем.

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

    Но бизнес редко когда начинается будучи готовым к полному стеку сразу, на старте как правило это какая то желтая коробка + интеграции с существующими сервисами, что благодаря распространенности платформы, как правило не составляет труда. Ибо мало у кого на старте есть минимум 4 миллиона.

    Потом, если дела начинают идти в гору, да потихоньку начинается зоопарк. Но это не хорошо и не плохо. Это современный тренд. Все развивается настолько быстро, что уже практически невозможно сделать решение, которое будет удовлетворять всех. Да что там говорить, даже современные языки программирования из коробки — одно, а хочешь что то еще — устанавливай фремворк, но фреймворк нельзя просто так взять и установить, для него надо еще то то и то то. Простой пример: не так давно для парса логов ТЖ написал скриптик на питоне, озадачился вопросом, нельзя ли проще, слишком много нативного кода. Оказалось можно. Всего то надо установить установщик пакетов питона, установить фреймворк pandas, и еще что то установить. В моем случае, так как интерес чисто академический и ресурсов на еще 1 вирт сервер для экспериментов уже нет — проще оказалось отказаться от этой идеи.

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

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

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

    Категорически не согласен ни с логической цепочкой ни с посылом статьи.

    Хотя возможно я только что добился цели этой статьи — дать хайпа)

    Reply
  14. blackhole321

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

    А так — больше систем, хороших и разных. Сила в разнообразии.

    Reply
  15. Denis_CFO

    (11)

    …Голос Капеляна за кадpом: Штиpлиц знал, что лучше всего запоминается последняя фpаза…

    А по-сути, ИМХО, все вопросы бизнеса с помощью 1С не решаются (тем более организационные). А взгляд на одну и ту же проблему у всех разный, о чём ТС и писал.

    Reply
  16. Dementor

    (10) так значит статья про использование шины? Поставил какой-нибудь реббит-эмкью и все системы автоматически данными стали обмениваться, никаких интеграции больше не нужно. Нет — центральному серверу, да — гетерогенной распределенной среде? Фантазёры…

    Reply
  17. Dementor

    Пока читал, в голове крутилась мысль — выгрузка цен и товаров, загрузка заказов, CRM, управление задачами — да тут описывают типовой функционал 1С:Битрикс24 (в облаке для малых компаний бесплатно). Кому мало — берут 1С:Битрикс корпоративный портал, кому много — 1С:UMI (тут же фишка в готовой интеграции с типовыми, а для самописок можно сказать готовый шаблон).

    Поддержу коллег из более ранних комментариев. «Зоопарк» — это ни хорошо, ни плохо; важна только кривизна рук исполнителей!

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

    Reply
  18. It-developer

    На написание статьи потеряно 8-16 часов

    Reply
  19. unpete

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

    Reply
  20. vakham

    (7) Значит опять сверхурочные за «спасибо». Директора, идите лесом!

    Reply
  21. genayo

    (21)Философия понятно. Я про преимущества для бизнеса. В моем понимании, распределенные данные реально нужны достаточно специфичным комнаниям.

    Reply
  22. CheBurator

    (15) «это нищевой продукт »

    — это ты правильно выразился.

    Reply
  23. nikita0832

    Из статьи понятно что все плохо. а что делать не понятно. Читал все статьи автора, если он пытается нас к чему-то подвести, то пора бы уже к сути переходить. Или суть как раз будет «в платной версии на конференции infostart event»?

    У нас на предприятии вопрос многих голов решается внешними источниками данных. Односторонне, зато можно сказать «бесшовная интеграция»))

    Reply
  24. &rew

    В одной из статей автора было написано, что нас не спрашивают, а мы все-равно пишем зачем то. Вот я напишу свою мысль: Зачем «сращивать» между собой по системе все со всеми? Прелесть разных систем в их изолированности, и их обмен тоже жестко регламентирован. Сколько уже таких «систем» написано даже на той же 1С. Например, старая, древняя УТ в хлам переписанная, соединяется с такой же старой вхлам переписанной бухней. Та в свою очередь, соединяется с обновляемой типовой бухней откуда сдаются отчеты согласно законодательству. ЗУП соединяется с той же старой бухней, где есть вся инфа для начисления зп (которая была получена из УТ), но сама не лезет в УТ! И все это решение на удивление стабильно работает. Если нужно прикрутить что-то еще, прикручиваем к одному, а не ко всем сразу.

    Reply
  25. unpete

    (23)

    распределенные данные реально нужны достаточно специфичным комнаниям

    У меня таких клиентов 100%. И за 10 лет ни один из этих клиентов не задал мне ни одного вопроса про бухгалтерию и налоги — с этой чепухой они как то справлялись самостоятельно. Так что, в моём мире, распределенные данные нужны всем, а регламентированный учет — никому.

    Reply
  26. genayo

    (27) У вас 100%, а у других 1%, просто автор статьи претендует на некоторое универсальное решение, поэтому и вопросы…

    Reply
  27. dabu-dabu

    Очень расстроила эта статья. Непонятно, о чем она, видимо о том, как программист себе видит проблемы бизнеса с ИТ. И написана разве для того, чтобы «эффективный менеджер» мог поплакаться, какие ИТ «редиски» и постоянно выжимают деньги.

    На самом деле множество разнородных систем это безусловно плюс, который предоставляет возможность выбора. А выбор нужен для того, чтобы можно было найти систему (платформу) наиболее подходящую для конкретной компании с экономической точки зрения. Т.е., например (очень условно), компания растет и закрепление клиента за определенным менеджером становиться невозможно. А клиентов то нужно холить и лелеять. Соответственно встает вопрос об обеспечении информацией о клиенте для всех «продажников» иначе клиенты будут отваливаться. Мы можем оценить количество постоянных клиентов — 20% с оборота, допустим, оценили что в случае падения качества обслуживания, вероятно, отвалиться из них половина, т.е. 10% c оборота, допустим в 300 руб. Стоимость внедрения системы CRM 100 руб., стоимость лицензионных отчислений и обслуживания 30 руб. в год. Увеличивающаяся сложность поддержки зоопарка систем (интеграция) — 5 руб. в год. Нужно еще одно рабочее место для программиста — 5 руб. в год (офис, хоз., бух, кадры и т.п.). Но внедрение конкретной CRM упростит работу продажникам, оценочно на 5 руб. в год. Итого внедрение CRM окупиться через 4,5 года. Это и есть оценка экономической эффективности, конечно, очень упрощенно.

    Подобная экономическая оценка делает для управляющего компанией деятельность ИТ более прозрачной.

    Проблема в том, чтобы разобраться какие системы могут дать положительный результат и подготовиться к внедрению раньше чем появится проблема вида «если не внедрим CRM сейчас то предприятие начнет сдавать». А для этого нужен нормальный ИТ-директор (директор по автоматизации), который разбирается не только в своем зоопарке систем, но и в бизнесе для которого он и работает, и чем автоматизированные системы могут помочь оному бизнесу.

    И, кстати, если на metadata.js посмотреть глазами ИТ-директора с точки зрения оценки экономической эффективности, то становиться достаточно грустно. Т.к. почти нет историй применения, а соответственно, возможные области применения и проблемы по каждой из них не очень понятны. Нет готовых решений, как, например, у bitrix. Есть одно — теоретически красивое техническое решение, для оценки применимости которого надо потратить немало ресурсов.

    Reply
  28. SunShinne

    Понравилось «Программы от 1С обещают бесшовную интеграцию с основной системой учета (что бы это не значило

    Reply
  29. Nehc
  30. 1c-intelligence

    (16) спасибо, вроде поправили.

    Reply
  31. 1c-intelligence

    (20) 1.2 часа.

    Reply
  32. 1c-intelligence

    (25)

    если он пытается нас к чему-то подвести

    именно «подвести» — только иногда, в развлекательных статьях. Первое и главное — увидеть собственную работу, окружающую среду и свои перспективы под другим углом. Ну и начать что-то делать. Например, статусами задач управлять (https://infostart.ru/public/830605/).

    Reply
  33. 1c-intelligence

    (26)

    а мы все-равно пишем зачем то

    Вот я напишу свою мысль

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

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

    Всем на вас насрать, ищите пользу для себя. В написании комментариев ее нет.

    Reply
  34. &rew

    (35) Судя по Вашему комментарию, вам не всё-равно. Вот Вы пишете статью. Она рассчитана на читателя, иначе Вы не выкладывали бы ее на ИС а сожгли бы. Коменты, это тоже в некотором роде Статья (по сути что статья, что комментарий имеют одну природу — информационную), ориентированная на узкий круг лиц. Иногда складывается впечатление, что для Вас, уж простите, существует только 2 мнения: одно — Ваше, другое — неправильное. Буду рад ошибиться.

    Reply
  35. 1c-intelligence

    (36) правильно пишете, что статья рассчитана на читателя. Но не на комментатора. Читателей — 90 %, комментаторов — 10 %. Я пишу в расчете на читателей. Не для читателей, не чтобы понравиться читателям, не для удовлетворения их потребностей. Но — в расчете на них.

    Комментарии — они для кого? Для читателей? Сколько читателей у комментариев? Бывает, что больше, чем у статьи, но это пустые прочтения, бесцельные, не приносящие пользы ни вам, ни читателям.

    Или комментарии — для автора? Ну, на этот вопрос я уже отвечал.

    Писать комментарии невыгодно чисто экономически. О кармических последствиях даже говорить не стОит.

    Reply
  36. 1c-intelligence

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

    Reply

Leave a Comment

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