<?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='\
Интересно, но — если ключей еще нет то после создания ключей продолжение процедуры дает ошибку в этой строке(«ОбъектШифрования.FromXmlString(Константы.RSA_ПубличныйКлюч.Получить());» Еще перепутаны в форме с ТЗ (пользователи) = Адресат = Элементы.Пользователи.ТекущиеДанные; — здесь напутано в именах
(1) seermak, Доброго дня, действительно были недочеты, спасибо, что вовремя указали. Исправил, внес корректировки в код. Отправил на модерацию. Так же добавил скрины того что в итоге получается.
Выглядит как-то сыровато. Сделать только простенький чат — дело не хитрое. Тут, конечно, фишка в шифровании. Но в данной реализации оно выглядит неуместным. У нас рядом в базе лежит регистр с зашифрованными сообщениями и тут же в константах открытый и закрытый ключи (секретностью тут не пахнет). Если бы обмен сообщениями осуществлялся между разными базами — это можно было бы понять, а так нет. Если вы хотите сделать чат внутри одной базы между разными пользователями с шифрованием, то у каждого пользователя должен быть свой закрытый ключ, который не передается на сервер.
К тому же, в платформе есть механизмы для работы с криптографией. Хотелось бы реализации с их использованием. Ну, или как-то прокомментировать, почему нет (в статье про это ни слова).
Итогом, если статью назвать «как шифровать в 1С через COM», то пойдет, а с текущим заголовком — не зачет.
(3) да дело здесь скорее не в самом чате — + за то, что подвинул на изучение криптографии на таком простом примере))
спасибо сподвигли на изучение криптографии в 1с
что-то подобное на данном ресурсе уже встречалось,
Особено актуально, когда на работе запрещено устанавливать icq
Интересная статья, но визуально выглядит не очень. Я делал на СКД полностью чат вот в этой разработкеhttp://infostart.ru/public/309075/
{ОбщийМодуль.RSA_Шифрование.Модуль(80)}: Ошибка при вызове метода контекста (FromXmlString)
ОбъектШифрования.FromXmlString(Константы.RSA_ПубличныйКлюч.Получить());
по причине:
Произошла исключительная ситуация (mscorlib): Недопустимый синтаксис в строке 1.
Странно, всё сделал. В обработке главную форму ставлю — «Форма»
Затем когда открываю обработку, в колонке «Пользователь» выбираю пользователя, которому хочу отправить сообщение и ничего не происходит, вторая форма не открывается, чтоб отправить сообщение.
(10) lampa24111986, Доброго дня. Если честно, чтобы понять в чем проблема нужно смотреть проблему целиком. Так ответить не готов. Вроде бы где то оставались исходники, если нужно могу выслать.
(11) Если Вам не сложно, то хотелось бы их получить. Вот моя почта lampa241186@rambler.ru
(11) Я столкнулся с такой же проблемой, не могли бы вы скинуть исходник, если он у вас еще остался в живых.
(13) Доброго дня! ушло.
Здравствуйте, у меня такая же проблема(10) , не осталось ли исходников у вас?
(15) завтра посмотрю
(16) поделитесь со мной тоже (palkor@list.ru) Буду очень признателен. Вероятно, на сайте не измененный код, исходный. У меня «проблемы» аналогичные вышеописанным.
И огромное спасибо, что даете возможность изучать то, что не «лежит на поверхности» 🙂
(16), к сообщению (17)
Вот, например:
{ОбщийМодуль.RSA_Шифрование.Модуль(71)}: Ошибка при вызове метода контекста (FromXmlString)
ОбъектШифрования.FromXmlString(Константы.RSA_ПубличныйКлюч.Получить());
по причине:
Произошла исключительная ситуация (mscorlib): Недопустимый синтаксис в строке 1.
???
И у меня такая же)
Может быть кому-то будет полезно: ошибки с выбором пользователя и открытием формы (10) возникают из-за того, что процедуры выбора, при открытии и тд. не привязаны к форме.
(18) А в этом случае не правильно заполнен ключ
Доброго времени суток! Если остался исходник, не могли бы вы поделиться (v.aleksandra1204@gmail.com). Заранее благодарна:)
Алексей доброго времени, тоже был бы рад исходникам (mr.petrachuk@mail.ru). Заранее спасибо ))
И мне, если не сложно. klavadez@gmail.com
Пришлите, пожалуйста и мне, если Вас не затруднит: doktor_kkk@mail.ru
Доброго дня, Алексей, если остался исходник, не могли бы вы поделиться и выслать на почту petrm@list.ru
Можно пожалуйста исходники? Выдаёт ошибки (( m.novruzov161@gmail.com
(16) Добрый день! Если исходники ещё живы, то был бы рад, если скинете на почту stash_84@mail.ru