<?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.6.16.132 при попытке запуска толстого клиента обычного приложения вываливается десяток ошибок и продолжить работу не возможно.
(3)Извиняюсь, все запустилось после переноса базы из SQL в файловую. Однако в описании не сказано, что так нужно делать
Подскажите, пожалуйста, данную свертку можно делать только на начало года или на любую дату?
(5) хоть на дату рождения Христа,
кончено же на любую удобную для вас дату, на начало года делают для того чтобы была статистика за полный год
(0)
маневр сложный у вас — вот здесь реально быстрый способ удаленияhttps://infostart.ru/public/1033813/
велкам!
Согласен что удаление долгое, но это не самое долгое. Для меня «долгое» — это предварительный анализ базы, подготовительные работы, тестирование на копии проведения свертки. А вот удаление доков — уже третья стадия, которую можно и через некоторое время провести в фоновом режиме — документы распроведены, помечены на удаление, лежат в закрытом периоде.
Если цель свертки уменьшить размер базы, то это одна задача.
Если цель свертки — привести в порядок остатки и начать с чистого листа, а заодно почистить прошлый период, то решать надо по другому, и акценты ставить на переносимые данные, а не на удаление доков.
(0) еще дополню, что при свертке НЕ НУЖНО сворачивать ВСЕ РЕГИСТРЫ
(9) кому как
(8)
велкам!
ага, без проверки ссылочной целостности, посмотрел бы я на результат такой свертки…
(8)
блин, как же я мог забыть об этом, а еще забыл написать как родится, вырасти, стать специалистом в 1с, и остаться при этом Человеком.
Публикация называется — Обработка свертки УНФ.
(11)
я проверяю ссылки и не удаляю документы, которые есть в остатках, остальные документы удаляю.
быстрее, чем у вас. потом делаю тестирование и сжатие базы, как и все. посмотрите код и описание моей обработки — вам станет понятнее.
(11)
Публикация называется — Обработка свертки УНФ.
в рамках задачи по свертке базы — я имел в виду — самое долгое только в рамках задачи по свертке — это подготовка, тестирование на копии, отладка, придумывание концепции.
остальное из вашей жизни — не нужно упоминать. обижаться на меня тоже не нужно.
(12)
руками проверяете, сотни, тысячи ссылок?
(12)
даже и не думал
(13)
я понял вас — вы не знаете как это делать…
руками конечно не смотрю — в запросе все документы из остатков тянутся — получаю список-1.
удаляю все помеченные на удаление документы, кроме списка-1 из запроса.
можете скачать обработку и изучить алгоритм.
(14) скорость не замеряли?
(15) очень быстро для объема базы с документами за три года — может полчаса — может час.
скажу так: я впервые столкнулся с задачей «удаления документов», когда надо было подготовить копию базы без документов и оборотов, но со справочниками номенклатуры и контрагентов… раз столкнулся, два — три…. идет потеря времени — когда ждешь удаления с проверкой ссылочной целостности, клиент переплачивает…. в итоге придумал такой обходной маневр — оставляю все , что нужно, остальное удаляю без проверки. применил этот подход к свертке — учел дополнительно документы в остатках.
(16)спасибо за ликбез
(0), УНФ 1.6, релизы 1.6.16.153, 1.6.17.141 на платформе 8.3.13.1513;
режим файловый, толстый клиент.
Обработка не открывается (!?).
(18)обычное приложение
(19), понял; «обычное приложение» — в этом и есть некая печаль.
(20)в этом есть моя лень, рисовать управляемую форму, работает и ладно
(17) не знаю как у вас, а у нас на Спасибо, принято отвечать Пожалуйста
(9) спасибо кэп
Что делает кнопка Выполнить все и чем она отличается от кнопки Свернуть базу?
(24)обработка создана на базе типовой обработки, погуглите
Так по итогу запускается или нет? Не могу запустить. В толстом клиенте в файловой версии. (1.6.18.117) 8.3.13.1865
(27) в толстом клиенте обычное приложение
(27), прежде, чем запустить толстый клиент, в конфигураторе (Свойства конфигурации) установите «Основной режим запуска» = «Обычное приложение».
(3)
Таким же маневром (флагом Выгружать по ссылке) можно избавится от лишних элементов справочников.
Базу свернул, документы пометил на удаление.
Помогите настроить Выгрузка и загрузка данных XML , не могу разобраться.
Базу свернул, документы пометил на удаление.
Помогите настроить Выгрузка и загрузка данных XML , не могу разобраться.