Имя: Пароль:
1C
 
Не загружается HTML документ
, ,
0 Alekzander Wolf
 
23.11.16
10:04
Нет опыта работу с данным объектом. Ситуация такая получаю Страница1ПолеHTMLДокумента с типом ПолеHTMLДокумента, далее мне нужно обратиться  к Страница1ПолеHTMLДокумента.Документ (к его методу getElementsByTagName("body")) - не получается, смотрю отладчик Страница1ПолеHTMLДокумента.Документ показывает ошибку чтения значения. Дайте направление куда копать.
1 DrShad
 
23.11.16
10:21
что в самом поле?
2 Alekzander Wolf
 
23.11.16
10:26
(1) в смысле?
3 DrShad
 
23.11.16
10:28
в прямом
там должен быть текст HTML, давай его сюда
4 Alekzander Wolf
 
23.11.16
10:29
У после HTML документа есть событие ДокументСформирован не могу его поймать отладчиком, значит ли это что документ не хочет формироваться?
5 DrShad
 
23.11.16
10:33
ну удачи вам в изучении
6 Alekzander Wolf
 
23.11.16
10:34
7 Alekzander Wolf
 
23.11.16
10:46
(5) и даже не напишешь на что обратить внимание?
8 DrShad
 
23.11.16
10:57
так написал же уже
у тебя документ пустой либо корявый, а ты в него даже заглянуть не умееешь
9 DrShad
 
23.11.16
10:57
https://ru.wikipedia.org/wiki/HTML

начни с этого
10 Alekzander Wolf
 
23.11.16
11:13
(9) неплохо было это все изучить, но задача стоит не изучить все, а разобраться почему не работает конкретный участок кода в 1с. Как посмотреть что у меня пустой или корявый документ?
11 Alekzander Wolf
 
23.11.16
11:15
У меня просто на форме это поле с именем Страница1ПолеHTMLДокумента и два события которые не хотят отрабатыватьcz ДокументСформирован и onclick
12 DrShad
 
23.11.16
11:18
ок, давай начнем с садика

как попало это поле на форму и что в него заполняется?
а самое интересное, нафейхоа тебе body?
13 Alekzander Wolf
 
23.11.16
11:38
(12) поле используется для чата, по сути в нем должна отображаться переписка
14 DrShad
 
23.11.16
11:42
ты на вопросы ответишь? или так и будем в телепатию играть?
15 Alekzander Wolf
 
