<?php // Полная загрузка сервисных книжек, создан 2025-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='\
Что-то не получается.
Задаю период 01.03.09 — 31.03.09
Задаю колнонки — все.
Нажимаю выполнить получаю XML с заголовком но без данных.
Задача — выгрузить из ЖурналаРегистрации все записи за период.
(1) странно. При тех же параметрах у меня выгружается 😐 . Может еще какой отбор установлен?
(2) Еще раз.
ни один Фильтр не устанавливаю.
Период 01.03.09 — 31.03.09
Колонки — Все
Выходной файл задал
Обработка работает где-то полминуты.
Результат — файл размером 194 байта содержащий строку
<v8e:EventLog xmlns:v8e=»http://v8.1c.ru/eventLog» xmlns:xsd=»http://www.w3.org/2001/XMLSchema» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»/>
(3) elf файл не указываю — выгрузка из текущей базы.
Если использую в вашей обработке конструкцию
Тогда появляется XML размером 282 Мб
Обнаружил следующее — скорее всего это глюк процедуры ВыгрузитьЖурналРегистрации
Когда просматриваю журнал регистрации через сервис — журнал регистрации, вижу записи за период 01.03.09 — 31.03.09, по если посмотреть в XML после выгрузки процедурой
то в середине XML наткнулся на следующее:
Одна запись за 2008-04-16, а следующая запись за 2009-08-26. и дальше журнал идет с 2009-08-26 по сегодняшнюю дату.
Вопрос №1 — что бы это могло быть
Вопрос №2 — как это можно исправить.
Данные то есть в журнале. Я их вижу.
А журналы у Вас не архивируются регулярно?
(5) журналы архивируются.
Но не в этом дело, как я понимаю.
Журнал регистрации показывает данные, а ВыгрузкаЖурналаРегистрации их не выгружает.
Спрашивается, откуда Журнал регистрации берет данные, и почему эти данные не видит ВыгрузкаЖурналаРегистрации.
А что будет если зайти в Журнал регистрации и там сохранить как xml-файл? Тоже часть данных выпадает?
(7) Происходит нечто странное картинки по шагам.




1. Задаю интервал данных
2. Получаю результат
3. Пытаюсь получить табличный документ
4. Получаю табличный документ, но он оказывается пустым
5. И отбор тоже оказывается пустым. А ведь только что был.
(8) к сожалению, ссылки не открылись. Может действительно что-то связано с архивированием журнала (5)? Март у Вас не выгружен в архивный файл? У нас журнал не архивируется и все хорошо 🙂
(9).
В прикрепленных файлах картинки
И вот еще
Собственно говоря хотелось уменьшить архив журнала регистрации (там уже 300 мб).
И для этого предполагалось выгрузить записи помесячно в xml, а потом убрать старые логи.
(10), (11) интересно…
(12) XML по-любому будет занимать больше места чем сам журнал регистрации, так что мне кажется логичнее просто скопировать журнал в какое-то файловое хранилище. Оттуда XML можно получить этой же обработкой, а дальше закинуть в отчет
кстати (12) у нас журнал регистрации 6 Гб )))
(13)
Не понимаю я что-то. Данные есть, но выгрузить их нельзя.
Предполагается, что данные будут хранится в xml по месяцам, и оттуда их читать.
А вот выгрузить я и не могу.
Может есть что-то, чем можно напрямую log файлы читать?
(15) помясячно не обязательно выгружать данные в XML. можно и стандартными средствами выгружать журнал и читать стандартными средствами
(16) Вот выгрузка стандартными средствами и не работает.
За попытку помочь огромное спасибо и «+»
(17) а почему бы просто не копировать журнал регистрации? в другое место, где нет проблем с дисковым простанством?
При открытии обработки выдает:
{Форма.Форма.Форма(3,7)}: Процедура или функция с указанным именем не определена (ЗначениеНеЗаполнено)
Если <<?>>ЗначениеНеЗаполнено(ВыходнойФайл) Тогда
Платформа:8.1.16; конфигурация:УПП 1.2.34
Спасибо!!! Очень здорово 😀
+ не глядя, просто за развитие тямы, актуально
Коллеги, а с какими объемами вся эта шняга может работать? ну, в гигабайтах
(22) выгрузке все равно на объем. Лишь бы потом консоль переварила многогигабайтную XML-ку 🙂
(23) «выгрузке все равно на объем»
сомневаюсь я
(24) Ну не знаю. Конкретно с журналом регистрации при многогигабайтных XML-ках не работал. Но распределенная база спокойно генерирует файлы по 20 Гб. Думаю и тут платформа справится
Реально сейчас:
на входе база 7 «настроенная» комплексная, где-то с начала века
лог — с 01.07.09, размер 1,5 мг
загружаю лог в базу из одного справочника на 8.1, локально, без скл
начинаются траблы по нехватке
лин, в 26 наврал, размер лога, щас уточню
419 MB (440 381 371 bytes)
Идея была такая:
берем семерошный дог, запихиваем его в 8.1 базу, и там как хотим, строим отчеты.
всё хорошо, только в файловом варианте 8.1 все настолько тормозит, что хоть нах всё
ну, блин, и время загрузки тож великовато
(26),(27),(28) Так проблемы на этапе выгрузки или загрузки? При загрузке думаю легко упереться в ограничение 32-битной системы 🙁
за что 8.1 обделяете? 🙁
(30) Извините 😳 уже сконвертировал в 8.2
пришлось «сконвертировать» вручную в 8.1. работает
Как то не так сработала у меня
даешь 10 центов)
(34) подробности в студию! а (35) не понял
Спасибо, удобная вещь.
А почему в Консоль анализа журнала регистрации не все поля выдает? Это может быть потому-что я скачала для 8.0, а использую для 8.2
база 20 гб sql. все висело минут 20 и все благополучно закрылось. само.
(39) lastrain, обработка представляет собой графический интерфейс к процедуре, предлагаемой платформой. Могу предположить, что есть какие-то повреждения журнала регистрации и платформа не может корректно их отработать
Честно говоря не очень поноравился функционал. Попользовался всего один раз больше не пригодилась
Спасибо за обработку, только консоль анализа журнала регистрации мне доверия не внушает..т
(43) Ольга_tmp, Всегда можно написать свою с блэкджеком и … выложить сюда на пользу общественности
(44) я думаю что шикарен вариант с блэкджеком и…все таки думаю что моя лень не позволит мне сотворить достойный вариант
Намного быстрее отрабатывает обработка, удобно. Спасибо! Под себя немного поправила, под свои задачи
Обработка очень полезная
есть один вопрос, как сделать так что бы в колонке данные были данные как и в Журнале Регистрации?
или же эти данные выгружаются только в ХМЛ а в отчет не попадают?
Спасибо большое за обработку!!! Классная штука и работает быстро, нужная вещь при просмотре изменений чего либо 🙂
Намного быстрее отрабатывает и были «косяки» в журнале регистрации, она все проблемы решила.
Поставил плюс за наводку на «консоль анализа».
Файл — «Сохранить копию» и не надо никакой обработки.