<?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) Не тестировал в таком режиме, но по идее, т.к. это расширение, то и на командную строку это должно подействовать. Скиньте синтаксис своей командной строки, могу проверить.
«C:Program Files1cv8common1cestart.exe» ENTERPRISE /S»192.168.1.81UP» /N»Admin» /P»Admin» /DisableStartupMessages /Execute «***.epf»
Воспользоваться документацией не предлагать? см.https://its.1c.ru/db/v8315doc#bookmark:dev:TI000001873 пункт 7.10.2
(4) работает и для (3)
(4) Не предлагать) Даже при выключенной защите от опасных действий предупреждение безопасности выдается пользователю
(6) не надо путать предупреждение БСП и платформы. Для (3), например, ваш способ точно не подойдет.
(7) Именно, что не надо путать. Публикация служит для отключения предупреждений БСП, а Вы мне предлагаете отключение предупреждений платформы.
Отключать предупреждения безопасности это плохо. Они предостерегают от опасных действий. Это тоже самое, что отключить UAC в виндовс. Это плохо само по себе и рекомендовать такое кому-либо я считаю нельзя.
Никто не застрахован от халатности, из-за которой можно случайно выбрать не то что хотели. Предупреждение защищает и от таких случаем, т.к. останавливает процесс и дает возможность прочитать что может произойти.
(9) после десятого клика на «продолжить» он будет уже делаться мимо мозга. Вообще эта так называемая «защита» должна была остановиться на вынесение права на интерактивное открытие в отдельную роль. В формах можно бы оставить как текст (не требующий клика)
(10) Согласен, так было бы гораздо удобнее, чем сотни раз прощёлкивать ничего, кроме раздражения, не вызывающее предупреждение.
(4) Всё это. естественно, пробовал. Но предупреждение появляется после внесения изменений в запускаемую обработку. После первого появления предупреждения и нажатия на кнопку «Продолжить» безопасность затихает и обработка запускается без предупреждений до следующей корректировки.
Т.к. обработка запускается в дебрях серверов куда доступ по RDP для нажатия кнопки «Продолжить» сильно затруднён, то расширение автора сильно заинтересовало.
(12) Проблема ясна. Расширение не поможет, а вот рекомендация (4) — то, что надо. Это предупреждение платформы, и расширение его не перехватывает.
(9) У нас программисты написали скрипт для нажатия на «Продолжить». Безопасность должна быть разумной, а не заставляющей писать «костыли» для её обхода.
(13) Жаль. Подумал — вот он, «грааль». На увы ((
Рекомендации (4) пробовали во всех видах, но ситуацию в (12) победить не удалось.
(12)
Странно. Если все сделать правильно — то платформенное предупреждение не вылезает. Единственное — при настройке через conf файл — надо делать в том месте, где это действие выполняется, а чтобы наверняка — и на клиенте и на сервере :).
(14) Есть форма БСП для администрирования расширения. Она нужна для решения проблем с продуктивом, когда нужно подключить или отключить что-то в частном случае.
Если ведется какого-либо рода разработка, и этот процесс поставлен и в ходе сборки нужно подготовить базу с расширениями, то можно воспользоваться установкой расширений пакетным режимом и это будет правильно.
Потому не надо писать костыльные кнопконажималки, надо написать простенький скрипт на питоне, который поднимет конфигуратор в режиме агента, подключается по нему через ssh и выполнит пару команд установки расширений и назначению свойств расширений.
Пример того как поднимать режим агента можно всегда найти на гитхабе, например воспользоваться моим петомhttps://github.com/zeegin/1c-ssh-agent-sample
А команды ssh управления конфигуратором в режиме агента можно смотреть в официальной документацииhttps://its.1c.ru/db/v8315doc#bookmark:adm:TI000000738
(16)
питонеonescriptисправил 🙂
(18) это все офтоп, я предпочитаю питон, потому что там большее коммунити и потому что решаемые им задачи не замыкаются на 1с сообществе, вы можете использовать то, что вам больше нравится или то, что вы лучше знаете.