Вход | Регистрация
    1  2  3  4  5   
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: API IE из 1с 7.7

v7: API IE из 1с 7.7
Я
   DES
 
21.09.14 - 17:52
имеется страница sefsdfsdf.aspx
в ней код:
<INPUT id=Agreement1_AccesServiceBtn type=submit value="Сервис" name=Agreement1$AccesServiceBtn metrikaId_0.5311905="29">

делаю:
objIE = createObject("InternetExplorer.Application");
жду загрузки страницы и т.д. ( на других страницах работало)
выполняю:
objDoc.getElementById("Agreement1_AccesServiceBtn").Submit();

1C отвечает
objDoc.getElementById("EFactura_Agreement1_AccesServiceBtn").Submit();
{Документ.Накладная.Форма.Модуль(2981)}: Поле агрегатного объекта не обнаружено (Submit)

почему так ?
раньше на других страницах вроде бы этот код работал.
   Рэйв
 
1 - 21.09.14 - 17:56
попробуй сначала переменной присвоить.
   Wobland
 
2 - 21.09.14 - 17:57
а что такое objDoc.getElementById("EFactura_Agreement1_AccesServiceBtn")?
   Рэйв
 
3 - 21.09.14 - 17:58
(2)Ну разве не понятно? - getElementById.
Тут же все предельно ясно:-)
   DES
 
4 - 21.09.14 - 17:59
(2) нажимаю на кнопку по Id
   Wobland
 
5 - 21.09.14 - 18:00
(3) неа, не понятно ;)
(4) ответ на вопрос "что?" - нажимаю?
   DES
 
6 - 21.09.14 - 18:01
(1) Кнопка.Submit(); 
тоже самое, ошибку дает ту же.
   Wobland
 
7 - 21.09.14 - 18:02
(6) ну не умеет кнопка субмит, что поделать
   DES
 
8 - 21.09.14 - 18:02
(5) да, ответ на вопрос "что?" 
Действие.
   Wobland
 
9 - 21.09.14 - 18:03
(8) я ожидал элемент
   Wobland
 
10 - 21.09.14 - 18:03
(9) ну или неопределену ;)
   DES
 
11 - 21.09.14 - 18:04
(8) в атрибутах кнопка.type = отвечает submit
   Wobland
 
12 - 21.09.14 - 18:04
показывай код для EFactura_Agreement1_AccesServiceBtn
   Рэйв
 
13 - 21.09.14 - 18:06
(6)Чег ты такой непонятливывй?

МойКрутойБуфер=objDoc.getElementById("EFactura_Agreement1_AccesServiceBtn");
МойКрутойБуфер.Submit();

попробуй, я это имел в виду
   Рэйв
 
14 - 21.09.14 - 18:07
а там смотри на чем валится. На получении или на .Submit()
   Wobland
 
15 - 21.09.14 - 18:07
(13) ну он и сделал так, только с Кнопка, как я понял
   DES
 
16 - 21.09.14 - 18:08
(13) если тв не понял, то я сделал так
Кнопка=objDoc.getElementById("EFactura_Agreement1_AccesServiceBtn");
Кнопка.Submit();
   Рэйв
 
17 - 21.09.14 - 18:08
(15)Подождем результатов от подопытного.
   Рэйв
 
18 - 21.09.14 - 18:08
(16)И на какой строке свалилось?
   DES
 
19 - 21.09.14 - 18:09
(14) все получает и показывает атрибуты. наме,ид,тип
   DES
 
20 - 21.09.14 - 18:09
(18) ну конечно на той где submit()
   Рэйв
 
21 - 21.09.14 - 18:10
(19)если все методы кроме Submit() работают, создается очучение что у тебя что-то устарело в системе.
   DES
 
22 - 21.09.14 - 18:10
(12) а вот не знаю как
   Wobland
 
23 - 21.09.14 - 18:10
(22) с Agreement1_AccesServiceBtn справился, а тут не знаешь?
   DES
 
