<?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='\
Единственное уточнение, которое хотелось бы доьавить касается
Output=обмен.log
в файлике выгрузка.pac:
желательно прописать путь к нему полностью, например Output=с:какая-либо_папкаобмен.log, в противном случае можно столкнуться с проблемой очень долгой загрузки данных в пакетном режиме (на загрузку ОДНОГО объекта будет тратиться до 10 секунд). Это связано с тем, что система будет искать этот файл. Еще одним из решений является отказ от веления лога (исключить эту строку), но нужно ли это, когда проще и правильнее прописать нормальный путь?
NikitaN, спасибо, добавлю твое замечание в статью
Кстати, еще маленький коммент:
у меня, напротив, настроен исключительно Outlook Express на всех компах, работающих и с центральной ИБ и с периферийными ИБ (13 периферийных ИБ). Тьфу-тьфу, но никаких проблем с этим нет. Имхо полноценный Outlook только место и ресурсы жрет в большей степени,а эффект тот же.
(3) Опят же полный Outlook, это не стандарные средства, а дополнительные и кстате дорогие
Ты, я думаю, знаеш, что Outlook Express не отражается в настройках УРБД (рис 2), а те кто первый раз туда залезет может растеряться 🙁
Предпочитаю фиксированный режим имени файла и осмысленные коды ИБ.
Пример
ZNT — центральная
M01 — магазин №1
KNT — контора и т.д.
имена файлов фиксированные и тоже осмысленные
ZNT_M01.zip — выгрузка из центральной в магазин №1
M01_ZNT.zip — выгрузка из магазина в центральную… имхо, человечнее это как-то 🙂
Да и вообще предпочитаю почте FTP протокол (но это уже не стандартное с использованием ВК и других настроек)
P.S. Могу предложить глянуть разработку
Хороший мастер есть здесь
Помогает автоматизировать автообмен УРБД, а также другие фишки, в т.ч. автоматизирует резервное копирование баз и все, что предусматривает пакетный режим 1С Предприятия.
Есть хороший обменник, УРБД-Мастер. Стоит кажется 2 тыр на неограниченное количество баз. Решает все проблемы обмена по УРБД на раз два.
здесь ссылка на мастер, который не работает, все настроил, конфигуратор запускает но ничего не делает, ошибок не показывает!