Интеграция Управления Торговлей с WebAsyst ShopScript




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

19 Comments

  1. Dimka74

    А под 8.1 не будет работать?

    Reply
  2. boogie

    (1) Выложил под 8.1 версию, вынес из общего модуля в модуль формы пару недостающих функций. Особо не тестировал.

    Reply
  3. atletx

    а под 1С 7.7 долго переделать?

    Reply
  4. boogie

    (3) Под 7.7 могу только за деньги взяться

    Reply
  5. Maels

    а за интеграцию этой фишки под ключ на 8.1 или (что предпочтительнее) на 8.2 (УТ 11.0) возьметесь?

    Reply
  6. Maels

    естественно не за красивые глаза 🙂

    Reply
  7. boogie

    (5) Возьмёмся, если конфигурация лицензионная.

    Reply
  8. Maels

    все лицензионное, как ни странно 🙂

    Reply
  9. karbofos2009

    Большое спасибо!

    Но прошу помочь:

    начал устанавливать и сразу столкнулся с этим:

    «Для работы обработки нужно добавить справочник ВебСайты с реквизитами для хранения доступов к сайтам:»

    … Где его добавлять???

    Reply
  10. karbofos2009

    И еще, уважаемый Автор!

    Можно ли расписать все пункты в 1С более подробнее??

    Reply
  11. boogie

    (10) Автора зовут Тимофей.

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

    P.S.: здесь обычно спасибо говорят плюсиком.

    Reply
  12. dakarus

    День добрый. Если товара нет на складе, ваша обработка обнулит наличие на сайте???? Потому-что встроенная в шоп скрипт напрочь отказывается это делать.

    Reply
  13. massqwest

    А если в 1С несколько типов цен? будет выгружать?

    Reply
  14. boogie

    Выгружаются конкретные документы установки цен номенклатуры. Так что какие выгрузите такие и будут.

    Reply
  15. massqwest

    а загрузку заказов из webasyst в 1С8.2 УТ 10.2 сделать за $$$ возможно? если да напишите цену на massqwest[dog]ya.ru

    Reply
  16. Bober777

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

    Reply
  17. Bober777

    (9) такие вещи надо хранить во внешних файлах… Это конечно мое мнение. Но справочник для этого делать помоему не нужно.

    Reply
  18. 1977

    Продолжение темы есть?

    Reply
  19. legzzi

    есть опытные Человеки работающие с вебасистом? напишите пожалуйста контакты

    Reply

Leave a Comment

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