24 - 21.09.14 - 18:18
(23) по каким словам искать ?
   Рэйв
 
25 - 21.09.14 - 18:19
(24)Я бы сказал по каким, но раз ты меня игнорируешь, то я лучше понаблюдаю:-)
   DES
 
26 - 21.09.14 - 18:20
вот такую фигню нарыл:
<SCRIPT type=text/javascript>
//<![CDATA[

function WebForm_OnSubmit() {
null;if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
return true;
}
//]]>

</SCRIPT>
   DES
 
27 - 21.09.14 - 18:22
(25) не обижайся
   DES
 
28 - 21.09.14 - 18:36
что все ?
   DES
 
29 - 21.09.14 - 18:36
У них сделана защита от робота ?
   DES
 
30 - 21.09.14 - 21:01
submit = function(){s({target:this});return this[Ua]()}
 
 Рекламное место пустует
   DES
 
31 - 22.09.14 - 21:39
ну есть еще мысли ?
   akaBrr
 
32 - 22.09.14 - 22:35
Значит путем экспериментов выяснилось, что управлять нормально DOM напрямую из 1С нельзя, из MSScriptControl.ScriptControl получше но полноценно тоже нельзя, из javascript внутри HTML-документа (или приаттаченого) - управляется практически полноценно. Об этом свидетельствовали веб-страницы с активным содержимым, которые загружались и работали без проблем.

http://www.1cpp.ru/forum/YaBB.pl?num=1316457428
   Torquader
 
33 - 23.09.14 - 10:09
(32) Управлять можно всем, особенно, если на низком уровне и через SendMessage.
Просто, когда вы работаете из другого процесса, то нужно понимать, что сам "осёл" в это время может что-то выполнять, и нужно дожидаться завершения выполнения, а в случае работы Ajax ловить моменты обработки получения данных, так как исполнение из двух источников приводит к тому, что данные накладываются.
Также нужно понимать, что передача значений и объектов между границами процесса идёт криво, что для javascript заканчивается отсутствием правильной сборки мусора и окончанием памяти.
   Torquader
 
34 - 23.09.14 - 10:11
Потом, не стоит забывать, что из 1С работа с IE вообще идёт параллельно - у меня, например, в IE запускается бесконечный цикл, который ждёт изменение переменной, которая меняется командой из 1С, и всё работает.
Если так делать из MsScriptControl, то там мешает синхронизация - сценарий MsScript может вклиниваться в работу IE только тогда, когда IE не выполняет никакого кода.
   DES
 
35 - 24.09.14 - 22:13
давал задержку циклом  1000000 перед нажатием кнопки, но ошибку дает 1С все равно.
   DES
 
36 - 24.09.14 - 23:33
подскажите, как после этого нажать  кнопочку ?

    Браузер=СоздатьОбъект("АктивИкс");
    Браузер.УстановитьАтрибут(Форма,"HTML");
    Браузер.СоздатьЭУ("Shell.Explorer.2");
    Браузер.ОбработкаСобытий = 1;

    Браузер.Объект.Navigate("http://sfsfsfs.spx";);

(знаю её id)
   Vladal
 
37 - 25.09.14 - 00:13
Браузер.Объект.Click
   DES
 
38 - 25.09.14 - 00:14
почему дает ошибку на последней строке ?
    Браузер=СоздатьОбъект("АктивИкс");
    Браузер.УстановитьАтрибут(Форма,"HTML"); 
    Браузер.СоздатьЭУ("Shell.Explorer.2");
    Браузер.ОбработкаСобытий = 1;

    Браузер.Объект.Navigate2(ИмяХТМЛ);
    ДокХТМЛ=Браузер.Объект.Document;
   Vladal
 
39 - 25.09.14 - 00:14
А в отладчике что пишет Браузер.Объект.Document?
   Vladal
 
