<?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
..
а вот еще предложения (вдруг пригодятся)
1. а типа удалять из реестра ссылки на несуществующие базы?
2. импорт-экспорт списка баз (возможно с подменой части пути — типа вместо диска Д поставить диск Е
3. импорт-экспорт списка юзеров.
???
Как это я умудрился под анонимусом…?
При запуске выскакивает окошко с надписью «EAccessViolation» и на этом всё заканчивается.
Возможно имели место длинные пути к информационным базам. Увеличил буферы, обновил.
Не помогло. Самый длинный путь — 44 символа.
Попробовал зайти с правами Админа — пишет: «Invalid Index.
Invalid Index поправил. Возникал когда баз нет. Обновил.
Теперь, если баз нет, то программа запускается, но внизу пишет «Невозможно прочитать данные из реестра».
Если базы есть, то по прежнему «EAccessViolation». Что я делаю не так ?
===========
Сразу еще просьба: добавить пароль для открытия программы (или для доступа к списку пользователей). Очень нужно :)))))
Только что скачал — у меня все ОК.
А у меня так и не работает 🙁
Напиши мне на почту myhasp@mail.ru, пришлю отладочную версию
Написал. Если не прийдет — пож. стукнись в аську 200709902
Обновил. Добавлен функционал монитора пользователей.
Офигенна то что я полдня искал =)
Обнаруженный баг: если в базе кривой userdef то она по английски вываливается, хоть бы написала чего =\r
Однако СПАСИБО!!!
Если не затруднит, пришлите users.usr на котором программа падает на myhasp@mail.ru
Небольшой прогресс:
http://infostart.ru/file.php?0,file=44
Теперь пишет вот такое:
Отлично!!!!! особенно со сменой пароля…. иногда тяжко лезть в конфу чтобы поменять пароль.
Если бы добавить сюда еще и смену имени пользователя, то было бы савсем хорошо.
а то бывают ситуации когда человек уходит и что бы не заводить нового юзверя опять же из под конфы, просто и быстренько изменить ненужное имя……
Это прога убивает все настройки SQL base, при смене пароля пользователю
Обновил файл.
Текущая версия v.0.928. Исправлены 2 ошибки:
1)теперь для SQL баз настройки подключения не убиваются
2) Нашел вариант когда программа падала при чтении параметров users.usr (Вероятно этот вариант и был у AntonRost)
+1
Слов нет — одни выражения (в смысле хорошие, не моя вина, что у нас и хорошее и плохое привыкли выражать одними и теми же словами…).
Будем ждать расширения функционала.
Не-а. Так по-прежнему и выскакивает «EAccessViolation.»
:(((
Чем я прогневился :))) ???
Пришли users.usr от базы на которой падает на myhasp@mail.ru, поймать-то надо
AntonRost — понял в чем дело после того как посмотрел твой users.usr 😉
Обновил usrcomm.rar, больше у тебя падать не должна
Спасибо. Теперь со спокойной душой +1
А можешь сделать запуск в консольном режиме? Давно есть идея — чтобы юзеры сами вводили пароль при первом входе (или сами меняли).
Можно и консольный запуск добавить, можно и GUI-вую отдельную программулину набросать, выбор базы — выбор пользователя — старый пароль — новый пароль. Для своих пользователей собираюсь такую нарисовать.
КРУТО! Рейтинг поставил.
Вот бы еще бы приделать действие типа «выгнать пользователя из базы».
Но это скорее невозможно.
Но!
Полагаю нетрудно было бы В списке монитора пользователей бы добавить действие к конкретному пользователю:
net send «_Имя компьютера» «_Сообщение»
или
net send «_Имя компьютера» «СРОЧНО ВЫЙДИ ИЗ БАЗЫ! ИЗ_ЗА ТЕБЯ СТОИМ!»
Ну и на основе этого, также сообщение для всей базы:
net send «_Имя компьютера» «Просьба покинуть базу _Название Базы»
Чтобы не кидать по сетке сообщение для всех (net send *), а только тем кому надо!
Это былобы Ваще круто!
Можно сделать так чтобы Рядом с именем пользователя показывалось имя компа с которого он сидит (напр. ИвановИИ-bux1) и поменять цветовую гамму (выделять активных пользователей более ярко например красным цветом, а то сейчас иконки активных неактивных пользователей близки по цвету)
Респект…
Полезная утилита …. Вот бы еще функционал разнообразить: добавить возможность новых пользователей, у причем в группу баз .. ценны бы не было
Супер! YU, спасибо! Тебе большой РЕСПЕКТ!
yu, tсли не сложно, сделай пожалуйста, чтобы можно было еще изменять каталог пользователя. У нас каталоги пользователя принято называть Фамилия_ИО. Поэтому когда один чел. уходит, а приходит другой, то надо не только имя и пароль менять, но и каталог.
(30) Доработав глобальный модуль без проблем можно отправить сообщение/завершить работу любого пользователя/списка пользователей/всех пользователей собственными средствами 1С. Свою конфигурацию давно уже доработал, надоело выгонять звонками. Если интересует, могу выложить свой вариант.
функционал слобоват
(35)Было бы очень интересно!! Выкладывай!
Прошло 11 лет, а для меня актуально!
Благодарю.
Можно ли прикрутить фичу для показа имени компьютера залогиневшегося пользователя для терминального доступа? А то для файлового варианта прекрасно, а для терминальных пользователей — не айс…