Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> 1C 8.2 и Google Maps          
Vofka Подменю пользователя
сообщение 09.08.11, 8:53
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Была поставлена задача [необходимо зарегистрироваться для просмотра ссылки].

После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было решено использовать геокодирование сервиса Google и Google Visualization для отображение элементов на карте.

Геокодирование – процесс преобразования адресов·(Украина, Киевская область, Киев, Крещатик 20) в географические координаты (широта 37.423021 и долгота -122.083739), которые можно использовать для размещения маркеров или расположения карты. Подробно про геокодирование можно почитать [необходимо зарегистрироваться для просмотра ссылки].

Для работы с геокодированием необходимо [необходимо зарегистрироваться для просмотра ссылки] API карт Google. В демонстрационной конфигурации его надо прописать в константу КлючКарта.

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

И так, собственно программная реализация.

В конфигурации есть две общих формы:
  • Форма подбора координат. Данная форма формирует запрос на геокодирование и обрабатывает результат.
  • Форма отображения объектов. Данная форма использует [необходимо зарегистрироваться для просмотра ссылки]. В частности данная форма использует визуализацию [необходимо зарегистрироваться для просмотра ссылки].


Запрос и обработка результата геокодирования.

Формирование запроса происходит с ключом output=csv, для вывода результата запроса в csv файл. После выполнения запроса проверяется код результата запроса и разбор csv файла на широту и долготу.

#НаСервере
Процедура ОтправитьЗапросНаПоискКоординат()
   Город = Параметры.ОбъектПодбора.Город.Наименование;
   Страна = Параметры.ОбъектПодбора.Город.Владелец.Владелец.Наименование;
   Адрес = Параметры.ОбъектПодбора.Адрес;
   ПараметрПоиска = Страна + " " + Город + " " + Адрес;

   АдресOutput = ПолучитьИмяВременногоФайла();
   Ключ = Константы.КлючКарта.Получить();
   ТекстСсылки = "maps/geo?q=" + EncodeURL(ПараметрПоиска)+"&output=csv&oe=utf8&sensor=false&key=" + Ключ;
   ПроксиСервер = Неопределено;
   HTTPСервис = Новый HTTPСоединение("maps.google.com",,,,ПроксиСервер,Ложь);
   ПравильностьВыполнения = Истина;

   Попытка
      HTTPСервис.Получить(ТекстСсылки, АдресOutput);
   Исключение
      Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
      ПравильностьВыполнения = Ложь;
   КонецПопытки;

   Если ПравильностьВыполнения Тогда
      // Распарсить результат ответа поиска
      Текст = Новый ТекстовыйДокумент;
      Текст.Прочитать(АдресOutput);
      РезультатПоиска = Текст.ПолучитьСтроку(1);

      КодРезультата = Лев(РезультатПоиска,3);
      РезультатПоиска = Сред(РезультатПоиска, 7, СтрДлина(РезультатПоиска));

      Если КодРезультата <> "200" Тогда
         Возврат;
      КонецЕсли;

      Широта = Число(Сред(РезультатПоиска,0,10));
      Долгота = Число(Сред(РезультатПоиска,12,10));
   КонецЕсли;
КонецПроцедуры


Формирование карты отображения

При формировании отображения объекта на карте к стандартному коду визуализации добавлен следующий:

if(!google.visualization) setTimeout(checkIfGoogleLoad, 1000);
      else drawMap();


Это связано с тем, что платформа не хочет сразу обновлять фрейм поля html документа.

#НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   СсылкаНаБазу = ПолучитьНавигационнуюСсылкуИнформационнойБазы();
   APIГугла = Константы.КлючКарта.Получить();

   ТаблицаОбъектовДляВывода = Новый ТаблицаЗначений;
   ТаблицаОбъектовДляВывода.Колонки.Добавить("Наименование",Новый ОписаниеТипов("Строка"));
   ТаблицаОбъектовДляВывода.Колонки.Добавить("Город",Новый ОписаниеТипов("Строка"));
   ТаблицаОбъектовДляВывода.Колонки.Добавить("Адрес",Новый ОписаниеТипов("Строка"));
   ТаблицаОбъектовДляВывода.Колонки.Добавить("Широта",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,6)));
   ТаблицаОбъектовДляВывода.Колонки.Добавить("Долгота",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,6)));
   Если Параметры.ОтображатьСОтветственными Тогда
      ТаблицаОбъектовДляВывода.Колонки.Добавить("Ответственный",Новый ОписаниеТипов("Строка"));
   КонецЕсли;

   Для Каждого ТекЭлемент Из Параметры.ОбъектыДляОтображения Цикл
      КоординатыОбъекта = ОбщийМодульКартаСервер.ПолучитьКоординатыОбъекта(ТекЭлемент.Значение.ОбъектПосещения);
      Если КоординатыОбъекта = Неопределено Тогда
         Продолжить;
      Иначе
         НоваяСтрока = ТаблицаОбъектовДляВывода.Добавить();
         НоваяСтрока.Наименование = ТекЭлемент.Значение.ОбъектПосещения.Наименование;
         НоваяСтрока.Город = ТекЭлемент.Значение.ОбъектПосещения.Город.Наименование;
         НоваяСтрока.Адрес = ТекЭлемент.Значение.ОбъектПосещения.Адрес;
         НоваяСтрока.Широта = КоординатыОбъекта[0];
         НоваяСтрока.Долгота = КоординатыОбъекта[1];
         Если Параметры.ОтображатьСОтветственными Тогда
            НоваяСтрока.Ответственный = ТекЭлемент.Значение.Ответственный.Наименование;
         КонецЕсли;
      КонецЕсли;
   КонецЦикла;

   ТекстСкрипта = "data.addRows(" + Строка(ТаблицаОбъектовДляВывода.Количество()) + ");";
   Сч = 0;
   Для Каждого ТекСтрока Из ТаблицаОбъектовДляВывода Цикл
      ТекстСкрипта = ТекстСкрипта + " data.setCell(" + Строка(Сч) + ", 0, " +СтрЗаменить(Строка(ТекСтрока.Широта),",",".") + ");";
      ТекстСкрипта = ТекстСкрипта + " data.setCell(" + Строка(Сч) + ", 1, " +СтрЗаменить(Строка(ТекСтрока.Долгота),",",".") + ");";
      ТекстСкрипта = ТекстСкрипта + " data.setCell(" + Строка(Сч) + ", 2, '" +Строка(ТекСтрока.Наименование) + " "
      + Строка(ТекСтрока.Город) + " " + Строка(ТекСтрока.Адрес) + " " + ?(Параметры.ОтображатьСОтветственными, ".Ответственный: " + Строка(ТекСтрока.Ответственный), "") + " " + "');";
      Сч = Сч + 1;
   КонецЦикла;

    СтраницаХТМЛ = "
|
|    <script type="text/javascript"><!--mce:0--></script>
|    <script type="text/javascript"><!--mce:1--></script>
|
|
|
|

|    <script type="text/javascript"><!--mce:2--></script>
|
|";

КонецПроцедуры


Скачать демо-конфигурацию можно [необходимо зарегистрироваться для просмотра ссылки].

[необходимо зарегистрироваться для просмотра ссылки]

Спасибо сказали: logist,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 24.04.24, 23:21
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!