<?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='\
(0) Отработал. Понравилось. Спасибо.
(1) пользуйтесь наздоровье 🙂
Если кто опробует производные и расчетные столбцы или сохранение шаблонов, поделитесь впечатлениями. Я сам пользуюсь, но не уверен удобно ли это другим и востребовано ли вообще.
Шляпа. regprint.ert универсальней.
Тут нет всех функций, нет итогов, всего 3 группировки… в общем, очередной лисапед.
(3)
Во-первых, итоги есть! Не вводите, пожалуйста, людей в заблуждение!
Во-вторых, какких функций нет? Если нет реально полезных функций, то их можно добавить. Я открыт для любых пожеланий пользователей.
В-тетьих, «всего 3 группировки» — я на практике обычно использую 1-2, только поэтому больше трех и не добавлял
ЗЫ я не знаком с regprint.ert, специально найду чтобы сравнить
единственный аналог, который я видел, намного моему уступает
собственно потому и сделал свой, что тот не устраивал
(4) хочу видеть НачОст Приход Расход КонОст одновременно по всем измерениям.
>>>я на практике обычно использую 1-2, т
да уж..
>>>я не знаком с regprint.ert,
вот с этого и надо было начинать.. есть даже на прямых запросах давно ужо…
А так, с периодичностью раз в месяц всё создают и создают разные поделки, а вот хоть раз посмотреть , что на диске итс года так с 2000-го валяется..всё никак..
(4) 😀 Это ты Ёпрсту сказал?
(7) а че ?
:))))
Нашел, посмотрел
На первый взгляд увидел только, что по использованию условий мой отчетзначительно уступает. Возможно, займусь усовершенствованием в этом направлении
Больше я реальных преимуществ regprint.ert не заметил. Форму по типу ОСВ я не делал специально, она не читабельная ИМХО. Некоторые другие различия на любителя.
О преимуществах моего отчета я пока не буду писать, возможно я просто не нашел как это реализовано в regprint.ert. Когда лучше разберусь, тогда отпишу.
(9) см. (5) — это основное преимущество.
(10) если Вам нужна именно такая печатная форма, то мой отчет, конечно, не подходит
но это не значит, что он никому не пригодится
(8) Ну, типа, ты юзверь 😀
(11) да блин.. Ну сам подумай, зачем мне видеть по отдельности Начальный остаток движуху и конечный остаток ?
Все универсальные отчеты созданы в основном — для поиска ошибок в учете.
не более того.
(13) я делал отчет именно чтобы находить ошибки, помог он мне уже много раз и без оборотно-сальдовой формы
кроме того уже были ситуации, когда юзер приходит и говорит мне надо такой вот отчет, я настраивал этот, сохранял шаблон и вуаля: нужный юзеру отчет готов
ну и про 3 группировки…это тоже — маловато будет..
(0) Вдогонку. Применил в боевых условиях. За 5 мин снял «наезд» клиента.
При поиске ошибок, отладки отчетов — отлично !
(16) Спасибо за положительный отзыв. Ты отчетом пользуешься точно также как и я 🙂
Что касается сравнения с regprint.ert
Скорее всего, если бы я раньше узнал о regprint.ert, то этот я бы и не сделал
Но я рад, что получилось так как получилось
Даже испытал некоторую гордость, от того что моя «поделка» вполне сопоставима с разработкой с диска ИТС, и даже имеет несколько преимуществ
Основа и причина отличий в том, что я использую СоздатьОбъект(«Регистр.ХХХ»), а regprint.ert — язык запросов. Из-за этого мой отчет уступает в работе с группировками, в том числе по группам справочников. Тут у меня есть куда расти, буду или нет — пока не знаю.
Оборотно-сальдовую форму я теперь из принципа доделаю 🙂
Также попробую улучшить работу с фильтрами (условиями).
3 основных преимущества моего отчета я добавил в описание.
Также в regprint.ert обнаружился баг. Не такой уж и страшный, но все же: при печати числа округляются до 2 знаков. У меня с точностю, заданной в конфигураторе.
Более детальный разбор делать не буду, каждый может сам сравнить.
(18) с годами юношеский максимализм проходит 😉
ЗЫ: Все уже украдено до нас
Добавил оборотно-сальдовую. Пока для нее отключены группировки. Буду благодарен всем, кто сообщит о багах!
По мере доработки и исправления ошибок будут выходить обновления 4.4.x
(0) Занимаюсь сверткой ТиС Украина. Ваша работа с регистрами опять актуальна!
Спасибо! Пользуюсь, устраивает на все 100%!
Интересная игрушка, понравилась!
Очень здорово! Спасибо. Чет токо сводных остатков пока не нашел…
Невероятная вещь! Спасибо автору!
Поигрался с 4.4.0. Отличная штуковина! Автору респект!
Спасибо автору!