Имя: Пароль:
1C
1С v8
Нестандартная задача в веб-клиенте
,
0 inmortal203
 
05.05.15
13:18
Здравствуйте. Столкнулся с такой неоднозначной, кому то может быть покажется странной, задачей...
Есть необходимость непосредственно в веб клиенте автоматом загружать информацию при просмотре сайта.
Для этого в конфе была создана обработка "Браузер", которая при запуске открывает конкретный сайт.
При переходе по некоторым страницам нужно записывать информацию из них в базу. Для этого добавил все нужные действия в процедуру обработки события "ДокументСформирован". Все отрабатывает на ура, все хорошо. Почти... Но в браузере постоянно вываливается ошибка "permission denied to access property 'document'". После нажатия кнопки ОК все отрабатывает. Но это окошко откровенно раздражает. Кто знает, можно ли каким то образом обойти это неудобство? 1С 8.3, конфа полностью самописная, на основе БСП.
1 MadHead
 
05.05.15
13:23
eval юзаете?
2 inmortal203
 
05.05.15
13:25
А что это?) Хотя ответ на вопрос думаю найду в гугле. Спрошу тогда, как это мне может помочь?
3 MadHead
 
05.05.15
13:26
это инструкция js. Я когда программно кнопки нажимал на странице, у меня вылетала такая ошибка
4 inmortal203
 
05.05.15
13:28
Ага) а где нужно в коде 1С прописывать ее. И как?)
Очень интересно... поскольку давно уже мучаюсь, и уже решил что вопрос решить нереально. Что 1С для такого не предназначена(
5 inmortal203
 
05.05.15
13:53
Правильно ли я понимаю что код который сейчас в моей процедуре ДокументСформирован нужно выполнять на js, а в 1С уже получать результат и обрабатывать его дальше?
6 Garykom
 
гуру
05.05.15
13:56
до чего 1с дошла... уже грабберы сайтов не ней пишут...
7 Goggy
 
05.05.15
14:06
(6) Скорее докатилась :)
8 inmortal203
 
05.05.15
14:10
Ага) но вернемся к (0)
9 Garykom
 
гуру
05.05.15
14:13
(8) берешь нормальный броузер...и рулишь им из 1С
10 inmortal203
 
05.05.15
14:18
(9) Не совсем понял... В каком смысле рулить браузером из 1С? Тем более не зная какой браузер стоит у каждого пользователя что заходит в базу?
11 Garykom
 
гуру
05.05.15
14:20
(10)
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms633500(v=vs.85).aspx
и
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms644950(v=vs.85).aspx

ЗЫ можно не рулить а найти это окно об ошибке с кнопкой и нажать ее...программно
12 inmortal203
 
05.05.15
14:35
(11) А это никак не будет заметно для пользователя? Ведь окно вылазит при переходе на каждую страницу...
13 Garykom
 
гуру
05.05.15
14:37
(12) стреляли... мигнуло тут что то точнее
14 inmortal203
 
05.05.15
14:40
В общем убить то что вылезло, была первая мысль... Но, все таки хотелось бы срубить проблему на корню)
Eval может быть мог бы помочь... но пока не особо понял как его использовать...
15 Necessitudo
 
05.05.15
14:45
(14) А вас ничего не смущает в данном решении?
16 inmortal203
 
05.05.15
14:54
(15) Был бы я асом по интеграции 1с и js сказал бы. А так может все таки меня просветите?
17 Garykom
 
гуру
05.05.15
15:09
Найти хорошую ActiveXину и юзать ее вместо встроенного веб броузера
18 inmortal203
 
05.05.15
16:14
Тут такое дело... Ни один браузер кроме IE не поддерживает ActiveX в вкб-клиенте)
19 inmortal203
 
13.05.15
09:15
апну
20 Torquader
 
13.05.15
09:35
Нужно помнить, что браузеры очень плохо относятся к доступу к данным за пределами домена, особенно, когда данные в разных фреймах - и, по идее, код в браузере вообще работать не должен.

Кроме того, значение поля document будет доступно только после полной загрузки страницы, что можно проверить через Busy, когда мы "мучаем" объект WebBrowser, а как там оно реализовано в поле html-документа - нужно лезть в исполняемый код 1С и смотреть.
21 Новиков
 
13.05.15
09:40
Чел, а не проще ли тебе напрямую получать страницу, парсить ее и писать там уже что тебе нужно? Зачем вот эта вся ипота с веб-браузером в обработке?

(17) спартан в девичестве, в юности - еdge вроде, уже не поддерживает сию текнолоджи. Таким образом, точиться сейчас на эту технологию, как видится, вариант плохой. Если не разовая правда обработка и ленно что-то новое изучить ;)
22 inmortal203
 
