<?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)
в статье речь про руководителей, а не про аналитиков.
(1) важно уметь делать не только портянки. У портянки своя цель, она решает одни задачи, но не все.
Со смартфона можно смотреть графики,
а табличные отчеты для смартфона могут превратиться в Топ-10. Т.к. много не покажешь.
(2) Так аналитики предоставляют отчёты руководителям. Не барское дело — самому руководителю по 1С-кам и прочим фигням шариться…
(5) о том и статья. Зачем нужен аналитик в этой цепочке? Если речь о ежедневных отчетах.
Зачем руководителю по 1С-кам шариться? Если можно в смартфоне на одном экране все увидеть.
(3) Вот в 1С Документобороте максимально универсальные отчёты, которые можно настроить до необходимого минимума, и в автоматическую рассылку впихнуть. С диаграммами, итогами и отборами.
(6) да, только там данных о продажах нет.
(7) Чтобы руководителю не напрягаться, конечно. И чтобы программисту не придумывать, как из цифр максимально полезную информацию извлечь.
(8) А в ERP есть. Принцип тот-же — универсальная «портянка», и крути её сколько хочешь.
(10)
скорее «и крути ее, если хочешь»
(11) Ну да, чаще всего так 🙂
Эх а у меня руководители хотя портянку. Сегодня только закончил в один отчет добавлять 30 колонок. Изначально сделал одну где было все консолидировано.
Нет предела совершенству, при этом любой вопрос в предельной сути — это вопрос на «Да» и «Нет».
(13) это круто из ОДНОЙ колонки сделать 30!
Непонятно, почему руководитель должен или хочет, чтобы работу по настройке и оптимизации отчетов сделал программист? Конечно, если им больше делать нечего и других сотрудников нет (консультантов, аналитиков, продакт оунеров, PMO) тогда можно и программиста понапрягать и свое видение бизнеса передать, и отчетов в частности. У программистов пока навыков ясновидения не наблюдалось, чтобы оптимально для каждого человека (а тем более для руководителя) делать заточенный индивидуально продукт, и чтобы сразу и без доработок. И желательно на вчера.
(0) ну если система сама все умеет и знает , может и решения принимать (читай руководить) тоже будет
сама ?
Какой-то у вас руководитель пассивный. Сидит и ждёт, когда ему система СМСку пришлёт с одной строчкой информации. А еще, желательно, фамилией сотрудника, которого нужно вые… простимулировать.
(13) Напихал все в одну колонку и как это все анализировать? Вот твой отчет изначально видимо и был портянкой.
(13) Скриншот покажи до и после.
Пока одни «клепают» отчеты, другие делают вот такие крутые штукиhttps://habr.com/post/422151/ :))
Хочется спросить автора: а ты сам вообще писал отчёты?
1) Отчёт с кучей аналитики позволяет настроить различные варианты в одном отчёте, оставив только нужную аналитику.
2) Отчёты на СКД изначально включают в себя функции группировок, фильтрации, сортировки и прочего, что перечисляется в статье как «а потом он захочет».
3) Програмист делает такой результат, какой ему сказали сделать. Если сразу дали нужную руководителю форму — именно её он и получит.
4) Если программист работает стиснув зубы и делает на работу «на отвали», то гнать такого программиста.
Статья выполнена по схеме «сначала создаём проблематику, потом предлагаем её решение». Но для специалиста видно, что проблематика надуманная. Написал бы просто «а вот ещё один вариант отчётности», без сгущения красок.
«Работает — не трожь», тем более когда руководитель сам не знает чего он хочет.
Статья — очередное ведро воды. Да и цель автора этих статей, как он сам как то тут писал в комментах, набить плюсики в рейтинге. По сути, по его же словам, и статьи он начал писать именно для этих целей. Эту статью также не смог прочитать до конца, застрял на половине.
(24) Думаю автор скоро какой нибудь платный курс выпустит типа «как стать успешным».
(25) А вы, на пару с профипрогом1с, первыми за этот курс заплатите.
(25) Да)) У него даже есть своя «история успеха», ускорение х4. Он даже книгу пишет)))
(20)
Вот.
То что стало я не представлю как должно выглядит. Настраиваем. Видимо процесс на несколько месяцев
(28) а где то что было «По Белокаменцеву».
Дельные вещи написаны в статье, но у меня как у программиста сразу возник вопрос по реализации. Для формирования таких управленческих отчетов в информационной системе будет необходимо создавать «обвязку» из метаданных которые будет подсказывать как сворачивать/скрывать/выводить данные в отчете, чтобы все было информативно. Допустим вот Ваш пример с новым оборудованием «Как определять что оно новое, когда и как оно переходит из состояние новое>-текущее». Если допустим определять это по каким-то реквизитам номенклатуры, кто их будет изменять в будущем?. В общем может сложится ситуация при которой пару месяцев отчет будет показывать все правильно, а потом из-за неизбежного устаревания НСИ станет просто показывать погоду. В общем встает вопрос кто будет поддерживать НСИ для таких отчетов в актуальном состоянии, ведь не программист же должен это делать.