<?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='\
Здесь есть список ссылок на публикации аналогичной направленностиhttp://infostart.ru/public/19363/
Программа может и многофункциональна, но рядовому пользователю слишком замудрена. Есть варианты значительно проще, а возможно и функциональнее (ну хотя бы Гендальф)
(2) А никто и не говорит о рядовом пользователе. Речь прежде всего о администраторе базы данных или продвинутом пользователе. Лично мне довольно удобно, что приходя на работу, меня ждет свежая тестовая база, где я могу не опасаясь, моделировать различные ситуации, искать ошибки и т.п. Ни один архиватор не даст тех возможностей, которые можно настроить здесь. Да, придется немного потрудиться, зато потратив 30 минут во время первоначальной настройки можно забыть об этом достаточно удобном планировщике, переложив на него часть рутины.
(3) Самый главный недостаток данного решения, отсутствие механизма отключения пользователей, а это очень важно т.к. если будут подключены пользователи резервное копирование не сработает.
(4) Предлагаемый вариант и не рассчитан на работающих пользователей. И это не самый большой его недостаток. Отключение пользователей неактуально для файловой версии и не существенно для клиент-серверной версии, если не пользоваться стандартными возможностями системы 1С:Предприятие. Кстати, задание на отключение пользователей можно запланировать и перед архивацией, но в данном контексте важно не оно, а возможность практически безграничного количества вариантов настройки администратором, а как один из вариантов — создание тестовых баз. Все же утилиты для создания архивных копий ориентированы в основном на кнопконажимателя, которому потратить полчаса на настройку системы под себя либо жалко, либо не хватает знаний.
(0) Как этой программой отрубить пользователей базы? Особенно тех, кто еще не выполнил вход, т.е. закрыл окно терминального клиента с окном выбора пользователя и ввода пароля… которых даже установкой блокировки ИБ не выкинуть.
(6) «Эта» программа тут ни при чем. Это просто один из самых продвинутых планировщиков. Остальное зависит от Вашей фантазии.
Один из самых грубых вариантов поможет точно — перезапустить кластер, например запланировать так:
ragent.exe -stop
ragent.exe -start
и после этого уже запускать задачу на бэкап
(7) Если уж заводить разговор про самый продвинутый планировщик, то сhttp://www.autoitscript.com/autoit3/downloads.shtml xStarter врядли сравнится 🙂 А вообще хорошая программа, только для запуска .cmd файла сисадмину win планировщика более, чем достаточно.
я этой прогой уже полгода пользуюсь, хорошая прога, но, соглашусь, мудреная! Но я просто архивирую. Если архивация не прошла — запускаю заново.
Супер ❗ Возник только вопрос, как прописать пароль пользователя, из-под которого запускается приложение?
вопрос снят (нашла ответ при настройке клиент-серверного варианта) 😳
Пользовался ей очень давно, думал это круто. Планировщик+cmd+архиватор рулят
Спасибо за приличный планировщик.
Проще будет если поставить прогу Saver. Настройки простые работает с rar,zip. У меня она давно стоит отлично работает проблем нету. Советую посмотреть!
Скажите пож-ста кто-нибудь. Я так понял в квадратных скобках указывается время. Я попробовал вставить переменную среды %DATE% но ничего не помогло. Пришлось в батнике сделать и запускать этот батник. Кто-нибудь знает как текущее время вставить?
Пример хороший но есть пару но
1. Как выгонять зависших пользователей
2. Удалять старые архивы
Если это все решить то было бы просто супер
Как выгонять зависших было описано выше — рестартовать службу агента.
А удалять старые архивы также как и создавать — смотрите картинки — там можно удалять файлы старше количества дней (см. 4-ю картинку). Просто хранить копии надо по блокам: за год и за месяц удалять не надо, за неделю надо удалять через месяц, за день надо удалять через неделю.
Пробуйте))