<?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='\
Может в следующий раз предварительно в Ворде набрать текст. Просто неприятно читать.
а что не так
У меня срезка базы любой длинны занимает от силы пол часа.
Будет скучно,почитай:
http://infostart.ru/community/groups/group/18/forum/message/7651/53851/#message53851
любой длинннннннны
Но шесть часов!!!
Я не понял что за чудесные решения, товарисчи?
(4)
>>LenaTorpeda 24.12.2008 15:12:03
>>Будет скучно,почитай:
Почитал… в шоке… То ли я такой тупой, то ли что то недопонимаю. А у вас партионный учет не ведется, переносите все справочники… а как же документы? где они?
(0) >> и удаляю все документы до указанной даты буквально за 20 минут
Так надо удалять не документы до указанной даты а документам по которым не висят долги. А в принципе могут существовать документы любой даты.
P.S. Типовую свертку неглупые люди писали, может быть не совсем оптимально.
(7) Документацию ведет бухгалтерия. Отдельно .Магазинов в одной фирме -12 ,а бухгалтерия одна.Учет по бухгалтерии суммовой,так,что им абсолютно безразлично сколько висит в кредите поставщика.
Кредит поставщика,я имела ввиду в ТиС
Ну и напоследок.Это работет !!!! Попробуй и тебе понравится.:)
ндя.. а регистр «реализованный товар»..? и прочие «партионные регистры»?
все эти решения хороши тем что они — частные.. а типовая свертка — универсальная…
ну не знаю, если у вас ведется партионный учет + у меня не совсем типовая конфигурация с регистром партий весов 1.9 гига, и в эти 6 часов входит очистка базы от документов, исправление базы. Так, заявление что это очень долго не совсем корректно. А что касается типовые сверки, она создает слишком много документов, а всего то требуется выгрузить итоги по регистрам и сделать движении дублирующие эти итоги и все.
(11) Подскажи,пожалуйста,зачем тебе регистр «реализованный товар», например за позапрошлый год? Тем более что все данные остаются в «старой» базе. И оператор ,если уж очень потребуется,вседа ее может открыть и сделать отчет.
Буква «Т» на консоли западает, что ли?
(14) Шоб було! Как говорится: запас карман не тянет.. 😉
Я, например, вообще не сторонник обрезок баз если этого только не требуется ввиду того что железо перастало справляться…
(10) На базах моих клиентов такое точно не сработает. Если они не будут знать остатки в разрезе поступления они меня загрызут. Да и полный бред в базе будет.
Вот это посмотрите:http://infostart.ru/projects/1538/
док «Архив» — универсальный
если пометка на удаление доков прошлого периода на дбф — откатить БухИтоги до первого документа и помечать пачками через
НачатьТранзакцию()
—
ЗафиксироватьТранзакцию()
и будет вам щастие))
Скрипт, приведенный в статье, гарантированно наплодит битых ссылок в базе.
Он удаляет записи в таблице журнала документов и во всех таблицах где есть имя колонки ‘IDDOC’.
Фактически это таблицы шапки документа, табличной части документа и таблицы движений по «регистрам» (в общем смысле включая проводки, историю реквизитов справочников и записи ЖР).
При этом не учитывается,
что ссылки на документ могут быть в других таблицах и в других колонках.
Поэтому после делается тестирование-исправление.
Но у меня на моих размерах оно делается где-то двое суток!!!
Меня такое щастье как-то не очень устраивает!