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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *