Панель телефонии для 1С




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

9 Comments

  1. Жолтокнижниг

    красиво, но больших отличий от оригинала не видно.

    а сделай возможность авто набора на добавочный номер, 8(495)45-64-56*123

    Reply
  2. Chloroform

    (1)

    Предложение хорошее, но думаю пока надо заняться основными функциями.

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

    Ещё надо порешать вопрос с загрузкой номеров из 1С. Я эту загрузку довольно сильно ограничил, для того, что бы привести все номера сотовых телефонов к формату: 7(9..)-….

    Да и потестить надо ещё получше.

    Но этот вопрос я тоже не буду отбрасывать. Как вариант на первое время можно вбивать добавочные номера в телефонную книгу, а потом через поиск выбирать нужные.

    Reply
  3. Жолтокнижниг
    присваивался автоматически нужный префикс

    непонятно.

    Reply
  4. boffart

    Всегда поражало стремление человека изобрести свое колесо, потратив на это несколько человеко-месяцев. Экономия весьма сомнительная.

    С Askozia уже существует интеграция для 1С.

    У Simplit есть решение для интеграции с Asterisk, у компании МИКО — уже заточенная обработка под Askozia.

    Описанная Вами «простыня» — это нечто сложное. Не проще ли добавлять / удалять префиксы на самой АТС?

    Один из примеров шаблонов.

    Reply
  5. Chloroform

    (5)

    Я видел решения для 1С по интеграции с аскозией. Я ставил их себе (бесплатные демо версии), смотрел функционал, это отличные решения для бизнеса.

    Всегда поражало стремление человека изобрести свое колесо, потратив на это несколько человеко-месяцев. Экономия весьма сомнительная.

    Похоже на слова менеджера. Просто было интересно сделать, захотел — сделал. В любом случае — я один не смог бы конкурировать с компаниями, которые занимаются этим профессионально. Я не профессионал в программировании, я только учусь. Кстати, потрачено было много меньше, по пол часа на обедах.

    По поводу «простыни». Я всё-таки склоняюсь к «велосипеду». Да, я его сделал, сильно сомневался, но решил попробовать. Тут же пытался сделать так, чтобы исходящий номер приводился к нужному формату. Например, сначала удалялась 8, а потом прибавлялась 7, после этого можно и префикс нужный прибавить. На АТС чаще просто обрубается или прибавляется префикс и всё, либо исходящие проходят только по одной строке шаблона, например, если стоит 8-ХХ, то второй 7+ХХ уже не учитывается.

    Вы, Алексей, ведущий программист компании МИКО, что могло вас заинтересовать тут?

    Reply
  6. Bonov

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

    Но в том, что префиксы либо должны обрабатываться на самой АТС, либо в одной внешней функции ОбработкаНомера, я согласен. А главное, должна быть возможность ее отключить, иначе Вы из универсального решения сделаете свое сугубо индивидуальное и неподходящее никому.

    Reply
  7. lesenoklenok

    Очень интересная разработка, взяла на заметку. Единственное я не поняла, эта разработка может переключать на другого оператора?

    Reply
  8. Chloroform

    (8) Сделаю, как с армии вернусь 🙂

    Reply
  9. Talexan

    Здравствуйте! Что за параметр «Контекст для исходящих»?

    Reply

Leave a Comment

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