У меня на работе возник спор - нужна ли справка в конфигурации. Если честно - то я утверждал, что ее никто читать не станет, но руководство настаивало. Ну а раз есть спор - то надо и как-то определить победителя. Задумался я, как же можно собрать статистику вызова справочных материалов (F1) - где, в каких формах, кто и сколько раз....
Попытка 1.
Самый простой и очевидный вариант - попытаться переопределить событие, выполняемое платформой по команде F1. Платформа без проблем позволяет выполнить такую настройку (назначить данную горячую клавишу на свою команду на форме). Но, во-первых - свою команду придется сделать на каждой форме, где мы хотим собрать статистику, во вторых - работает крайне странно и нестабильно. Фактически на платформе 8.3.24 это работает только если фокус (активный элемент) - именно данная кнопка. По факту - никогда.
Попытка 2.
Что такой справка в 1С - фактически это поле HTML документа. Попробуем этим воспользоваться.
Я добавил следующий код в текст HTML справки:
<!-- Блок для фиксации статистики -->
<a href="ВнешняяСсылкаБазы#УникальныйПризнак#РазделCправки" id="stats" style="display: none">Статистика</a>
<script>
if (window == top)
{
document.getElementById("stats").click();
}
else { }
</script>
<!-- Блок для фиксации статистики -->
В данном коде размещен элемент - ссылка, он не отображается, но при загрузке страницы вызывается переход (нажатие) данной ссылки. Благодаря новым событиям, появившимся в платформе 8.3.18 у нас появилась возможность перехвата такого клика в стандартном методе "ОбработкаПереходаПоНавигационнойСсылке" модуля модуля клиентского приложения.
Здесь:
ВнешняяСсылкаБазы - адрес текущей базы. Можно получить, выполнив команду «Получить ссылку» у любого объекта и установив признак внешняя ссылка.

УникальныйПризнак – любой уникальный признак, который позволит отличить переход по ссылке в целях статистики от прочих переходов.
Раздел справки – текст, который мы зафиксируем в статистике.
Пример алгоритма перехвата события:
Процедура ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке, СтандартнаяОбработка)
БлокПроверки = "e1cib/list/УникальныйПризнак#";
Если Найти(ДанныеПереходаПоНавигационнойСсылке.ОтносительнаяНавигационнаяСсылка, БлокПроверки) Тогда
СтандартнаяОбработка = Ложь;
РазделСправки = СтрЗаменить(ДанныеПереходаПоНавигационнойСсылке.ОтносительнаяНавигационнаяСсылка, БлокПроверки, "");
Если НЕ ПустаяСтрока(РазделСправки) Тогда
//Фиксируем статистику
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Если Ваши пользователи работают только в тонком клиенте - то можно использовать данный вариант, но как оказало, в веб клиенте так к сожалению не работает, так как для веб клиента ссылка на базу будет http:// а данная ссылка в первую очередь ассоциирована с браузером. В итоге произойдет попытка перехода по ссылке, и перехват не сработает.
Попытка 3.
Для режима веб клиент решением выглядит передача данных из javascript в опубликованный в базе метод для сбора статистики с помощью скрипта, размещенного все так же в коде страницы со справкой. Ну или передача данных и вовсе во внешнюю систему подсчета метрик.
Вроде бы все очевидно, но возникла проблема. Размещенный на странице справки скрипт отсутствовал в итоговой странице при работе в режиме предприятия.
Опытным путем выяснилось, что при добавлении любой ссылки в html скрипт становился доступен (собственно в попытке номер 2 мы поэтому с данной проблемой и не столкнулись).
Не совсем понимаю причину такого поведения платформы, но главное это позволило решить задачу.
Итог - просто скрипт - который при загрузке страницы отправляет данные на http сервис:
<script>
if (window == top)
{ document.getElementById("stats").click(); }
else {
var el = document.getElementById("stats").getAttribute("name-id");
var xhr = new XMLHttpRequest();
xhr.open('POST', 'ИмяПубликации', true);
xhr.send([el]);
}
</script>
Финал.
Итог всей этой истории - результат спора. Удивительно, но пользуются. Правда мы все же схитрили - вывели на ключевые формы большую команду "Справка". Пока ее не было - никто и знать не знал о ее наличии в системе.
А Вы добавляете в свои решения справку или обходитесь только документацией и базой знаний?
Вступайте в нашу телеграмм-группу Инфостарт