Отслеживание завершения обработки в 1С
// Отслеживает завершение длительных обработок в 1С
// например выгрузка/загрузка баз или обновление конфигурации
ЗанятыеОкна = Этот.Определить(0, Объекты.Список, Свойства.Наименование, "Занятые");
Для ЗанятоеОкно Из ЗанятыеОкна Цикл
Ид = ЗанятоеОкно.'Идентификатор окна';
Если (Окна.Активно(Ид)=0) Тогда
// Сообщить("Проверяем Ид = "+Ид, Окна.Занято(Ид));
Если (Окна.Есть(Ид)=1) Тогда
Если (Окна.Занято(Ид)=0) Тогда
ИнтервалВыполнения = Моменты.Текущий - ЗанятоеОкно.'Момент запуска';
ИнтервалСтр = Моменты.Строка(ИнтервалВыполнения, "чч:мм:сс");
Если (ИнтервалВыполнения>180) Тогда
Напомнить("Обработка завершена за "+ИнтервалСтр+" сек", ЗанятоеОкно.'Заголовок окна', 0, Цвета.Цвет(254, 155, 27), 12, 800, 400, 700, 100);
Конец;
// Сообщить("Обработка завершена", ЗанятоеОкно.'Заголовок окна', ИнтервалСтр);
ЗанятоеОкно.Неиспользуемый = 1;
Конец;
Иначе
ЗанятоеОкно.Неиспользуемый = 1;
Конец;
Конец;
Конец;
ЗанятыеОкна.Удалить("Неиспользуемый", 1);
Если (ЗанятыеОкна.Количество()>0) Тогда
// Сообщить("Идет обработка данных в программах 1С", ЗанятыеОкна.Количество());
Конец;
Окна1С = Окна.Определить(, "V8TopLevelFrame");
Для Окно1С Из Окна1С Цикл
Ид = Окно1С.'Идентификатор окна';
Если (Окна.Активно(Ид)=0) Тогда
Если (Окна.Занято(Ид)) Тогда
Стр = Строки.Строка(Ид);
ЗанятоеОкно = ЗанятыеОкна.Определить(0, Объекты.Объект, Свойства.'Идентификатор окна', Ид);
Если (ЗанятоеОкно.Новый()) Тогда
ЗанятоеОкно.'Заголовок окна' = Окно1С.'Заголовок окна';
ЗанятоеОкно.'Момент запуска' = Моменты.Текущий;
// Сообщить("Запуск обработки данных", ЗанятоеОкно.'Идентификатор окна', ЗанятоеОкно.'Заголовок окна');
Конец;
Конец;
Конец;
Конец;