МегаКомплекснаяКонфигурация




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

33 Comments

  1. brr

    МДник в студию!

    Reply
  2. gavril

    Для кунцкамеры?

    Reply
  3. Abadonna

    Гы! Оказывается «керiвник» вовсе не «коровник», как я ожидал :))))

    Reply
  4. maljaev

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

    Reply
  5. Ёпрст

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

    Reply
  6. Ёпрст

    Вид документа в Шапке .. впечатляет 🙂

    Reply
  7. vasilykushnir

    Интересно… И в какую это больную голову весь этот бред уместился…

    Ребята наверное о закладках не слышали…

    Reply
  8. gavril

    (4) Все нормально с кодировкой 🙂 Конфигурация для Украины.

    (5) На лицо 😉 Отчетики там тоже еще те (по скорости и по визуализации) 🙂 База без «свертки» больше года не работает, франч за свертку берет «ого сколько».

    Reply
  9. gavril

    (7) Слышали, наверное, но просто лень было реализовывать. Отображения в зависимости от того какой клиент франча был выбран в константе — так и отображает. При простом учете столько свободного места.

    Reply
  10. O-Planet

    А что удивляетесь? «впихнуть невпихуемое» — о многом говорит 🙂 Я такие видел, но, конечно, наполовину такие. Самое прикольное, что некоторым это удается продавать за бешеные деньги. Имхо — всему виной главбухши!

    Reply
  11. maljaev

    (3) И «Пiдроздiл» тоже вовсе не то что я ожидал… 🙂

    Reply
  12. Abadonna

    (11) А что ты ожидал от «Пiдроздiл»? :))) Не «Пиздодрiл» написано

    Reply
  13. JohnyDeath

    Прикольно! )))

    Reply
  14. JohnyDeath

    Могу только догадываться что там в коде творится… Наверное просто жесть

    Reply
  15. gavril

    (14) В код я пытался не вникать — здоровье дороже.

    Reply
  16. Свой

    а зачем сюда этот старый боян, я надеялся чтото новое будет (

    Reply
  17. UncleVader

    Нечто подобное, но более узкоспециализированное решение для автобизнеса меня повергло в шок. Особое впечатление на меня произвела организация структуры каталогов номенклатуры — по замыслу может быть 10 каталогов, так вот для каждого создано по 1 справочнику Партии,СоставКомплекта,СпрТМЦ,Статистика. Всего количество справочников в конфе 179! А код это ваще произведение искуства…

    Но это все ладно, если бы не тот факт что конфа является оф. продуктом для дилеров VW, ее покупают за бешеные бабки да еще и абон плату платят ежемесячную.

    Reply
  18. KooLooShin

    (17) Кому — [:|||||:], а я первый раз увидел.

    Спасибо, поржал.

    Reply
  19. Amor

    2 Maljaev

    Я же тебе про твой КАЦАПСКИЙ ничего не говорю…… Вы же там моральные дегенераты: знаете только свой русский язык и умничаете, мол, хохляцкий и все такое, вот есть наш великий русский язык и насрать…. А мы, украинцы, знаем два языка В СОВЕРШЕНСТВЕ, так что вам еще, как ваш дедушка Ленин поговарива, учиться, учитья и еще раз учиться, так как к нам вам еще далеко!

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

    Даже сам пример этой конфы написанный украинцами, вы б до такого в жизни не догадались!

    Reply
  20. JohnyDeath

    (20) Даже сам пример этой конфы написанный украинцами, вы б до такого в жизни не догадались!

    Мне кажется, что до ТАКОГО вряд ли какой-нибудь нормальный человек может догадаться. 😉

    Reply
  21. grey82

    Ну что сказать,…. на «Українській мові» очень прикольно сделано. Возможно интерфейс должен был быть именно украинским, но в коде то всегда можно разобраться.

    Под конкретную задачу, необходимо искать конкретные пути решения!

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

    И еще Amor прав, украинцы знают два языка. И многие в совершенстве.

    Reply
  22. Abadonna

    (20,22) На НАСТОЯЩЕМ украинском говорят как раз кацапы. Ибо их, тогда еще неумытых, учили правильно говорить как раз ученые клирики из Киева. А мова — и есть деревенская мова.

    Кто не верит, может еще у Кушнира спросить. Во всяком случае, мы с ним НАСТОЯЩИЕ ЗАПАДНЫЕ хохлы:)))

    Reply
  23. gavril

    (20-23) Да ну перестаньте тут выяснять кто выше всех на стенку писает 🙂

    Бывают в разных языках разные фразы, которые могут улыбнуть людей, говорящих на другом языке.

    Например в болгарском есть такая фраза «Яйця на очі» (Яичница глазунья), в словацком «ПОЗОР!» (Внимание). Вот для многих украинцев, которые не так хорошо русский очень смешит слово «сравни» 😉

    Вообще как сказал один из классиков (стідно но не помню кто именно): «Чуствую человеком себя столько раз — сколько языков я знаю».

    Каждый новый выученный язык, существенно расширяет кругозор и обагощает человека 😉

    Так что все это инсинуации 🙂

    Reply
  24. gavril

    (17) Баян — признаю.

    Вернулся к этому баяну, потому как сейчас тесно с ним работаю.

    Избавляю пользователей от дурного влияния данной конфигурации путем переноса в БП8, УТП8 и УТ8. Во время написания алгоритмов просто удивляюсь как там вообще может, что то работать.

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

    Reply
  25. vasilykushnir

    (20) Да не кипятись ты: современный русский действительно намного ближе с языку Киевской Руси, чем украинский — що маємо, те маємо. Но и это еще не все: кляті москалі вкрали не тільки мову, але й назву: Россия все-таки от слова Русь произошла. Другое дело, что сама Киевская Русь получила название от народа Русичи (но аж никак не русские). Но это так… типа размышления вскользь.

    А вообще я считаю, надеясь на интелигентность собеседников: нет хохлов, кацапов… Так говорить могут только зокоренелые шовинисты и махровые националисты. Есть украинцы и русские — баста! И если придерживатся этого простого правила, то и взаимных обид не будет. А уж кого интерисует мое ЛИЧНОЕ мнение: я славянин и признаю одну нацию — славянскую (уходящую корнями между прочим к арийцам, а не грязные кочевные готы, которые в 20-м веке вдруг обкумарившись решили, что они арийцы). И посему нет разницы — украинец, русский, белорус — все мы славяне, к сожалению бестолковые праправнуки одного великого предка.

    Reply
  26. gavril

    (26)

    Думаю, этим закончим 🙂

    Reply
  27. andranikus

    Я конечно — конфу не видел — но точно знаю что — лохи делали — они своими сертификатами — жопу вытерать должны — ведущий франчь в городе — бред — лохамойники

    Reply
  28. CheBurator

    (26) > И посему нет разницы — украинец, русский, белорус

    ..а почему это белорусы на последнем месте…?

    ..к вашему сведению: укр.язык государственным языком никогда не был (не про современность!), а белорусский — был!

    вот!

    ..хотя фамилия у меня — украинская…

    Reply
  29. maljaev

    (29) С каких это пор Чебурашка стала украинской фамилией? 😉

    Reply
  30. Amor

    (24) и (26)

    Полностью согласен. Просто несдержался.

    Reply
  31. 1vasia1

    УПП на моем предприятии отдохивает! УУУггаааа

    Reply
  32. Andzhej

    я знаю чела, который эту ТТН писал — тот еще жук

    Reply
  33. Mike_Nijel

    Чудово, а особливо чудові рахунки за оновлення=)

    Reply

Leave a Comment

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