Простой пример работы с MS Agent




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

27 Comments

  1. Zloy1C

    прикольно:)

    Reply
  2. Lyekka

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

    Reply
  3. Lyekka

    Ну или хотя бы — по двойному щелчку.. а то он просто взял и уснул =(

    я туд работаю, а он — уснул..

    Reply
  4. Душелов

    В книжке «1С: Предприятие 7.7/8.0. Системное программирование» довольно подробно рассматривается работа с этим агентом. Советую.

    Reply
  5. Душелов

    Да и в моей проходной, еще с версии 7.7 http://infostart.ru/profile/3975/projects/2617/ давно он используется довольно успешно для проговаривания сообщений.

    Reply
  6. Zloy1C

    (5) конечно, с точки зрения технологии ничего умного, но развлекуха 🙂

    Reply
  7. Душелов

    (6) Просто операторам работать приятнее психологически.

    Reply
  8. Zloy1C

    (7) я про текущую обработку

    Reply
  9. JohnyDeath

    Боянчег. Ещё «где-то в 2001 году» статья была: http://www.mista.ru/articles1c/hare/article.16.html

    Reply
  10. Zloy1C

    (9)на мисте фраз прикольных небыло

    Reply
  11. luns

    Дарю фразу: «И жили бухгалтерша и программист долго и счастливо, и умерли в один день. Когда упала база…»

    Reply
  12. Cortes

    Да вы чо? Миста прям кишит прикольными фразами.

    Reply
  13. Джиневра

    Как-то он очень быстро фразу говорит — и смывается. Читать не успеваешь

    Reply
  14. JohnyDeath

    (10) Ну вообще-то эта статья не с мисты а, с http://hare.ru/ Миста у себя его хранит как архив.

    Reply
  15. ValeriVP

    (12)мне понравилось:

    От перемены сапог ноги не меняются

    Хороший 1с ник должен разбираться во всем…

    Ага, дали контроль над формами — теперь и не поймешь, где природа, а где силикон…

    …как раз тот случай, когда теорию вероятности опровергает обыкновенный закон подлости…

    Эксперимент временно приостановлен, так как подопытные добрались до экспериментаторов.

    Нет, мы будем требовать обоснованной рыночной цены! По 80$ за тысячу кубометров сала.

    …времени нет на творчество… с этой водкой стакан вина выпить некогда…

    Кесарю кесарево, а курам курево…

    Площадь ног (подошв) у нормального человека меньше проекции тела вниз — однако тем не менее когда едешь в метре или автобусе в час пик — ногу некуда поставить. А это просто ОНИ не поджимают третью ногу, а ставят ее на пол — чтобы отдыхала…

    Reply
  16. vitkovsky

    Вот ещё вставь…

    Как найти площадь Ленина?

    Надо ширину Ленина умножить на высоту Ленина.

    Reply
  17. ValeriVP

    лучше так:

    Как найти площадь Витковского?

    Надо ширину Витковского умножить на высоту Витковского.

    Reply
  18. vitkovsky

    Ну если только в мою честь площадь назовут, тогда да.

    Reply
  19. vitkovsky

    И с Ленином проще зашел с рулеткой и померял,

    а меня поймать еще надо.

    Reply
  20. ValeriVP

    а Витковский это твоя девичья фамилия?

    Reply
  21. vitkovsky

    Да не берут меня туда…

    Просто псевдоним.

    Такой же как и «МятежникX»

    Reply
  22. PointAnd

    Делал я такое где-то примерно месяца 4-ре назад. Для более медленного произношения там в функции есть параметр с какой задержкой в МилиСек долны произносится слова. Но как не отлаживай все равно его с выражением разговаривать не научишь

    Reply
  23. ValeriVP

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

    Reply
  24. zll32

    Не,не, не ребята, неверно мыслите.

    Автору плюс однозначно.

    Но шуточную форму ведь можно реализовать в реально полезную =) У нас в базе механизм полезных советов. Т.е. куча фраз типа «Если вы хотите увидить товар на вашем складе откройте такой-то отчет…» ну и т.д. Один рэндомный совет в день при старте базы ООООчень спасает от всяких тупых вопросов «А как …?» пользователей, особенно новеньких.

    Reply
  25. zzerro

    Поржал, спасибо 🙂 плюсану

    Reply
  26. Душелов

    Добавил возможность MS Agent’у использовать модальные диалоги http://infostart.ru/public/63156/

    Reply
  27. eli1984

    Клево!

    Reply

Leave a Comment

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