SASGIS

Веб-картография и навигация

SAS.Wiki

Веб-картография и навигация

Инструменты пользователя

Инструменты сайта


playground:1c_и_sas.планета

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
playground:1c_и_sas.планета [29/05/2011 14:29] 93.91.4.251playground:1c_и_sas.планета [01/06/2011 06:16] (текущий) – удалено vdemidov
Строка 1: Строка 1:
-В данной статье рассматривается примеи организация связи между программами 1С и SAS.Планета. 
- 
-Типичной задачей, где нужны карты, является работа логиста по планированию развоза. 
-То есть: имеем заказы от покупателей (адреса доставки и объемы (веса)). Из них надо составить маршруты, по которым поедут машины. 
- 
-Примерно вот так: 
- 
-{{:playground:sas_and_1c:logistics.png?442}} 
- 
-Разумеется, что при наличии карты, на которой все это наглядно отображено, выполнять такую работу намного проще, особенно когда заказов много. 
- 
-{{:playground:sas_and_1c:razvoz.jpg?442}}  
- 
-Информацию из 1С мы будем выводить с помощью технологии, описанной [[:отображение_на_карте_произвольной_информации_точек_картинок_и_т.п._из_базы_данных|здесь]]. Если вкратце - к SAS Планета подключается дополнительный слой, который посредством специального PHP скрипта выбирает из БД информацию о выводимых точках и отдает ее в SAS.Планету в виде картинок и/или слоя KML. 
- 
-Обращение к БД реализуется по-разному, в зависимости того, в каком режиме используется 1С - файловом или серверном. 
-При __использовании 1C в файловом варианте__ необходима выгрузка информации на сервер БД. (Есть еще вариант с веб-компонентой, его рассмотрим в другой раз).  
-Пример выгрузки денных из конфигурации Управление торговлей, ред 10.3 
- 
-**1**. Установите у себя пример базы данных в соответствие с инструкцией 
- 
-**2**. Установите [[http://www.mysql.com/downloads/connector/odbc/|MySQL ODBC Connector 5.1]] 
- 
-**3**. Скачайте обработку выгрузки: Выгрузка в САС.epf 
- 
-**4**. Откройте обработку в режиме "1С:Предприятие". (Я использовал "демонстрационную" базу "Управление торговлей"). 
- 
-Основная форма обработки: 
- 
-{{:playground:sas_and_1c:vygruzka_epf.png|}} 
- 
-**1**. Нажмите кнопку "Добавить характеристики". После этого для справочника "Контрагенты" будут добавлены дополнительные свойства: 
- 
-{{:playground:sas_and_1c:svoistva.png|}} 
- 
-//Широта//, //Долгота// - географические координаты. ВНИМАНИЕ: поскольку в конфигурации "Управление Торговлей ред. 10.3" для дополнительных свойств типа число всегда установлена точность 15.3, то десятичная точка в координатах сдвинута на 6 знаков вправо. Вместо 55.123456 вводим 55123456. 
-Разумеется, в реальном применении можно добавить реквизиты с нужной точностью. В демонстрационном примере это сделано только для того, чтобы обеспечить его работу без внесения изменений в конфигурацию БД. 
- 
-//Комментарий// - строка, до 50 символов. 
- 
-//Иконка// - название файла с иконкой. В демо-примере есть следующие файлы: (7k.png, auchan.png. metro.png. x5.png, tande.png, victoria.png, sweetlife.png, spar.png). Если иконка не задана, или такого файле нет, то используется иконка noicon.png 
- 
-//Раскраска// - цвет комментария, указывается число в интервале 0-19 
- 
-**2**. В справочнике "Контрагенты" укажите соответствующие значения для нескольких контрагентов 
- 
-**3**. В форме обработки укажите параметры подключения к MySQL серверу 
- 
-**4**. Нажмите кнопку "Выгрузить". 
- 
-**5**. Обновите слои с точками в SAS.Планете (Масштаб увеличить - подождать 4 секунды - масштаб уменьшить). 
- 
-Более удобен для работы c SAS.Планета __серверный вариант использования 1С__. То есть сервер уже есть и можно читать информацию можно непосредственно из БД. 1С, не заводя промежуточной базы Благодаря этом на карте будет всегда актуальная информация, причем никаких действий со стороны 1С выполнять не потребуется. 
- 
-1С 8 версии может работать с различными серверами БД, однако наиболее широкое распространение получила связка 1С + MS SQL, а в качестве операционной системы - Windows Server различных версий. 
- 
-PHP (я использовал версию 5.2) имеет встроенные средства для работы с MS SQL. Однако, поскольку PHP + MS SQL (не путать с MySQL) используется не очень часто, то модуль MSSQL по умолчанию в PHP выключен. Его надо включить - раскомментировать строчку  
-<code>extension=php_mssql.dll</code> 
-в разделе extensions файла php.ini 
-А также из каталога windows\system32 MSSQL сервера взять файл ntwdblib.dll и скопировать его в соответствующий каталог сервера, где стоит Apache (и еще можно в каталог PHP). Если этого не сделать, то в логе Апача будет сообщение о проблемах в модуле mssql и ни слова об отсутствующей dll ке. 
-Функции PHP для работы с MSSQL аналогичны функциям для работы с MySQL. 
- 
-Осталось найти нужные поля в SQL базе 1С. Дело в том, что 1С встроенными средствами названия полей не показывает. Проще всего будет воспользоваться готовой обработкой, например: 
-http://ocvita.ru/content/view/81/ 
-(совсем простая) 
-или 
-http://infostart.ru/public/16282/ 
-(посложнее) 
-http://infostart.ru/public/19821/ 
-(совсем навороченная) 
- 
-В итоге у Вас должно получится что-то вроде такого: 
-<code php> 
-function gettotallabel($x1, $y1, $x2, $y2, $begdate, $enddate) { 
- $arr = array(); 
- $bcolor1 = array(255, 255, 255); 
- $bcolor2 = array(224, 224, 224); 
- 
- $t_sk = '_Reference6896'; // склады контрагентов 
- $t_sk_x = '_Fld6917'; // долгота 
- $t_sk_y = '_Fld6916'; // широта 
- 
- $t_ml = '_Document6904'; // 
- $t_mlm = '_Document6904_VT7017'; // маршрутный лист маршрут 
- $t_mlm_id = '_Document6904_IDRRef'; 
- $t_mlm_zadanie = '_Fld7019RRef'; 
- 
- $t_orders = '_Document6903'; // заказы 
- $t_orders_weight = '_Fld6961'; // вес 
- $t_orders_sk = '_Fld6952RRef'; // всего количество 
- $t_orders_datefinal = '_Fld7329'; // окончательная дата 
- 
- $sBegdateStart = date('Ymd', $begdate); 
- $sBegdateEnd = date('Ymd', $begdate + 24 * 3600); 
- $sEnddateEnd = date('Ymd', $enddate + 24 * 3600); 
- 
- // заказы на текущий день НЕ на маршруте 
- $query = " 
- SELECT 
- COUNT(*) AS kolvoOrders, 
- COUNT(DISTINCT orders.$t_orders_sk) AS kolvoPoints, 
- SUM(orders.$t_orders_weight) AS weight 
- FROM 
- $t_orders AS orders 
- WHERE 
- orders.$t_orders_datefinal='$sBegdateStart' 
- AND orders._IDRRef IN 
- (SELECT orders_IDRRef FROM #ordersnoroute)"; 
- $result = my_mysql_query($query); 
- $rowFree = mssql_fetch_assoc($result); 
-</code> 
- 
-Необходимо иметь в виду, что идентификаторы таблиц и полей в 1С не являются постоянным, т.е. если выгрузить конфиграцию, где добавлены таблицы/поля (не всю БД) из одной базы и загрузить в другую, то эти добавленные таблицы/поля могут получить уже другие идентификаторы. 
- 
-Поскольку в наиболее распространенных типовых конфигурациях 1С готовых полей для хранения координат нет, уже настроенный скрипт привести не могу. Но надеюсь, что на основании изложенного здесь принципа и примера скрипта тут, который можно взять за основу написать скрипт под конкретную базу 1С проблем не составит. 
- 
-Что мы получаем на выходе 
- 
-Красивую картинку на карте - это понятно. Но не только ее 
- 
-**1**. Возможность использования для каждого места лучшей карты 
-Преимущество использования программы SASПланета в данном случае в том. что мы не привязаны к какой-либо конкретной карте. И чем дальше от столицы, тем это важнее. Ведь качество наиболее популярных в интернете карт, обратно пропорционально удалению от Москвы. Если уж на часто используемой карты от Google канал им. Москвы (а это, прямо скажем, не деревенская улица и даже не МКАД) заканчивается у платформы Морозки 
- 
-{{:playground:sas_and_1c:moscowchannel.png?442}} 
- 
-То говорить о каком-либо качестве карт километров хотя бы за 100 от столицы уже не приходится. 
- 
-**2**. Полный контроль над формируемой картой (слоем). Например в ситуации: что делать, когда точек в тайле слишком много. Если выводить все, то имеем мешанину: 
- 
-{{:playground:sas_and_1c:overplaced.png?442}} 
- 
-На мой взгляд, это неудобно. 
- 
-Другой вариант, который применяется например в слое Panoramio - выводить часть точек. Но он тоже не дает полной картины. Поэтому я лично в таком случае просто вывожу сообщение и большом количестве объектов в тайле: 
- 
-{{:playground:sas_and_1c:many_objects.png?442}} 
- 
-**3**. Возможность автономной (без интернета) работы (благодаря умению SAS Планеты работать с кэшем) 
  
/home/sasgisor/public_html/wikisasiya/data/attic/playground/1c_и_sas.планета.1306679388.txt.gz · Последнее изменение: (внешнее изменение)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki