//{--- загрузка vk_sleep_1C.dll, описание особенностей
// vk_sleep_1C.dll - мутная, поведение при загрузке и применении метода - неадекватное,
// падает при повторном выполнении в сеансе 1С метода УстановитьПаузуПриБлокировке()
// поэтому для исключения повторного выполнения надо убедиться, что ВК уже загружена
// при этом, !!!если ВК не загружена Процесс.СоздатьОбъект("Addin.vk_sleep_1C") - отрабатывает без ошибок!!!,
// но Процесс.КакойТоМетодКомпоненты() - дает ошибку типа Поле агрегатного объекта не обнаружено...
// наличие такой ошибки можно рассматривать как признак того, что ВК не загружена,
// так как повторное исполнение метода УстановитьПаузуПриБлокировке() - приводит к краху 1С, то
// используем другой метод, который не ломает 1С: Процесс.Sleep()
//}--- загрузка vk_sleep_1C.dll, описание особенностей
Процесс = СоздатьОбъект("Addin.vk_sleep_1C");
Попытка Процесс.Sleep(5); // повторное исполнение метода не приводит к краху 1С,
Исключение // используем метод как сигнальный, что компонента не загружена/загружена
ОшибкаОписание = ОписаниеОшибки(); Процесс = ""; // признак, что компонента не загружена
Если Найти(ОшибкаОписание,"Поле агрегатного объекта не обнаружено (Sleep)") = 0
Тогда // контроль ожидаемой ошибки, получили не то что ждали...
Сообщить("загрузка ВК <vk_sleep_1C.dll>, проблема: "+ОшибкаОписание,"!");
КонецЕсли;
КонецПопытки;
Если ПустоеЗначение(Процесс) = 1 Тогда
// компонента не загружена, ЗАГРУЖАЕМ, ВЫПОЛНЯЕМ ДЕЙСТВИЯ ПРИ ПЕРВОНАЧАЛЬНОЙ ЗАГРУЗКЕ
Иначе
// компонента загружена, НЕ ЗАГРУЖАЕМ, ВЫПОЛНЯЕМ/НЕ ВЫПОЛНЯЕМ ДЕЙСТВИЯ ПРИ ПОВТОРНОЙ ЗАГРУЗКЕ
КонецЕсли;
Наткнулся при перфекционистическом рефакторинге кода загрузки всяких ВК.
Аналогично падала и ВК mxl_doctor.dll (но ее заменил на mxlboost.dll)
Обе компоненты - от Romix'a... Внешние компоненты для 1С:Предприятие (https://x-romix.narod.ru/)
.
Правда, vk_sleep_1C.dll работала много лет без проблем :D на DBF-ной базе на W2003, может там таких косяков и не наблюдается (смотреть уже лень), а крашилось на Win10
Цитата: Злоп от 17 июня 2024, 02:52Наткнулся при перфекционистическом рефакторинге кода загрузки всяких ВК.
vk_sleep_1c.dll, fakir.dll, mxl_doctor.dll, admin1C.dll - все дают возможность СоздатьОбъект() без предварительной загрузки соответствующих ВК (все, кроме admin1C - от Romix'a), с чем это связано мне неведомо, может какие-то глюки, связанные с регистрацией этих ВК, не знаю, не копенгаген в этом (но думаю, что в реестре прописаны соответствующие классы и типа "инициализация" происходит, но объекты получаются "пустые"...)
.
fakir заменяется на formex, mxl_doctor на mxlboost, vk_sleep_1C - обошел проблему падения, admin1C аналогично vk_sleep_1C...