<?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='\
*.lck никак не может достоверно указать на наличие юзверя в базе..
це же аксиома.
(1) Год работает. Ошибок не было.
(2) Брехня.. При аварийном завершении 1с-ины файлик остается — а вот юзверя в базе ужо нет.
А ты программку читал? Почитай. Узнаешь, почему не было ошибок.
PS. Брешут собаки.
(4) программу не смотрел, просто вижу чего написано в аннотации.
+5 посмотрел, так еще можно, а вот топик тогда поправь.
последнийСимв = глНайтиПоследнийСимвол<<?>>(стрКат, «»);
{КТО.ERT(192)}: Функция не обнаружена (глНайтиПоследнийСимвол)
тБазы.Префикс = спрФирмы.ПрефиксНомера;
{КТО.ERT(215)}: Поле агрегатного объекта не обнаружено (ПрефиксНомера)
последнийСимв = глНайтиПоследнийСимвол<<?>>(стрКат, «»);
{D:DOWNLOADS1СKTO RABOTAET.ERT(192)}: Функция не обнаружена (глНайтиПоследнийСимвол)
(6) В топике написал чё делает программа.
(7, 9) Исправил. Забыл, что эта процедурка у меня в глобальнике. Пардон.
(8) ПрефиксНомера — стандартный реквизит справочника Фирмы, его необходимо заполнять если используется разделитель учета. (на всякий случай: у меня это строка 2 смв.)
В (10) смайлик заменил цифру 8.
+(9) упс… я не сразу увидел (7) коммент.
Закладка была открыта еще раньше.
Файл *.lck не создается, если у пользователей не прописана рабочая папка — тогда пользователь может входить в 1С несколько раз, а настройки используются глобальные. Понимаю, что это не совсем корректно, но сталкивался с таким не раз …
(3) — навеяло:
— Доктор, куда лучше морфий колоть?!!
— А что случилось?!
— Ну у нас тут одному голову оторвало…
(13) Когда писалась программа, в рабочей конфигурации у всех пользователей была своя папка, и эта папка находилась (и находится) в подпапке Users каталога ИО. Так что приведенный Вами случай для меня был не актуален. Программу писал для себя, а не как что-то универсальное.
(15) ежу понятно, что все разработки изначально делаются под конкретные нужды. мой комментарий был написан к тому, вдруг кто знает иной способ проверки кроме *.lck, т.к. сама идея монитора очень актуальна.
(15) А сделать универсальную слабо? Не заточенную под конкретную ситуацию. С возможность выбора перметров.
А то код очень сильно переписывать надо.
(17) Кто будет оплачивать? 😀
(18) А чувство гордости за хорошо выполненную работу ничего не стоит?
(19) Мне есть чем гордиться и без ненужных трудозатрат.
(20) Ну, теперь моя душа точно спокойна 🙂
(13) насчет не совсем корректно без рабочих каталогов работать, если бы это было не корректно 1С, думаю убрала такую возможность, но… приведу один пример из жизни, зачем необходимо заходить несколько раз под одним пользователем: Челу поставили непральный оклад с января по август считалась завышенная зарплата, расчетчица чего то там нахимичила с ручными исправлениями и пришлось анализировать расчетки за период — у меня есть такая обработка — на экране множество последовательностей расчеток (в различных положениях шаловливых ручек), так вот просто удобно и красиво (потому что быстро и вовремя хотя успело таки завонять) получилось без рабочих каталогов (мораль тогда была правильно использовать документ исправление а не пользоваться внешними штучками пытаясь подставить программиста). И если бы я знал что можно высосать из пальца то привел бы еще несколько таких примеров (камень в огород Altaira777 —http://www.infostart.ru/public/22098/ (15)). 😀
(22) А в твой огород не только я камень кидал 🙂
И комменты и оценка той обработки очень интересны
Например, 12 или 27 коммент
Цитирую:
27. Ёпрст 03.09.2009 17:22:06
Мда… А если еще и сервис-Параметры поглядеть, так вообще страшные тайны автору откроются..
😉
Слушай Ёпрста! © Че
Я занимался боксом и знаю что такое брэк… Очень прошу вас лично ко мне не обращаться и тем более на ты ❗
(24) Извиняюсь за «ты». Сгоряча написал.
И, в свою очередь, я попрошу Вас не кидать камни в мой огород.
Не стану более если вы мну научите как с рабочим каталогом несколько раз зайти под одним пользователем, это к сабжу в части (13) относится.
(26) Условия ставите? 😀
вы же говорили, что знаете что такое «брек»
вам же Арчибальд уже сказал. Да и мне тоже, если честно 🙂
Но я вас не трогал.
P.S. То, что слова «Вы», «Вам», «Вас» нужно писать с большой буквы я знаю.
Умышленно написал их с маленькой, что бы не смутить try2007.
(23 — 27) Надеюсь, булыжники уже закончились.
(28) сорри за офф-топы и флейм
Но Вы напрасно написали не (22 — 27). Ведь булыжник был взят именно в 22 комменте. Причем, в прямом смысле 🙂
> камень в огород Altaira777
В качестве моральной компенсации сниму-ка я свой минус…
(29) Да пожалуйста! Мне всегда было интересно послушать диалог двух умных людей (ни капли иронии!).
Да и за «плюсик» от Советника Администрации все-таки надо сказать СПАИСБО.