<?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) Согласен 🙂
Спасибо! Чуть попозже подготовлю более детальное описание работы обработки и help. Писал ее года 3 назад поэтому сам забыл, как работает весь ее функионал.
Пригодилась. Полезная штука.
Наверно, нужный отчёт. Такую бы штуку ЗиК…
Смотрится очень прилично.
Обработка несомненно заслуживает внимания, и Автору, конечно же, за работу плюс, но…
1. Явно не хватает подробного описания, на метод тыка затрачивается много времени.
2. При выводе на печать таблица получается размером А3, что усложняет работу с такой таблицей.
3. Есть некоторая «излишность», утяжеляющая обработку, насколько это оправдано не берусь судить, у каждого буха свои тараканы в голове:
— время проведения док-та;
— количество, даже в аналитике бесколичественного учёта, нап-р, начисления налогов, заработной платы;
— сумма в валюте, валюта, даже если выбраны только рубли;
— колонки «СодержаниеОперации» и «СодержаниеПроводки», по сути, дублируют друг друга;
— излишне колонка «Количество Проводок».
4. Поскольку нет описания, то было бы нелишним, чтобы при наведении мышки отражалось назначение иконок.
Возможно, все излишества можно как-то отключать, но нет подробного описания.
Аналитика д.б. предельна читабельна и интуитивно понятна в работе, дабы не затрачивалось много времени на освоение пользование надстройкой.
Полезный отчет, конечно плюс.
Правда на Украинской типовой БУ без «напильника» работать не захотел.
На украинском ПУБе тоже не заработал. Нужен напильник, хотя отчет безусловно интересен и полезен.
Основная ругань сводиться к следующему:
ТЗ.СодПров = Опер.СодержаниеПроводки;
{C:ANALIZPROVODOK.ERT(705)}: Поле агрегатного объекта не обнаружено (СодержаниеПроводки)
(7)
1. Над этим работаю. В новой версии улучшил описание возможностей обработки.
2. У меня по умолчанию выводит на А4. Мне кажется тут дело вкаса и каждый сам под себя настраивает параметры страницы.
3. Все не нужные колонки можно срывать, а на счет пустых согласен их выводить нет смысла. Иногда нужно узнать сколько продобок с определенной корреспонденцией для этого и было сделано количество проводок.
4. Подписи сделал.
(8) (9) К сожалению типовой БУ украинской по рукой нет. Попозже подпилю чтоб на ней тож работало без «напильника».
Обработка хорошая, не хватает большего количества субконто, всего 3, хотелось бы 5.
Плюсую. Очень интересная обработка. Возможно ли реализовать вывод в реквизитах субконто периодические, например по состоянию на конечную дату. Сейчас при выводе в Excel выlает «Неизвестный объект». Благодарю за внимание!
Я в своей практике не видел конфы, где ушли от 3-х стандартных субконто. Это ведь все отчеты перестанут работать.
Сделать наверное возможно, но сколько времени тогда будет формироваться отчет? Для себя не планировал данные доработки особенно в свете перехода на БП.