13.05.15
09:45
(21) Чел, ну если бы не нужно было я бы не лечил гланды через анальное отверстие)
как раз таки нужно чтобы люди как ни в чем не бывало шарились по странице, а база забирала определенные данные.
Говорю же задача нестандартная. Просто интересно можно ли как то обойти возникающие трудности.
23 inmortal203
 
13.05.15
09:47
(20) Вижу что относятся плохо... и как бы запрещают это действие... Но, с другой стороны открывают все что нужно без проблем. И окно с ошибкой скорее информационное... А мешает ведь очень.
24 Torquader
 
13.05.15
09:50
(23) Надо код смотреть, а то, может быть, там половина просто не работает.
Не забываем, что javascript прерывается на первой ошибке, если его не взяли в скобки try-catch
25 Torquader
 
13.05.15
09:51
Вообще, покажи, как ты кнопки нажимаешь - вполне вероятно, что в обработчике нажатия кнопки на странице и происходит ошибка, так как его вызывают не из события, а из-вне.
Тогда, обработчику просто нужно сделать пустой объект, представляющий событие, чтобы он не обижался.
26 inmortal203
 
13.05.15
09:55
(25) Код 1С не "нажимает" никакие кнопки. Или что имеется ввиду?
27 inmortal203
 
13.05.15
09:56
Идет простое считывание данных с только что сформировавшейся страницы. Ну и проверки всякие что страница содержит нужные данные...
28 inmortal203
 
13.05.15
10:22
Кстати... то что в тонком клиенте все работает вообще без ошибок это нормально? Только в ВебКлиенте такая чепуха.
29 Torquader
 
13.05.15
10:39
(28) Тонкий клиент имеет полный доступ в браузер вне зависимости от того, что там есть.

Ещё раз посмотри код, вполне вероятно, что некоторые обращения к страницам завершаются с ошибками, так как страницы ещё не загружены, а следующее обращение уже проходит нормально, так как код страницы уже загружен.
30 inmortal203
 
13.05.15
10:53
Как узнать что при выполнении кода страницы были ошибки?
31 Patriot1C
 
13.05.15
11:07
(30) Только отловив их window.onerror() = function(){  };
32 Torquader
 
13.05.15
11:10
(30) Я бы сначала задался вопросом, как узнать, что страница полностью загружена. (в браузере был метод DocumentComplete)
33 inmortal203
 
13.05.15
11:12
(32) По сути метод 1С ДокументСформирован и должен это проверять.
34 inmortal203
 
13.05.15
11:13
Выходит что когда страница полностью загружена идет обращение к document в коде 1с, после чего и появляется ошибка
35 inmortal203
 
13.05.15
14:13
Есть подозрения что (0) никак не выполнить в 1С...
36 Garykom
 
гуру
13.05.15
14:15
(35) можно... но ненужно
37 inmortal203
 
13.05.15
14:17
(36) А можно ли? Как? Голословить то каждый может...
Все упирается в использование неподдерживаемых в ВебКлиенте Com объектов...
38 Garykom
 
гуру
13.05.15
14:22
(37) у тя веб-клиент сам по себе без всякого сервера работает?
39 Torquader
 
13.05.15
14:25
(38) Ты ему предлагаешь за сайтом на сервер идти ?
40 Garykom
 
гуру
13.05.15
14:26
(39) Как догадался ?
41 inmortal203
 
13.05.15
14:32
Я бы выполнил все действия со страницей на сервере.. Но эта самая страница запаролена. То есть пользователь сначала проходит авторизацию на сайте, а потом уже начинается считывание данных.
42 Garykom
 
гуру
13.05.15
14:43
(41) слова RDP, VNC, терминальный сервер на что нибудь намекают?

ЗЫ но да терминал html/http на 1С это феншуй...
43 inmortal203
 
13.05.15
14:46
(42) это все не подходит и даже не рассматривается
44 inmortal203
 
13.05.15
14:48
Пользователь должен заходить на сайт со своего браузера на своем ПК и никак иначе
45 Serginio1
 
13.05.15
14:52
46 Garykom
 
гуру
13.05.15
14:55
(43)(44) понятно...не дошло
47 inmortal203
 
13.05.15
14:57
(46) Даром ясновидения не обладаю
48 Garykom
 
гуру
13.05.15
14:58
Тогда совет только один, перестать думать что любую задачу можно легко и просто сделать именно на 1С, а не на скажем C# или FP/lazarus
49 Garykom
 
гуру
13.05.15
14:59
(47) да? всегда думал что все 1С-ники телепаты... мысли юзверей угадывают
50 Garykom
 
гуру
13.05.15
15:01
http://habrahabr.ru/post/183754/

