Чат (Управляемое приложение 1С 8.2)




Принцип обмена данными из 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='\

39 Comments

  1. minikos

    кхм… приват даже админ не должен видеть) Я бы не стал пользоваться таким чатом)

    Reply
  2. Armando

    (1) у меня были сомнения на этот счет… посмотрим, что скажет сообщество)

    Reply
  3. Armando

    +(2) Хотя для роли Администратор чата можно тоже прописать RLS, но от настоящего админа ничего ведь не скроешь)

    Reply
  4. Armando

    Поставил нашим. Сказали, что смайликов не хватает))

    Reply
  5. An-Aleksey

    Плюсанул «авансом», дома скачаю, посмотрю.

    Что касается прав на просмотр, то даже начинающий «Администратор» может зайти под «любым» пользователем и посмотреть все что нужно )

    Reply
  6. OBEH

    Не совсем понял. Это отдельная конфигурация?

    Или встраивается в более менее стандартную конфигурацию?

    Reply
  7. Armando

    (5) Тут уж никуда не денешься

    (6) И то и другое

    Reply
  8. Rustam-Ufa

    что-то у меня скачивается пустой архив 30 кб, что не так?

    Reply
  9. Armando

    (8) Проверил — все ок. Попробуй в другом браузере.

    Reply
  10. rad-scorpion

    Сообщения большие чем 3 строки высотой обрезаются. Понимаю, что ограничение платформы и поэмы в чат обычно не пишут. Но мне пользователи весь мозг выели по поводу этого ограничения, когда я чат на основании ТаблицыЗначений делал.

    Reply
  11. Ирга

    А у нас вопрос к автору… Если у пользователя будет открыто какое-либо модальное окно, сообщение все равно дойдет?

    Reply
  12. Armando

    (11) Сообщение в любом случае дойдет

    Reply
  13. ranger

    Интересная вещь.Интегрировал в с свой документооборот.Автору респект!

    Комментарии:

    1.а По-поводу приватных сообщений хотелось бы иметь кнопочку ответить в форме списка сообщений,форме сообщения и контекстном меню.

    При этом текст входящего сообщения выделяется специальным образом(как в почтовом клиенте к примеру).

    1.б Удобно было бы по приватному сообщению видеть всю историю переписки,если таковая велась.Например,открыть модальную форму истории приватных

    сообщений с необходимым отбором и оформлением,возможно цветовым.

    2.Необходимо иметь возможность включать отбор только приватным/только по общим сообщениям/сообщениям от определенного пользователя/группы пользователей через отбор.

    3.Необходимо иметь возможность удалять/архивировать старые сообщения

    Готов к сотрудничеству 🙂

    Кстати,было бы неплохо иметь возможность отсылать приватные сообщения пользователям офлайн.

    Reply
  14. Armando

    (13) К сожалению в моей нетленке чат не взлетел 😥 . По сему все работы по разработке прекратил.

    Разрешаю доработать по своему усмотрению и выложить со ссылкой на эту разработку.

    Reply
  15. mkostya

    (14) Жаль,что разработка дальше проводиться не будет. Автору Респект

    Reply
  16. 1Ccoder79

    Хочу попробовать, скиньте внешнюю ссылку ибо рейтинга не хватает.

    Reply
  17. mns

    Интересная вещь надо попробовать, еще бы передачу файлов добавить

    Reply
  18. n949eo

    Ща опробуем) Заранее спасибо)

    Reply
  19. Lemyrchick

    Тоже самое но обработкой бы, и вообще красота ))

    Reply
  20. volodya_gold

    Лучше бы делать для обычного приложения, так совместимости больше

    Reply
  21. klel

    Попробовал, посмотрел, стоит доработать, как будет вариант хорошей работы тоже выложу и поделюсь ссылкой =)

    Reply
  22. m2d3

    ошибку нашёл: «Администраирование чата» — команда у РС

    Reply
  23. Armando

    (23) m2d3, у меня такое часто бывает. Луплю по клаве не глядя)

    Reply
  24. Patricul

    Очень неплохой Чат! Хотя прикольнее было бы сделать отдельной обработкой! Но тем не менее всё гуд. Думаю дописать к нему возможность реагирования событий проведения тех или иных документов!!!

    Reply
  25. fzt

    Хорошо. Но таки хочется чтобы приват не видел никто. И нельзя-ли позаимствовать функционал по заданию юнитам из аналогичной работы для неуправляемых форм?

    Reply
  26. barcoder

    (24)

    Есть возможность купить данную конфигурацию у вас?

    Reply
  27. Armando

    (27) barcoder, Вы же скачали файл. Конфигурация готова к использованию и распространяется бесплатно. Пользуйтесь.

    Reply
  28. barcoder

    (28) К сожалению файл не скачал т.к. закончился абонимент на инфостате. Если можно переложите куда нибудь где можно скачать без регистрации. Заранее благодарен.

    Reply
  29. maxx

    Не было идеи сделать для отдельных пользователей чатится посредством электронной почты?

    О чем я. База работает на предприятии, в открытый доступ база не выложена. Зачастую даже Интернета нет, но электронная почта работает.

    Есть пользователь, например, «Тех.поддержка» есть электронка, пользователь в чате пишет сообщение этому пользователю. Пользователь получает по электронке и отвечает по электронке и пользователь в базе в чате видит ответ тех.поддержки.

    Reply
  30. olegtymko

    Интересная работа. Однозначно плюс. Помогла разобраться, как именно лучше организовать хранение сообщений.

    Reply
  31. nata_8

    Можно ли ссылки на документы пересылать?

    Reply
  32. Armando

    (32) nata_8, можно, но в виде текста. Т.е. на нельзя на нее нажать, чтоб открылась форма.

    Reply
  33. fzt

    (32) nata_8, я допиливал.. ссылки пересылали друг другу

    кажется в регистр чата добавил поле ссылочного типа

    Reply
  34. david1915

    скажите а для 8.3 такого чуда нет?

    Reply
  35. Михайловна

    Неужели и для 1с чат придумали?! Кстати это хорошая альтернатива службы поддержки по телефону. Теперь можно писать вопросы в чат в отдел внедрения на предприятии и получать ответы. Хотя так можно и почту использовать внутри…

    Reply
  36. Armando

    (35) david1915, под 8.3 этот тоже можно запустить. Только придется доработать напильником)

    (36) Михайловна, ага придумали, и уже давно)) И это не единственная разработка, есть и другие.

    Reply
  37. pehatuk

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

    Разве я не прав?

    Reply
  38. Vladimir_Konyrev

    Есть какие-то обновления по данной обработке?

    Reply
  39. androgin

    (39) уже все в платформе можно сделать (система взаимодействия)

    Reply

Leave a Comment

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