<?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='\
Вы, вообще, о чем? Зачем это нужно? Какой выигрыш в работе? Чем плох имеющийся аналог?
Спасибо за статью; я делал кубы на MSAS. Тоже смотрю в сторону Пентахо.
А каким образом реализован просмотр кубов? Есть свой клиент или через веб интерфейс можно крутить кубы?
автор, пишите дашборд как хотите, не обращайте внимание на тех, кого что-то бесит (1) 😉
а статья хорошая, кому-то может пригодиться
(3) stanru1,
на первом (стартовом) слайде показан веб-клиент для просмотра куба и публикации полученных срезов.
к сожалению Pentaho CE имеет несколько других клиентов для просмотра кубов, на мой взгляд менее удобных чем в Pentaho EE.
Если Вы уже имели опыт применения MSAS, то использовать Pentaho OLAP (mondrian) вам будет значительно проще, т.к. использование MDX практически идентично.
(2) DoctorRoza,
разговор идет о применении OLAP сервера для обработки большого количества данных. Применение отдельного сервера для анализа данных всегда более продуктивно чем использование встроенных обработок или решения OLAP задач с помощью Excel таблиц.
(3) stanru1,
еще, Mondrian поддерживает XMLA протокол.
я сам не пробовал, но видел в сети десктоп-клиентов типа Rex (waRehouse EXplorer), которые могут смотреть и в Pentaho и в MSAS.
Дельно. Надеюсь на развитие темы.
В 2005 у Инталеванечто подобное не взлетело
Понимаю что сейчас меня забросают камнями — но все же попробую задать вопрос.. Кто может мне рассказать что такого нельзя сделать 1С (например, связкой СКД+агрегаты) и что есть в OLAP (в части получения/формирования отчетов)? Буду очень благодарен если кто-то мне кинет ссылку на подходящую статью.
(5) Насчет «большого количества данных»: пожалуйста, дайте оценку, какое количество данных можно считать уже достаточно большим, чтобы описанный подход был заметно быстрее встроенных обработок. Ну там десяток тысяч документов, сто тысяч, миллион?
Странным образом коррелирует с названием статьи.. От 1с тут чуть больше, чем ничего.
Судя по всему, при создании чуть более сложных отчетов, нежели выборка справочников, процесс разработки затянется..
(10) gaglo, в количестве документов не скажу, но мы в свое время использовали OLAP для построения отчетности за последние 3 года.
1С при этом сильно бы задумывалась, а так как база зачастую режется по годам, то без изворотов не построишь отчет по сопоставлению данных нескольких лет (продажи, производство и т.п.)
Вообще для отчетности больших баз можно конечно использовать отдельную БД 1С, но если шаблоны отчетности практически не изменяются, то куб обслуживать проще и реально работает быстрее, плюс не нужны лицензии 1С. Был опыт создания кубов на SQL, а просмотр отчетов в Excel, получая данные из внешнего источника. Дешево и сердито. 🙂
(12) А1С:Консолидацию не пробовали использовать?
(9) SkorikA, я могу из своего опыта пример привести.
Да, в 1с можно на СКД изобразить все то же самое, что и с помощью кубов, но!
Кубы дают поразительную возможность пользователю манипулировать данными: выбирать одним движением мыши различные разрезы, показатели и т.п.
Например, смотрим продажи за период в разрезе партнеров. Раз, добавляем себестоимость и величину наценки. Раз, и смотрим то же в разрезе товарных групп. А теперь — по поставщикам. А теперь — по регионам, куда доставляли товар. Кубы на то и многомерные, что из одной таблицы данных в связке с измерениями можно получить огромное количество срезов данных.
Еще один плюс кубов в том, что они в разы быстрее соответствующих отчетов в 1С. Таблица данных для кубов сознательно денормализована: с целью хранения данных ее использовать не стоит, а вот для быстрого получения аналитики это то, что нужно.
(14) Хранить данные и не предполагалось, то, что таблица избыточна — и так понятно (равно как и таблица итогов/агрегатов в 1С).
Позвольте, но что в СКД не позволяет сделать того же самого? Нестандартные формы настройки отчетов, позволяют решить все проблемы настройки СКД (я согласен что обычному средне-рядовому пользователю разобраться в настройках СКД не очень просто).
Встречный вопрос: а насколько [просто/удобно/прозрачно] в кубе можно настроить сложный расчет итоговых полей (например цена, % скидки, % выполнения плана — т.е. когда показатель рассчитывается в контексте текущей группировки от других показателей)?
СКД так же позволяет выполнять группировки (срезы) как по измерениям, так и по производных/подчиненным полям от измерений (в т.ч. с использованием характеристик).
По производительности — здесь я согласен что СКД может проигрывать, однако при правильно подготовленном регистре эта разница будет не существенна. А возможность формировать отчеты в фоновом задании подслащает пилюлю:-)
Так же, насколько я понимаю, отдельно стоит вопрос актуализации данных в кубе — т.е. какой-либо механизм подготовки данных или трансляций (не люблю это слово после Инталева:-( ). Что не позволяет (или позволяет, но с накладками) получать отчеты по текущим данным — т.е. механизм OLTP
p.s. Перечитал свое сообщение. Если у вас возникло ощущение что я хочу потролить — уверяю, это не так — только желание разобраться в области.
(12) это не опечатка?
Мне показалось, что в числе прелестей куба находится как раз возможность лёгкого изменения шаблонов.
Просто интересно, а вы замеряли?
(15)
с кубом у некоторых пользователей могут возникнуть не меньше проблем. А у администраторов доступа — проблемы с разграничением данных…
Но я не противник кубов! 🙂
(17) Замерял. Используя секундомер и субъективные ощущения. СКД проигрывает при «больших» (30-50 страниц текста и больше) отчетах. Т.к. огромное время тратится просто на перегонку данных между сервером и клиентом и их отображение. Вопрос целесообразности отображения таких [«больших»] отчетов оставим в стороне.
(18) Так и я не противник кубов:-) Я просто отношусь к ним достаточно сдержанно (не считаю их серебряной пулей в «отчетостроении»). Но согласен, что в умелых руках они могут творить чудеса:-)
К сожалению, не IT пользователям кубы увидеть так и не довелось — поэтому статистики удобства пользования/настройки/администрирования куба я не имею.
(19) SkorikA,
Меня в СКД больше всего раздражает, что это черный ящик, и если какая-нибудь «нештатная» проблема случится, то ковырять можно очень долго.
Тут 1С конечно вне конкуренции.
Пример: Форма при довольно невинном изменении (видимость = не видимость) полностью перестраивается на сервере, хотя можно было сделать это на клиенте.
(20) Насчет того что СКД это черный ящик, позволю себе не согласиться. Ни разу не сталкивался с тем, чтобы СКД действительно вело себя действительно не однозначно (за исключением явных косяков платформы, которых было не так много). Опыты + ИТС + курс по СКД (от Гилева, не сочтите за рекламу; у Хрусталевой, имхо, не так подробно и глубоко) позволили мне понять принципы его работы и множество неочевидных вещей.
А для отладки рекомендую консоль компоновки данных в «Инструментах разработчика» (опять же, не сочтите за рекламу).
По видимости/невидимости ничего не скажу — тоже болезненная тема:-)