для начала изучить
51 DmitrO
 
13.05.15
22:16
(0)укажи версию платформы..

Разбирался с похожей проблемой (не ожидаемое постоянное сообщение о внутреннем исключении в поле HTML документа при клике в любое место на странице, после повторного открытия формы (8.3.5.1517)), хотел уже писать в 1С, решил проверить на 8.3.6 - и не подтвердилось.

Анализ зарегистрированных и исправленных ошибок показал что они исправляли поле HTML документа в 8.3.6.1977, (исправления нескольких похожих ошибок вышли в этом релизе).
52 DmitrO
 
13.05.15
22:28
и еще замечание, похоже что при наличии на странице активного содержимого jquery и т.п., событие ДокументСформирован может происходить неоднократно, по крайней мере у меня вот дважды при загрузке страницы (без каких либо пользовательских действий), по твоему сценарию может быть что-то подобное решением может быть просто выдерживание паузы.
53 inmortal203
 
15.05.15
13:07
(51) Версия 8.3.5.1517 как раз таки )
событие ДокументСформирован действительно происходит не менее 3-х раз.
54 Garykom
 
гуру
15.05.15
13:17
(53) про AJAX впервые слышим?
55 Asmody
 
15.05.15
13:20
(51) Не проверял, они этот древний кусок IE не заменили на что-то более адекватное?
56 inmortal203
 
15.05.15
13:23
(54) Нет, почему же. Я владею всеми языками программирования. А те которыми не владею - придумываю сам.
А если все же без сарказма... К чему вопрос собственно?
57 inmortal203
 
15.05.15
13:24
(55) IE forever
58 Garykom
 
гуру
15.05.15
13:26
(56) есть только одно событие окончания вывода документа...

а документ "выводится" несколько раз, сначала вывелся...потом js отработал (после задержки на исполнение) и часть дока переделал причем с сервера данные подтянул

сколько будет "окончаний" вывода документа?
59 Garykom
 
гуру
15.05.15
13:29
(58)+ а если в js заюзаны http://alljs.ru/articles/timeout/overview
с параметром "несколько дней" ?
60 Сниф
 
15.05.15
13:46
(0) тебе что-то такое нужно?
На ролике: отправка картинки из "Google-картинки" в 1С (без сохранения картинки на диск)
http://www.yapfiles.ru/files/1155398/demo.swf
61 Asmody
 
15.05.15
13:51
(60) Расширение писал?
62 Сниф
 
15.05.15
13:55
(61) нет, использовал существующее расширение Imacros для FireFox. Оно дает возможность создавать продвинутые JavaScript-ы (полный доступ к объектной модели FireFox). А скрипт можно вызывать из 1С.
63 inmortal203
 
15.05.15
14:00
(62) А как из 1С вызвать этого зверя?
64 inmortal203
 
15.05.15
14:01
И что нужно чтобы это работало у каждого вошедшего пользователя?)
65 Сниф
 
15.05.15
14:16
(64) >чтобы это работало у каждого вошедшего пользователя?)
Нужно в FireFox поставить расширение Imacros и в специальную папку скопировать скрипт. Его и запускать из 1С.
В двух словах не опишешь)
Могу написать инструкцию и выложить вместе с файлами куда-нибудь за небольшую денежку, если это кого-то заинтересует.
Таким образом из 1С можно работать со всеми объектами XPCOM(«кросплатформенная объектная модель компонентов»),
а сколько их и какие возможности они дают можно оценить даже из названий интерфейсов:
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface
66 inmortal203
 
15.05.15
16:54
не подойдет... нужно бы что то сделать такое, что не требует лишних телодвижений со стороны пользователя. но решение стоит взять на заметку
67 Garykom
 
гуру
15.05.15
17:38
68 Serginio1
 
15.05.15
17:39
(56) Так как страница может формироваться после первого заполнения через вызов Ajax.

Часто страницы кэшируются и лишний раз не загружаются если на сервере проверяется дата модификации, контрольное значение
например
public ActionResult Test304(string input)
{
    var requestedETag = Request.Headers["If-None-Match"];
    var responseETag = LookupEtagFromInput(input); // lookup or generate etag however you want
    if (requestedETag == responseETag)
        return new HttpStatusCodeResult(HttpStatusCode.NotModified);

    Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
    Response.Cache.SetETag(responseETag);
    return GetResponse(input); // do whatever work you need to obtain the result
}

А заполнение нужных полей делают через AJAX через функцию
Тебе нужно анализировать сформировался ли DOM после запроса AJAX
69 Serginio1
 
15.05.15
17:41
70 Serginio1
 
15.05.15
17:44
Или просто доформировывать DOM, что бы не тащить лишний раз данные с сервера
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший