Как запустить работу Google Maps в поле HTML формы 1С?

10 Comments

  1. dsdred

    ХМ странно… Вы выложили ссылку на статью (https://infostart.ru/public/551972/) в которой в комментариях написано, что стандартный метод ПрочитатьJSON в разы быстрее работает метода из статьи и автор статьи в комментариях это подтверждает…

    Но выбрали все равно более медленный и более громоздкий способ…

    //Всего 3 строчки кода

    ЧтениеJSON = Новый ЧтениеJSON;

    ЧтениеJSON.УстановитьСтроку(e.dataFld);

    eventData= ПрочитатьJSON(ЧтениеJSON);

    Reply
  2. azhilichev

    Потерпите чуть-чуть, и перейдем на WebKit. Должно быть в разы лучше.

    Reply
  3. Green2

    (1)Спасибо за замечание, оказывается эти функции реализуются простой функцией ПрочитатьJSON()

    Примененная функция хороша только в одном случае, когда передаются переменные типа Дата. И стандартным способом десерилизацию провести нельзя. Хотя и даже для Дата можно сделать простым способом. Если типы простые, то все решается одной функцией.

    Я первый раз делал такую задачу, и заодно изучал работу JSON.

    Из за распространенности данного формата в веб приложениях, я думаю, это будет одна из самых востребованных функций.

    Например, я сейчас делаю модуль обмена специфической конфигурации 1С с Битрикс 24, и обмен в формате JSON.

    Reply
  4. dsdred
    Reply
  5. gubanoff

    (0) может знаете решение проблемы не по теме: в управляемом приложении в ПолеHTML 1С не переходит по ссылкам на якори.

    |<P><A name=НачалоДокумента>Якорь</A></P>
    |<P></P>
    |<P></P>
    |<P></P>
    |<P>Перейти к якорю</P>
    

    Может есть какое-то решение на javascript?

    Reply
  6. as

    Непонятно почему вы решили, что IE11 не работает.

    Я делаю так:

    <head>
    <met a http-equiv=»X-UA-Compatible» content=»IE=11″ />
    </head>
    <body>
    <button id=»SentDataButton1c» style=»display: none»></button>
    </body>
    
    
     function sentData(message) {
    errStr = «»;
    success = false;
    try {
    if (parentForm == undefined) {
    SentDataButton1cData = message;
    SentDataButton1c.click();
    success = true;
    }
    }
    catch(e) {
    errStr += e.message;
    };
    try {
    if (!success) parentForm.sentData(message);
    } catch (e) {
    errStr += e.message;
    alert(errStr);
    };
    };

    Показать

    При это этот код работает под всеми платформами: win,linux, mac и web(проверял только Chrome).

    Из 1С после обработки события доступны переменные объекта ПолеХТМЛ через ВнешнийОбъект

    &НаКлиенте
    Функция ПолучитьВнешнийОбъектХТМЛ(ПолеХТМЛ) Экспорт
    
    СисИнфо = Новый СистемнаяИнформация;
    Если Найти(СисИнфо.ТипПлатформы,»Windows») = 0 Тогда
    Возврат ПолеХТМЛ.Документ.defaultView;
    Иначе
    #Если не ВебКлиент Тогда
    Возврат ПолеХТМЛ.Документ.parentWindow;
    #КонецЕсли
    КонецЕсли;
    Попытка
    Если Найти(СисИнфо.ИнформацияПрограммыПросмотра, «MSIE») = 0 Тогда
    Возврат ПолеХТМЛ.Документ.defaultView;
    Иначе
    Возврат ПолеХТМЛ.Документ.parentWindow;
    КонецЕсли;
    Исключение
    Возврат Неопределено;
    КонецПопытки;
    
    КонецФункции

    Показать

    Что важно, код продолжит работать после появления WebKit под Windows.

    Reply
  7. Green2

    (6)

    parentForm

    (6)

    SentDataButton1cData

    Я проанализировал код и не понял, что это за переменные, как они объявляются.

    Предположу, что parentForm это document.body?

    А SentDataButton1cData это просто определение переменной через var?

    Reply
  8. as

    (7) parentForm это ссылка на форму 1с внутри JS, а SentDataButton1cData просто переменная с данными.

    Я заполняю их так:

      var initialized, parentForm;
    var SentDataButton1cData;
    function initialize(thisForm) {
    parentForm = thisForm;
    initialized = true;
    };

    initialize вызывается из 1С для инициализации.

    Reply
  9. Sheff

    (8) IE=11 не работает и у меня.

    Делаю вот так

    <ht ml>

    <head>

    <met a http-equiv=»X-UA-Compatible» content=»IE=11″>

    <st yle type=»text/css»>

    html { height: 100% }

    body { height: 100%; margin: 0px; padding: 0px }

    #map { height: 100% }

    </style>

    <sc ript async defer src=»https://maps.googleapis.com/maps/api/js?key=<ключ>&callback=initMap» type=»text/javascript»></sc ript>

    <далее скрипт>

    <body on load=»initMap()»>

    <div id=»map» style=»width:100%; height:100%»></div>

    <input type=»hidden» id=»CoordX» name=»CoordX» value=»0″></input>

    <input type=»hidden» id=»CoordY» name=»CoordY» value=»0″></input>

    <input type=»hidden» id=»RouteInfo» name=»RouteInfo» value=»»></input>

    <input type=»hidden» id=»WebClientOperation» name=»WebClientOperation» value=»0″></input>

    <input type=»hidden» id=»WebClient» name=»WebClient» on click=»WebClientClick();»></input>

    </body>

    </html>

    Всё. Вот это вот не работает.

    На форме 1С просто белое поле и всё.

    Reply
  10. as

    А вы для начала попробуйте без 1C в IE это открыть. Скорее всего у вас ошибки в html

    Reply

Leave a Comment

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