<?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='\
А еще стоит добавить ведение логов + задания по расписанию. И можно сделать в виде сервиса
(1) с этого момента поподробнее 🙂
(2) Что именно?
(3) ну для чего логи то, что в них писать? И зачем сервисом? Оно и так само умеет запускаться, а на сервер я такое ставить не стану, да и регламентные задания для этого есть. Насчет расписания можно подумать, но сейчас у меня нет поддержки ключей пакетного режима конфигуратора, мне кажется что если уж делать запуск по расписанию, дак именно для пакетного запуска. В общем, я пока сути не догоняю 🙂
как всегда забыл порядок обхода настроить, ща исправим
Исправил
А можешь сделать чтобы группы были, это очень удобно
(7) что ты имеешь ввиду?
в трее нажимаешь а там элементы и группы в группах ещё елементы
(9) подпункты меню сделать конечно можно, только я практической пользы не вижу. Это как: типа у меня есть группа баз например относящиеся к одной организации, и у каждой организации есть еще список только «своих» баз чтоли? Переделывать структуру базы, чтобы список был не линейным, а с подчиненными таблицами. Или просто группировать отдельные базы по какому то признаку и назначать этой группе произвольное имя?
Или я не так понял?
удобная вещь, плюс однозначно
1. Нет возможности просто указать командную строку, на закладке «Ключи», как я понимаю?… Например у меня уже есть инструмент для генерации ком. строки 🙂 и я хочу вставлять готовую, в независимости от поддерживаемых в данный момент ключей.
2. Я думал это возможность повесить запуск конкретных баз на настраиваемые хоткеи 🙂 Например Alt + 1,2,3,4
Иначе в чем смысл? В иконке в трее?… В таком случае, стандартное окно выбора баз, ИМХО, удобнее…
(12)
1. Возможность вручную вводить всю строку специально нет и не планировалось. Можно сказать что был сделан упор на то, чтоб не «светить» пароль. Если у тебя есть инструмент для генерации ком. строки, значит ты и так крут и тебе эта программа точно не пригодится.
2. А если у меня 30 баз, я должен в голове держать все хоткеи? Имхо, ни к чему.
А смысл, по крайней мере для меня, в хоткее и выбора из списка и в шифте при запуске (нажатом или нет). А иконка в трее — это так понт 🙂
(12) Теперь я понял почему ты так отреагировал 🙂
http://infostart.ru/projects/2803/
http://infostart.ru/projects/2514/
ну и т.д.
Как это чувство называется не помню 🙂 Мог бы просто ссылками поделиться, я бы поглядел, я ж не претендую на уникальность решения 🙂
ну я имею ввиду как в стандартно 1с 8, там можно создат группы например файлоые базы и SQL базы ну и т.д.
(15) Дошло, слушай а я реально этими штуками никогда не пользовался 🙂
(15) Это типа если нажать кнопку «Настройка» и поставить галку «Отображать в виде дерева» так?
(14) наверное это чувство называется черной завистью??? )))
Вот так за замечания по делу, чуть завистником не обозвали ))
Мне действительно кажется, что можно для «продвинутых» пользователей добавить возможность подредактировать командную строку непосредственно. А уж возможность закрепить за 2-3-мя часто используемыми базами хоткеи — это само название утилиты велит! )
(18) Люблю не обидчивых людей с чувством юмора 🙂
Будет тебе белка, будет и свисток (С) 🙂
Надо будет на досуге подумать над всеми предложениями.
Может тогда кто-нибудь знает как разобрать слово по составу, ну то есть описание файлика ibases.v8i? А то ничего путнего про него найти не могу и сам не все параметры понимаю чо там к чему.
(18) Я сначала кстати вообще хотел, чтобы все ключи были в отдельной таблице. Т.к. они от версии к версии могут меняться/добавляться/упраздняться, уж ты то должен это знать:), а потом при изменении названия ключа или параметров к ключу просто изменять (и т.д.) их название. Но потом форму динамически красиво нарисовать не получилось, пришлось отказаться в пользу жесткой прошивки. И поэтому чо то мне кажется, что не очень то тогда уж и нужно менять что-то руками, тем более опять же пароли светить!
А насчет запуска по хоткею отдельных баз подумаю
(19) Здесь на ИС есть пример разборки файла ibases.v8i с группировками и т.д.
(20) У меня в «Конструкторе параметров» посмотри как сделано, там и файлик xml отдельный с параметрами есть… )
ЗЫ: Плюс авансом 🙂
(21) ну наверно сделаю потом, но точно не в рабочее время 🙂
(21) Добавил хоткеи на запуск любой базы, правда писал уже ночью, но вроде работает :), попробуй плиз
и еще бару багов нашел до кучи 🙂
Предлагаю вместо окна запуска (CTRL+SHIFT+F12) показывать popup как в трее по центру экрана 😉
Я вообще сделал при нажатии на среднюю кнопку по позиции курсора всплывающее меню — очень удобно. Рекомендую 😉
(26) типа сижу я такой в браузере, нажал на среднюю кнопку и тут любимая 1С? 🙂 Так чтоли?
Конечно 🙂 Нее, можно конечно добавить список приложений, в которых такая фишка работать не будет, но это уж совсем если правильно делать 🙂
(28) Конечно можно, а разве есть что-то такое что нельзя? 🙂 Только нужно ли? Мне лично нет 🙂 По моему и этой функциональности хватает (см название). А по потом получится как в Nero: писали дисковую тулзятину, а написали операционку 🙂
Но предложение то внести можно было попробывать? 🙂
(30) да не, я как бы согласен, это я просто так тупо отмазался 🙂
31) Отмазка принята :))))
(32) Спасибо, а то работать надо 🙂
Посмотри личку, плз
(34) посмотрел