40 - 25.09.14 - 00:15
Ну да.. это 7.7... Пишет OLE-объект
   Vladal
 
41 - 25.09.14 - 00:15
А есть у тебя книга "Системное программирование в 1С:Предприятие"?
   DES
 
42 - 25.09.14 - 00:19
(40) пишет плохой тип переменной, книги нет
   Vladal
 
43 - 25.09.14 - 00:20
Вот пример из книги.Глянь, что не так с .Document


objIE = СоздатьОбъект("InternetExplorer.Application");
objIE.Visible = 0;
objIE.Silent = 0;
objIE.Navigate(Адрес);
Пока objIE.readyState<4 Цикл// Ждем пока она загрузится

КонецЦикла;
obj Doc = objIE.Document;
AllTags = objDoc.all.tags("A");// Получаем всю коллекцию ссылок

Для Ном = 0 По AllTags.length-1 Цикл
Сообщить(AllTags.item(Ном).href);
КонецЦикла;
objIE.Quit();// Закрываем приложение

objIE = "";
   Vladal
 
44 - 25.09.14 - 00:21
*obj Doc = objIE.Document;
objDoc = objIE.Document; -- без пробела
   DES
 
45 - 25.09.14 - 00:24
через InternetExplorer.Application у меня кнопка не нажимается, я пытаюсь обходными путями.
   Vladal
 
46 - 25.09.14 - 00:50
   Vladal
 
47 - 25.09.14 - 01:09
Зная ID кнопки, можно вызвать её событие клика по ID.
Можно и перебрать, как я приводил пример из книжки выше.
Вот еще пример:

var e: helem;
begin
  e:=Webbrowser1.getElementById('input-button', 'submit');
  e.onclick:=CreateHTMLEvent(e,HtmlEventForm);
end;

http://www.cyberforum.ru/delphi-networks/thread782432.html
http://www.cyberforum.ru/delphi-beginners/thread642345.html
   Serginio1
 
48 - 27.09.14 - 11:30
(0) Что то в тему не могу 1c 7.7 и ASP.NET ответить


загрузи этот фреймворк на клиенте http://www.microsoft.com/ru-ru/download/details.aspx?id=40779
   DES
 
49 - 27.09.14 - 15:11
спс, взлетело
   Serginio1
 
50 - 28.09.14 - 10:22
В эту ветку отвечу. Для начала хоть немного изучить C#.
Если нет VS то попросить кого нибудь скомпилировать, да и вообще помочь в коде.
У меня VS на работе
   DES
 
51 - 28.09.14 - 10:26
Вас из дас VS?
   Serginio1
 
52 - 28.09.14 - 10:31
(51) Visual Studio
   DES
 
53 - 28.09.14 - 10:32
Эти ребята, из MD. предлагают самостоятельно компильнуть библиотеку для возможности доступа к ним по API посредством этого  их мануала? Я правильно понял?
   Serginio1
 
54 - 28.09.14 - 10:39
Я про ребят из MD. Если у тебя есть возможность то проси их. Если есть кто то кто программирует на C# проси их.
   DES
 
55 - 28.09.14 - 10:46
Они не "спрашиваемые".
   DES
 
56 - 28.09.14 - 10:47
По телефону говорят пишите письма, на письма не отвечают.
   Serginio1
 
57 - 28.09.14 - 10:52
(58) Стоит самому изучить потратить время. Там все просто, но нужны знания
   DES
 
58 - 28.09.14 - 11:18
Я 25 лет трачу на это время. Я понимаю что все просто.  Просто всего много.
   Serginio1
 
59 - 28.09.14 - 11:30
(58) Знание C# и .Net тебе в любом случае пригодится. Сейчас не знать C# просто уже неприлично. Ты больше тратишь время на помощь итд. Мне 50 и я все учусь и учусь.
   DES
 
60 - 28.09.14 - 16:09
какой проект мне делать в VS ? библтотека классов?
 
 Рекламное место пустует
   Serginio1
 
