Имя: Пароль:
1C
1С v8
Программное нажатие кнопок на форме
,
0 Kuklachel
 
10.09.13
11:42
Добрый день. Такая задача. Есть форма справочника, в которой введен кадастровый номер земельного участка. Нужно, по кнопке скопировать в буфер обмена этот номер, открыть сайт РосРеестра, 4 раза нажать TAB, вставить из буфера номер и нажать Enter.  
Пока не знаю как скопировать в буфер, полагаю, что через:
Wsh=Новый COMОбъект("WScript.Shell");        
Wsh.SendKeys("^c");  
Делаю так: открываю в форме, кнопкой, сайт РосРеестра через макет:
<SCRIPT>document.location.href = "http://maps.rosreestr.ru";</SCRIPT>;
Далее, мне нужно выполнить следующее:

Wsh = Новый COMОбъект("Wscript.shell");                            
    
Wsh.SendKeys("{TAB}");  
Wsh.SendKeys("{TAB}");
Wsh.SendKeys("{TAB}");
Wsh.SendKeys("{TAB}");

Wsh.SendKeys("^v");
            
Wsh.SendKeys("{ENTER}");

Внимание вопрос! Подскажите, пожалуйста. Как скопировать в буфер значение реквизита и при каком событии отрабатывать нажатие кнопок?
1 Тролль главный
 
10.09.13
11:43
извращенцы
2 Kuklachel
 
10.09.13
11:45
А что делать.
3 shamannk
 
10.09.13
11:45
(0) Делается все проще. В моцк пользователя вживляется чип который говорит ему нажать кнопки.
4 Галахад
 
гуру
10.09.13
11:47
А если Инет тормозить будет? А ты уже все кнопки нажал?
5 Kuklachel
 
10.09.13
11:48
Ну можно использовать "ПодключитьОбработчикОжидания" с запасом.
6 Infsams654
 
10.09.13
11:49
(0) йё, зачем кнопки то нажимать? Есть же уже html-документ, заполняй чем хочеш
7 Kuklachel
 
10.09.13
11:53
(6) А как в HTML документе это проделать?
8 Kuklachel
 
10.09.13
13:47
Неужели нет решения?
9 Asmody
 
10.09.13
14:03
document = ЭлементыФормы.ПолеHTMLДокумента1.Документ;
document.getElementById('serchTextbox').value="qwerty";
document.getElementById('serchButton').click();
10 Asmody
 
10.09.13
14:04
идентификаторы только посмотри в исходнике документа
11 Kuklachel
 
10.09.13
16:36
(10)Спасибо за подсказку.Делаю вот так:

Document = Элементы.Карта.Документ;    
Document.getElementById("searchTextbox").value="qwerty";
Document.getElementById("searchButton").click();

Выдается ошибка: Значение не является значением объектного типа (value)
Document.getElementById("searchTextbox").value="qwerty";
12 Asmody
 
10.09.13
16:45
(11) посмотри в отладчике свойства Document.getElementById("searchTextbox")
13 Kuklachel
 
10.09.13
17:11
Странно, в скрипте сайта:
<div>
<input id="searchTextbox" class="searchTextbox" type="text" title="Поиск земельных участков и единиц кадастрового деления" value="">
<a id="searchButton" class="searchButton" onclick="searchButtonClick(); return false;"> </a>
</div>
То есть ID верные. А в отладчике Document.getElementById("searchTextbox") Неопределено.
14 vvp91
 
10.09.13
17:15
Капитан очевидность - getElementById не ищет по классам.
15 Kuklachel
 
10.09.13
17:17
Ясно, что ищет по ID
16 vvp91
 
10.09.13
17:18
Не ищет - к тегу input аттрибут id не применяется (rfc).
17 vvp91
 
10.09.13
17:19
упс!!!
к тегу input атрибут должен применяться.

поспешил.
18 Kuklachel
 
10.09.13
17:46
Так как же быть, ID тот, а значение не передается? Помогите, пожалуйста.
19 Kuklachel
 
10.09.13
18:52
Удалось добиться свойства Document.getElementById("searchTextbox") отличного от Неопределено. Теперь в отладчике, напротив searchTextbox, стоит: Ошибка чтения значения. В чем может быть проблема?
20 Kuklachel
 
10.09.13
19:04
21 Infsams654
 
