Имя: Пароль:
1C
1С v8
Работа с HTML
0 АЛьФ
 
07.09.11
10:53
Есть в конфиге формирование лога в виде документа HTML. Хотелось бы формировать в этом документе ссылки на объекты (документы и справочники), чтобы по клику на ссылке открывалась форма этого объекта. Начал мутить через обработку события onclick, но что-то как-то кривовато и слишком громоздко получается. Если ли какой-то простой способ это дело реализовать?
1 Либерал
 
07.09.11
11:02
посмотри рарус црм, там встречается кое где
2 Андрюха
 
07.09.11
11:04
(0) Если html то по-ходу только OnClick, а как в гипертексте публикуется ссылка на объект конфигурации?
3 Fragster
 
гуру
07.09.11
11:04
так ведь можно сразу ссылку на объект вставлять, специально сформированную, ЕМНИП
4 АЛьФ
 
07.09.11
11:04
2(1) Нет возможности посмотреть.
5 АЛьФ
 
07.09.11
11:07
Сейчас в документ вставляю такую ссылку:
"<a href='Документы[""" + ВидДокумента + """].ПолучитьСсылку(Новый УникальныйИдентификатор(""" + НовыйДокумент.Ссылка.УникальныйИдентификатор() + """))'>" + стрДокумент + "</a>"
Потом в онклик через Выполнить(pEvtObj.srcElement.pathname) восстанавливаю ссылку на объект и получаю от него форму, которую и открываю. Неужели нет метода проще?
6 Либерал
 
07.09.11
11:08
(4) вот, посмотрел рарус.
не очень красиво, но работает:


Процедура CRM_ПолеHTMLДокументаOnClick(pEvtObj) Экспорт
   
   СтандартнаяОбработка = Ложь;
   
   Узел = pEvtObj.srcElement;
   
   href      = "";
   id        = "";
   
   Пока Истина Цикл
       
       Попытка
           ИмяЦели = Узел.tagName
       Исключение
           Прервать;
       КонецПопытки;
       
       Если ИмяЦели = "A" Тогда
           Попытка
               href = Узел.href;
           Исключение
           КонецПопытки;
           
           Попытка
               id = Узел.id;
           Исключение
           КонецПопытки;
           
           Прервать;
       КонецЕсли;
       
       Узел = Узел.parentElement;
       
   КонецЦикла;
   
   Если НЕ ПустаяСтрока(href) Тогда
       
       Если СтрЧислоВхождений(НРег(href), "about:") > 0 Тогда
                   
           НайденаСсылка = Истина;
           
           Если Найти(href, "about:blank") = 0  Тогда
               
               Копияhref = СтрЗаменить(href, "about:", "");                
           
           Иначе
               
               Копияhref = СтрЗаменить(href, "about:blank", "");
               
           КонецЕсли;
           
           
           НайденаСсылка = Ложь;
           СсылкаНаОбъект = Неопределено;
           
           Если Найти(id, "*") = 1 Тогда
               
               РазделительТипаИВида = Найти(id, ".");
               РазделительИдентификатора = Найти(id, ";");
               
               Если РазделительТипаИВида > 0 И РазделительИдентификатора Тогда
                   
                   ТипОбъекта           = Сред(id, 2, РазделительТипаИВида - 2);
                   ВидОбъекта           = Сред(id, РазделительТипаИВида + 1, РазделительИдентификатора - РазделительТипаИВида - 1);
                   ИдентификаторОбъекта = Сред(id, РазделительИдентификатора + 1);
                   
               КонецЕсли;

               Попытка
                   UUID = Новый УникальныйИдентификатор(ИдентификаторОбъекта);
                   
                   Если ТипОбъекта = "Справочник" Тогда
                       
                       СсылкаНаОбъект = Справочники[ВидОбъекта].ПолучитьСсылку(UUID);
                       
                   ИначеЕсли ТипОбъекта = "Документ" Тогда
                       
                       СсылкаНаОбъект = Документы[ВидОбъекта].ПолучитьСсылку(UUID);
                       
                   КонецЕсли;
                   
                   НайденаСсылка = Истина;
                   
               Исключение
               КонецПопытки;
                           
           КонецЕсли;            
           
           Если Не ЗначениеЗаполнено(СсылкаНаОбъект) ИЛИ НЕ НайденаСсылка Тогда
               Если Найти(href, "www") = 0 И Найти(href, "http") = 0 Тогда
                   СтандартнаяОбработка = Истина;
               Иначе
                   Попытка
                   
                       Если Найти(id, "file:///") = 1 Тогда
                       
                           ЗапуститьПриложение(СокрЛП(id));    
                       
                       Иначе
                       
                           ЗапуститьПриложение(СокрЛП(Копияhref));    
                       
                       КонецЕсли;                        
                       
                   Исключение
                       
                       ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки());
                       
                   КонецПопытки;
                   
               КонецЕсли;
               
           Иначе
               
               СсылкаНаОбъект.ПолучитьФорму().Открыть();
               
           КонецЕсли;
           
       Иначе
           
           Попытка
           
               Если Найти(id, "file:///") = 1 Тогда
               
                   ЗапуститьПриложение(СокрЛП(id));    
               
               Иначе
               
                   ЗапуститьПриложение(СокрЛП(href));    
               
               КонецЕсли;                        
               
           Исключение
               
               ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки());
               
           КонецПопытки;
           
       КонецЕсли;        
       
       Если НЕ СтандартнаяОбработка Тогда
           pEvtObj.returnValue  = Ложь;
       КонецЕсли;
       
   КонецЕсли;

КонецПроцедуры
7 АЛьФ
 
07.09.11
11:09
2(6) Хм... Ну да, примерно по похожему пути я и побрел.
8 АЛьФ
 
07.09.11
11:09
Всем спасибо.
9 Либерал
 
07.09.11
11:10
ну да, то же как у тебя
10 Либерал
 
07.09.11
11:37
кстати, кажется в 8.2 видел я какие-то спец методы получить/отработать ссылку на объект базы?..
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший