Скрипт для OpenConf: "Выбрать из списка"




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

15 Comments

  1. antonrost

    Неужели никто не пользуется?

    Reply
  2. metaeditor

    да многие даже про опенконф то ничего незнают…

    активнее, активнее пеарить надо ))

    Reply
  3. antonrost

    Кто людям помогает, тот тратит время зря. Ха-ха…

    Хорошими делами прославиться нельзя…

    🙁

    Reply
  4. +5

    Reply
  5. lustin

    действительно плюс пять…

    обе кончцепции используются и в конфигураторе и в базах рабочих

    Reply
  6. CheBurator

    никто не пользуется — потому что мусорку напоминает…

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

    после этого при выходе 1с процесс оставался висеть в памяти… и поторно под своим именем войти — фиг…

    итого — у меня своиз задач достаточно, чем еще разгребать чужие косяки…

    а собирать настраивать под себя свой опенконф — ну как припрет…

    Reply
  7. CheBurator

    решил, наконец, заюзать…

    1. хм.. что делать со скачанным текстом… хз… типа «разбирайся сам»

    2. ссылка на «Используется svcsvc.dll от metaeditor» ведет на закрытый форум, требующий регистрации…

    Итого: тонкое извращение над зашедшим в эту разработку.

    -1

    Reply
  8. CheBurator

    DynamicWrapper, вдобавок, не на всех машина создается, а исключительных ситуаций не предусмотрено… ппц полный…

    Reply
  9. antonrost

    Ну, я думаю, что разобраться все-таки можно, если есть желание. Написано же — «Скрипт для OpenConf». По крайней мере, можно попросить помочь.

    С критикой по поводу нерабочей ссылки могу согласиться только частично — у меня, к сожалению, нет возможности сидеть на форумах и быть в курсе всех событий. В момент выкладывания даннго скрипта все ссылки были рабочими.

    Reply
  10. antonrost

    (9+) Интересно. Я думал, что минусы и плюсы ставятся за полезность разработки, а не за простоту установки…

    Reply
  11. antonrost

    (8) Уважаемый Сhe Burashka, глядя на Ваш рейтинг (=> большой опыт) слегка недоумеваю по поводу проблем с «DynamicWrapper».

    Reply
  12. Турист

    (10) а кому нужна полезная обработка, если для ее установки требуются шаманские танцы с бубнами ?

    Reply
  13. unichkin

    Вот эт я археолог))

    (12) Мне нужна))

    А не подскажите, у меня версия скрипта — 1.4, только недавно обновил из ночной сборки. Почему-то если выбираю значение реквизита при конструировании интерфейса, отрубается напрочь весь опенконф. Выдается сообщение «Не удалось выполнить макрос «SelectFromComboBox».», и перестают работать другие скрипты.

    А так оч. удобная штука)

    Reply
  14. Alex_1066

    Автор, так как пользоваться-то этой штуковиной…???

    Reply
  15. artamir

    Если установлен openconf, то переименовываем файл в SelectFromComboBox.vbs и помещаем этот файл в папку BIN/Config

    Далее открываем базу в режиме конфигуратора.

    Переходим в меню openconf/Макросы/Клавиатура.

    Добавляем новую строку.

    Открываем ветку SelectFromComboBox и выбираем одноименный метод.

    Нажимаем кнопку «Выполнить».

    Задаем нужную горячую клавишу. Я для себя использую F6.

    Нажимаем «OK».

    Затем в любой форме вызываем мастер «создать элемент диалога».

    В мастере выбираем «реквизит диалога».

    Кликаем на комбобокс «Тип» и нажимаем заданную горячую клавишу.

    Reply

Leave a Comment

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