ВК дополнительного функционала




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

28 Comments

  1. CheBurator

    вот лучше написал бы п.6 для 7.7!!!

    Reply
  2. Hadgehogs

    А вы попробуйте под 7.7. Вдруг взлетит

    Reply
  3. Hadgehogs

    еще добавлю извещение о переключении между формами внутри 1С

    Reply
  4. Abadonna

    (1) >вот лучше написал бы п.6 для 7.7!!!

    Ты б лучше сделал мне подарок к Новому Году — я б в свою добавил :))))

    Reply
  5. vladnet

    Хотелось бы к ней хоть какую то документацию. Не понял как события нажатия кнопок получать.

    Да не знаю можно ли это, мне нужно получать события как нажатия кнопки так и отжатия, поясню для чего это: например в справочнике номенклатуры пользователь зажал кнопку вниз, при каждом активизации строки я обновляю остатки. Если бы я смог понять что кнопка нажата но не отжата, я бы поставил флаг и в этом случае остатки бы не показывал.

    А да Большое спасибо, первая встреченная мной полезная библиотека для v8.

    Reply
  6. Hadgehogs

    (5) Принято, если что — сегодня выложу версию 1.1.

    Reply
  7. O-Planet

    Даешь исходники!!!

    Reply
  8. Hadgehogs

    Исходники выложу — как все напишу или надоест.

    Пока не буду, ибо пойдет создание альтернативных версий. История Linux-а поучительна.

    P.S. Готова версия 1.1 с установкой клавиатурной раскладки, отловом событий от клавы мыша, (как просил 5), хочу добавить запуск пула приложений и выложить..

    Reply
  9. vladnet

    Очень ждем когда будет выложена версия 1.1, как понимаю еще не выложена.

    Reply
  10. vladnet

    Спасибо за обработку клавиш, а вот интересно метод ЗакончитьОтловСобытий есть (если нет то желательно сделать)? И для чего нужен параметр в методе НачатьОтловСобытий

    Reply
  11. Hadgehogs

    Параметр в процедуре — это время в милисекундах, через которое сработает перехват для нового открытого окна.

    Чем меньше — тем быстрее новое окно будет перехваче, но и тем более будет загружена система

    В 1.2 будет отключение перехвата

    Reply
  12. Hadgehogs

    P.S. Ну как бы пишите о глюках и багах, а то что — то молчите.

    Еще пишите — что кому нужно — подумаем…, реализуем..

    Reply
  13. Mitay

    а можно как-то реализовать обработку клавиш, чтобы воспринимались комбинации одновремено нажатых клавиш.

    Например, чтобы на «shift»+»=» выдавал «+», а не «shift» «shift»»shift»»shift» «=» «=» «shift»

    Reply
  14. Hadgehogs

    Можно, реализуем

    Reply
  15. Hadgehogs

    Короче, свежие новости…

    Проект VADD1x закрыт. Финита ла коммедиа.

    Выходит 2-ая версия. Полная несовместимость с первой версией.

    Библиотека будет разделена на несколько объектов, дабы избежать «винигрета» (как упрекали).

    Что будет:

    1) Расширен функционал существующий

    2) Кардинально измениться ОтловСобытий (добавятся фильтры, статусы клавиш SHIFT, CTRL, ALT)

    3) Возможно добавится работа с LPT/COM портами

    4) Возможно добавится работа с файловым потоком

    5) Добавиться CRC32

    5) Добавиться работа с UDP (возможно и с TCP/IP) протоколами

    6) Обязательно будет документация (без нее не выпущу библиотеку)

    Ждите, примерно неделя. Бля, и поддержите хоть кто — нибудь, а то уже в светлое будущее не верю уже.

    Reply
  16. simplyalex

    ——————————

    |Hadgehogs 23.02.2008

    |…

    |Выходит 2-ая версия. Полная несовместимость с первой версией.

    |…

    |Ждите, примерно неделя.

    ——————————

    \

    Reply
  17. victor_k

    Использовал V8ADD.dll но она видит только первые 15 картинок остальные

    картинки видит как пустые ячейки Excel

    Сам Excel в окне отображения буфера обмена, также отображает — первые 15

    нормально, а остальные как пустую ячейку, но из буфера копирует правильно.

    Reply
  18. Lexus

    очень подлчечила бы «1) Попытка все же поддержки 7.7», а точнее UDP

    заранее благодарен

    Reply
  19. xxxu

    А документация где?

    Reply
  20. xxxu

    Сори теперь это НЕТЛЕНКА если я правильно понял.

    Reply
  21. Murom

    А можно ли как -нибудь при запуске процесса асинхронно передавать еще параметры. Например я хочу запустить 10 сеансов http://ftp.exe с подключением у разным серверам. Например

    ВК.ЗапускИСопровождениеПроцесса(«C:WINDOWSsystem32ftp.exe»,0,Ложь,Истина) срабатывает , а

    ВК.ЗапускИСопровождениеПроцесса(«C:WINDOWSsystem32ftp.exe 192.168.1.1:21»,0,Ложь,Истина) нет. 🙁

    Reply
  22. MikeStav

    Подскажите плиз, можно ли с помощью этой ВК ловить сообщения, выводимые в окно служебных сообщений? Заранее спасибо.

    Reply
  23. O-Planet

    Дублирую сообщение с мисты, может, тут оперативнее автор увидит.

    Приивет. Спасибо за полезную ВК. Но вот вопрос: ее реально под Win7 использовать из 1С:8? Вроде делаю все, как нужно: кидаю ярлые на рабочий стол, дописываю в путь regsvr32, запускаю от имени админа, пишет, что все прекрасно зарегилось. Но в самой восьмерке говорит, что не удалось загрузить ВК

    Подключаю вот так:

    Объект = Неопределено;

    Попытка

    ЗагрузитьВнешнююКомпоненту(«V8ADD.dll»);

    Исключение

    Сообщить(«Не удалось загрузить внешнюю компоненту «»V8ADD.dll»»!»);

    ТипОбъекта=»»;

    Объект=Неопределено;

    Включен=Ложь;

    Возврат;

    КонецПопытки;

    В чем может быть проблема?

    Reply
  24. cool.vlad4

    (23) Винда 32 битная или 64?

    Reply
  25. O-Planet

    (24) Вроде 32. Где это точно посмотреть? Стоит на ноуте Asus, Windows Starter цифирь 64 ни где не фигурирует.

    Reply
  26. cool.vlad4

    (25) Да, скорее всего 32, поэтому дело не в этом (иначе бы ошибку при регистрации компоненты выдавал). Битность можно посмотреть через версию винды — в командной строке winver .( А регистрация для 64 битной винды через %SystemRoot%Syswow64 делается)

    Reply
  27. O-Planet

    Вопрос решил 🙂

    Reply
  28. CyberCerber

    Полезная компонента, но хотелось бы иметь подробную документацию всех методов, которые она содержит. А то у меня только dll-ка.

    Reply

Leave a Comment

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