<?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='\
Действительно простая и реально удобная. Куда приятней, чем пользоваться командной строкой.
А на windows 7 будет работать?
А в терминале? 🙂
очередная «переделка» старых 7-ых решений (см. у меня в профиле). Сделали хотя бы логгирование отосланных сообщений в файл (по ответу нетсенда можно понять доступен юзер или нет) и поддержку быстрого выбора «типовых» сообщений…
.
(3) можно и в терминале…
«net send» это как-то не кошерно 🙂
(6) Написано простая обработка net send — если бы я написал «рассылка сообщений» был бы понятен ваш комментарий, а так это просто лишь бы написать гадость.
(4) я поискал решение рассылки сообщений через net send — не нашел, решил что не помешает. Насчет логов можно подумать. Ответ от net send можно понять по галочкам, которые при доставке сообщения переходят в пустое значение.
(7)
Ваш комментарий, к сожалению, также не понятен:
Смотрю в название — «Простая обработка рассылки сообщений через net send». хмм…
Ну ладно, извините, не буду пререкаться 🙂 обосную мою «гадость»:
1) а) если необходимо рассылать сообщения всем сотрудникам, независимо от того работают они в 1с предприятии или нет, зачем делать это через 1с?
б) если необходимо рассылать сообщения только пользователям 1с почему бы не реализовать средствами 1с?
2) не во всех сетях разрешен net send
3) не во всех ОС есть эта команда
4) есть команда msg
(9)Решение не позиционируется как универсальное средство для всех систем, даже категория изначально была другая( кто то исправил), поэтому считаю ваши претензии необоснованными.
Хорошее решение — просто и элегантно. Видно. кто из пользователей находится в базе.
А net send открывается в групповой политике.
А по поводу «типовых сообщений» — хорошая мысль, можно реализовать…..
(1) А что, WinSent не такая приятная и удобная?
(12) Не такая.
1) Net send уже подключена на всех компьютерах, озадачивать сисадмина установкой программы не надо.
2) Сообщения передавать надо только пользователям 1С
3) Окно сообщения вылетает поверх всех окон, если человек за компьютером, не заметить не возможно.
Минус — только в перспективе — не на всех ОС есть служба.
(13)
пишу прямым текстом: net send убрали, но добавили команду конкретно для этих целей —cmd .
эта команда намного веселей и интересней 😀 , и включать вроде ничего не надо.
если автор переделает под неё, то будет честный плюс 🙂
(4)
Типичный подход «одноэснега»:
— Ваше любимое произведение Огинского?
— Полонез
— Ваш любимый полонез?
-Огинского
Почему корпоративная система сообщений должна быть заточена под 1С, да еще определенной версии?
потому что менеджер/оператор должен РАБОТАТЬ, а не переключаться из приложения в приложение для выполнения требуемых действий…
(16)
Ты еще манагеру сделай возможность вести переговоры по телефону из 1С!
Это, между прочим, его основная работа.
А вот операторы существуют только заевшихся московских конторах, в Расее это менеджеры 😉
P.S. В наш холдинг входит завод КЭМЗ, где рулят конструкторы и ИТР. Им net send в Компас встраивать? 😀
(13) «3) Окно сообщения вылетает поверх всех окон, если человек за компьютером, не заметить не возможно.»
— не нравятся мне кошки…
— вы просто не умеете их готовить.
все настраивается — окошко всплывает в винсенте даже поверх терминальной сессии, если даже сообщение пришло локально. Зато есть общая расылка для всех, для конкретного юзера, для выбранных из списка, история сообщений и много других вкусностей.
(14) cmd конечно чумная вещь. но она по-моему всегда была, разве что в хомке какая-то ущербная. 😉
(18) тьфу ёлке… не «cmd» а msg там должно быть. очепятка 🙂
(19) А вообще-то прикольно через cmd слать сообщения… изврат по высшему разряду 😀
Смех смехом, но есть у меня знакомый, который в упор не признает графическую оболочку — до сих пор шпилит по командной строке.
Помнится качал с infostart’а обработку для 8.1 «Завершение работы пользователей«, но сейчас не могу её найти здесь. Так же может отсылать сообщения, но еще и отключать пользователей в режиме клиент-сервер
внедрил обработку в небольшой фирме: два буха + глав. бух. У них админ запретил аськи. Все довольны. За обработку спасибо! 🙂 всем успехов
Пробовал использовать в терминале, что-то пока не жужжит 🙂
Спасибо. Действительно простая и реально удобная. Куда приятней, чем пользоваться командной строкой