<?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='\
Соарон рулит! 😉
А зачем обработка, если каждый уважающий себя одинэсник просто обязан иметь в потайном кармане пропатченное portable ядро 1С, которому все пароли по барабану.
А зачем таскать в потайном кармане контрафакт, если в 7-ке отключить пароли пользователей можно переносомпереименованием одного файла в базе ???????
для обработки необходимо запретить скачивание с рейтингом меньше +3 (что-бы юзвери не тянули).
а вообще совершенно бесполезная вещь, замену хешей паролей я и без внешних DLL напишу за пару часов, только не нужно это вообще…
делается через копипасте в конфигураторе вполне штатным режимом копирование учетки, потом сброс пароля, а при необходимости востановления назад, простое «вставить». Добавлю, что скопированые учетки можно хранить в копии базы.
(3) Если в организации более 50 информационных баз и не все пользователи на месте, чтобы узнать пароль для входа, то лазить в каждую базу и переименовывать папку usrdef очень утомительно…
(4) для начала в конфигуратор войти надо… Ну, а если есть время, то пишите, как говорится, Шура, пишите!!!
(3) а зачем вообще надо знать пароль пользователя? не надо!!! если пользователи забывают свои пароли — это их проблеммы (у меня вообще вин авторизация давно вездеhttp://infostart.ru/projects/2836/ )
(4) если права на папку UserDef есть — войду без проблемм, если нет — то и твоя шняга не поможет (или поможет ?)
————————————————
кроме того на сколько я понимаю механизм паролей в 7.7, просто распарсив файлы можно получить только хеш MD5, (при запущеной 1с можно взять открытый пароль текущего пользователя), так, что ты в любом случае не получаешь пароль, а только временно можешь войти под конкретным пользователем, а это расцениваеться как ВЗЛОМ сесии, и уж выкладывать кряк, которым могут тупые звери пользоваться — я-бы не стал, ведь далеко не везде UserDef только на чтение установлен 🙂
Полезная обработка. Я довольна!
(1) Не всегда можно ставить чего хошь.
(2) Самый норм. вариант.
(3) Под SQL ? Ну-ну. Чревато потерей настроек соединения с SQL сервером.
Бесполезная обработка, поскольку снять/восстановить пасс юзера в семёрке это весьма простое дело. Причем вариантов довольно много. Можно удалить известный файл, заменить хэш, или организовать атаку по типу MD5 по извлеченному хэшу пароля пользователя, это если нужно получить пасс.
Убойная штука :)) Плюс!
Может пригодиться. Удобно. Плюс!
(9)>Под SQL ? Ну-ну. Чревато потерей настроек соединения с SQL сервером.
С каких это щей? 1Cv7.DBA никакого отношения к users.usr не имеет
(13) Извините, обработка написана только для DBF.
Спасибо! За работу +
полезная штука! спасибо!
Мне навеное должно быть стыдно, но я не знаю что это за «известный» файл, в котором храняться пароли. Можете подсказать, буду благодарен.
А обработка мне понравилась. Просто и понятно.
(17) Извините за долгое молчание. Был в отъезде. А файл, где хранятся пароли пользователей находится в папке USRDEF и называется users.usr
users.usr — буду знать. Спасибо.
вот если бы еще пороль на автора конфигурации показывался.. эх..
Обработка понравилась. Нужна в работе
(13) >1Cv7.DBA никакого отношения к users.usr не имеет
еще как имеет
попробуй в конфигураторе в списке пользователей ИБ изменить список пользователей чтобы ПЕРВЫЙ по списку стал другой (например первый в списке был Вася, а после изменения списка пользователей первым стал Петя). И после сохранения списка пользователей получишь сброс настроек к SQL серверу (пустой 1Cv7.DBA)
Иногда для получения такого эффекта достаточно просто отсортировать список пользователй по алфавиту и сохранить (первым становится другой — и все, получите пустой 1Cv7.DBA)
(22)>»попробуй в конфигураторе в списке пользователей ИБ изменить список пользователей чтобы ПЕРВЫЙ по списку стал другой»
Не поленился попробовать. Первым стоял AUTOPILOT, удалил нах, как был DBA так и остался, как были параметры соединения с базой, так и остались.
Ты сам придумал, или приснилось?
(22)(23) Сброс 1Cv7.DBA происходит когда users.usr правится при запущенном конфигураторе.
Поэтому перед любыми действиями с users.usr надо проверять, запущен ли конфигуратор.
А вот как проверять, могу продать за пару пива.
Я В КОНФИГУРАТОРЕ УДАЛИЛ/СОХРАНИЛ. Совойства коннекта остались прежними
(25) Ты поступил абсолютно штатно.
При этом ничего не слетит.
Я о том, что если из режима Предприятия изменить users.usr при запущенном Конфигураторе, то свойства коннекта слетят.
>Я о том, что если из режима Предприятия изменить users.usr
ТАКОЙ изврат мне бы и в голову не пришел, хотя, как ты в курсе, я это паршивенький компаунд раздербанил давным-давно, да и не один я…
прикольно, спасибо
Спасибо, пригодилось, вовремя
Ну подскажите дураку-куда эти 3 файла надо скопировать…
Или чего ещё с ними сделать?Я ни фига не понимаю…
(30) Задавая вопрос о трех файлах Вы имели ввиду FormEx.dll, UsersDef.dll и сам файл обработки СнятьВосстановитьПарольЮзера.ert? Если так, то файл обработки нужно поместить в папку ExtForms информационной базы, а файлы внешних компонент FormEx.dll и UsersDef.dll — в саму папку с информационной базой…
Скопировал…А дальше то чего делать?
Вообще задача-из старой базы,пароли которой давно утерены(в связи с уволнением сотрудника)вынуть номенклатуру…
Может есть простые пути?Помогите.
(32) Самый простой путь — в папке с информационной базой переименовать папку USRDEF, например, в USRDEF1. И тогда можно войти в базу без авторизации пользователей
(33)Спасибо!Переименовал.Виста написала-«Программа остановлена,начинаю сбор информации…»
Другая база запускается без проблем.
Хорошая обработка.
Но можно все сделать проще.
Когда столкнулся с такой проблемой, поиски привели к определенному файлу, удаление которого и сняло все пароли.
(36) Понятно, что удалив файлик можно решить проблему. Но, это слишком «топорно», не этично и не красиво по отношению к держателям баз.
(37) samadurov. Забыл пароль — 2 минуты и все готово. Конечному пользователю как-то все равно насколько этично я это сделал, ему важен результат и всё. Платят тоже только за результат, а не за красоту проделанной работы. Пришел, молча все сделал и ушел. Ничего более. Это специалисты могут между собой соревноваться в красоте, изящности и гибкости решения проблемы. А насчет «не красиво по отношению к держателям баз», некрасиво пароли забывать, в крайнем случае ведь можно и записать куда нибудь.