<?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='\
Конечно пока всё не совсем так как задумывалось, в частности, не могу найти причину самопроизвольного сворачивания окна 1С при формировании отчета…
Отчет сделан на базе Aladdin Monitor-а, кто пользовался этой утилитой наверняка заметил очень ограниченный функционал, ни скопировать, ни отсортировать соединения там нельзя…
чёто валиться, не могу сформировать 🙁
Форма.ФормаОтчета(62)}: Индекс находится за границами массива
НовСтр[н]=Массив[н];
(3) Перезалил. Сейчас валится не будет, но это косяк получения соединений. Попробуй в параметрах поставить «Таймаут»: 2000-3000 мс
(4) Ура! Заработало! 🙂
(5) С параметром?… У меня просто без таймаутов отрабатывает, поэтому я его и нулевым по-умолчанию оставил…
у меня не формируется. Ошибка: «Не может быть выполнено»
(7) хм… странная какая-то ошибка… Это сама 1С говорит или винда? А платформа какая?
Не смог добиться стабильной работы. Из 5 ключей дает информацию максимум по трем, причем каждый раз это разные ключи. Иногда выдает ошибку, что файл Aksmonitor.exe не найден. Изменение параметра не помогает.
(9) Мне, к сожалению, больше негде потестировать… У меня работает стабильно. Можешь скриншот в личку скинуть, как у тебя дерево серверов/ключей выглядит, которое в Aksmonitor-е слева?…
(6) нет, без него, в параметры не лазию. Вот иногда только выскакивает следующее:
{Форма.ФормаОтчета(70)}: Ошибка при вызове метода контекста (УдалитьФайлы): Ошибка удаления файлов
УдалитьФайлы(ВременныйКаталог);
по причине:
Ошибка удаления файлов
Ругается на доступ к файлу ‘C:Documents and Settingsбла…бла…блаaksmon.exe’.
А так потом через некоторое время или повторно запускаеш — работает
(11) Попробуем исправить. По ошибке (9) так же работаю…
та же ошибка что и в (11)
Исправил ошибки, файл перезалил. Проверяйте (9) и (11).
Теперь ошибки описанной в 11 посте больше не было. Два плюса автору за оперативность !
Заработало! И таймаут для 5 ключей надо ставить 5000. +
(16) многовато… (
Больше ошибок нет? Пора выпускать не бета релиз? )
{Форма.ФормаОтчета(67)}: Ошибка при вызове метода контекста (УдалитьФайлы): Ошибка удаления файлов
УдалитьФайлы(ВременныйКаталог);
по причине:
Ошибка удаления файлов
по причине:
Ошибка доступа к файлу ‘d:Temp371ccc0d-164c-48a4-afb4-89be506bb27aaksmon.exe’
Хотя вижу как Монитор стартует и находит два ключа. Таймаут ставил 2000, 3000, 5000.
Два сетевых ключа по 20 каждый
О, а теперь работает 🙂
у меня так и не работает
Перед выводом окна макета выпадает окно предупреждения:
Заголовок: AutoIt Error
Тело: Line -1:
Error: Unable to execute the external program.
(19) Странно… Принудительно закрываю вроде )
Добавил проверку на существование процесса и TASKKILL. Проверь сейчас, пожалуйста.
(21) Виста, очевидно? )
(22) Нее, она нормально сама и тогда закрывалась. Просто в момент когда она открывается я же успеваю посмотреть, что она два сервера с ключами нашла :))
Кстати, сейчас с первой попытки вывела без ошибок.
(23) да нет , XP
Если ставить Таймаут тогда система ругается, что не найден файл GetInfo.exe
+(23) В Висте надо наверное отключать UAC…
(24) Где ты успеваешь посмотреть? ) Окно aksmon-a запускается не с
(26) Чудеса да и только! А путь на который ругается?… А! Может быть ограничены права на запись exe в темповый каталог?… )
Путь такой : C:Documents and Settings»тут мою юзер»Local SettingsTemp
Права есть, проверил.
(29) Ну может антивирус режет или ещё чего?… Получается что exe-шники, нужные для работы отчета, по какой-то причине не записываются…
(30) все файлики в темп кладутся, видимо система не может подсосать именно параметр таймаута. Ругается ведь именно только в случае указания таймаута. Так в имени и приписывает. «бла бла бла … проверьте правильность имени …GetInfo.exe 5000». Если даже запускать вручную файл GetInfo.exe то выскакивает та же ошибка, что и в случае (21)
(31) Попробуй сейчас. Обновил файл.
(27) Нет, не скрытым запускается 🙂
http://slil.ru/27361377
Вот даже видео заснял процесса:
(33) Вот жешь, зараза! ) Так быть не должно…
А какая операционка у тебя?…
жаль, что через ЕХЕ Аладина…. он у меня вообще не запускаетси… что-то плохо ему на моей машине…
А вообще сие — есть жесть…. теперь приходится задумываться прежде чем запустить какой-нить отчет в 1С…. 🙁
(35) По-другому никак, к сожалению (
А задуматься никогда не помешает! )
Задумываться то никогда не помешает… это точно… 🙂
Жаль что 1С ужЁ может стать банальным рассадником вирусов…. 🙁
(37) exe-шник в обработку и в семерке можно было запихнуть, правда не штатно…
(35) Операционка ХР сп3, русская 🙂
(32) теперь уже другая ошибка.
Заголовок окна: Error
Тело: Ошибка запуска: путь до файликаaskmon.exe Построение отчета не возможно!
(40) Вот! Замечательно. Почему-то у тебя не запускается aksmon, посмотри есть ли там файлик (не закрывая сообщение), попробуй запустить через Пуск > Выполнить
+(41) И скачай последнюю версию. Я исправил кое-что…
(42) ура запустилось 🙂
всё замечательно работает.
Только у меня возник такой вопрос. Обработка показывает ключи на доп.лицензии. А как можно отследить ключи, которые идут к конфигурации?
(43) Ну наконец-то! ) Спасибо огромное за тестирование!!!
Да, только сетевые ключи. Насчет локальных не знаю…
У меня все работает. Единственная проблема была с фаерволом. Так что у кого не работает — проверте настройки. Еще такой вопрос. Никак не вытащить информацию не только о клиенте, но и о пользователе? Было бы не лишним.
О каком пользователе? Виндовом?… )
Это просто более удобное представление информации, которую предоставляет Aladdin Monitor, что то ещё туда добавить я могу разве что из других источников…
(46) к (45)
(46) Я понял принцип работы. Просто может есть какая нить версия aksmon, которая позволяет выцепить имя пользователя.
(43) Прога видит только сетевые ключи, 2 локальных у меня не нашел.
У меня тоже запускается монитор не скрытно 🙂 WinXP SP3
1. Кроме того GetInfo как-то таймаут некорректно обрабатывает. Сколько ни ставь, «висит» минут 10. А если не ставить вообще, то Out.txt пустой.
2. Идея с сохранением в темп и временно не очень понравилась. Если askmon еще не отработал (без таймаута), то временная папка не удаляется, так как занята процессом. При запуске отчёта второй раз — создается новая папка, но запуститься процесс не может, так как первый еще работает. А если даже и завершился, то файл Out.txt еще в предыдущей папке.
ИМХО лучше перед запуском проверять/создавать «C:Program FilesAladdinMonitor» и перезапускать GetInfo с очисткой файла-отчёта.
3. Аладдиновский монитор кстати, прекрасно показывает мой локальный ключ (кроме сетевых). Но при условии что стоит лиценз-менеджер. Может его тоже подключать при каком-то условии ? 🙂
4. Пользователя 1С не сложно получить из кластера серверов, так как ай-пи известен из монитора.
5. А за идею + адназначна 🙂
Однозначно плюс. У меня все работает отлично, правда заставка запуска монитора аладдина тоже появляется.
(50) Заставка должна отображаться.
(49) Значит какая-то недароботка в движке AutoIt, на XP SP2 основное окно скрывается как и задумано )
1. Вообще не понятно, у меня без таймаута сам скрипт мгновенно отрабатывает (3 сетевых ключа), распаковка больше времени занимает )
2. Тоже не понятно… Сам скрипт GetInfo сначала принудительно закрывает окно aksmon-a, а потом еще дополнительно проверяет существование процесса по PID-у и высылает TASKKILL, при необходимости. И только после этого (!), передает управление 1С. Как при этом aksmon может остаться висеть, для меня загадка… )
3. Не стоит возни, ИМХО 🙂
4. Я все-таки не понимаю, про какого пользователя идет речь? Пользователя 1С? А из какой базы кластера его получать? А где взять права? А как вообще узнать где сервер 1С? А если база файловая?… И ещё много-много вопросов…
5. Спасибо! 🙂
ЗЫ: Я понимаю, что такой подход с «выдергиванием» инфы скриптом на AutoIt-e, потенциальный источник глюков, но разработчики из Aladdina, к сожалению, не предусмотрели никаких средств интеграции (типа COM-сервера 🙂 ). Да и к тому же, у кого-то этот отчет все же работает стабильно, например у меня! 🙂
(51). 1. :))) 10 сетевых по 100 пользователей и 4 по 50 и н-дцать одинарных
2. Вот жешь, может закрывается потому что слишком долго обрабатывается?
3. Может быть.
4. Вопросов много, согласен. Но это в принципе можно решить. При необходимости и наличии времени. Согласен с тем что необязательно этого делать в данной версии.
(52) А-а-а… У тебя вон оказывается какой тяжелый случай с ключами! ))) Тогда да, трудно рассчитывать что этот отчет будет нормально работать с таким количеством… )
В 1С вроде обещали подвезти по 500 польз. и заказать в аладдине по 1000, но пока увы. Отчёт как раз норм, а вот со скриптом тяжело :)))
У меня висит и ничего не показывает, хотя окно алладина мелькало
(55) Скинь (в личку) скриншот окна aksmon-а.
(52) ООот жесть у тебя.. больше 1200 юзеров 🙂
(57) Да уж… Если решат откиздить программиста, фик отобьешься! ))))
(57) Ха. Реально юзеров около 1000, некоторые по нескольку сеансов открывают 🙂 И это только в центральном офисе, а так — более 5000 :)))
(58) Дык и нас целый отдел, около 30-ти 😉
(59) Так один комп ест одну лицензию, независимо от от количества сеансов. Ну в редких случаех он может поломиться на другой сервак за ключиком.
Интересно послушать историю про ваше внедрение. Чего учитываете, какие нагрузки, что за конфа. Ждем в статьях, мне бы было интересно почитать.
(60) … И независимо от того что базы могут быть открыты разные ? 🙂
До статей еще не дорос 🙂
Вообще секторов несколько, я отвечаю только за ЗУП, так что всех проблем всё равно не знаю 🙂
(60)(61) Еще зависшие лицензии бывают, например при аварийном завершении работы… Я этот отчет и сделал что бы можно было легко посмотреть у каких клиентов по несколько лицензий занято…
(60) Да. Незавимисо от баз. У нас по 3 базы на компе открывают и все ок.
Вот проблемы с зависшими лицензиями бывают — это да.
(62) А как избавиться от зависших лицензий? есть пара компов которые постоянно берут по две лицензии, причем один из них в отчете появляется под старым именем (поле «клиент»), компьютер был поменян на новый, имя ему было присвоено другое, а ip указан преждний. Как это исправить?
(64) К сожалению никак… Разве что перегрузкой менеджера лицензий?… Но тогда и все остальные пользователи вылетят. Обычно к зависанию лицензий приводит не корректное завершение работы клиентского приложения… Зависшая лицензия сама отвалится, но через таймаут который установлен внутри 1С (как я понимаю) и на который разработчик повлиять не в силах…
программа каждый раз создаёт временную папку, пишет туда exe-шник и запускает его… а каждый раз фаервол ругается на новое приложение из уникальной папки которое хочет выйти в сеть…
может быть можно сделать просто поиск а не установлен ли алладин монитор в системе если да, то его и запускать.
(66) Эта часть кода открыта, можно поправить самостоятельно за пару минут.
Вообще сделано очень просто и удобно, и даже через СКД )))
выставили таймаут — «Сформировать»-запускается Hasp моонитор от Алладина-свернулась 1С-ожидаем… Итог -сформировалась только шапка отчёта…. 🙁 Я так понимаю, что на любой клиентской машине можно запускать?
(69) Да запускать можно на любой… Просто сам монитор от Алладина никаких интерфейсов для программной работы не предоставляет, поэтому все сделано несколько не стандартными способами. У кого-то работает, у кого-то нет… Гарантировать я ничего не могу, к сожалению (
у меня тоже ключей много. 3 по 100. не так много, как у Сергейки, но тоже монитор аладина не работает, только виснет. Пробовал и на том компе где стоит один из ключей и на отдельном, просто в сети (так в аладиновском форуме спец советовал). Может ли кто еще идей подсказать?
Есть соединения с таймаутом 0 (зависшие лицензии на сервере), но при отборе «Таймаут Равно «0»» их не показывает 🙁
сконвертированная версия с 8.1 в 8.2 не работает вообще
(73)(74) Нормально все работает. Запускаю с машинки, где стоит ЛМ
спасибо полезная штука
Вещь классная, часто пользуюсь ей на работе. Только есть одно НО. У меня несколько серверов лицензий, все они прописаны в файл Nethasp.ini в свойство NH_SERVER_ADDR. Но монитор ключей почему то видит только один из серверов. Но зато показывает, какой сервер (БД) забрала лицензию. Не подскажете, как сделать, чтобы было видно все ключи?
Идея интересная конечно, все работает, но пользуюсь стандартным монитором от алладина, мне хватает. спасибо
Спасибо, за обработку! Жаль только что у самого алладина — оччень куцый функционал….
я пользовалась до этого стандартным монитром от алладина, но обработка оказалась удобной, так как не надо больше ставить Алладин Монитор на компьютер тому, кто сам хочем смотреть, сколько лицензий занято и свободно! Спасибо!
Добрый день.
После запуска отчета с таймаутом 3000 формируется пустой отчет с шапкой.
В файле out.txt есть только 1 строка — первая из Aladin monitor (хотя на данный момент используется 41 лицензия из 50).
Строка имеет вид: server07.ru;192.168.2.104;client02;HASP4;50;41;
И при этом в файле out.txt заполнено 6 полей. А судя по коду должно быть 7.
ОС — Win 2003.
Можно ли это как-то решить? Очень хочется, чтобы заработало.
Заранее спасибо.
под 8.2 будет работать обычное приложение будет работать, и как дела с программными лицензиями
спасибо
Отчет выходит пустой на 8.2.
Не работает, если есть HL
Нашел решение: надо зайти в монитор и в настройках отключить HL
После этого начинает работать.
За обработку спасибо — помогает проанализировать кем съедаются лицензии.
У меня обнаружилась проблема — некоторые компьютеры съедают лицензии с разных серверов лицензий. Т.е. если запущено на одном компе несколько сеансов, то может быть съедена не одна лицензия, а несколько, т.к. для разных сеансов используюся разные HASP сервера
а на файловой будет работать?
Почему отчет только на клиенте работает? Если запустить GetInfoForHASP.exe из рабочего процесса (на сервере), то он бесконечно выполняется. Видимо способ вытаскивания данных завязан на окно, которое в этом случае как то по-другому работает.
для Windows х-64 не работает экзешник … м.б. выложите для х-64 ?