61 - 28.09.14 - 16:14
Для теста сделай WinForms оттестируй, а затем уже создавай DLL. Если у тебя нет знакомых программирующих на C#, то скину в понедельник. А вообще смотри примеры
   DES
 
62 - 28.09.14 - 16:35
а где в VS примеры?
   Serginio1
 
63 - 28.09.14 - 17:03
В папках TestWebServices
ЗагрузкаCOMОбъектаБезРегистрации
ОбменПоTCPIP
ПроектИспользованияДелегатов
   Serginio1
 
64 - 28.09.14 - 17:05
NestNet45
   DES
 
65 - 28.09.14 - 17:19
тот файл что вчера сгенерился похож по структуре с netmet45.
как из него сгенерить dll ?
   Serginio1
 
66 - 28.09.14 - 17:40
Сейчас студии нет под рукой
Файл->Новый проект->Библиотека классов (DLL) 

Проэкт тобавить существующий элемент выбираем описание.
http://msdn.microsoft.com/ru-ru/library/vstudio/tydxdyw9(v=vs.100).aspx
   DES
 
67 - 28.09.14 - 17:48
netnet45 на каком языке ? С++ или c#
   Serginio1
 
68 - 28.09.14 - 17:56
Расширение файла .cs говорит о том, что это C#
   DES
 
69 - 28.09.14 - 18:14
я в vs2013.
загрузил проект ОбменПоTCPIP 
ни одного окна не открылось.
как открыть окно кода?
   Serginio1
 
70 - 28.09.14 - 18:19
Справа выбери файл. Тяжело объяснять без VS. Посмотри в гугле программирование на C#
   DES
 
71 - 28.09.14 - 18:23
есть время? через скайп экран покажу.
   Serginio1
 
72 - 28.09.14 - 18:36
Давай завтра. Хоть немногопочитай
   DES
 
73 - 28.09.14 - 18:44
да бесполезно хоть немного читать. мне компльнуть нада да и все
   Serginio1
 
74 - 28.09.14 - 18:56
Вот и копни как создать DLL, как добавить ссылку на Вэб сервис
например http://msdn.microsoft.com/ru-ru/library/dd492132.aspx
   DES
 
75 - 28.09.14 - 19:06
(74) это я по интуиции сделал за 4 сек.
   DES
 
76 - 28.09.14 - 19:23
Лан, спс.
   Serginio1
 
77 - 28.09.14 - 19:33
   DES
 
78 - 28.09.14 - 20:34
вот за это отдельное спс
   Serginio1
 
79 - 28.09.14 - 20:44
Дальше будешь разбираться с конфигурационными файлами.
Для 1С они должны быть в папке запускаемого приложения с расширением Имяприложения.exe.Config
либо модно использовать конигурационный файл для конкретной dll
v8: v8: Использование сборок .NET в 1С 7.x и 8.x
   DES
 
80 - 28.09.14 - 20:57
что те пойму, как будет выглядеть
врап = СоздатьОбъект("EFacturaApiRef");
какую строку задавать ?
   DES
 
81 - 28.09.14 - 20:59
как понять "папке запускаемого приложения" ?
какого приложения?
   DES
 
82 - 28.09.14 - 21:11
о понял, но у меня в C:\Program Files\1Cv77\BIN
есть огроменный 1cv7.exe.config
   Serginio1
 
83 - 28.09.14 - 21:17
А ты смотри какой тип и пространство имен
AX.EFactura.Model.ApiModel.ServiceClient

Но если ты загружаешь без конфиг файла то нужно указать 
биндинг и
ServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress)
   DES
 
84 - 28.09.14 - 21:21
(83) ничего не понял.
ты спросил или ответил ?
   Serginio1
 
85 - 28.09.14 - 21:22
Типа такого

