Функция, активизирующая окно стороннего приложения:
// ЗаголовокОкнаПриложения - текст в заголовке окна внешнего приложения
// Задержка - задержка в миллисекундах перед выполнением скрипта, строка или число
Функция АктивироватьОкноПриложения (Знач ЗаголовокОкнаПриложения = "", Знач Задержка = "1000") Экспорт
ВремИмяФайла = КаталогВременныхФайлов() + "~showapp.vbs";
// готовим VBS-файл
ТекстСкрипта = "
|Set WshShell = CreateObject(""WScript.Shell"")
|WScript.Sleep
|Res = WshShell.AppActivate(""%%ЗАГОЛОВОКОКНА%%"")
|If Not Res Then WScript.Echo ""Открыть окно не удалось""
|";
Если ТипЗнч (Задержка) = Тип ("Число") Тогда
Задержка = Формат (Задержка, "ЧГ=0");
КонецЕсли;
ТекстСкрипта = СтрЗаменить(ТекстСкрипта, "%%ЗАГОЛОВОКОКНА%%", ЗаголовокОкнаПриложения);
ТекстСкрипта = СтрЗаменить(ТекстСкрипта, "%%ЗАДЕРЖКА%%", Задержка);
хТекст = Новый ТекстовыйДокумент;
хТекст.ДобавитьСтроку(ТекстСкрипта);
хТекст.Записать(ВремИмяФайла, "windows-1251");
хШелл = Новый COMОбъект("WScript.Shell");
хШелл.Run ("wscript "+ВремИмяФайла, 0, Ложь);
Возврат 0;
КонецФункции
Функция, активизирующая окно программы "Автодилер" (версия 5.4 редакция 9):
// ИДДетали - ID детали в программе АвтоДилер
// ЗаголовокОкнаАД - текст в заголовке окна приложения АвтоДилер
// Задержка - задержка в миллисекундах перед выполнением скрипта, строка или число
Процедура ПоказатьДетальВАвтоДилереПоИД (Знач ИДДетали, Знач ЗаголовокОкнаАД = "", Знач Задержка = "1000") Экспорт
Попытка
хАД = Новый COMОбъект("AutoDealer.Catalog");
Исключение
Сообщить ("Не удалось получить доступ к программе 'АвтоДилер'", СтатусСообщения.ОченьВажное);
Возврат;
КонецПопытки;
хАД.GetDetailByUID (СокрЛП (ИДДетали));
Если ЗаголовокОкнаАД = "" Тогда
ЗаголовокОкнаАД = "-= Система ""АвтоДилер"" 5.4 (редакция 9) =-";
КонецЕсли;
АктивироватьОкноПриложения (ЗаголовокОкнаАД, Задержка);
Возврат;
КонецПроцедуры
Пример открытия детали в программе "АвтоДилер":
ПоказатьДетальВАвтоДилереПоИД ("386#4752164#4674", "-= Система """"АвтоДилер"""" 5.4 (редакция 9) =-");
Несколько слов о параметрах:
ЗаголовокОкнаПриложения
Для открытия окна используется функция WSH AppActiate. В документации к функции сказано, что окно ищется следующим образом: "значение параметра сравнивается по очереди с заголовками окон всех запущенных приложений. Если не найдено ни одного точного совпадения, будет производиться поиск окна, заголовок которого начинается с указанной строки. Если и в этом случае не будет найдено ни одного подходящего окна, будет производиться поиск окна, заголовок которого заканчивается на указанную строку. Если будет найдено несколько подходящих окон, произойдёт активизация одного из них (произвольно). "
Задержка
Параметр Задержка используется для того, чтобы процедура 1С отработала, открылось основное окно 1С, а затем выполнился скрипт, открывающий окно внешнего приложения. Если решение все-таки не заработает, можно поэкспериментировать с этим параметром.
Работоспособность решения:
Поскольку в данном решении использованы средства Windows, стоит сказать, что оно тестировалось на Windows 7 Home и Pro с приложения АвтоДилер, MS Office 2007 (Word, Excel).
В системах Windows часто меняется механизм активизации окна, но, поскольку используется функция механизма WSH, который тоже обновляется вместе с выходом новой версии Windows, жизнеспособность решения усиливается.
Неного дегтя:
Минусом решения, во-первых, является использование внешнего файла. Во-вторых, выполнение vbs-скриптов может быть отключено у пользователя, что потребует дополнительной настройки Windows.
Приглашаю всех, кто заинтересовался публикацией, к обсуждению и тестированию.