ActiveX — плейер для 1С




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

37 Comments

  1. artbear

    (0) Напиши в описании, какие форматы поддерживаются.

    Reply
  2. Abadonna

    (1) mp3 и wav. Щас добавлю в описание

    Reply
  3. Noy

    Файлов для закачки нет… 🙁

    Reply
  4. Abadonna

    (3) хз почему он первый раз не залился.. залил

    Reply
  5. Ёпрст

    В клюшках тоже работает..

     АктивХ = СоздатьОбъект(«АктивИкс»);
    АктивХ.УстановитьАтрибут(Форма,»Плеер»);
    АктивХ.СоздатьЭУ(«Player.AFXPlayer»);
    АктивХ.УстановитьФокус();
    Reply
  6. Ёпрст

    Классный эффект в клюшках — при закрытии формы отчета — файло так и проигрывается, пока саму 1с-ину не прибьёшь 🙂

    Reply
  7. Abadonna

    (6) Поставь в ПриЗакрытии() StopPlay()

    Reply
  8. Арчибальд

    Пользоваться не буду, но вещь хорошая. 😎

    Reply
  9. Abadonna

    (8) Думаешь я буду? 😀

    Reply
  10. Ёпрст

    (10) Это вопрос или утверждение?

    Reply
  11. Abadonna

    (10) Вообще-то в анонсе написано черным по белому:

    Для тех, кто любит всё внутри 1С 😉

    Я не люблю, я сторонник разделения труда

    Reply
  12. Арчибальд

    (12)

    в анонсе написано черным по белому:

    Надо было написать красным. По зеленому. 😀

    Reply
  13. Yashazz

    Советую в актив-иксину засовывать GOM Player или RealOne, работают устойчиво, к тому же у них и интерфейс приятственный, и доступных методов да свойств превеликое множество. Себе такое соорудил, когда учёт музыки на компе базой 1С делал. А ежели на компе нет, всегда из двоичного макета можно вынуть дистрибутив и заинсталлировать.

    Reply
  14. jhfrek

    Вещь!!! Молодец Abadonna! Я думал в 1С это никто не сможет сделать. Пригодиться, буду музыку слушать из 1С (это прикольно).

    Reply
  15. I_G_O_R

    (15) Windows media player запихайте и не надо ничего устанавливать, к тому же еще и видео в 1С сможете смотреть.

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

    Reply
  16. script

    Правильно, пока отчет формирует, клипы смотреть, а бухов в это время плясать заставить 😀

    Reply
  17. AVARY

    (17) с барабанами и бубнами вокруг компа 😀

    Reply
  18. Душелов

    Шрифт такой хочу, как у компоненты! 😉

    Reply
  19. Ivon

    Честно-говоря, мне больше понравилось вот это http://infostart.ru/public/20223/ решение. Очень просто в использовании и не требует ВК. Просто система должна уметь воспроизвести нужный контент и все.

    Reply
  20. Abadonna

    (20) У меня просто ностальгия по цветомузыкам, которые я в советские времена паял 😉

    Reply
  21. wolfsoft

    Где ж ты раньше был, я уже на Дельфях плеер в офис написал, чтоб за лицензионный не платить 🙂

    Reply
  22. ufedor

    Не вижу смысла. Есть например Windows Media Player — тот же многоформатный плеер, плагины вроде есть, и в качестве activex объекта присутствует на каждом компьютере…

    Reply
  23. Ёпрст

    (23) Своя рубашка.. ближе к телу..

    Reply
  24. Abadonna

    (23) Дело вкуса, я никогда не использовал родной, для звука aimp, для авишек Media Player Classic, для DVD — Power DVD

    Reply
  25. ufedor

    24,25: Согласен, WMP — вариант не лучший для повседневного юзанья. Но признайтесь, музыка и видео из 1С это же просто для прикола? Я например для музыки запускаю foobar2000 — он явно легче чем 8.1 🙂

    Да и насчет своей рубашки: наверняка есть множество плееров с открытыми исходниками поддерживающих плагины. Уж если хотели сделать для себя «самый лучший плеер» — можно было взять за основу какой-нибудь популярный исходник с широкими возможностями. Или так и было?

    Reply
  26. RikON

    И каким же это макаром «Формировать отчет и клипы крутить»?, 1С же однозадачная, вот размогозадачилась бы и все её полюбилибы, а товарижчу Нуралиеву пальцы бы растопырили. скачаю для опыта, спасибо.

    Reply
  27. Abadonna
    можно было взять за основу какой-нибудь популярный исходник с широкими возможностями. Или так и было?

    Не так 😉

    Тем более, не для себя, как я указывал в (9,12)

    (для себя я просто нормальный плейер напишу, отдельный)

    Да вообще тут фича в анализаторе спректа и «цветомузыке», а файл проиграть — какие проблемы?

    Reply
  28. Abadonna

    (27)

    И каким же это макаром «Формировать отчет и клипы крутить»?

    Да очень просто! АктивИкс будет себе спокойно работать в отдельном потоке, практически сам по себе

    Reply
  29. artbear

    (30) Насчет отдельного потока ты точно уверен?

    Reply
  30. Mnemonik

    Насчет видео тоже не уверен что не будет мешать формированию данных, т.к. 1С сама прилично жрет ОЗУ, виртуальную тоже. Даже если отдельный поток, а он скорее всего отдельный иначе бы никак, хотя не буду утверждать т.к. не спец, то всё равно конфигурация особенно такая как УПП или подобная но с приличной уже базой, нормально нагружает ресурсы ОС и железо ПК. Но всё равно идея хорошая, сам установлю себе в офис! Спасибо разработчику!

    Reply
  31. Abadonna

    (30) А на фига бы тогда в активиксе код? 😀

    Ну, к примеру, PlayList организует цикл по песням, оно ж не мешает другие отчеты запускать. Активикс запустился и пашет сам по себе

    (31) Мне кажется, но я не уверен, что запуск видео внутри 1С будет так же мешать формированию мощного отчета, как и запуск видео через внешний плейр.

    Но еще раз хочу подчеркнуть, что лично я не стронник впихивания всего в 1С: кесарю кесарево, слесарю слесорево.

    Так что никогда не понимал игрушек внутри 1С, разве что ради интереса их попроггить…

    Reply
  32. Ёпрст

    (30) см. (7)…

    работает в фоне…

    Reply
  33. Mnemonik

    Abadonna

    Мда.. что -то не хочет он у меня открываться даже, посоветуй что не так сделал следовал «readme.txt» пишет ошибка совместного доступа к файлу и дальше путь к папке с этим файлом …local SettingsTempv8_39_47.tmp

    Reply
  34. Abadonna

    (34) К какому файлу? Обработки? Создай отчет по новой — у меня в пустой базе что-то криво записалось… Тоже самое иногда пишет, по после нескольких попыток открывается. Подозреваю потому, что в практически пустой базе создавал

    P.S. Не тот я еще спец в 8-ке, чтобы причину сказать, но что она не связана с компонентом — точно!

    Reply
  35. Mnemonik

    понятно, ага я хотел прицепить твоё сразу и все) даже не глядел… ок создам!

    Reply
  36. Mnemonik

    Странно, второй раз открывается не сразу, минут через 8-10

    Reply
  37. Abadonna

    (37) Ну не знаю.. Сейчас раз 15 перезапускал в рабочей базе БП — всё нормал

    Reply

Leave a Comment

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