11.09.13
08:11
(20) не обращай внимание. Например, если выборку из запроса так смотреть, то тоже "Ошибка чтения значения"
22 Kuklachel
 
11.09.13
08:57
Хорошо, если не обращать внимания, то ошибка: Поле объекта не обнаружено (value)
Document.getElementById("searchTextbox").value = "qwerty";
23 Infsams654
 
11.09.13
09:02
(22) так посмотри в отладчике
Изм = Document.getElementById("searchTextbox");
что там есть на самом деле
24 PLUT
 
11.09.13
09:04
(0) поимей AutoIT
25 Kuklachel
 
11.09.13
09:12
А там до сих пор Неопределено...
26 Kuklachel
 
11.09.13
09:14
А, нет Doc = Document.getElementById("searchTextbox");
Doc - Ошибка чтения значения.
27 Kuklachel
 
11.09.13
10:31
Может быть сайт нужно открывать не через:
<SCRIPT>document.location.href = "http://maps.rosreestr.ru";</SCRIPT>;;  ?
28 Asmody
 
11.09.13
10:36
(27) документ-то загружен к тому моменту, когда ты к его элементам обращаешься?
29 Kuklachel
 
11.09.13
10:44
На форме он появляется до точки останова.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПодключитьОбработчикОжидания("Нажатие", 3);
КонецПроцедуры

&НаКлиенте
Процедура Нажатие()
    Document = Элементы.Карта.Документ;
    Doc = Document.getElementById("searchTextbox");
    Doc.value = "qwerty";
    Document.getElementById("searchButton").click();
КонецПроцедуры
30 shpioleg
 
11.09.13
10:52
(29) У Document тип у тебя какой? Сдается мне, ты рано приступил к getElementById.
31 Asmody
 
11.09.13
10:56
Процедура ПриОткрытии()
    ЭлементыФормы.ПолеHTMLДокумента1.Перейти("http://maps.rosreestr.ru/";);
КонецПроцедуры

Процедура КнопкаВыполнитьНажатие(Кнопка)
    document = ЭлементыФормы.ПолеHTMLДокумента1.Документ;
    if document.readyState = "complete" then
        document.getElementById("searchTextbox").value="61:6:10104:12";
        document.getElementById("searchButton").click();
    endif;
КонецПроцедуры

проверил - работает
32 Asmody
 
11.09.13
10:57
(31) парсер испортил url, но смысл понятен
33 Odavid
 
11.09.13
10:58
(31) а КнопкаВыполнитьНажатие кто нажимает?
34 Kuklachel
 
11.09.13
12:17
(31) А URL должен выглядеть именно так как ты написал? Т.е. с атрибутами target, rel, class?
   И еще, в своем решении ты обошелся без макета?
35 Kuklachel
 
11.09.13
12:37
Какой аналог ЭлементыФормы.ПолеHTMLДокумента1.Перейти "Перейти" в 1с 8.2 ?
36 Kuklachel
 
11.09.13
14:15
Я правильно понял, что в тонком клиенте этот вариант не получится?
37 shpioleg
 
11.09.13
14:39
(35) РеквизитФормыПутьКДанным = "forum.mista.ru";
38 Infsams654
 
11.09.13
15:00
(37) РеквизитФормыПутьКДанным = "v8: Программное нажатие кнопок на форме;;
39 Kuklachel
 
11.09.13
17:43
То есть в моем случае это: Элементы.КартаЗУ.ПутьКДанным = "http://maps.rosreestr.ru/";;

Ругается:
Ошибка при установке значения атрибута контекста (ПутьКДанным)
Элементы.КартаЗУ.ПутьКДанным = "http://maps.rosreestr.ru/";;
по причине:
Недопустимое значение
40 Зойч
 
11.09.13
17:46
Проще послать пост запрос на сайт и обработать полученные данные
41 Asmody
 
11.09.13
17:50
(40) не проще. там javascript
42 Kuklachel
 
11.09.13
18:05
(41) Виктор, у меня получился твой вариант на 8.1 ,вот не могу его заточить под УФ 8.2
43 Asmody
 
11.09.13
18:27
чего не получается?
44 Kuklachel
 
11.09.13
18:32
У тебя:
ЭлементыФормы.ПолеHTMLДокумента1.Перейти("http://maps.rosreestr.ru/";);
В 8.2 нет метода перейти, в таком контексте.

На сколько я понял, мне нужно:
Элементы.КартаЗУ.ПутьКДанным = "http://maps.rosreestr.ru/";;

