Имя: Пароль:
1C
1С v8
Построение многоугольника на карте Яндекс API по координатам из справочника 1С
,
0 Kuklachel
 
28.05.13
14:15
Добрый день. Есть такая задача. На форме 1С отображать карту с контуром здания по координатам заранее внесенным в справочник. В макете я пишу такой скрипт JS:
[CODE]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <title></title>

   <script src="http://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU" type="text/javascript"></script>
       
      <style type="text/css">
        html, body, #map {
           width: 100%;
           height: 100%;
           margin: 0;
           padding: 0;
       }
       </style>
<script type="text/javascript">
var myMap;
var myPolygon;
var myButton;

// Дождёмся загрузки API и готовности DOM.
ymaps.ready(init);

function init () {

   myMap = new ymaps.Map('map', {
       center:[55.74131, 37.52620],
       zoom:16
   });
        myMap.behaviors.enable('scrollZoom');
       myMap.controls.add(
       new ymaps.control.ZoomControl()
        );
      myMap.controls.add('typeSelector');
       
        //второй контур
      function AddPolygon(Name, Descr, Cont, Att, Latt, Params) {
     
      myPolygon = new ymaps.Polygon([
       [
               [Att, Latt],
     ],
   ], {
       balloonContent: Name,
       hintContent: Descr
   }, {
       fillColor: 'FF3030',
       strokeColor: '#CD2626',
       opacity: 0.5,
       strokeWidth: 1.5,
       strokeStyle: 'solid'
   });
        myMap.geoObjects.add(myPolygon);
       //myPolygon.options.set("zIndex",750)
        return myPolygon;
      }
      function AddGroup(Name, Descr, Cont, Latt, Att, Params)   {
     
      }
   //Создаем кнопку
    myButton = new ymaps.control.Button('<b>Редактировать контур<b>');
   
   myButton.events
    .add('click', function () {})
    .add('select', function () {myPolygon.editor.startEditing();})
    .add('deselect', function () {myPolygon.editor.stopEditing();});
   
   myMap.controls.add(myButton);
}
</script>
</head>

<body>
   <div id="map"></div>
</body>

</html>
[/CODE]

Далее, в модуле формы:
[CODE] &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
 
  ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
 
  Макет = ОбработкаОбъект.ПолучитьМакет("Макет");
  ТекстHTML = Макет.ПолучитьТекст();

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

&НаСервере
Функция ПолучитьТБЗ(Параметр1 = Неопределено)

  тбз.Загрузить(Справочники.КоординатыОбъектов.НайтиПоНаименованию(Параметр1).Координаты.Выгрузить());
 
  Возврат Истина;

КонецФункции


&НаКлиенте
Процедура ПриОткрытии(Отказ)
 
  ПолучитьТБЗ("КоординатыОбъектов");
  Для Каждого Поле Из ТБЗ Цикл
     
     Широта = Поле.Широта;
     Долгота = Поле.Долгота;
     
     Элементы.ТекстHTML.Документ.parentWindow.eval("AddPolygon(""" + Формат(Широта, "ЧРД=.; ЧГ=0") + ", " + Формат(Долгота, "ЧРД=.; ЧГ=0") + ")");
     
  КонецЦикла;

КонецПроцедуры
[/CODE]

Вроде все верно. До этого я писал обработку с простановкой маркеров на карте, по координатам из табличной части формы, у меня все отлично работало. Но здесь выдает ошибку "Метод объекта не обнаружен (eval)"! Помогите, пожалуйста, может кто-то сталкивался с данной проблемой.
1 pavelul73
 
28.05.13
14:17
Может пытаешься получить координаты раньше, чем поле отобразилось на форме?
У меня была похожая прооблема
2 sda553
 
28.05.13
14:18
3 Kuklachel
 
28.05.13
14:38
Я делал так как в той теме. Пробовал делать табличную часть в форме, вбивать туда координаты и по кнопке выводить, выдает ошибку : Ошибка при вызове метода контекста (eval)
4 pavelul73
 
28.05.13
15:31
попробуй сначала выводить просто карту, а потом вбивать координаты и нажимать на кнопку
5 Kuklachel
 
28.05.13
16:31
Сейчас я так и делаю, вывожу карту, в табличной части вбиваю координаты и нажимаю кнопку.
[CODE]  &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   
     ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
   
   Макет = ОбработкаОбъект.ПолучитьМакет("Макет");
   ТекстHTML = Макет.ПолучитьТекст();
   
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
   
   Для каждого Реквизит Из Объект.КоординатыОбъектов Цикл
       
   ИмяМетки       = "Дом";
   ОписаниеМетки  = "Организация";
   Широта  = Реквизит.Широта;
   Долгота = Реквизит.Долгота;
   
   Элементы.ТекстHTML.Документ.parentWindow.eval(
   "AddPolygon(""" + ИмяМетки + """, """ + ОписаниеМетки + """, " + Формат(Широта, "ЧРД=.; ЧГ=0") + ", " + Формат(Долгота, "ЧРД=.; ЧГ=0") + ")");
           
   КонецЦикла;
КонецПроцедуры
[/CODE]
В этом методе столкнулся с другой ошибкой "значение свойства AddPolygon или является null, или оно не определено, или не является объектом Function"
6 Dethmont
 
28.05.13
16:49
Сообщить("Всего скриптов: "+Элементы.ТекстHTML.Документ.scripts.length);
7 Kuklachel
 
28.05.13
17:15
А что это даст? Всего скриптов:4.
8 Kuklachel
 
29.05.13
08:57
Доброе утро. Идеи кончились?
9 sikuda
 
29.05.13
09:23
Зачем eval и parentWindow. Я динамически собираю страницу и использую типа ready и onclick http://sikuda.ru/1s-i-html5/
10 Kuklachel
 
29.05.13
11:56
Я, к сожалению, не знаю как решить мою задачу с помощью вашего способа.
11 Kuklachel
 
29.05.13
15:41
Неужели больше нет идей?
12 Kuklachel
 
30.05.13
09:41
up
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс