<?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='\
Пусть будет.
а что только 7.7? разве ВК под 8х не взлетит?
(2)
Михаил (tango).
А разве в 8.х еще не сделана такая возможность на уровне платформы?
Технологии в ней уже новые… 🙂
Внешняя компонента только для одного — для перехвата нажатии одной единственной клавиши? Как-то не кошерно это 🙂
(4)
http://dev.1tsm.ru/project/110
Ваня (zk96).
Вот есть ВК, где не «только для одного»:
Есть еще масса ВК, где нет именно этого — «одного». 😉
То, что человек написал свою внешнюю компоненту — это очень хорошо, за это плюс. Достаточно одинэсников которые понятия не имеют, как это сделать.
Но загружать компоненту только ради ОДНОГО действия?
Я использую для блокировки Esc FormEx.
P.S. Эо все сугубо мое личное мнение.
(6)
http://infostart.ru/public/15211/
Ваня (zk96).
Я напрягал Аркадия этой темой, для вставки «методики» в «кишки» вот этой разработки:
Отлаживался на данной DLL-ке. Решил, потом, еще и оформить её отдельной компонентой. Оформил… 😉
Для собственного интереса — проверьте блокировку (перехват) клавиши Esc в FormEx.
Лет пять-сЭм тому назад, у меня этого не получилось для приведенного примера из данной публикации… 😉
Зачем проверять, я ИСПОЛЬЗУЮ это. Обрабатываю событие глобальника ПриНажатииКнопкиКлавиатуры и если установлен флаг БлокироватьESCAPE, то устанавливаю ФСО в ноль.
Что-то не понятное написал.Лучше приведу код в глобальном модуле(при загруженом 1CPP и FormEx):
Процедура ПриНажатииКнопкиКлавиатуры(КонтекстФормы,КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО)
Клавиатура = СоздатьОбъект(«1cpp.Клавиатура»);
Если (Клавиатура.VK_ESCAPE = КодКлавиши)и(БлокироватьESCAPE = 1) Тогда
ФСО = 0;
КонецЕсли;
КонецПроцедуры
БлокироватьESCAPE — это экспортная переменная
P.S. Лично у меня это используется в классе-перехватчике.
(9)
Ваня (zk96).
Проверил. Да — ловит FormEx клавишу.
Видимо, ТОГДА у меня руки и голова были кривее чем сейчас.
Но, т.к. я не использую FormEx и задача была не совсем в написании данной ВК, то немного себя оправдаю. Думаю, пусть эта ВК лежит на сайте — может кто еще не использует FormEx… 😉
(9)
Ваня (zk96).
Эх. Зацепила меня «проблема» собственной «криворукости» в FormEx. 😉
Суть нашего диалога похожа на: «Чего вы мучаетесь в «семерке»? Это ВСЁ в «восьмерке» уже есть».
Т.е. ВАША «жизнь» начинается с текущей точки времени. А прошлой жизни других людей — для ВАС не существует.
Мои пользователи начали давить на клавишу Esc в районе 2000 года. Тогда мне не хватило мозгов сделать перехват клавиши в ВК — не получилось. Пришлось придумать и реализовать в срочном порядке, ровным слоем, во всей конфигурации «логическое отслеживание» нажатия. Вроде, тогда еще не было FormEx-а? 😉 А с появлением этой разработки, я попробовал её. Система стала сильно зыбкой, даже и не в вопросе перехвата (блокировки) — до этого, просто, и дело не дошло. Отказался. В районе 2005 года попробовал еще раз. Перехват (блокировка) клавиши, как Вы написали в (9) сообщении, НЕ работал.
А т.к. меня мало волновала «внешняя форма» моей системе, то я больше и не возвращался к попыткам использовать FormEx. Т.к. ВСЁ, что могла мне дать эта разработка, было давно реализовано штатными средствами. Да и задачи были совсем другие: отказ от монопольных (регламентных) работ, обеспечение устойчивой работы системы в режиме 24х7 и т.д. Т.е. мы занимались не «вершками», а «корешками». 😉
Я нашел ТУ версию FormEx-а. Могу выслать… 🙂
Ну, а главное написано в (7) сообщении — про цели написания перехвата (блокировки).
Для блокировки эскейпа использовал какую-то другую, не формекс, ВК. работала нормально.
(9),(10)
Мужики, вы тут такие умные, а мы с Ерохой дураки, не проверили.
А теперь попробуйте вот так:
Процедура Сформировать()
До=1000000;
Для А=1 По До Цикл
Состояние(«»+А+ «из «+До);
КонецЦикла;
КонецПроцедуры
Процедура ПриНажатииКнопкиКлавиатуры(КодКлавиши, Alt, Shift, Ctrl, Символ, ФСО)
Сообщить(«Нажата «+КодКлавиши);
// вообще все блокируем
ФСО=0;
КонецПроцедуры
Открываем обработку, жмем Esc — все класс!, пишет, что нажата, не обрабатывает.
Жмем Сформировать, уходим в цикл. Жмем Ecs — получаем, что на картинке.
Насколько помню, ИМЕННО О ЦИКЛЕ вопрос стоял, а не ВООБЩЕ
А теперь для тех, кто в танке, поясню:
MiracleV8
ФСО обрабатывется в самой 1С, т.е. надо чтобы до 1С дошло событие нажатия.
Когда 1С в цикле — ни хрена до нее не дойдет.
Выход один — этот самый ФСО ставить прямо в call-back хука, что и сделано в методе
DisableKey(КодКлавиши)
И, надеюсь, в (0).
P.S. Справедливости ради надо отметить, что глобальная срабатывает всегда (ГМ)
Процедура ПриНажатииКнопкиКлавиатуры(Конт,КодКлавиши, Alt, Shift, Ctrl, Символ, ФСО)
Сообщить(«Нажата «+КодКлавиши);
Если КодКлавиши=27 Тогда
ФСО=0;
КонецЕсли;
КонецПроцедуры
Но тогда будем иметь либо блокировку Esc всегда, либо заводить еще какую-то глобальную переменную и в зависимости от нее этот ФСО менять.
(14) Abadonna, Вы убедились, что в FormEx перехват ESCAPE работает. Лично я испоьзую его. Выше написал как.
Каждый в праве принимать решение сам как ему это делать.
(11) в 2005 году я писал на другом языке и 1С не использовал. Но в 2008 перехват работал.
Еще раз повторюсь, Каждый в праве принимать решение сам как ему это делать.
Можо увидеть по скачиваниям, если скачали несколько человек, не пожалели свои $money, значит Ваша компонента
полезна и кому-то облегчила жизнь.
P.S. Интересный получился диспут 🙂
С Рождеством Христовым!!!
(15)
С небольшим нюансом: в 7.7 и только 😉
(16) Abadonna,
Не понял Ваше замечание, ведь эта тема называется «Блокировка клавиши Esc («Прервать выполнение…?») в «1С:Предприятие 7.7″ »
Здест ведь мы говорили ТОЛЬКО о 7.7. Или нет?
(17) Думаешь я название темы смотрел? :))))
(12)
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=925
Сергей.
Использовал? Т.е. теперь — FormEx.?
Я тоЖ использовал:
Но, т.к. тогда был «зверинец» с версиями ОС-а, то имел глюки. Отказался от этой ВК.
(15)
Ваня (zk96).
Вы написали: «значит Ваша компонента полезна и кому-то облегчила жизнь. «(с)
Она, даже, и мне бесполезна и не облегчит жизнь.
Вы только начали в 2008 году работать с 1С, а я в этом же году уже закончил… :-))))))))
(0) (6) Как-то давно-давно использовал для этих целей
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=925
Показать
До сих пор на винте валяется на всякий случай.
Не заметил, уже говорили про эту ВК. Впрочем глюков у меня с ней не было, свои задача она выполняла.
(20)
Сергей (Поручик).
См. (19) сообщение. Ссылки полностью совпадают. 😉
А суть моих «изысканий» описана в (7) сообщении (первые три строчки).
(21)
Пока писал (22) появилось (21) сообщение.
Тогда, можно читать в (22) сообщении только последнюю строчку… 🙂