<?php // Полная загрузка сервисных книжек, создан 2025-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='\
Большое спасибо, кстати давно думал чем выводить оповещения для 1С аськи, если 1С свернуто. А можно ли сделать окошки другого вида или размера?
можно сделать
Очень нужно чтобы в трей выводилось только если неактивно окно 1С
Еще бы размер DLL уменьшить почему такая большая?
А чем AutoIt не устраивает?… Там есть это и многое другое…
И состояние окна, кстати, можно определить.
(5) да я его и использую, но только проверка активного окна и вывод в трей так что можно и сменить на эту
Так-то прикольно. но когда в ХРюше нажимаешь свернуть все окна, сообщение с треем тоже сворачивается…А это не есть хорошо.
А еще есть
(5) Кстати, AutoIt не всегда выводит. На одних машинах выводит, на других нет. Закономерности не нашел.
(0) Недавно видел заказ на эту ВК на фрилансе… Не ты его случайно сделал? 😉
Очень полезная ВК, спасибо!
Спасибо
Спасибо за компоненту. Плюс поставил. Только не понятно про интервал, что ноль, что любое другое — интервал показа один. И еще — при закрытии конфига, в трее остается значок. Чтоб он убрался — надо мышкой по нему просто провести, тогда уберется. Если пользователь открывает и закрывает несколько раз конфиг — значки в трее просто плодятся. Думаю, выход — добавить оператор (команду) выгрузки компоненты.
А так — нужная вещь!!! Спасибо! И если будет в компоненте больше функций, хорошо бы сделать als, описаловку. Новая дополненная версия если выйдет, думаю, обрадуюсь не только я.
подправил по 13 комменту 😉
Спасибо.
(14) в трее остается значок если несколько раз перезапускать 1С в режиме отладки.
У сообщений можно задавать заголовок кроме 1С.
<У сообщений можно задавать заголовок кроме 1С
нет
При выводе сообщения вместо русского текста знаки вопроса. Я бы полученный текст преобразовывал в UTF8. Тогда у всех русские буквы были бы одинаково. Система Windows 7 x64 Eng
Обновленный модуль версии 2 на Windows 7 вообще ничего не выводит…
Обновленный модуль версии 2 на Windows XP c 1C v 8.1 выводит значек в трей но ничего не показывает.
использовал так
Процедура ПриОткрытии()
Попытка
ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+»vkshow.dll»);
ВК = Новый(«AddIn.vkshow»);
ВК.ShowTray(«Компонента » + КаталогПрограммы() + «vkshow.dll Загружена»);
Исключение
Сообщить(«»Компонента » + КаталогПрограммы() + «vkshow.dll Не загружена»);
КонецПопытки;
КонецПроцедуры
betepon
на вход функции Showtray нужно подать 3 параметра…
ВК.ShowTray(<Title>,<Message>,<TimeOut>)
Пример:
ВК.ShowTray(«Загрузка»,»Компонента » + КаталогПрограммы() + «vkshow.dll Загружена»,10)
на Windows 7 не тестил…ибо такую ОС пока еще наставил…
ПутьККомпоненте = КаталогПрограммы() + «vkshow.dll»;
Попытка
ЗагрузитьВнешнююКомпоненту(ПутьККомпоненте);
ВК = Новый («AddIn.vkshow»);
BK.ShowTray(«Загрузка»,»Компонента » + ПутьККомпоненте + «Загружена»,10);
Исключение
Сообщить(«Не удалось загрузить компоненту: » + ПутьККомпоненте );
КонецПопытки;
При выполнении строчки
ЗагрузитьВнешнююКомпоненту(ПутьККомпоненте);
1С вылетает без объяснения причин. Версия 1С 8.1.12.98
(23) КаталогПрограммы уже идёт с «» на конце… это для начала…
(24) Не важно. Делал и так и так (кстати надо обратить внимание на пример).
Сменил версию платформы на 1С 8.1.14.72
При выполнении строчки
ЗагрузитьВнешнююКомпоненту(ПутьККомпоненте);
1С вылетает без объяснения причин
ПутьККомпоненте = «C:Program Files1cv81invkshow.dll»
Следует обратить внимание на то, что если-бы попытка не удалась, тогда сработало бы исключение. (23)
Однако исключение не срабатывает (не успевает). 1С просто завершает работу при вызове внешней компоненты.
Перекомпилировал и теперь работает…
1С больше не вылетает.
Подключение проходит штатно.
В трее появляется значек 1С …
И ВСЕ…
Какие-бы сообщения не отправлялись и какой-бы таймаут не выставлялся. Сообщения не появляются.
Для контроля подключил Вашу обработку.
Эффект тот-же.
Может в системе не хватает какой-то библиотеки?
<Может в системе не хватает какой-то библиотеки?
Операционка какая?
Win XP SP2
значит глюк у тебя какой-то…никаких дополнительный библиотек не надо…только стандартный набор операционки…
Проверил на разных машинах.
Эффект одинаковый. На всех машинах стоит Win XP Alternative SP3
(32) Попробуй мою
Если не заведется, то дело в системе…
Как быть???
Пишет что в строке «ВК = Новый(«AddIn.vkshow»);»
процедура вызывается как функция… И все больше ничего…
А можно посмотреть скрин работы компоненты?
хм… / а что может быть причиной ошибки «Ошибка при загрузке внешней компоненты» при открытии обработки???