Управление принтерами в терминале




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

13 Comments

  1. vasilykushnir

    Извините, но не допонял. Сначала обрезают права юзеров по самое не балуй, потом накладывают заплатки на Тришкин кафтан… Где логика господа? Хорошо, чтоя и сисадмин и программер в одном лице — и сам хней не страдаю, и юзеры не страдают вместе со мной.

    Reply
  2. vcv

    (1) Смысл в принципе в том, что многие отбирают у пользователей Проводник в терминале. А без Проводника принтерами нельзя управлять. А нужно как минимум выбор принтера по-умолчанию и настройки печати по-умолчанию. Ну и временами открыть принтер и удалить свой документ из очереди.

    Насколько оправдано отбирание Проводника и рабочего стола у пользователей — это уже совсем другой вопрос.

    Reply
  3. vasilykushnir

    (2) 🙂 Вот, вот. — ограничение в правах от ограниченности сисадминов. Как сисадмин «приближенный» к народу, хочу сказать — все эти ограничения чистые понты. Людям надо доверять.

    За саму обработку ничего сказать не могу, хотя склоняюсь больше к плюсу — пожалуй необходима там, где сисадмин=самодур.

    Reply
  4. vcv

    (1) Лично у меня смысл в том, что имею сеть баз, десяток серверов, на которых используется исключительно 1С терминально. Настройкой и безопасностью серверов занимаюсь не я. И оказалось гораздо проще добавить обработку в конфигурацию, чем муссировать с админами вопрос нужен или нет пользователям рабочий стол.

    Reply
  5. vasilykushnir

    (4) Вот за это плюсик и поставил 😀

    Reply
  6. Abadonna

    (2) Воспитание мною господина Кушнира на тему «зачем нужен IT-гестапо?» не прошло даром, плюс он поставил 😀

    а

    что многие отбирают у пользователей Проводник в терминале.

    так и должно быть!!!!!!!!!!!!!

    Reply
  7. vasilykushnir

    (6) Плюс, я кстати, раньше поставил. 😀

    Ибо сама разработка, ее качество никаким боком к маниакальным запретам на все и вся. Она как раз доказывает мое убеждение — цо занадто, то не здраво. В переводе с польского — заставь дурака богу молится, он и харю размочалит в поклонах усердных. Обработка как раз и нужна там, где «гестапируют» сисадмины. Следовательно полезная.

    ЗЫ2: И вообще у меня возникла идея: для данной обработки и ей подобным создать рубрику «Нае.. (в общем -обмани) сисадмина» — хороший программист всегда найдет способ объегорить сисадмина.

    Reply
  8. vcv

    Вот еще бы кто нибудь бы подсказал, как можно разрешить пользователю на сервере терминалов завершать сеансы других пользователей и при этом не дать права на всякое удаленное управление и прочее лишнее. А то временами звонят, просят сеанс пользователя завершить, спать мешают 🙂

    Reply
  9. vasilykushnir

    Обратись к Абадонне — у него есть чумная приблуда ПроцессНах. Если с пьяну не путаю время — пару лет уже у меня крутится (даже забыл начальные установки и настройки — за хорошую программу быстро забываешь, работает — и слава Богу, т.е. Абадонне).

    Reply
  10. vcv

    (9) Это типа вот этого http://infostart.ru/public/16662/ что ли?

    Так вопрос не в том, какую обработку заделать, а в том, как дать (если вообще можно) простому пользователю права на закрытие чужих терминальных сеансов, не давая прав администратора или оператора сервера.

    Reply
  11. vasilykushnir

    (10) Простому пользователю это как бы во «что-то» не упиралось…. — не его это парафия. Но у того же Абадонны есть запуск всякой хни по правами админа.

    Reply
  12. Angeros

    пробовал переделать на 8.1 и нифига не вышло. притом что на 77 все работает.

    на строке

    Пока e.atEnd(0)=0 Цикл

    написал что atEnd незнаком.

    Пришлось коллекцию перебирать обычным для каждого — вкатило… что бы это могло быть?!!

    Reply
  13. vcv

    (12) Обработка сделана по мотивам http://www.forum.mista.ru/topic.php?id=155455

    За код спасибо smaharbA ( http://www.forum.mista.ru/users.php?id=7646 )

    К smaharbA и все вопросы, может он подскажет.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *