Отправляем SMS из 1С (Demo)




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

37 Comments

  1. Noy

    Код типа «закрыт» 🙂

    Reply
  2. fAngel

    закройте код с помощью 1cpp и оставьте саму идею куском кода, если кто захочет, сделает все сам,

    а так к сожалению код открыт полностью 🙁

    Reply
  3. fedor40

    Фиговый у тебя ример на рисунке. Надо было написать: «Нафаня мне рубь должен !»

    Reply
  4. Noy

    Да ладно, хотя бы перепродавать не будут. Код не жалко

    Reply
  5. CheBurator

    > и теперь вывесили ее в интернет магазинах на продажу.

    адреса интернет магазинов — в студию!

    обращаться пробовал к администрации инетмагазинов?

    Reply
  6. Noy

    (5) ну адреса — это легко: http://yandex.ru/yandsearch?rpt=rad&text=fn_SendSMS&lr=187 — тут целый список.

    Во всех магазинах в качестве продавца присутствует некий Shop-AVDA

    инфа тут: http://www.softmarket.org.ua/seller.php?id_s=38681

    и вообще — судя по ассортименту продаваемых этим предпринимателем товаров — там еще кое-что скорее всего нагло сп%%%но с этого сайта.

    обращаться не пробовал.

    Reply
  7. Noy

    (6)+ вот его ассортимент — может кто-нибудь узнает свои обработки.

    http://www.digiseller.net/all-goods.php?ids=38681

    Reply
  8. VicAlex

    Ну так действительно, свяжись с держателями инет магазинов. Пусть продают, только надо чтоб деньги тебе шли, а не Shop-ADVA.

    Reply
  9. O-Planet

    Если на plati.ru выложили, то просто напиши админам. Того, кто выложил, мгновенно забанят.

    Reply
  10. zaic

    плюсик борцам против жуликов типа Shop-ADVA.

    Reply
  11. Abadonna

    (0) А серьезно веришь, что установив пароль на обработку, ты ее закрыл?

    Тут надыть только КЗК-2

    Reply
  12. Noy

    (11) КЗК-2? для этой обработки?

    тут кода — кот наплакал, важна только идея — а она и так ясна.

    Люди с «прямыми» руками сами такую обработку напишут за 15 минут, а остальные могут использовать ее в таком виде как есть.

    З.Ы. слово «закрыт» у меня в ковычках в первом посте 🙂

    Reply
  13. Abadonna

    (12) Просто я не вижу смысла закрывать паролем… Все равно толку нет. А отправка через CDO настолько тривиальна, что на идею не тянет 😉 Так же как и идея отправки СМС через мыло. Сорри, обидеть не хотел…

    Reply
  14. Noy

    (13) я и не обижаюсь.

    ну тут идея в том что соединены три идеи: CDO, email2sms, и 1С. Во всяком случае на этом портале такой разработки не было.

    А «закрыл» я ее только по причинам, описанным выше и закрыл ровно на столько, что в таком виде она для продажи не годится, а исправлять ее — надо в код лезть, а тут уже нужно уметь хоть немного. А если человек умеет — то врядли будет тупо перепродавать. Мысль примерно такая.

    Reply
  15. venger

    (14) Самое лучшее против таких уродов как Shop-ADVA, поставить его в условия, когда у него никто не купит.:-)

    Т.е. дарить людям безвозмездно:-) Интересно, можно как-то оставить коммент там, что мол такие-то программы, что тут в продаже, можно взять тут и тут совершенно бесплатно, более того у самого автора, более того еще и на этом сайте получить бесплатную консультацию, это я про инфостарт. И сайту реклама инфостарту и тебе приятно, что наламал малину уроду:-)

    Reply
  16. Noy

    (16) не юзай

    Reply
  17. RobberHood

    ,kzlm, за твойе украденной обработкой явно очередь стоит. Спал и видел,как бы мне такое чудо поиметь,чтобы не с телефона ,а прям из

    бухгалтерии смс ки писать. А то аськи мало . Бред сивой кобылы.

    Reply
  18. Noy

    (18) Злобный ты какой-то…

    Выберись на выходных куда-нибудь на природу — подыши свежим воздухом, полюбуйся на осенние пейзажи.

    может пройдет…

    Reply
  19. fantasy2

    SMS можно отправлять и через почтовыю программу

    был студентом,толькл так SMS и рассылал

    пишем например : номер телефона@sms.umc.ua

    отправка почты даже в 77 работает без проблемм

    ЗапуститьВнешнееПриложение(mailto:myemail@mail.ru);

    Reply
  20. Злой Бобр

    «…вывесили ее в интернет магазинах на продажу»

    Письмо к админам и «прикроют» продавца. А еще лучше как было указано выше — раздавать ДАРОМ. Тем более ничего нового неоткрыто, а плагиатору получится хорошая оплеуха.

    Reply
  21. vdiamond

    Чего-то у меня не отправляется…

    смс ушло, но ни на один номер, который пробовал так и не пришла =(

    Reply
  22. Alexsisit

    А можно эту обработку переписать на платформе 8.1 ? или код 7.7 выложить ))

    нужно для личного использования.

    Reply
  23. Alexsisit

    у меня кстати тоже … ((

    Reply
  24. Noy

    (22),(24) По поводу проблем с отправкой — почитайте комментарии в http://infostart.ru/projects/2194/

    (23) Там код простейший — отправка письма на электронную почту.

    Пример отправки:

    CDOc=createObject(«CDO.Configuration»);

    CDOc.fields(«http://schemas.microsoft.com/cdo/configuration/sendusing»).value=2;

    CDOc.fields(«http://schemas.microsoft.com/cdo/configuration/smtpserver»).value=СокрЛП(СМТП);

    CDOc.fields(«http://schemas.microsoft.com/cdo/configuration/smtpserverport»).value=Порт;

    CDOc.fields(«http://schemas.microsoft.com/cdo/configuration/sendusername»).value=СокрЛП(Логин);

    CDOc.fields(«http://schemas.microsoft.com/cdo/configuration/sendpassword»).value=СокрЛП(Пароль);

    CDOc.fields(«http://schemas.microsoft.com/cdo/configuration/smtpauthenticate»).value=?(ПустоеЗначение(СокрЛП(Логин))=1,0,1);

    CDOc.fields.update();

    CDO=СоздатьОбъект(«CDO.Message»);

    CDO.configuration = CDOc;

    CDO.to=СокрЛП(АдресКому);

    CDO.from = СокрЛП(Адрес); //адрес вида 380667772211@sms.umc.ua

    CDO.textBody = Текст; //текст сообщения смс

    CDO.textBodypart.charset = «windows-1251»;

    Попытка

    CDO.send();

    Исключение

    ВывестиСообщение(«Ошибка при отправке: «+ОписаниеОшибки(),,0);

    КонецПопытки;

    Нужно только переменные заполнить — думаю по тексту понятно. Ну и немного причесать под 8.1.

    Основной трабл — знать куда отправлять (шлюз) — в обработке есть кнопка «Настройки шлюзов GSM операторов» — там можно посмотреть список, который я формировал на момент написания обработки.

    Удачи!

    Reply
  25. Alexsisit

    ок )) , спс

    Reply
  26. Alexsisit

    (25) ну воть )) все получилось для 8.1 … спасибо за костяк. Могу поделиться 😉

    Reply
  27. Noy

    (27) Выкладывай на сайт 🙂

    Reply
  28. tasha2024

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

    Reply
  29. DrZombi

    Пароль зачем повесил?

    Не поможет 😉

    Reply
  30. z-alexey

    ввожу свой номер 927853**** а он на мтс хочет отправить, хотя у меня мегафон…

    Reply
  31. Noy

    (31) Смотрите настройки шлюзов, а конкретнее строку начинающуюся с 927…@…

    Подробнее читайте тут: http://infostart.ru/profile/13406/projects/2194/

    Reply
  32. v.a.ryag

    как много всего пишут…)

    Reply
  33. vas5780

    А в восмёрке код с помощью 1cpp можно закрыть?

    Reply
  34. AlexSmith

    (1) не отправляет на МТС:

    найдено=спПоследнихНомеров.НайтиЗначение(Телефон);

    {I:FN_SENDSMS_DEMO.ERT(74)}: Значение не представляет агрегатный объект (НайтиЗначение)

    В чем проблема?

    На Билайн уходят: Сообщение отправлено!

    но на телефон не приходят 🙁

    Подключил услугу по номеру 06849909 — тот же результат.

    В чем проблема?

    Reply
  35. lediboss

    Подскажите пожалуйста а на 1С 8.2 Розница 2.0.4.5 не пойдет?

    Спасибо.

    Reply
  36. AlexSmith

    (36) lediboss, конечно пойдет,конфигурация значения не имеет 😉

    Reply
  37. lediboss

    Тогда извените не очень в этом понимаю, я просто открываю правочник- дополнительные отчеты и обработки нажимаю создать, и почему то его там не видно, видно только файлы с расширением epf а ert не виджать, что не так делаю?

    Если можно в ответе напишите какой клиент при этом использовать худой или толсты? я в этом ни бум бум.Спасибо заранее всем компитентно откликнувшимся

    Reply

Leave a Comment

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