<?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='\
Какие ограничения на число точек?
(1) anig99, не знаю. В документации об этом ничего не сказаноhttp://api.yandex.ru/maps/jsbox/2.1/
На некоторых адресах яндекс глючит. Не строит к ним маршрут.
Советую пробовать такие фокусы в Гугл-картах. Похожие возможности API, но стабильнее, и адреса корректнее обрабатывает.
Вообще, отличная работа проделана, респект! Главное ведь именно логику реализовать, вон, сами яндексовцы не осилили и даже плакались об этом где-то в «песочнице».
Однозначный плюс.
Обязательно скачаю, как только появятся мани.
Но есть один вопрос: почему выбран «жадный» алгоритм построения маршрута, ведь для задачи коммивояжера есть множество готовых реализаций?
(4) harmer, потому, что я никогда ранее не занимался этой задачей. Готовых решений не искал. Решил способом, первым пришедшим в голову.
Запустил сегодня этот же скрипт и маршрут построился по-другому 🙂 Прикольно. Похоже Яндекс переоценил расстояния от Селезнёвской до метро Новослободская и до метро Достоевская.
http://infostart.ru/upload/iblock/049/%D0%92%20%D0%B1%D1%80%D0%B0%D1%83%D0%B7 %D0%B5%D1%80%D0%B5.png
Обновление 14:12
Понял в чём дело!!! Дело в том, что расстояние меряется не в километрах, а в минутах!!! Сейчас до Красноказарменной добраться на метро быстрее, чем на том же метро до Ленинградского проспекта 40.
(2)
Моя ошибка была. Исправил.
FallenMad за ответ в теме http://forum.infostart.ru/forum26/topic117885/
Ещё исправил отображение в клиенте 1С спасибо
Кто скачал файл до 23:51 03.10.2014 скачайте ещё раз. Если нема денег — давайте адрес пришлю файлик,
Я думаю, что стоит упомянуть в посте о том, что цикл вычисления расстояний между точками реализован тоже с помощью маршрутизации Яндекс. А на нее Яндекс поставил ограничения. По моему 25000 запросов в сутки, но точно не скажу — не могу найти.
Я занимаюсь автоматизацией службы доставки, поэтому этот вопрос изучал. В моем случае это более 200 маршрутов в день и в каждом в среднем 25 точек (325 запросов в цикле). Итого на один день надо 65 000 запросов. Так что соглашусь с harmer, алгоритм жадный.
По Google — позволяет построить маршрут не более чем по 25 точкам для платного API и 10 для бесплатного. API Google может само оптимизировать промежуточные точки.
(8) Smaylukk, спасибо за сведения.
Он жадный не из-за количества запросов. Он жадный, потому, что на каждом шаге выбирает самый «жирный кусок» (куда быстрее добраться).
О как! Это интересно. Я до этого не докопался.
25к / сутки это на один ip или 1 ключ апи? 🙂
+
(10) vano-ekt, ключ api в этом интерфейсе не используется.
(8) Smaylukk, а за ~9 килобаксов в год Гугл строит и оптимизирует маршруты без ограничений по количеству точек 🙂 вроде так было, когда мы считали
Скачал, спасибо. А как сделать чтобы маршрут сразу для автомобиля формировался?
(13) kotlovD,
В параметре, передаваемом функции route заменить строку
routingMode: ‘masstransit’
на
routingMode: ‘auto’
(14) отлично. Спасибо за оперативность
правда в этом случае маршрут сразу не строится, приходиться нажимать кнопку «Переключить на общественный транспорт» и обратно, тогда маршрут выстраивается
Не качал. Хотел спросить на счет логики.
С год назад написал такое же, но с гуглом. И тоже применил такой алгоритм. Был поражен результатом. Представьте ситуацию: исходная точка №1, далее следует перекресток, в лево точка А на расстоянии 1000м, в право тоже точка В, но на расстоянии 800 м. Такая логика делает точкой №2 точку В . Далее за точкой №2 следует точка С и, если от точки В до точки С расстояние меньше, чем от В до А, то точка А все больше удаляется и по итогу она становится последней в маршруте. Вы у себя проверяли такой вариант? У меня так завернуло, что пропала охота дальше что то выдумывать. После получения такого результата забросил. За обработку однозначно +
(17) я уже опубликовав обработку почитал на эту тему. Да, маршрут не всегда оптимальный. Но в большинстве случаев попадает близко. Этой темой я занялся недавно. Может быть допилю логику под другой алгоритм.
Сейчас пилю раздачу заявок курьерам. Вкупе с задачей построения маршрута получается некислая задача.
(16) kotlovD, завтра посмотрю в чём дело.
(16) лучше поздно, чем никогда. В прикреплении файл, который по умолчанию строит маршрут на автомобиле. Файл «ymap.html»
Некто Гоша Забылhttp://forum.infostart.ru/profile/324667/ просил вывести только метки, без построения маршрута.
Заглушил построение маршрута. Тем более, что метки я всё-равно ставил отдельно. Но при этом скрипт выполняет оптимизацию. То есть много лишних действий. Файл «ymap только метки.html»
Почему в ИТ статье ссылка на левый сайт? МИНУС автору!!!
Не отображается карта, только пустое html-поле. В чем может быть дело?
(22) в веб клиенте тоже?
В веб клиенте, тонком и толстом карта не отображается, а если открыть файл html браузером, то отображается.
А в картах 1.3 наоборот — в 1С работает, но не отображается если открыть файл html браузером.
Добрый день! скачала файл но не понимаю как им пользоваться! html открыла в гугле, а вот что делать с фалом epf? заранее благодарю.
(25) daria.zubra@ace-target.ru, дык ради него всё и затеяно. Это внешнаа обработка для 1С. в 1С Файл/Открыть, выбираешь этот файл. Это демонстрация построения маршрута в связке с 1С.
А можно оптимизированный маршрут вернуть в табл.поле (чтобы можно было в печатном виде получить оптимизированный список адресов)?
(27) korvin76, можно решить так:
При вычислении маршрута записать точки маршрута в поле html документа.
А потом средствами 1С найти это поле html документа и прочесть информацию из него.
(27) Что-то в (28) я кривое написал. Можно пользовать яндекс api из 1С. Формируешь http запрос из 1С, отправляешь его яндексу. Всё тоже самое, что и в яваскрипте, только из 1С. По сути это работа с rest сервисом.
Доброго дня. Данная обработка только для Москвы? Какой бы адрес не указывал другого города, ни чего не строится.
(30) Я к Москве не привязывался. Возможно что-то с Яндекс картами. Город в адресе указываете?
да, город указывал. по разному пробовал.
Скажите, а то, что в обработке в процедуре при открытии, есть такие строки:
ЦентрКарты = «[55.781416, 37.611711]»;
ГраницыМосквы = «[[56.1,37.0],[55.3,38.3]]»;
ОтправнаяТочка = «[‘Москва, Селезневская улица, 21’]»;
Не может мешать построению маршрута в других городах?
(32) reflexcompani, точно. Совсем забыл. Надо поправить границы карты.
Добрый день. Скачала обработку, запускала и через файл/открыть и через сервис/внешние обработки устанавливала, не запускается. УТ 10.3, предприятие 8.3 С чем может быть связано?
>> С чем может быть связано?
(34) Yulya8888, с тем, что вы пытаетесь открыть её в обычном приложении, а надо в управляемом интерфейсе.
С недавнего времени при любом действии с картой начали появляться ошибки
http://s020.radikal.ru/i719/1603/ac/405df2a7ad23.jpg
http://s016.radikal.ru/i337/1603/af/c0894c028a6e.jpg
,
Помогите исправить.
(36) похоже 1С изменила js движок в платформе. Фирефокс отработал скрипты без ошибок. А тонкий клиент с руганью. Но маршрут таки построил. Сейчас со временем всё плохо. Боюсь что на разбирательства времени не хватит.
ну ёмоё, если она криво работает вы напишите в начале описание. что потом возможно доработаю если будет время. я ради вашей работы этой закинул деньги и теперь все коту под хвост(
(38) cloudysaturn, написал комментарий в публикации. Яндекс карты криво отображаются в 1С. Но маршрут строится и отображается. Мешает только сообщение об ошибке при масштабировании карты. Будет время — посмотрю.
В веб клиенте, в фирефоксе, карты отображаются верно и маршруты строятся.
надо поправить в обработке код
| <meta http-equiv=»»Content-Type»» content=»»text/html; charset=utf-8″» /><meta http-equiv=»»X-UA-Compatible»» content=»»IE=8″»/>
на
| <meta http-equiv=»»Content-Type»» content=»»text/html; charset=utf-8″» /><meta http-equiv=»»X-UA-Compatible»» content=»»IE=9″»/>
заменить IE=8 на IE=9
у меня заработало без ошибок
Всем привет. я так понимаю сегодня ошибка с яндексом у всех ?
Разработчик, исправь адрес в шапке,https://yandex.ru/blog/mapsapi/28445 уже не открывается
как проложить маршрут общественным транспортом более чем по 10 точкам?
(2)
есть ли способ как в яндекс картах проложить маршрут общественным транспортом на более 10 точек?
есть ли способ как в яндекс картах проложить маршрут общественным транспортом на более 10 точек?
(45) читай api Яндекса. Там должно быть сказано. Всё меняется, я сейчас не слежу за этой темой.
В описании указано
«Сообщение об ошибкаях можно отключить в настройках IE.»
Пробовал разные настройки IE11. В тонком клиенте 1С все-равно при первой отрисовке карты выходит ошибка как в(36)
Какие настройки надо сделать, чтобы она не выскакивала?
не работает обработка,
как бы ее реанимировать
(48)Добрый день, получилось что-нибудь?
получилось
Добрый день! Вчера скачал — карта не отображается! Подскажите плз у кого получилось как исправить!!!
не работает ссылка. как исправить?
(51)решили проблему?
Жаль разработка не рабочая. Единственная, в которой хоть как-то решается задача построения оптимального пути. Хоть и в лоб (ищем ближайшую точку от текущей, к ней и едем и т.д.), что не всегда правильно, но все лучше, чем простым перечислением адресов.
(54) ой! Не виноватый я. Это Яндекс изменил апи. Заниматься восстановлением некогда.
маршруты не строит от слова вообще…