<?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='\
Давно пользуюсь таким способом — решил поделиться с общественностью
сразу видно профессионала по коду! завидую
возьму методику на заметочку
(4) спасибо
много интересных задач позволяют получить широкие познания
альтруизм позволяет помогать новичкам и товарищам в решении интересных задач
Однажды 30 минут потраченные на объяснение по телефону как зарегистрировать внешнюю печатную форму или ОЗТЧ (точно уже не помню), причем с Параметрами_Авторегистрации сподвигли на этот способ, который теперь используется во всех моих ВПФ и ОЗТЧ
Кстати, в некоторых новых обработках, которые используют документы практически всех типовых конфигураций вначале проверял присутствие в конфигурации необходимых метаданных (вместо имени конфигурации)
(4)
> вначале проверял присутствие в конфигурации необходимых метаданных
хех, у меня также возникла эта мысль вчера, после прочтения твоего поста
Также товарищи, в качестве комментария можно указывать число (или релиз как типовые конфиги — например, 1.0.1, 1.0.5, преобразовывать его в число 101, 105 и сравнивая — определить, данная версия обработки более свежая чем используемая или нет)
Респект, буду пользоваться с удовольствием))
Оченно пользительный материал. Спасибо.
видео-пример лежит также тут:http://files.mail.ru/BDNTCN
Респект, буду пользоваться с удовольствием)) много интересных задач позволяют получить широкие познания
альтруизм позволяет помогать новичкам и товарищам в решении интересных задач
огромное спасибо за видеоурок, но с правильностью набора текста Вам надо что то делать! Видео можно было бы ужать процентов на 30.. ))))
(11) это НЕ коммерческий продукт, itt
Спасибо, большое! Очень ценная вещь!
пожалуйста! надеюсь на следующей неделе сделать пример для подсистемы БСП
Спасибо за шаблон! Уже прикручиваем!
(15) На здоровье ! 🙂
(1)
код к чему прилагается?
(17) frc, код формы, назначенной основной для внешней печатной формы. иногда лениво скачивать, чтобы просмотреть фишки обработки, а так — всё понятно
(18)
а, ну так пометили бы в статье об этом 🙂
это действительно удобно.
спасибо большое, особенно за видео!просто и понятно, пригодилосьться на практике!
(20) NazarovV, пользуйтесь, коллеги. Присылайте запросы на уже готовые решения — вдруг найдется?
(21) ну я вот что сделал! правда не думаю что кому то будет полезно.. специфично сказать — ничего не сказать!http://infostart.ru/public/157142/
Хочу поблагодарить за профессиональный подход к делу )) Сам все время своих коллег заставляю делать все через внешки, как печатные формы, так и всякие довески. Материал хорошо изложен, теперь буду использовать его для примера. Отдельно спасибо за механизм авторегистрации, самому не было времени разбирать типовое решение.
(23) Zerkon, Спасибо за приятные слова!