<?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='\
Круто! 🙂
(1) Как всегда ;))
Страстно !
Монстр! (в хорошем смысле этого слова)
Не знаю как кому, а мне в разработках Ёпрста(!) код смотреть гораздо интереснее 🙂
Много нового и полезного можно узнать.
А ВК используются? Еще из прикольных пакмэн был, бегал кушал точки по лабиринтам, вдруг когда накатит написать.
(6) Formex обязателен, класс привязок (1С++) по желанию.
(0) Как элементы формы посмотреть?
(7) Небось пустой слой стоит для элементов формы;) В конфигураторе по крайней мере в меню «Диалог->Настройка порядка обхода…» можно увидеть список элементов формы с типами и идетификаторами, если галка «Автомат. порядок обхода» снята в том же меню.
(8) это понятно, но я до сих пор не понял, как их посмотреть (поменять слой). Понимаю что можно компаунд поправить ручками, но знаний не хватает. Может есть более штатный способ?
Кто уже прошел все уровни, прошу сюда:http://infostart.ru/projects/6081/
🙂
(0) Надеюсь автор не против?
(9) ну не знаю… текстовый файл + Ctrl+H куды уж проще…
А все контролы создаются обработкой — на выходе обычный текст, далее, дело техники.
Ну не руками же 200-300 атрибутов рисовать 🙂
(11) нет..
(0) Подправь, плиз, строчку
СоздатьУровень(Мин(НомерУровня,3),НомерУровня);
а то дальше третьего уровня никак не могу пройти 🙁
(13) поправил..
Круто! Ёпрст истинный Гений!
Прикольно!
сделай еще чтобы если мышь за пределами формы НО ДВИЖЕТСЯ — чтобы ракетка тоже двигалась! а то ракетка не двигается пока курсор в форму не попадет! и даешь полноэкранный режим!!
А почему нет решалки от Арчибальда? Т.е. за какое минимальное число ходов можно выбить весь уровень ? (базируемся только на правилах геометрической оптики) — вот это было бы интересно!
Прикольно!
Есть небольшой нюанс, когда мячик начинает двигать ровно по-горизонтали, то он так может двигаться до бесконечности.
(18) Есть такое, пока лечится изменением размеров формы, если есть Общие.Форма.Привязки..
поправлю попозжее.
(20) Кстати, а где призы, который выбиваются из кирпичей? Замедлитель, ускоритель, жизнь, смерть, расширитель, уменьшитель, прилипалка и т.д вплоть до бомбы и пулемета. Еще есть кирпичи повышенной прочности, который разбиваются после двух, трех ударов, на них еще либо счетчик или изображение меняется.
(20) да можно всё прилепить… Время только..
Да и с «Рикошетом» бодаться тяжело..
А вот кирпичи (количество ударов задается) и так присутствуют уже..
+21 Вот хотя-бы пару «шариков» , можно приклеить.. как бонус.
Еще бы кнопку выхода из игры сделать. Пользователям без нее неудобно. 🙂
Вау, круто 🙂
(24) Где ты был 4 года ?
:))
(25) жил своим умом, а тут понадобился файло с инфостарта, вот зашел.
(26) ну ясно.. просто поделке 4 года ужо
🙂