Имя: Пароль:
1C
1С v8
вызов js функции в 8.3.14
0 digitta
 
16.05.19
18:44
Добрый вечер. Подскажите, пожалуйста, как вызвать js из 1С. Я совсем не знаю JS, а изучать его с нуля нет времени сейчас. Суть: В версии 8.3.14 в свойство Документ элемента ПолеHTMLДокумента содержит ВнешнийОбъект. Это мой HTML-документ, в котором объявлена функция func(str). Как её вызвать и передать ей параметр - текстовую строку. Делаю так:

Элементы.HTML_документ.Документ.window.eval(func('текст_строки'));

Естественно, не работает.....
1 Garykom
 
гуру
16.05.19
18:47
http://catalog.mista.ru/public/398366/

Eval нету и Документ.parentWindow нету

Есть Элементы.HTML_документ.Документ.defaultView

Перевод с модели IE на модель Webkit 8.3.14 платформа
2 Garykom
 
гуру
16.05.19
18:48
Нечто вроде
Элементы.HTML_документ.Документ.defaultView.func('текст_строки')
попробуй
3 digitta
 
16.05.19
18:55
Неправильная константа типа Дата
    Элементы.HTML_документ.Документ.defaultView.func(<<?>>'текст_строки');
4 Garykom
 
гуру
16.05.19
18:59
(3) Кавычки исправь
5 digitta
 
16.05.19
19:06
Поправил. Теперь ошибка теперь не вылетает, но функция не отрабатывает.
6 Garykom
 
гуру
16.05.19
19:07
(5) Добавь в функцию Alert("Сообщение") что будет?
7 Garykom
 
гуру
16.05.19
19:10
И да не факт что функция рабочая после смены движка IE на WebKit
8 Garykom
 
гуру
16.05.19
19:15
У меня например в 1С:Предприятие 8.3 (8.3.14.1565) так работает прекрасно
9 digitta
 
16.05.19
19:17
не выводит сообщение, значит не входит в функцию. платформа у меня та же
10 digitta
 
16.05.19
19:18
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;
<html xmlns="http://www.w3.org/1999/xhtml">;
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=8">
    <style type="text/css">
      html { height: 100% }
      body { height: 100%; margin: 0px; padding: 0px }
      #map { height: 100% }
    </style>
    <script src="https://api-maps.yandex.ru/2.1/?apikey=3ebf705a-b58a-4352-87a4-60f03edd2119&load=package.full&lang=ru_RU"></script>;
    <script src="http://yandex.st/jquery/1.6.4/jquery.min.js"; type="text/javascript"></script>

    <script type="text/javascript">
    var index = 1;
    var MyMap, route;
    var clusterer;
    var PointArray = [];
    var noclick = false;


    ymaps.ready(init)
    
        function init() {
        var myMap = new ymaps.Map('map', {
            center: [55.753994, 37.622093],
            zoom: 9
        });
        
       //window.addEventListener('load', findAdress('Витебск');
    }
    
    function findAdress(address) {
        Alert("Сообщение");
            // Поиск координат центра Нижнего Новгорода.
        ymaps.geocode(address, {
            /**
             * Опции запроса
             * see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/geocode.xml
             */
            // Сортировка результатов от центра окна карты.
            // boundedBy: myMap.getBounds(),
            // strictBounds: true,
            // Вместе с опцией boundedBy будет искать строго внутри области, указанной в boundedBy.
            // Если нужен только один результат, экономим трафик пользователей.
            results: 1
        }).then(function (res) {
                // Выбираем первый результат геокодирования.
                var firstGeoObject = res.geoObjects.get(0),
                    // Координаты геообъекта.
                    coords = firstGeoObject.geometry.getCoordinates(),
                    // Область видимости геообъекта.
                    bounds = firstGeoObject.properties.get('boundedBy');

                firstGeoObject.options.set('preset', 'islands#darkBlueDotIconWithCaption');
                // Получаем строку с адресом и выводим в иконке геообъекта.
                firstGeoObject.properties.set('iconCaption', firstGeoObject.getAddressLine());

                // Добавляем первый найденный геообъект на карту.
                myMap.geoObjects.add(firstGeoObject);
                // Масштабируем карту на область видимости геообъекта.
                myMap.setBounds(bounds, {
                    // Проверяем наличие тайлов на данном масштабе.
                    checkZoomRange: true
                });
                /**
                 * Если нужно добавить по найденным геокодером координатам метку со своими стилями и контентом балуна, создаем новую метку по координатам найденной и добавляем ее на карту вместо найденной.
                 */
                /**
                 var myPlacemark = new ymaps.Placemark(coords, {
                 iconContent: 'моя метка',
                 balloonContent: 'Содержимое балуна <strong>моей метки</strong>'
                 }, {
                 preset: 'islands#violetStretchyIcon'
                 });

                 myMap.geoObjects.add(myPlacemark);
                 */
            });
    }
    
