<?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='\
Респект разработчикам ! Отличная штука.
Проверил, работает, плюс. При архиваровании (хорошо бы) моргающую картинку в системном трее. Закладка «Сообщения» (IMHO) перегружен буквами, достаточно Дата, Время, Архив /или/ Ошибка.
После создания резервной копии не очищается прогресс-бар.
Так задумано?
архивация происходит каким образом? внешний (встроенный) архиватор, или средствами 1с (пакетный режим)? Если пакетный, то возможно ли после архивации запускать еще и переиндексацию, скажем? Я не смог этого в настройках найти
Как сервис работает?
Архивация производиться встроенным архиватором, если информационная база копируется как директория файловой системы. На выходе создается zip-архив.
Если задание создано как «Резервирование базы 1С», то архивация производиться средствами самой 1С. Удобно для клиент-серверного режима, так как директория базы обычно недоступна.
Переиндексации базы 1С еще не предусмотрено, эта функция будет реализована в ближайшей версии.
Программа не регистрируется как служба, а просто запускается в фоновом режиме.
спасибо! очень удобное решение!
т.е. ее необходимо запускать из-под пользователя… а если вход в систему не выполнен?
Спасибо разработчикам. Для работы неплохо ей пользоваться. Но для таких программ необходим контроль пользователя. У меня такие возникли трудности:
1. При каком-то глюке не стерся файл в каталоге пользователя винды(Documents and SettingsuserApplication Data и там где-то) и архивы не делались.
2. Если кто-то не вышел из 1С архивы тоже не делаются.
Еще раз спасибо разработчикам. Простое и удобное решение. И главное не требует регистрации и т.п..
Для того, чтобы сделать резервную копию базы и перед этим отключить всех пользователей, в окне настроек задания необходимо поставить галочку «Отключать пользователей». Если имеются несохраненные данные, то 1С предложит их сохранить и выйти. Программа будет ожидать выхода 1 минуту. Если после этого 1С не будет закрыта, резервная копия не создастся.
Поставив галочку «Принудительно» по прошествии 1 минуты 1С будет закрыта без предупреждения.
Для клиент-серверного варианта программа отключает пользователей от сервера без предупреждения. Для этого нужно иметь права администратора.
Хорошая программа, но не работает у меня в К-С варианте. После начала резервирования выдает «Error HRESULT E_FAIL has been returned…» (Галки Отключать и Принудительно стоят). Покапался в нете — есть такая проблема при СОМ’е к восьмерке. Предоставляю ссылку и надеюсь на исправление:Про ошибку Hresult
(11) Тоже самое((( А програмка — супер)))
(12) Короче, легче самому дописать прогу, чем ждать пока разработчик откликнется.
Прогу дописал сам — теперь выкидывает юзеров и устанавливает блокировку соединений.
Авторам спасибо за шаблон! 😉
(13) А как ты дописывал, это же эксешник?
(14) 🙂
Это не экзешник!
А прога, написанная на c# с использованием .net («Для работы программы необходим установенный Microsoft.NET Framework»)! ❗
А это есть гуд! 🙂
Если бы просто был написан, например, на «чистом» с++, я бы ничего и не смог бы дописать….. 😉
А если «пользователя» нет? Вход в базу без пользователя и пароля?
Попробовала оставить поля пустыми — вообще ничего не происходит. 🙁
(16) Все получилось! ТОлько бухгалтерам не нравится, что программа(1С) просто предлагает «выйти». Спрашивают: нельзя ли сделать, чтобы где-то сообщалось, что это «для создания копии»?
(17) Повезло, однако Вам! У меня в базе кроме юзеров есть еще и куча ком-соединений, которым так просто не предложишь выйти… 😀
(А какой вариант бд к-с или файл-серверная?)
Можно! Только надо дописывать прогу! (Или 1с дописывать, например в «При начале работы системы» вставить строчку, чтобы когда определенный юзер заходил…)
У меня есть разные базы — просто попробовала на 1) обычная локальная сеть, база на одном компьютере, работают с ней на нем и еще на 2-х, в разных комнатах;
2) тоже самое, только база на выделенном сервере;
Проблема в том, что бух теряется, когда вдруг возникает предложение «закрыть программу». Можно ли как-то перед этим выдавать сообщение, что будет выполнено копирование. Либо может подскажите текст файла , который можно подключить в Планировщик и запускать его перед запуском вашей программы? Просто я не знаю, как написать просто выдачу сообщения на экран.. 😳
(19) Версия 1с-ки 8.1?
Конфа типовая?
Если типовая, то снята с поддержки?
Планировщик Windows?
(20) 7.7 Типовая
Да, просто батник, который я подключу в Планировщик Windows
(21) Да, жалко я не знаю 7.7… 🙁
А, знаете, что, попробуйте за минуту до того, как 1с-ка предложит выйти нетсендом предупредить.
Синтаксис:
net send <имя_компа> <сообщение>
Вот, только права должны быть на нетсенд. (Ну, это к сисадмину.)
Версия программы обновлена до 1.0.30. Теперь программа оповещает пользователя о необходимости закрытия 1С для выполнения резервного копирования. Все произведенные изменения находятся в описании к программе.
Отдельная просьба к ZERO_: вышлите, пожалуйста, все произведенные вами изменения в программе на почтовый ящик support@egida1c.ru.
(23)
История версий
V 1.0.30
* добавлена возможность автозапуска программы при старте Windows. Эта функция включается из меню, выпадающего при нажатии правой кнопкой мыши на значке программы в трее;
Так она была и в предыдущей версии! 😉
Внизу веб странички забыли поменять номер версии! 😉
Советую добавить возможность блокировки К-С БД на время выполнения архивирования и задания пароля для захода, соответственно! (А то есть шустрые юзеры и швыдкие ком-соединения :))
Еще бы хорошо было бы поместить поле ввода для задания текста оповещения, также ввода времени в минутах До непосредственного начала принудительного вышвыривания юзеров.
Вышлю, если пообещаете что она останется бесплатной и без ограничений!
(Просто ни одна до сего времени мне известная прога не (выкидывает юзеров из к-с 8-ки и делает бэкапы штатными средствами (не зависит от субд) и по расписанию и Бесплатна)…)
(23)
P.S.
И вместе с тем, прошу прощения за то, что не вытерпел и полез сам дописывать… Просто позарез нужно было рез. архивирование базы. 😉
Классная программа. Спасибо и куча +++… 😀
Автору зачёт и много плюсов! И хотелось бы узнать где и как хранятся пароли?
А у меня на при выкидывании пользователей (или уже архивировании?) понавылазила куча ерроров с руганью на фрамфорк, хотя он стоит и прога выскочила с критической ошибкой :(. Хотя обычные каталоги архивятся на ура
(27) backups.xml В открытом виде.
(28) Попробуйте удалить, перезагрузить тачку и вновь поставить фреймворк. Попробуйте запустить на другой тачке.
Однозначно плюс++++!!! Спасибо
Красота! Так держать! Благодарю. Искал себе такую программку.
Подскажите где ввести параметры аутентификации администратора кластера? При выборе клиент серверного варианта базы выдает ошибку аутентификации администратора кластера, хотя бэкап делается нормально.
(32) Также не выкидывает пользователей (клиент-серверный вариант) выдает ошибку что во временной директории нет файла выгрузки …
(32) Нигде. 🙂
По умолчанию соединяется с параметрами юзер=»», пасс=»».
Если они другие, тогда
.
Да, потому, что чтобы сделать бэкап подключается к базе под админом этой базы -> бэкап делается нормально.
Права на запись в директорию есть?
(32)
Вопрос: этот «администратор кластера», который у Вас он где находится (если открыть консоль серверов 1с) в центральные серверы……->Кластеры->1541->Администраторы или в центральные серверы-><имя_компа>->Администраторы
Когда первый раз делал бэкап юзеры в базе были?
(35)
«администратор кластера» есть и там и там
(34)
права на запись есть, когда нет пользователенй бэкап делается нормально
P.S. Наверное набросаю свою прогу, сколько перепробовал все не слава богу….
(36)
Есть возможность удалить того, который в
центральные серверы-><имя_компа>->Администраторы ?
Если есть — удали. проблема должна исчезнуть.
(37)
Спасибо помогло все работает как надо.
У меня еще вопрос к автору, программа полностью бесплатная, т.е. можно использовать на работе?
Программа бесплатная, можете использовать на работе.
А есть ли какой-нибудь HELP по настройке? У меня после обновления перестала запускаться автоматическая архивация. В чем причина понять не могу. В сообщениях пусто. Если запускаю в ручную то всё проходит нормально.
Какая версия программы используется?
Вышлите пожалуйста файл backups.xml, который находиться в каталоге с установленной программой на электронный адрес support@egida1c.ru. Это поможет в выявлении причины ошибки.
Проблема решилась полным удалением и добавлением заданий
для клиент-серверного варианта если не хочется занулять админа кластера, то можно батником вырубать все компы к примеру в 22, а задание на сохраниние базы поставить на 22.30. батник добавить в «назначенные задания». Тем более это решит и другую проблему — выключение компов на ночь, что увы пользователи иногда забывают сделать.
Инструкция:
http://netler.ru/pc/shutdown.htm
Пример команд:
shutdown.exe -s -m \tkvv -t 00 -f
shutdown.exe -s -m \meneger -t 00 -f
И просьба к авторам дать ссылку на фламеворк в описании, а то зачем народу искать его.
http://www.microsoft.com/downloads/details.aspx?FamilyID=5b2c0358-915b-4eb5-9b1d-10e506da9d0f&DisplayLang=ru
(43) Да, как выход — этот вариант можно использовать, но… На мой взгляд, кривовато + не на всех предприятиях такой фокус оценят… Может, можно как-то переписать саму прогу…. ув. tuzek.
Спасибо за программку!
А что будет, если резервирование запланировано на определенную дату и время, а в это время комп. выключен?
Как программа живет на сервере 2003.
Для запуска в фоновом режиме ей требуется авторизация пользователя или она запускается вместе с виндовс и вседелает!
Есть ли смсл делать резервное копирование папки, а не выгрузки из базы?
Хорошая программа, на простеньком компе под XP работала как надо.
Но когда поставили на 2003 сервер стали происходить странности, программа пишет что делает архив, сохраняет историю, ведет себя так как будто «все в порядке», а заглянешь в папку с архивами — там файлы по 10kb лежат…
версия 1.3.60 У меня и на ХРSP3 не заработала так как надо.
При галке выгонять принудительно так и ждёт нажатия ОК.
На 2003-м , расписание ни в какую не хочет работать, ни по очереди ни без очереди. Да и почему то предыдущий архив пере