<?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='\
URBDMaster + Сеть через VPN + Обмен каждые 5 мин.
Все летает несколько лет — 6 переф. баз.
Конечно с УРБД есть заморочки но они есть всегда при любых вариантах
Да кстати. Для кассовіх документов, что бы соблюсти сквозную нумерацию
На отдельном веб ресурсе лежит база на MySQL. При записи нового документа начер специальную ВК 1С обращается к этой базе и считывает из таблиц последний номер — прибавляет 1 получает новый номер документа и тут же его записывает обратно в эту же таблицу. И так далее… каждая переф. база перед выпиской кассовых доументов обращается на Веб ресурс в инете за номерами. Если инета нет тогда из переф баз звонят в центральную идалее выдача номеров по журналу.
Но все это уже позапрошлый век…..
(1) Я не утверждаю что это единственно верное решение обмена 🙂 к тому же Ваш мастер — платная программа, а мой вариант требует только интеллектуальных вложений.
Главное удобство, с моей точки зрения, в том что обмен происходит независимо от наличия интернета в данный момент времени — DropBox прокачает файл когда будет on-line
Заранее всем спасибо за использование реферала )))
очень интересная разработка, жаль сейчас не могу тестировать, у меня баз 9
как жаль что раньше на статью не наткнулся =( пользуюсь дропбоксом уже давно но для решения данных целей и в голову не приходилось. обычно создавал виртуальную локальную сеть с помощью himachi и создавал общую папку. минус состоял в том что модемы использовались 3g и соединение было не стабильным, а после обновления смертельно долго было ждать пока все данные выгрузятся в обмен. осуществлял я это к тому же не на 7.7, а на 8.2 и фаил для обновления переферийного узла весил порядка 200 мб.
Недавно стал использовать dropbox в обменах, столкнулся со следующей проблемой — если файл обмена очень большой (у меня был 400мб), то на компе где ХР вылетает 1С и дропбокс с ошибкой, когда 1с читает файл обмена, сервер 2008 просто виснет. Сначала не знал, по какой причине виснет, теперь уверен на 100% из-за дропбокса. Думаю может причина в том, что и дропбокс читает файл (синхронизирует) и 1С одновременно, но тогда почему виснет сервер… непонятно, файл обмена 1с не читает. специально закрывал все процессы
Встречал такие ошибки при обмене, лечил переводом обмена на FTP, благо сайт с FTP сейчас практически у каждой конторы. ИМХО FTP пока надежнее DropBox будет.