Проблема автоматического учета времени программиста в среде 1С:Предприятие 8 стоит достаточно остро. Если в версии 7.7 существовали мощные расширения вроде OpenConf, позволявшие легко перехватывать события открытия окон, то в восьмой версии платформа стала более закрытой. Стандартные утилиты типа Spy++ или WinSpy зачастую видят только родительское окно V8TopLevelFrame, не позволяя «заглянуть» внутрь и понять, какой именно модуль или форма сейчас открыты. Разберем основные способы решения этой задачи, от использования низкоуровневых системных интерфейсов до специализированных плагинов.
Проанализируем наиболее технологичный и надежный метод получения данных об окнах 1С — использование интерфейса Microsoft UI Automation. Это современный стандарт для обеспечения доступности приложений, который позволяет программно «обходить» дерево элементов управления любого окна Windows, включая внутренние окна Конфигуратора 1С.
В отличие от классических сообщений Windows (Win32 API), UI Automation предоставляет доступ к свойствам элементов, таким как Name, AutomationId и ClassName. Именно через этот интерфейс работают такие инструменты, как TurboConf и ClipAngel. Рассмотрим, как реализовать простейшее сканирование окон на языке C# (платформа .NET), используя библиотеки UIAutomationClient и UIAutomationTypes.
Для начала нам необходимо найти процесс Конфигуратора и получить доступ к его корневому элементу. Разберем пример логики:
using System.Windows.Automation;
// Получаем корневой элемент всего рабочего стола
AutomationElement rootElement = AutomationElement.RootElement;
// Настраиваем условие поиска для окна 1С
Condition condition = new PropertyCondition(AutomationElement.ProcessIdProperty, pid1c);
AutomationElement window1C = rootElement.FindFirst(TreeScope.Children, condition);
if (window1C != null)
{
// Ищем все дочерние элементы с типом "Window" или "Pane"
AutomationElementCollection windows = window1C.FindAll(TreeScope.Descendants,
new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Window));
foreach (AutomationElement window in windows)
{
Console.WriteLine("Найдено окно: " + window.Current.Name);
}
}
Этот подход позволяет увидеть заголовки всех открытых вкладок и модальных окон. Выясним причину, почему это работает лучше Win32 API: 1С использует собственные механизмы отрисовки интерфейса, и только через UI Automation платформа «сообщает» операционной системе о структуре своих внутренних элементов.
Рассмотрим альтернативный вариант, который работает «изнутри» Конфигуратора. Снегопат — это мощное расширение, которое внедряется в процесс 1С и предоставляет объектную модель для управления средой разработки. С его помощью можно не просто сканировать заголовки окон, но и получать прямые ссылки на объекты метаданных, с которыми работает программист.
Проанализируем преимущества использования скриптов Снегопата для логгирования:
Справочник.Номенклатура.МодульОбъекта), даже если заголовок окна сокращен или изменен.Для реализации логгера на Снегопате обычно используются скрипты на JavaScript. Разберем логику фиксации активного окна:
// Пример логики на языке скриптов Снегопата
function onIdle() {
var activeView = snegopat.activeView;
if (activeView) {
var title = activeView.title;
// Записываем заголовок и время в лог-файл
logToFile(title, new Date());
}
}
Выясним ситуацию с системным параметром запуска /LogUI. Некоторые разработчики пытаются использовать его для логирования действий, однако здесь есть важные нюансы. Рассмотрим, как он работает: при запуске 1С с этим флагом (например, 1cv8.exe /LogUI), платформа создает файл logui.txt в каталоге пользователя.
Важный момент: данный механизм предназначен в первую очередь для режима «Предприятие» и целей автоматизированного тестирования. В Конфигураторе этот параметр зачастую выдает пустые строки или вовсе не фиксирует активность. Разберем основные причины неэффективности /LogUI для учета часов:
Если разработка собственного решения кажется слишком трудозатратной, рассмотрим готовые инструменты, которые уже умеют работать с окнами 1С:
UI Automation. В последних версиях разработчик добавлял инструментарий для анализа времени, проведенного в конфигураторе. Рекомендуем уточнить наличие актуальных плагинов для сбора статистики на официальном форуме проекта.ManicTime отлично справляется с группировкой времени по задачам.1cv8.exe и отправляют данные в популярный сервис статистики для разработчиков.Подводя итог, можно сказать: если вам нужно максимально детальное логирование «для себя» или для автоматизации рутины, стоит смотреть в сторону UI Automation или Снегопата. Если же цель — просто калькулировать часы для отчета, оптимальным выбором станут внешние системы мониторинга активности, такие как ManicTime, которые умеют корректно перехватывать заголовки окон восьмой версии 1С.