<?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='\
p.s. Данная утилита использовалась как дополнение при переносе данных средствами OLE на работающих базах.
Очень хорошая вещь!!!!!!!!!
Скачал, хоть и без необходимости — пригодится.
Такие вещи надо бы делать невидимыми для пользователя или сразу в трей сворачивать после запуска. И там тихо пусть себе молотит, а ее мы в автозагрузку засунем. А то забодают звонками — «а на что нажать?»
Можно и сворачивать, только не каждый пользователь сразу заметит, что у него в трее что-то висит..
А на фига ему это надо? Замечать? Ему, юзеру, работать надо. Так что стартовать при запуске и в трей. И пусть себе нажимает на кнопки. Кстати — на обе локализации винды настроено? Или тока на англицкую?
кстати можно запихать это в ВК
надо перехватывать ф-ии OleUIBusyA/OleUIBusyW из oledlg.dll
хотел както сделать…
по оле ничего не переношу, поэтому возможности пока не представилось…
а если перехватить, то можно сделать быстрее?
А смысл? Если блокировка в одной из баз идет уже на протяжении 5-10 минут, то как-раз самое оптимально «нажимать» на Retry окна «Server busy» через 5 секунд.
(support):
кхм… нечаянно нажал на «отправить»…
(support): ненадо будет каждые 5 секунд проверять Окна. в этом случае окно «бизи» вобще небудет появляться, хункции сразу будет говорится что какбудто нажали на «retry», да и макс. количество итераций можно задавать программно
Программа не работает на русскоязычной виндовс :((
тама не «Server busy» а «Сервер занят»
А кнопочка «&Retry» тама называется «&Повторить»? Русскоязычной винды под рукой нету 🙁
Уважаемый imsoftware!!!
да, кнопочка называется «Повторить»
и есть еще «Переключиться». (но она нафих ненужна, т.к. открывает панель по кнопке пуск)
сможете ли вы чуть чуть доделать свою программу?
заранее спасибо!!!
Обновил… Теперь можно самому задавать имена заголовков окна и кнопки для нажатия… Да, и имя класса окна тоже необходимо указывать вручную…
Для англоязычной винды:
Класс окна: #32770
Заголовок окна: Server Busy
Заголовок кнопки: &Retry
Для русскоговорящей:
Класс окна: #32770 (не меняется)
Заголовок окна: Сервер Занят
Заголовок кнопки: По&вторить (обязательно учитываются «горячие» буквы в названии)
p.s. Не проверял, но должно работать 😉
Ура-а-а-а!!!!
заряботала!!!!
Спасибо большое за программу !!!
Совет support’у — включить эту программку в комплект поставки с Rocket Launcher’ом 😉 Тогда перенос, например, итогов по бух. счетам не прервется из-за занятости сервера..
+1
Нужная вещь
У меня сравнение центральной базы с переферийными сделано через оле, так при поиске документов начавших расхождение в самых ранних базах (где данные за три-четыре года), частенько такое вылезает.
а есть ключики автозапуска clicker.exe ?
хотелось бы запускать как сервис или хотя бы в шедулере
класная прога
Уважаемый imsoftware!!!
Если можно еще немного для счастья:
1. Ключи запуска? Чтоб можно было батником запускать! А может и останавливать?!
2. Возможнось изменять параметр — 5 секунд.
3. Возможность убрать из трея
С уважением, Тимган
Прога запускается без ключиков. Писалась под себя и очень давно, поэтому никаких тонкостей. Если найду исходники — доработаю с учетом пожеланий (с нуля опять писать не хоцца 🙂
Спасибо, за програмку. Надеюсь завтра поможет.
Помогает, но было бы удобно, если можно было бы вызывать эту прогу, скажем, при нажатии Сформировать отчет из 1с по оле, да так чтоб зашить туда параметры (имя окна и т.д.), ну и спрятать сразу в трей.
Программа проверенна, очень помогает в работе, особенно когда связываешь базы по OLE.
Очень полезная вещь! Спасибо большое!
Супер, спасибо
Да, не хватает автозапуска. Т.е. чтобы не нужно было нажимать на кнопку «Старт». А так — очень спасает Автоматы от подвисания из-за OLE.
Очень нужна такая прога, но с возможностью запускать с параметрами ( или настроенной на рус виндоус). Можете ли вы доработать, за вознаграждение, ест-но) ?
Очень есть необходимость запускать эту программу с параметрами. Есть возможность доработать или скинуть исходники?