но выдается ошибка: Ошибка при установке значения атрибута контекста (ПутьКДанным)
Элементы.КартаЗУ.ПутьКДанным = "http://maps.rosreestr.ru/";;;
по причине:
Недопустимое значение
45 Asmody
 
11.09.13
18:46
(44) Элементы.КартаЗУ.Документ.navigate(НужныйУрл);
46 Kuklachel
 
11.09.13
19:01
Ругается: Метод объекта не обнаружен (navigate)
Элементы.КартаЗУ.Документ.navigate("http://maps.rosreestr.ru/";);
Пробовал и с большой и с маленькой буквы.
47 shpioleg
 
11.09.13
19:39
(39) Зачем Элементы.КартаЗУ?
Просто присвой адрес перехода Реквизиту формы который отвечает за ПутьКДанным в ПолеHTML.
У тебя у поля HTML документа есть ПутьКДанным которому ты присвоил строковый реквизит формы, например, РеквизитФормыПутьКДаннымХТМЛСтраницы. Ему и присваивай.

Или JS пробовать еще document.location = ...
То что тебе до этого писали про getElement работает под всеми клиентами. Проверь тип у document. Это или КОМОбъект или ВнешнийОбъект. Ты с ним должен работать через яваскрипт.
48 shpioleg
 
11.09.13
19:46
Вот тоже работает под тонким. Под Веб не могу сейчас проверить.
Элементы.Карта.Document.location.href = "v8: Программное нажатие кнопок на форме;;
49 Kuklachel
 
12.09.13
09:29
Спасибо за помощь.
Сделал так:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
Элементы.КартаЗУ.Документ.location.href = ("http://maps.rosreestr.ru/";);
КонецПроцедуры

&НаКлиенте
Процедура НайтиУч(Команда)
document = Элементы.КартаЗУ.Документ;
if document.readyState = "complete" then     document.getElementById("searchTextbox").value="61:06:0010104:44";
document.getElementById("searchButton").click();
endif;
КонецПроцедуры

Снова ошибка:
{Справочник.ОбъектыНедвижимости.Форма.ФормаЗУНаКарте.Форма(22)}: Поле объекта не обнаружено (value)
document.getElementById("searchTextbox").value="61:06:0010104:44";

Точно такой же обработчик нажатия кнопки в 8.1 работает на ура. В чем же дело?
50 Kuklachel
 
12.09.13
11:04
У Document.getElementById("searchTextbox") Значение - COMОбъект, но если раскрыть его, то Значение - "Ошибка чтения значения".
51 shpioleg
 
12.09.13
11:32
(50) А у тебя сайт росреестр в ХТМЛ поле без ошибок открывается?
У меня 3 ошибки в скриптах выдает. Но поиск все равно работает.Попробуй у поля ХТМЛ в событии ДокументСформирован прописать процедуру и в ней делать присвоение и клик.

&НаКлиенте
Процедура КартаДокументСформирован(Элемент)
//    Попытка
//    Элементы.Карта.Document.getElementById("searchTextbox").value = "Волгоград";
//    Элементы.Карта.Document.getElementById("searchButton").click();
//Исключение
//    КонецПопытки;
КонецПроцедуры
52 Kuklachel
 
12.09.13
11:44
Как удалось выяснить, первый вариант отлично работает в "толстом клиенте", "тонком", карта отображается без ошибок, а поиск не работает.  
Добавил в "ДокументСформирован" присвоение и клик (так даже удобней, без кнопки), тоже выдаются ошибки, правда 2. Но поиск работает.
53 Kuklachel
 
12.09.13
12:14
Ну если все работает, может просто отключить сообщения об ошибках? На форуме нашел обсуждение этой темы: v8: Возможно ли для ПолеHTMLДокумента отключить сообщения об ошибке сценария?
Но у меня вопрос, где у ПоляHTMLДокумента событие onreadystatechange, в 8.1 оно есть, но в 8.2 выбор ограничен тремя событиями.
54 shpioleg
 
12.09.13
13:34
(53) Это полеHTML прямо "черный ящик какой-то". Толкового описания не найдешь.
Кстати,
Asmody, удалось разобраться почему 2 раза срабатывает событие
ДокументСформирован?
55 Kuklachel
 
12.09.13
15:18
Так все-таки, как можно установить обработчик события ПолеHTMLДокумента onreadystatechange?