</script>
</head>

<body>
    <div id="map" style="width:100%; height:100%"></div>
        
    <input type="hidden" id="address" name="address" value="Полоцк, проспект Скорины 2"/>
    <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" onclick="WebClientClick();"></input>
</body>
</html>
11 Garykom
 
гуру
16.05.19
19:19
Кстати кто в курсе как глянуть в WebKit ошибки JavaScript и загрузки страницы в целом?

Вот написал вместо
function test(ttt){
просто
func test(ttt){ // сча на голанг просто перестроился
и результат ноль

Как бы глянуть то страница нормально сформировалась или нет?
12 digitta
 
16.05.19
19:20
из 1с вызываю findAdress(address)

стр = "Витебск";                                                        
Элементы.ЯндексКарта.Документ.defaultView.findAdress(стр);
13 Garykom
 
гуру
16.05.19
19:23
Дай код страницы в нормальном виде файлом через обменник какой
14 Garykom
 
гуру
16.05.19
19:24
(13)+ В смысле весь .html
15 digitta
 
16.05.19
19:29
16 Garykom
 
гуру
16.05.19
19:31
(15) файлы были удалены https://i.paste.pics/7042bab2abdee4951f48f173811c0176.png
17 Garykom
 
гуру
16.05.19
19:33
блин просто сюда но оформи в теги Книга знаний: Кнопка для вставки в сообщения тегов
""
18 Garykom
 
гуру
16.05.19
19:33
(17) +
19 digitta
 
16.05.19
19:33
сорри... там одно скачиание указано было... перезалил
https://dropmefiles.com/laQej
20 Garykom
 
гуру
16.05.19
19:33

Примерно так
21 digitta
 
16.05.19
19:46
скачался из файлообменника?
22 Garykom
 
гуру
16.05.19
19:47
(21) Да и свои добавленные функции даже не отрабатывают.

Короче надо изучать исходники там походе некое подавление идет или глюки какие то.
В пустой html странице или без левых скриптов все пашет.
23 digitta
 
16.05.19
19:51
пашет (
24 Garykom
 
гуру
16.05.19
20:12
Короче предложу сразу инициализировать с переданными данными для геокодера.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;
<html xmlns="http://www.w3.org/1999/xhtml">;
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=8">
    <style type="text/css">
      html { height: 100% }
      body { height: 100%; margin: 0px; padding: 0px }
      #map { height: 100% }
    </style>
    <script src="https://api-maps.yandex.ru/2.1/?apikey=3ebf705a-b58a-4352-87a4-60f03edd2119&load=package.full&lang=ru_RU"></script>;
    <script src="http://yandex.st/jquery/1.6.4/jquery.min.js"; type="text/javascript"></script>

    <script type="text/javascript">
    var index = 1;
    var MyMap, route;
    var clusterer;
    var PointArray = [];
    var noclick = false;

    ymaps.ready(init);

    function init(){
            ymaps.geocode('Архангельск').then(function (res) {
                myMap = new ymaps.Map('map', {
                    center: res.geoObjects.get(0).geometry.getCoordinates(), zoom: 10
                });
        });
        }
    
    function findAdress(address) {
        Alert("Сообщение");
            // Поиск координат центра Нижнего Новгорода.
        ymaps.geocode(address, {
            /**
             * Опции запроса
             * see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/geocode.xml
             */
            // Сортировка результатов от центра окна карты.
            // boundedBy: myMap.getBounds(),
            // strictBounds: true,
            // Вместе с опцией boundedBy будет искать строго внутри области, указанной в boundedBy.
            // Если нужен только один результат, экономим трафик пользователей.
            results: 1
        }).then(function (res) {
                // Выбираем первый результат геокодирования.
                var firstGeoObject = res.geoObjects.get(0),
                    // Координаты геообъекта.
                    coords = firstGeoObject.geometry.getCoordinates(),
                    // Область видимости геообъекта.
                    bounds = firstGeoObject.properties.get('boundedBy');

                firstGeoObject.options.set('preset', 'islands#darkBlueDotIconWithCaption');
                // Получаем строку с адресом и выводим в иконке геообъекта.
                firstGeoObject.properties.set('iconCaption', firstGeoObject.getAddressLine());

                // Добавляем первый найденный геообъект на карту.
                myMap.geoObjects.add(firstGeoObject);
                // Масштабируем карту на область видимости геообъекта.
                myMap.setBounds(bounds, {
                    // Проверяем наличие тайлов на данном масштабе.
                    checkZoomRange: true
                });
                /**
                 * Если нужно добавить по найденным геокодером координатам метку со своими стилями и контентом балуна, создаем новую метку по координатам найденной и добавляем ее на карту вместо найденной.
                 */
                /**
                 var myPlacemark = new ymaps.Placemark(coords, {
                 iconContent: 'моя метка',
                 balloonContent: 'Содержимое балуна <strong>моей метки</strong>'
                 }, {
                 preset: 'islands#violetStretchyIcon'
                 });

                 myMap.geoObjects.add(myPlacemark);
                 */
            });
    }
    
</script>
</head>

<body>
    <div id="map" style="width:100%; height:100%"></div>
        
    <input type="hidden" id="address" name="address" value="Полоцк, проспект Скорины 2"/>
    <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" onclick="WebClientClick();"></input>
</body>
</html>

25 Garykom
 
гуру
16.05.19
20:13
(24)+ Короче на лету страницу перестраивай и вызывай с новыми текстом html где внутри уже прописано что надо.

Изврат конечно но что поделать.
26 digitta
 
16.05.19
20:18
ну так-то работает, но хочется изящного решения. да и разобраться тоже в чем там у меня дело тоже хлчеться - может когда-нибудь снова будет нужно мне или кому-нибудь
27 Garykom
 
гуру
16.05.19
20:20
Это 1С, это хардкор!
28 Garykom
 
гуру
16.05.19
20:21
Чем хуже чем в коде прописывать Справочники.Номенклатура.НайтиПоКоду("0001") ? :)
29 digitta
 
16.05.19
20:23
не понял
30 Garykom
 
гуру
16.05.19
20:27
(29) Лишь бы работало как надо и устраивало заказчика, наводить красоту некогда.
К черту изящество если для этого надо перелопать весь апи от яндекса чтобы понять где разрешить выполнять сторонний код.

У меня сча почему то не работает перемещение-перетаскивание мышкой по карте, зафиксировано в одном месте.
И я хз что за это отвечает, копаться надо.
31 digitta
 
17.05.19
17:25
Разобрался:
Вызов функции действительно производиться так как вы описали. Но в моем случае её вызов происходил до того как загружалось API ЯндексКарт. Естественно, логика моей функции без загруженного API не отрабатывалась.

Спасибо за помощь!
32 Garykom
 
гуру
17.05.19
17:34
(31) А alert то почему не отрабатывает?
33 digitta
 
17.05.19
22:00
alert был внутри функции.
и у меня такое впечатление, что alert вообще не работает в среде webkit
34 Garykom
 
гуру
17.05.19
22:01
(33) На пустом документе замечательно работает я же проверял.
35 Garykom
 
гуру
17.05.19
22:03
Скорее всего кода загрузки ymaps работает слишком долго и блокирует все прочие вызовы функций.

Надо бы проверить, свою функцию засунуть раньше чем загрузка ymaps