23.11.16
11:54
БлокТекстДляВозврата = "";
    
    Если ТипБлока = "Заголовок" Тогда
        
        БлокТекстДляВозврата = " <HTML><HEAD>
        | <META http-equiv=Content-Type content=""text/html; charset=utf-8"">
        | <STYLE>
        | div
        | {
        |  font-family: Verdana;
        |  margin:2px;
        |  font-size: 13px;
        | }
        | .messHeader
        | {
        |  margin-top:6px;
        |  font-weight: bold;
        | }
        | .input
        | {
        |  color:#f00;
        | }
        | .output
        | {
        |  color:#00f;
        | }
        | .status
        | {
        |  color:#888;
        |  font-size: 11px;
        | }
        | .info:LINK, .info:VISITED, .info:ACTIVE { TEXT-DECORATION: NONE;  color:#888; font-size: 11px; }
        | .info:HOVER { TEXT-DECORATION: NONE ;COLOR:RED; }         
        | </STYLE>
        | </HEAD>
        | <BODY id=page onload=""window.scrollTo(0,document.getElementById('page').scrollHeight)"">";    
        
    ИначеЕсли ТипБлока = "ВходящееСообщение" Тогда
        Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
            БлокТекстДляВозврата = "   <DIV class=""messHeader input"">" + УдалитьЗапрещенныеСимволы(АвторСообщения) + " (" + УдалитьЗапрещенныеСимволы(ДатаРегистрации) + ") <a href=""#ОткрытьИнформациюОСообщении=" + УдалитьЗапрещенныеСимволы(ИдентификаторСообщенияНаЭкране) + "ff*ff"">(i)</a></DIV>
            |   <DIV><SPAN class=""status"" id=""" + УдалитьЗапрещенныеСимволы(ИдентификаторСообщенияНаЭкране) + """>"+УдалитьЗапрещенныеСимволы(СтатусСообщения)+"</SPAN><a href=""#ОткрытьСсылку=" + УдалитьЗапрещенныеСимволы(Сообщение) + "dd*dd"">"+УдалитьЗапрещенныеСимволы(СокрЛП(СсылкаНаОбъект))+"</a></DIV>";
        Иначе //обычное сообщение
            БлокТекстДляВозврата = "   <DIV class=""messHeader input"">" + УдалитьЗапрещенныеСимволы(АвторСообщения) + " (" + УдалитьЗапрещенныеСимволы(ДатаРегистрации) + ") <a href=""#ОткрытьИнформациюОСообщении=" + УдалитьЗапрещенныеСимволы(ИдентификаторСообщенияНаЭкране) + "ff*ff"">(i)</a></DIV>
            |   <DIV><SPAN class=""status"" id=""" + УдалитьЗапрещенныеСимволы(ИдентификаторСообщенияНаЭкране) + """>"+УдалитьЗапрещенныеСимволы(СтатусСообщения)+"</SPAN>" + УдалитьЗапрещенныеСимволы(Сообщение) + "</DIV>";
        КонецЕсли;
        
    ИначеЕсли ТипБлока = "ИсходящееСообщение" Тогда
        Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
            БлокТекстДляВозврата = "   <DIV class=""messHeader output"">" + УдалитьЗапрещенныеСимволы(АвторСообщения) + " (" + УдалитьЗапрещенныеСимволы(ДатаРегистрации) + ") <a href=""#ОткрытьИнформациюОСообщении=" + УдалитьЗапрещенныеСимволы(ИдентификаторСообщенияНаЭкране) + "ff*ff"">(i)</a></DIV>
            |   <DIV><SPAN class=""status"" id=""" + УдалитьЗапрещенныеСимволы(ИдентификаторСообщенияНаЭкране) + """>"+УдалитьЗапрещенныеСимволы(СтатусСообщения)+"</SPAN><a href=""#ОткрытьСсылку=" + УдалитьЗапрещенныеСимволы(Сообщение) + "dd*dd"">"+УдалитьЗапрещенныеСимволы(СокрЛП(СсылкаНаОбъект))+"</a></DIV>";
        Иначе //обычное сообщение
            БлокТекстДляВозврата = "   <DIV class=""messHeader output"">" + УдалитьЗапрещенныеСимволы(АвторСообщения) + " (" + УдалитьЗапрещенныеСимволы(ДатаРегистрации) + ") <a href=""#ОткрытьИнформациюОСообщении=" + УдалитьЗапрещенныеСимволы(ИдентификаторСообщенияНаЭкране) + "ff*ff"">(i)</a></DIV>
            |   <DIV><SPAN class=""status"" id=""" + УдалитьЗапрещенныеСимволы(ИдентификаторСообщенияНаЭкране) + """>"+УдалитьЗапрещенныеСимволы(СтатусСообщения)+"</SPAN>" + УдалитьЗапрещенныеСимволы(Сообщение) + "</DIV>";
        КонецЕсли;
        
        
        //<a class="info" href=""#ОткрытьСсылку=" + ТекстСсылка + "dd*dd"">(i)</a>
    
    ИначеЕсли ТипБлока = "Подвал" Тогда
        
        БлокТекстДляВозврата = "</BODY></HTML>";
        
    КонецЕсли;
    
    Возврат БлокТекстДляВозврата;
16 Alekzander Wolf
 
23.11.16
11:56
(14) оно? не я делал, сам сейчас активно гуглю и отладчиком бегаю.
17 DrShad
 
23.11.16
11:57
молодец, теперь поставь точку останова на возврат, получи весь текст, сохрани его в текстовом редакторе как страницу HTML и открой в браузере
18 DrShad
 
23.11.16
11:59
и еще бы код где эта функция вызывается, потому как по функции вроде валидный текст должен получаться
19 Alekzander Wolf
 
23.11.16
12:05
(17) вроде что-то открывается

Пример:
Менеджер (23.11.2016 14:55:36) (i)
(доставлено) прив
20 Alekzander Wolf
 
23.11.16
12:06
(18) Процедура ВыводСообщенийВФормуСообщений(ФормаСообщений, Элемент = Неопределено) Экспорт
    
    //определяем имя текущего элемента
    ТекущаяСтраница = ФормаСообщений.ЭлементыФормы.Панель.ТекущаяСтраница;
    ТекущийЭлемент = ФормаСообщений.ЭлементыФормы[ТекущаяСтраница.Имя + "ПолеHTMLДокумента"];
    ИзменялсяСтатусПрочтения = Ложь;
    
    ЭлементыФормы = ФормаСообщений.ЭлементыФормы;
    
    Если Элемент = Неопределено Тогда
        //обрабатываем все поля
        ОбрабатываемОдногоПользователя = Ложь;
    Иначе
        ОбрабатываемОдногоПользователя = Истина;
        ИмяСтраницы = СтрЗаменить(Элемент.Имя, "ПолеHTMLДокумента", "");
        Пользователь = ЭлементыФормы.Панель.Страницы[ИмяСтраницы].Значение;
    КонецЕсли;
    
    ТаблицаСообщений = ФормаСообщений.ТаблицаСообщений;
    
    МассивСтрок = ТаблицаСообщений.НайтиСтроки(Новый Структура("Выведено", Ложь));
    
    Если МассивСтрок.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;
    
    //Попытка
    //    ИмяПоляТекущейСтраницы = ЭлементыФормы.Панель.ТекущаяСтраница.Имя;
    //Исключение
    //    ИмяПоляТекущейСтраницы = "";
    //КонецПопытки
    
    Для Каждого Стр из МассивСтрок Цикл
        
        Если ОбрабатываемОдногоПользователя Тогда
            Если Стр.Пользователь <> Пользователь Тогда
                Продолжить;
            КонецЕсли;
            ТекстПоля = "";
            
        Иначе
            ТекстПоля = "";
            //Здесь ищем страницу, на которой нужно отобразить сообщение
            
            СтраницаПользователя = ПолучитьСтраницуПользователя(ЭлементыФормы, Стр.Пользователь);
            ИмяСтраницы = СтраницаПользователя.Имя;
            Элемент = ЭлементыФормы[ИмяСтраницы+"ПолеHTMLДокумента"];
        КонецЕсли;
        
        Если Стр.Полученное Тогда
            ТекстПоля = ТекстПоля + ПолучитьБлокТекстаПоляHTML("ВходящееСообщение", Стр.Пользователь,
            Стр.ДатаРегистрации,    Стр.ИдентификаторСообщенияНаЭкране, "", Стр.Сообщение, Стр.СсылкаНаОбъект);
            
            Если ТекущийЭлемент = Элемент Тогда
                //устанавливаем статус прочтения
                Если Не ЗначениеЗаполнено(Стр.ДатаПрочтения) Тогда
                    Стр.ДатаПрочтения = ТекущаяДата();
                    ЗаписьРегистра = РегистрыСведений.Сообщения.СоздатьМенеджерЗаписи();
                    ЗаписьРегистра.ИдентификаторИнформационнойБазы = Стр.ИдентификаторИнформационнойБазы;
                    ЗаписьРегистра.ИдентификаторСообщения = Стр.ИдентификаторСообщения;
                    ЗаписьРегистра.Прочитать();
                    
                    ЗаписьРегистра.ДатаПрочтения = Стр.ДатаПрочтения;
                    ИзменялсяСтатусПрочтения = Истина;
                    ЗаписьРегистра.Записать();
                    Если Стр.ОтправительМК Тогда //формируем задачу на отправку пакета о прочтении
                        ЗаписьПакетаНаОтправку = РегистрыСведений.ПакетыНаОтправку.СоздатьМенеджерЗаписи();
                        ЗаписьПакетаНаОтправку.ВнутреннийИдентификаторПакета = УправлениеМобильнымиСотрудниками.ПолучитьИдентификаторНовогоПакетаНаОтправку();
                        ЗаписьПакетаНаОтправку.ИдентификаторОбъекта = Стр.ИдентификаторСообщения;
                        ЗаписьПакетаНаОтправку.ИдентификаторИнформационнойБазы = Стр.ИдентификаторИнформационнойБазы;
                        ЗаписьПакетаНаОтправку.ВидДанных = "Сообщение";
                        ЗаписьПакетаНаОтправку.ВидПакета = "Сообщение (дата прочтения)";
                        ЗаписьПакетаНаОтправку.ДатаСозданияПакета = Стр.ДатаПрочтения;
                        ЗаписьПакетаНаОтправку.ПолучательПакета = Стр.Пользователь;
                        ЗаписьПакетаНаОтправку.Записать();
                    КонецЕсли;
                    
                КонецЕсли;

            КонецЕсли;
            
        Иначе
            //в ответ будем ждать дату доставки и дату прочтения
            СтатусВыводимогоСообщения = ПолучениеСтатусаОтправленногоСообщения(Стр);

            ТекстПоля = ТекстПоля + ПолучитьБлокТекстаПоляHTML("ИсходящееСообщение", глЗначениеПеременной("глТекущийПользователь"),
            Стр.ДатаРегистрации,    Стр.ИдентификаторСообщенияНаЭкране, СтатусВыводимогоСообщения, Стр.Сообщение, Стр.СсылкаНаОбъект);
        КонецЕсли;
        Стр.Выведено = Истина;
        ДобавитьНовоеСообщениеВПолеHTML(Элемент, ТекстПоля);
        
    КонецЦикла;
    
    Если ИзменялсяСтатусПрочтения Тогда
        ТекущаяСтраница.Заголовок = СокрЛП(ТекущаяСтраница.Значение);
        
        //принудительно обновим список собеседников
        ФормаСпискаСобеседников = Обработки.ОбменСообщениями.ПолучитьФорму("СписокСобеседников");
        Если ФормаСпискаСобеседников.Открыта() Тогда
            ФормаСпискаСобеседников.ОбновитьДеревоПользователей();
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры
21 Alekzander Wolf
 
23.11.16
12:06
(18) вряд ли она что-то даст
22 Alekzander Wolf
 
23.11.16
12:12
Функция которая вызывается называется ПолучитьБлокТекстаПоляHTML
23 DrShad
 
23.11.16
12:15
я вижу, но только для входящего и исходящего сообщения, а где для Заголовка и подвала?
24 Alekzander Wolf
 
23.11.16
12:15
потом из процедуры в 20 вызывается процедура:

Процедура ДобавитьНовоеСообщениеВПолеHTML(Элементформы, ТекстПоля) Экспорт
    
    СтраницаПоля = Элементформы.Документ.getElementsByTagName("body").item(0);
    
    ЭлементДляДобавления = Элементформы.Документ.CreateElement("div");
    ЭлементДляДобавления.innerHTML = ТекстПоля;
    СтраницаПоля.appendChild(ЭлементДляДобавления);    
    Попытка
        Элементформы.Документ.parentWindow.eval("window.scrollTo(0,document.getElementById('page').scrollHeight)");
    Исключение
        ИмеющийсяТекст = Элементформы.ПолучитьТекст();
        НовыйТекст = СтрЗаменить(ИмеющийсяТекст, "</BODY></HTML>", ТекстПоля + "</BODY></HTML>");
        Элементформы.УстановитьТекст(НовыйТекст);
    КонецПопытки;
    
КонецПроцедуры

и там ругается на строчку СтраницаПоля = Элементформы.Документ.getElementsByTagName("body").item(0);
25 Alekzander Wolf
 
23.11.16
12:16
{ОбщийМодуль.ОбменСообщениями.Модуль(366)}: Ошибка при получении значения атрибута контекста (Документ)
    СтраницаПоля = Элементформы.Документ.getElementsByTagName("body").item(0);
по причине:
HTML документ не готов
26 DrShad
 
23.11.16
12:21
так а где Заголовок и подвал?
27 Alekzander Wolf
 
23.11.16
12:24
(23)
Процедура ПервоначальноеЗаполнениеПоляHTML(ЭлементФормы) Экспорт
    
    ТекстПоля = ПолучитьБлокТекстаПоляHTML("Заголовок");
    
    ТекстПоля = ТекстПоля + ПолучитьБлокТекстаПоляHTML("Подвал");
    
    ЭлементФормы.УстановитьТекст(ТекстПоля);
    
КонецПроцедуры
28 Alekzander Wolf
 
23.11.16
12:25
ПРи открытии формы сообщения
29 Alekzander Wolf
 
23.11.16
12:37
Страница1ПолеHTMLДокумента.Документ показывает ошибку чтения значения
Не с этого нужно было начинать?
30 Alekzander Wolf
 
23.11.16
13:13
ап
31 Сильф
 
23.11.16
13:37
Я думаю, собака порылась где-то здесь:

ПолеHTMLДокумента (HTMLDocumentField)
Документ (Document)
Использование:

Только чтение.
Описание:

Тип: COMОбъект.
Предоставляет доступ к HTML документу.
Описание объекта, в целом, определяется стандартом World Wide Web Consortium (W3C) Document Object Model (DOM) Level 1 (http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/).

Но объект имеет особенности, связанные с реализацией. ПолеHTMLДокумента реализовано с использованием WebBrowser Control (http://msdn.microsoft.com/en-us/library/aa752040(VS.85).aspx).
Тип свойства документ соответствует типу HTMLDocument http://msdn.microsoft.com/en-us/library/ms531073(VS.85).aspx.
32 Сильф
 
23.11.16
13:42
Вот чего нагуглил тебе: forum.infostart.ru/forum26/topic40554/message436215/#message436215
33 floverr
 
23.11.16
14:36
Семён семёныч.....ну этож ващеее....Этож должны еще в школе на уроках информатики про ХТМЛ рассказывать то...

с каких пор ХТМЛ стал отдельным документом то? чего то делается вкорне не верно тут...

Вводная:  формат HTML - обычный текст (XML - то же обычный текст кстать)...

Поле ХТМЛ в 1ц - Поле, которое обычный форматированный текст показывает в неком красивом виде, вид этот зависит напрямую от тегов в самом тексте который скормили этому полю. т.е. читает текст, находит теги и согласно этим тегам показывает этот текст пользователю во всей красе своей, жирным выделяет что то, красненьким или синеньким буковки раскрашивает...аналогично браузеру ентернет эксплорер, мазиле, опере и т.п..

Поле ХТМЛ обячно связано с каким то текстовым реквизитом, в этом реквизите и сидит Текст, который данное поле читает.

ну как то так примерно что ли.
34 Alekzander Wolf
 
23.11.16
15:56
(31) скорее всего где-то здесь.
Закон Брукера: Даже маленькая практика стоит большой теории.