<?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) Vovan1975, «самозанятый» бухгалтер, повышенной производительности =)
{Форма.Форма.Форма(261)}: Ошибка при вызове конструктора (ЧтениеZipФайла)
ФайлZip = Новый ЧтениеZipФайла(ФайлСписокОбновленийZIP);
по причине:
Некорректный формат файла: …1Cupdatev8upd11.zip
Скаченный файл (1 кб) имеет следующий текст:
<!DOCTYPE HTML PUBLIC «-//IETF//DTD HTML 2.0//EN»>
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /tmplts/ipp/ITSREPV/V8Update/Configs/HRM/25/82/v8upd11.zip was not found on this server.</p>
</body></html>
(3) Seregio22, щас попробую потестить без паролей и с заблоченым сервером обновлений.
так то пишет что zip распокавать не выходит т.к. не скачался.
(4)
Релиза+»/»+мВерсияПлатформы+»/v8upd11.zip»);
дописал строки ниже так:
//НЕ СКАЧИВАЕТСЯ. ЭТО АЛЬТЕРНАТИВА
СерверОбновлений = Новый HTTPСоединение(«downloads.1c.ru»);
ЗапросКСерверуОбновлений = Новый HTTPЗапрос(«ipp/ITSREPV/V8Update/Configs/»+мТипКонфигурации+»/»+мВерсия
СерверОбновлений.Получить(ЗапросКСерверуОбновлений,ФайлСписокОбновленийZIP);
вроде есть контакт 🙂
(4) без всяких паролей наличие номера новых релизов должно скачивать.
щас проверю засунув в форму 1с . сам текст под OneScript использую.
идея хороша.но имхо утопия.
(5) Seregio22, спс, тоже отловил . в OneScript и с «/tmplts» работает, видать просто игнорирует.
а в 1с хоть в отладчике и игнорирует (видно сервер соединения только «downloads.1c.ru») ,а отрабатывает как будто с этим излишком.
СерверОбновлений = Новый HTTPСоединение(«downloads.1c.ru»,,мИтсЛогин,мИтсПароль,);
//было СерверОбновлений = Новый HTTPСоединение(«downloads.1c.ru/tmplts»,,мИтсЛогин,мИтсПароль,);
в тексте сейчас исправлю, благодарю.
(9) Drak0n,
1. Загрузка списка обновлений 1 раз для семейства
2. Обновление через несколько релизов
3. Преимущественное обновление на уже скачанные релизы
4. Ну и по мелочи
Получилось вот что:
PS Если автор не против могу выложить отдельной темой
1. гуд. но думаю пару кбайт погоды не сделают.
2. обновление идет на максимально возможный релиз в пределах одного скачка.
далее еще не посмотрел как у вас реализовано. следущей накаткой обновлений до «победного» или все таки с запуском обработчиков в режиме «предприятия»?
3. Аналогично «//качаем новую версию, если уже не скачено»
PS ни когда не против, т.к.
а) эта публикация и так копия батника, только на другом языке.
б) если бы был против, ничего бы не смог с этим поделать. «Мне остается только стонать от бессилия или отравиться газами через выхлопную трубу!» © Лжец Лжец.
Обновление идет на максимально возможный уже скачанный релиз, если такового не найдено — на максимально возможный в пределах скачка (загружается с сайта). Такая необходимость возникла в связи с тем что была куча баз с различными релизами и вместо того чтобы качать цепочку «максимальных» релизов для каждой все релизы обновлялись на уже скачанный и далее по одной цепочке до финального.
Обработчики в режиме Предприятия не запускаются. Тут принципиальная позиция — соглашение на клиентском компьютере принимает пользователь. Через чур старых ИБ не обновляется — поэтому проблем нет).
А он все базы обновляет или только одну?
(12) TimoniArtjom, скрипт по очереди проходит по списку заданных информационных баз. Все базы обновляются последовательно.
Подскажите, есть ли возможность при открытии конфигуратора открыть произвести сравнение с конфигурацией из .cf и открыть окно сравнения/объединения?
(14)
Не встречал ничего похожего, в ключах такого нету. В голову лезет всякие извращения с автокликерами для мышей/клавиатур.
Так что не подскажу.
Добрый день, почему то запускаю скрипт и ошибка подключения COM к базе возникает {Модуль C:UsersvorobyevieDesktopOneScriptscript.os / Ошибка в строке: 371 / Внешнее исключение (System.Runtime.InteropServices.COMException): Ошибка при загрузке библиотеки. (Исключение из HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))}
Не подскажите как решить?
(16)
не знаю, но по гуглу то виндовая , с правами админа попробовать запустить.
(17)
Пробовал, все безуспешно, запустил на компьютере коллеги, тоже самое.