<?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. Строка подключения сервера SQL всего 10 знаков, не лезет имя.
2. У меня нет базы upp2008.
🙁
(1) извиняюсь, исправил
Журнал изменений 🙂 А я то думаю почему у меня база пухнет…
Подождем что там с версионированием в упп 1.2.22 придумали 1С-ники.
(0) Полезная обработка. Давно пользуюсь.
А почему она размеры регистров не выводит?
обновил немножко
на одномер Сервере установлен Сервер-1С, на нем прописаны две базы
SQL стоят на двух других серверах. В поле server sql ввожу имя сервера 1С, то вылетает с ошибкой доступа к SQl.
Если ввести имя сервера SQL, то показывает только размер базы, а докуметы нули
(7) в поле «Сервер SQL» необходимо указать сервер, на котором физически лежит база, а не на котором установлен сервер 1С (ну если только это не один и тот же сервер). В поле «Администратор сервера SQL» — имя администратора SQL сервера, а в поле «Пароль администратора» — его пароль.
По поводу «Если ввести имя сервера SQL, то показывает только размер базы, а докуметы нули», не совсем понятно… То есть в настройках указано, что надо выводить информацию по документам, отчет формируется, в списке документов выводятся все документы, а в колонках размеров — нули? Нули выводятся во всех колонках или в колонках с размерами?
(8) аааа, ой я глупый юзер. Кнопку настройка не нажимал и документы не выбирал. Все работает. Спасибо. Плюсик 🙂
Хорошая штука получилась.. тока блин, рекомендации осмелюсь высказать:
— плохо что она не универсальная, т.е. выводит статистику именно по текущей базе а не по любой, т.е. в базу надо обязательно заходить;
— плохо что не сохраняются параметры подключения к базе и их надо каждый раз прописывать, я понимаю что пароли администратора сохранять нехорошо, но это и не надо делать, для прямого соединения с mssql надо использовать Windows-авторизацию (Microsoft ваще не рекомендует использовать родную авторизацию с mssql без SSL т.к. пароль передается в открытом виде, тем более для административных действий, и это пароль администратора);
— и вообще имхо надо сделать чтобы вводился только именно центральный сервер кластера и ИБ на нем, остальное подтягивать через административное соединение с кластером, в отчете обязательно отразить имя сервера mssql;
— при открытии параметр сортировки всеже установить надо, а то рантайм еррор получается;
— макс доков в день и среднее доков в день в итоговой строке по всей таблице посчитать всеже стоит.
А так вообще, будем юзать 🙂
Классная вещь — нашел мусора на 2,7 гб… кеша старого! большое спасибо!
(10)+ если возникнут какие-либо трудности в реализации моих пожеланий, пиши по аське, помогу
Прикольная весчь! Сам рисовал статистику по документам, но только делал это через консоль запросов… 🙂
Login failed, хотя набираем точно администратора сервера. MS SQL, аутентификация виндовая вроде.
{Форма.Форма(846)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Не удается открыть базу данных «Dragons», запрашиваемую именем входа. Не удалось выполнить вход.
Connection.Open(стрПодключения);
эмм
поглагаю не видит ole драйвер? mssql 2005 lite
+1 за идею
-1 за реализацию
Не работает когда имя БД в кластере серверов отличается от имени БД на SQL-сервере
У меня вообще никакую статистику, кроме размера базы не показывает, только пустые таблицы
Не работает: база под управлением PostgreSQL 🙁
«Ошибка при вызове метода контекста (Open): …»
Пытается использовать Driver={SQL Server}
хорошая обработка . идея хороша
Полезно. Спасибо
Имя базы данных на сервере SQL нужно сделать так, чтобы вводилась руками. У меня имя базы на SQL сервере всегда отличается от имени базы на сервере 1С по соображениям безопасности. Соответственно обработка не работает.
Привет. По отчету «Универсальный отчет». Если база файловая, то показываются данные справочников и документов. Если же отметить регистры, то возникает ошибка. Еще не вижу в отчете — на что влияет диапазон дат «Документов в день»
Привет. По отчету «Статистика …». Если база файловая, то показываются данные справочников и документов. Если же отметить регистры, то возникает ошибка. Еще не вижу в отчете — на что влияет диапазон дат «Документов в день»
В заголовке же написано, что обработка предназначена для клиент-серверного варианта, так как данные по объему занимаемого места берутся с SQL-сервера
(0) Спасибо, отличная и качественная обработка))
Что-то не правильно отчет показывает, вот суммарное представление отчета анализа моей базы:
«Размер
таблицы KB»
5 360
115 392
319 024
205 568
13 696
«Размер
индекса KB»
10 424
30 224
40 416
222 800
12 072
Сумма: 974 976КВ
Размер: 7936.31 MB, Неиспользованно: 3966.87 MB
По таблице я вижу меньше 1Гб, а где же еще ???
с Postgre не работает. Можете подправить чтобы работало?
Я подправил, внес возможность указывать имя БД на SQL-сервере.
Куда выложить то что получилось?
(0)Загрузил в справочник ОКОФ, после этого сунулся посмотреть сколько МБ он занял в базе, но обработка почему-то показывает 0. Интересно, в чем причина?
Полезная обработина, та, что была нужна для количественного анализа базы заказчика. Правда приходилось иногда ее «передергивать», чтобы заполняла данные (я про версию, которую качал в декабре 2010 г.). Автору благодарности в любом случае 😀
{Форма.Форма.Форма(59)}: Ошибка при вызове метода контекста (Сортировать)
ТЗ.Сортировать(Сортировать);
по причине:
Неверное имя колонки
{Обработка.ОтладкаЗапроса.Форма.Запрос(16)}: Ошибка при вызове метода контекста (Выполнить): Ошибка выполнения запроса «Ошибка при выполнении операции над данными:
Microsoft OLE DB Provider for SQL Server: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric.
HRESULT=80040E57, SQLSrvr: Error state=8, Severity=10, native=8115, line=1
необходимо в запросах где:
«ВЫБРАТЬ
ВЫРАЗИТЬ(СРЕДНЕЕ(Количество) КАК Число(5, 0)) КАК Среднее,
….
»
поправить на
КАК Число(15, 0)
Благодарю за полезный инструмент 🙂 Самое то для анализа баз, дабы не считать «вручную» 🙂
Спасибо , как раз то что искал.
спасибо, давно искал что-то подобное!
На 8.2 работает?