типСервера=Сборка.GetType("AX.EFactura.Model.ApiModel.ServiceClient");
    
    remoteAddress =врап.СоздатьОбъект("System.ServiceModel.EndpointAddress",
    врап.СоздатьОбъект("System.Uri","https://api-test.fisc.md/Service.svc);

    привязка = врап.СоздатьОбъект("System.ServiceModel.BasicHttpBinding");

    сервер=врап.СоздатьОбъект(типСервера,привязка,remoteAddress);
   Serginio1
 
86 - 28.09.14 - 21:24
Ответил. Расмешил.  Говорю немного почитай про предметную область
   DES
 
87 - 28.09.14 - 21:28
смотри, в мануале пишут такое
Code sample for calling method:
private EFacturaApiRef.ServiceClient _client;
_client = new EFacturaApiRef.ServiceClient();
_client.ClientCredentials.UserName.UserName = "supplier";
_client.ClientCredentials.UserName.Password = "supplier";

это как то соотносится с тем о чем я говорю ?
   DES
 
88 - 28.09.14 - 21:44
типСервера=Сборка.GetType("AX.EFactura.Model.ApiModel.ServiceClient");
тут не понимаю что за "сборка"
   Serginio1
 
89 - 28.09.14 - 21:50
Ты смотри в каком у тебя пространстве имен находится ServiceClient
То, что сформировал svcutil.exe https://api-test.fisc.md/Service.svc?wsdl

то  ServiceClient  находится в пространстве имен 
namespace AX.EFactura.Model.ApiModel

Сборка это 
Сборка=врап.загрузитьСборку(ИмяФайла);
где имяфайла это dll в которой есть тип ServiceClient
   DES
 
90 - 28.09.14 - 21:52
Сборка=врап.загрузитьСборку(ИмяФайла);
я врап не могу создать
   DES
 
91 - 28.09.14 - 21:54
я действую по аналогии
врап = СоздатьОбъект("NetObjectToIDispatch45");
врап.УстЭтоСемерка(); 

(вчера почту гоняли )
   DES
 
92 - 28.09.14 - 22:01
объясни механизм вызова функции из 1с.
получается что сборка добавляет функцию к системе, а 1с обращается к системе и посредством системы получает результат ?

тогда что ты имеешь ввиду когда говоришь о какой то загрузке сборки ?
   DES
 
93 - 28.09.14 - 22:12
сделал

    врап = СоздатьОбъект("NetObjectToIDispatch45");
    врап.УстЭтоСемерка(); 
    ИмяФайла = "C:\DLLNetObjetToIDispatch45\ServiceEfactura.dll";
    Сборка = врап.загрузитьСборку(ИмяФайла);
    типСервера = Сборка.GetType("AX.EFactura.Model.ApiModel.ServiceClient");

типСервера - пусто
   Serginio1
 
94 - 28.09.14 - 22:12
Ты бы статью почитал. Нельзя так наскоком.
Когда мы работали с почтой. То тип System.Net.Mail.SmtpClient находится в сборке System.dll находящейся в Global Assembly Cache (GAC) и её система находит.
О твоей сборке система ничего не знает.
Поэтому её нужно загрузить. Либо во врайпере есть метод
ПолучитьТип(string type, string путь)
   DES
 
95 - 28.09.14 - 22:13
я же ее в систему зарегал
   Serginio1
 
96 - 28.09.14 - 22:14
А какое пространство имен у тебя?
Смотри namespace
   DES
 
97 - 28.09.14 - 22:14
я не знаю где смотреть
   Serginio1
 
98 - 28.09.14 - 22:17
Ты зарегал NetObjetToIDispatch45.dll
Это просто оболочка реализующая IReflеct и можно достучаться к объектам Net через IDispatch
Почитай v8: v8: Использование сборок .NET в 1С 7.x и 8.x
   Serginio1
 
99 - 28.09.14 - 22:17
(97) Ты создал DLL?
   DES
 
100 - 28.09.14 - 22:17
да читал я, там китайская грамота
  1  2  3  4  5   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.