Управление доставкой с использованием Яндекс (с) карт (УТ 11.4, КА 2.4, ЕРП 2.4)




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

22 Comments

  1. glime

    Первым 5 скачавшим обновление бесплатно(Доработка до Проф версии).в которой:

    1. Будет доработан функционал работы с уже перенесенными заказами в доставку.

    2. Отправка СМС заказчику (Из шаблона) при переводе задания в состояние «Отгружен».

    3. Отправка почты заказчику

    …..

    Пока не придумал что.

    Reply
  2. glime

    Возможно будет добавлен функционал просчета оптимального маршрута, но тут уже сами будите договариваться с Яндексом об использование геокодинга и API функций, они у него платные.

    Подробнее тут

    Яндекс првила использования API

    Reply
  3. glime

    Готов новый релиз, в него добавлена возможность работы с СМС

    Reply
  4. Efimoff

    (1)Э! ты так слона не продашь…

    Reply
  5. glime

    (4) привет, ну как тебе сказать, подскажи маркетинговый ход. я готовлю проф версию, уже за деньги, в нее сейчас добавлена работа с СМС, еще есть пара идей, время будет только к воскресенью.

    Reply
  6. glime

    (3) алгоритм работы описан здесь https://infostart.ru/public/951474/

    Reply
  7. iov

    чтобы понимать всю глубину проблемы посмотрите сколько подобных разработок умерло.

    Reply
  8. glime

    Я понимаю, и не претендую на первенство.

    Этот проект зародился очень давно(года три назад), до реализации дело только дошло.

    Хочется создать действительно нужный и полезный продукт, по этому пожелания и идеи будут приветствоваться

    + этого проекта — то что не трогается типовая конфигурация.

    Из развития, я уже говорил, что будет формирование СМС сообщений(уже есть в версиях для скачавших), формирование почтовых сообщений.

    Групповое выделение точек доставок по зоне доставке.

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

    Есть еще идея в заказах, автоматического определения зоны и стоимости услуги доставки, но это нарушает концепт (не трогать типовой функционал)

    Reply
  9. Efimoff

    (5) Бесплатно основной функционал, платно (техподдержка) — плюшки

    Reply
  10. prog77

    (2) Вот в это всё и упирается, а именно:

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

    3. API не будет использоваться для управления транспортом или мобильными сотрудниками.

    Для проектов, в которых нельзя выполнить хотя бы одно условие, API будет платным.

    При использовании API Яндекса в 1С, как раз эти два пункта не выполняются. Платное использование API стоит от 120 000 руб.

    Мало кто захочет платить такие деньги, а нарушение по незнанию не освобождает от ответственности.

    Reply
  11. glime

    (10) ест идея перевести на бесплатный, типа http://openlayers.org/ но там хромает точность.

    Reply
  12. prog77

    (11) Да, он половину русских адресов не находит(

    Reply
  13. glime

    (12) вот вот, в России проблема с бесплатным геоокодингом. по этому крупные агрегаты(яндекс гугл 2гис), или забивание адресов в формате 55.00863546;45.6456135, но там и построением маршрутов ЖП, не видит дорог

    Reply
  14. snorchik

    А реально сделать отслеживание GPS трекера в 1с?

    Reply
  15. glime

    (14) реально, только нужен платный api, только там доступен функционал, либо по запросу можно получать точки нахождения приборов, в любом случае нужен ответ с мобильных точек с передачей координат. Прорисовку тогда можно сделать и на бесплатной. а если хранить например точки и записывать их каждые 10 секунд, то можно и прорисовать маршрут

    Reply
  16. unduty

    Выдает ошибку на Управление торговлей, редакция 11 (11.4.8.63)

    {ВнешняяОбработка.РабочееМестоМенеджераПоДоставке.Форма.Форма.Форма(3895)}: Значение не является значением объектного типа (value)

    Элементы.Эксплорер.document.getElementById(«WebClientOperation»).value = «Reset();»;

    Reply
  17. glime

    платформа какая?

    Reply
  18. glime

    если честно, у меня 11.4.6… полет нормальный, но ради эксперимента на выходных обновлю копию до 11.4.8

    платформа 8.3.13.16хх

    Reply
  19. cyberlabz

    Добрый день. При открытии формы рабочего места выдает ошибку:

    Значение не является значением объектного типа (SetForm1c)
    {ВнешняяОбработка.РабочееМестоМенеджераПоДоставке.Форма.Форма.Форма(3965)}:  Элементы.Эксплорер.Документ.parentWindow.SetForm1c(ЭтаФорма);

    1С:Предприятие 8.3 (8.3.15.1565)

    1С:ERP Управление предприятием 2 (2.4.6.200)

    Reply
  20. glime

    (19) прошу прощения под 8.3.15 не тестировалось.

    Возможно изменилось что то в платформе по работе с html.(буду проверять)

    Как совет, было подобное когда версия используемого ie была очень низкой, попробуйте запустить с другой машины.

    Reply
  21. cyberlabz

    запускаю с Windows 10, соответственно IE стоит 11, выше некуда)

    Ждемс исправлений с нетерпением.

    Спасибо.

    Reply
  22. glime

    (21) Странно вида то же 10-ка, тогда платформа.. надо будет ставить.

    Reply

Leave a Comment

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