Чат (мессенджер) для управляемых форм 1С 8.3 (Расширение)




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

21 Comments

  1. VmvLer

    забавно

    если ваши пользователи будут очень активно обмениваться сообщениями с файлами, то регистр со временем придётся чистить

    Еще как будут, от фоток котиков до последнего сезона с драконами, а то и конями.

    Я хочу сказать, что если этот инструмент будет обходить штатные запреты по работе

    с файлами, то его ценность нивелируется.

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

    Reply
  2. Isa816

    (1) При желании можно ограничить размер файла отправки, да и данные чатов не нужны за длительные периоды, так что можно поставить регламент на их удаление.

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

    Reply
  3. Steelvan

    Здорово. Уже обычные беседки продают.

    Проверка новых сообщений запросом каждый n секунд ?

    Reply
  4. silberRus

    Не в обиду, но это не полезная разработка, тем более за деньги.

    В свое время подобное еще со времен 7.7 делали. Но время не стоит на месте и технологии которые вы применяете — это уже каменный век.

    Reply
  5. Isa816

    (3) Не увидел что то аналогов для управляемых форм, тем более с нормальным видом и отправкой ссылок на любой объект базы.

    А так да обычная беседка, сообщения запросом каждые n секунд, не чего не обычного.

    Reply
  6. Isa816

    (4) Почему то когда мне понадобился мессенджер для 1с, я его не нашел. Все что находил или доисторическое уг как и 7.7 или умеет только вести переписку. Данное решение позволяет обмениваться ссылками на объекты системы, что очень упрощает работу менеджеров. А то что она стоит денег, так это мои трудозатраты.

    Reply
  7. Nikola23

    (5)Отсутствие отступов и ярко желтый цвет — это пример нормального дизайна? Батенька, что вы заканчивали?

    Reply
  8. acanta

    (4) конфигурации 7 и 8 мне напоминают беседу онколога и археолога. Почему у древних людей от рака не умирали? До своего рака ещё надо дожить, как и до написания мессенджера в 8 ее при зоопарке скайпов и асек.

    При 7 не было Скайпа вообще и не у всех была Аська и Ирка.

    И да, пользователи в основном женщины.

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

    Нет, она спросит где взяла и пойдет туда же купить.

    Но мужьям ( или хозяевам ) это обычно не нравится.

    Поэтому наши дорогие клиенты хотят чтобы то, что они видели у коллег (и ещё знают сколько заплатили местным разработчикам франчам или фрилансерам) им разработчики фирмы 1с сделали бесплатно в рамках подписки на ИТС.

    Конкуренция здоровая именно такая, по себестоимости.

    Поэтому и не нашли чата.

    Reply
  9. acanta

    У продавца 1с, как и у дизайнера, есть только один типичный аргумент — это уже есть у всех, включая ваших шефов и конкурентов.

    Вы одни остались в хвосте плететесь.

    К сожалению, про мессенджер этого не скажешь.

    Reply
  10. Isa816

    (8) Это пример сделан на HTML в отличии от всех таблиц на форме которые используют, цвет если вам не нравится всегда можно поменять.

    Если это для вас ярко желтый что тогда #FFFF00 ? Зеленый цвет взят из whatsApp

    Reply
  11. Isa816

    (7) Это можно сделать, а не проще ли сделать так как я? Или вас это сильно задевает? Дайте рабочий аналог с работой в одном окне будем пользоваться, то что вы предлагаете полная чушь.

    Reply
  12. SlavaKron

    Автор, планируете ли дорабатывать/улучшать это расширение?

    Reply
  13. Isa816

    (13) Планирую, сейчас в процессе.

    Reply
  14. Nikola23

    (11) Про отступы прокомментировать забыли?

    Мало взять цвет откуда-то. Имхо, надо его правильно использовать.

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

    Reply
  15. Bassgood

    (7) По-первых, далеко не все юзеры такие продвинутые, чтобы знать как в 1С пользоваться внутренними ссылками на объекты; Во-вторых, далеко не все используют телеграмм (или какой-либо другой мессенджер, тем более его веб-версию) или все пользуются разными мессенджерами, то бишь нет единого информационного пространства; В-третьих, далеко не во всех компаниях СБ согласится на обмен коммерческой информацией между сотрудниками через какие-либо мессенджеры, не подконтрольные им; В-четвертых, от пользователя потребуется больше действий для передачи информации, нежели это делать в том же интерфейсе 1С.

    Reply
  16. bajiepka

    надо было выкладывать это тогда, когда сервера взаимодействия (СВ) не было. имхо это велосипед, плюс любой установленный мессенджер и конфигурация на УФ куда функциональней. суть СВ как раз в том, что по функционалу он не сильно отстаёт от того же самого скайпа, но зато локальный и достаточно прост в установке. а если учесть, что большинство клиентов свою базу за семи дверями прячут, то только СВ в принципе то и остаётся…

    Вы бы, уважаемый, лучше бы к СВ присмотрелись и «форкали» его, т.к. 1С как всегда микроклимат там делать не будет…

    Reply
  17. maXon777

    (2) а каких денег просит система взаимодействия (не берем в расчет разворачивание своего сервера — если использовать сервер 1с?)

    Reply
  18. Award

    (18) Информация к размышлению:

    Начиная с 10.09.2019 пользователям ранее выпущенных лицензий уровня ПРОФ станет недоступна расширенная функциональность уровня КОРП (в том числе и возможность использовать «1С:Сервер взаимодействия»). Также начнут действовать ограничения использования лицензий при превышении 500 сеансов пользователей и/или использовании более 12 ядер процессора.

    Для лицензий уровня ПРОФ, приобретенных до 11.02.2019 г. можно бесплатно снять ограничение на количество сеансов и ядер процессоров, но для возможности использования сервера взаимодействия и других возможностей лицензий уровня КОРП необходимо сделать апгрейд лицензий с ПРОФ на КОРП на платной основе.

    Пруфы: http://1c.ru/news/info.jsp?id=25491 и http://v8.1c.ru/overview/corp/

    Поэтому считаю, что автор этой обработки на правильном пути. Перспективы есть.

    Что касается «любого другого установленного мессенджера», то службы безопасности очень подозрительно к ним относятся. И вообще, общение пользователей желательно организовывать в рамках единого информационного пространства.

    Reply
  19. rounder

    Приветствую, прошло уже 3 месяца от размещения, у меня вопрос, будет ли обещанное развитие «проекта»???

    Reply
  20. o4karek

    (20) Так 1С:Диалог-то не закрыт КОРП лицензией.

    Под КОРП попадает только собственный сервер взаимодействия.

    Но это в качестве комментария

    Reply
  21. Isa816

    (21) Да, уже дописываю для нашей базы 🙂

    Reply

Leave a Comment

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