<?php // Полная загрузка сервисных книжек, создан 2025-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С — вот это крутотень!
Посмотрите на хороший корпоративный чат и интеграцию с ним:http://infostart.ru/public/542472/
Не нужно держать запущенный 1С на всех клиентских местах, да и вообще, инструмент «взрослый».
Классная обработка
Можете выложить конфигурацию! пожалуйста
(0) Прошу прощения за некропостинг. Реализовал подобный функционал. Может кому помогут мои наблюдения и направят в нужную сторону.
Есть несколько моментов на которые стоит обратить внимание:
1) получать данные о новых сообщениях с помощью JS в JSON формате. Если у Вас только управляемые формы под виндой то можно передать в переменную JS общий модуль 1с и тогда весь код подключения на форме сведеться к одной процедуре ЧатHTMLДокументСформирован(). Но если делать обновление через таймер JS не забывайте убивать его при завершении сеанса, а то оно так и подвиснет в консоле кластера и у клиента.
2) попробуйте в верстке использовать аттрибут CSS «float» для сообщений и прочие прелести адаптивного дизайна.
3) 1с все обещает выкатить функционал сервера для локального корпоративного чата вшитого прям в платформу
4) возможно стоит использовать для хранения информации не метаданные 1с, а непосредственно писать сразу в скуль, тогда удобно будет расширить до веб формы и мобильного приложения, хотя это сделать можно и http сервисом 1с. В любом случае регистр сведений всяко лучше справочника для этих целей.
5) может имеет смысл бэкэндом использовать существующий мессенджер (api телеги очень удобный, вполне можно написать свой клиент даже без использования специальных библиотек) или туже irc
На скриншоте мой адаптивный чат, на управляемой форме есть только строковый реквизит «ЧатHTML» ну и HTML поле под него. Одна процедура «ЧатHTMLДокументСформирован(Элемент)» (немного слукавил, еще используется процедура закрытия формы и приложения, но в теории от них можно избавиться). JS запрашивает данные у регистра сведений в JSON каждые 5 секунд и выводит их не пересобирая чат. Также реализованна и отправка сообщений и выбор группы/пользователя (за одним пользователем 1с у нас может сидеть несколько людей).
(7)
Вот код прототипа чата который набросал, если вдруг кому интересно.
JS принимает массив сообщений в JSON формате и использую HTML DOM добавляет их в контейнер «msgbox».
Скопипастить и использовать не выйдет, тк тут есть ньюансы именно под нашу конфигурацию и это еще нужно будет рефакторить, но в целом может чего подсмотрите полезное.