Все получилось без ОбработкиВнешнегоСобытия(), через обработку ожидания.
Громоздко, но это из-за контролей.
Перем спФайлыОтчетов; // : СписокЗначений. Файлы отчетов для перезаписи. <Значение> - новый файл-источник с полным путем, <Строка> - полное имя старого файла отчета. (Simply 26.11.2009)
Перем КвоОшибокТаймер3; // : Число. Мера против зацикливания для <Таймер3> (Simply 26.11.2009)
...
//-----------------------------------------------
Процедура ПриНачалеРаботыСистемы()
...
Таймер3.ЗадатьОбработчикВГлобальномМодуле("ОбновитьВнешнююОбработку");
спФайлыОтчетов=СоздатьОбъект("СписокЗначений"); // : Список файлов внешних отчетов перезаписи для <Таймер3>
...
КонецПроцедуры // ПриНачалеРаботыСистемы
//================================================== FormEx
Процедура ПриЗагрузкеВнешнегоОтчета(ФайлОтчета)
ИмяПроцедуры="ПриЗагрузкеВнешнегоОтчета";
флПродолжитьВыполнение=1; // : Число. Флаг отсутсвия ошибок
// Этап 1. Получение данных о файле отчета
Попытка
ФСО=СоздатьОбъект("Scripting.FileSystemObject");
ИмяФайла=ФСО.GetFile(ФайлОтчета).Name;
ФСО=Пусто;
Если ПустаяСтрока(ИмяФайла)=1 Тогда
глИнформация("# Ошибка получения имени файла внешнего отчета "+ФайлОтчета,"Процедура",ИмяПроцедуры);
флПродолжитьВыполнение=0;
КонецЕсли;
Если флПродолжитьВыполнение=1 Тогда
ХэшФайла=глСервис.ПолучитьХэшМД5(ФайлОтчета,1);
Если (ПустаяСтрока(ХэшФайла)=1) ИЛИ (СтрДлина(ХэшФайла)<32) Тогда
глИнформация("# Ошибка! Нет хэш-кода внешнего отчета "+ФайлОтчета,"Процедура",ИмяПроцедуры);
флПродолжитьВыполнение=0;
ИначеЕсли ХэшФайла="00000000000000000000000000000000" Тогда
глИнформация("# Ошибка! Файл внешнего отчета '"+ФайлОтчета+"' заблокирован!","Процедура",ИмяПроцедуры);
флПродолжитьВыполнение=0;
КонецЕсли;
КонецЕсли;
Исключение
глИнформация("# Ошибка получения данных о файле внешнего отчета "+ФайлОтчета+" = "+ОписаниеОшибки(),"Процедура",ИмяПроцедуры);
флПродолжитьВыполнение=0;
КонецПопытки;
// Этап 2. Сверка с эталоном. MySQL возвращает: 'ok' (все в порядке), 'no' (разный хэш), 'nf' (нет такого файла)
Если флПродолжитьВыполнение=1 Тогда
MySQLПолучить("CALL files.checkert('"+ИмяФайла+"','"+ХэшФайла+"');"); //Rst.Open("CALL files.checkert('"+ИмяФайла+"','"+МдФайла+"');",Conn,0,1);
Попытка
Если Rst.EOF()=0 Тогда
Если Rst.RecordCount()>0 Тогда
Результат=СокрЛП(Rst.Fields("result_").Value);
Если ПустоеЗначение(Результат)=1 Тогда
глИнформация("# Ошибка! Нет значения 'result_' для внешнего отчета "+ФайлОтчета,"Процедура",ИмяПроцедуры);
Иначе
Если Результат="ok" Тогда
Иначе
СтатусВозврата(0);
КвоЗапусков=0;
Если Результат="nf" Тогда
глИнформация("# Ошибка! Запущен неизвестный файл отчета - '"+ФайлОтчета+"'!","Процедура",ИмяПроцедуры);
Иначе
НовФайл=Rst.Fields("file_");
Если ПустоеЗначение(НовФайл)=1 Тогда
глИнформация("# Ошибка! Нет значения 'file_' для внешнего отчета "+ФайлОтчета,"Процедура",ИмяПроцедуры);
Иначе
Stream=СоздатьОбъект("ADODB.Stream");
Stream.Mode=3;
Stream.Type=1;
Stream.Open();
Stream.Write(НовФайл);
Stream.SaveToFile(КаталогВременныхФайлов()+ИмяФайла,2);
Stream=Пусто;
Если ФС.СуществуетФайл(КаталогВременныхФайлов()+ИмяФайла)=0 Тогда
глИнформация("# Ошибка записи на диск эталона внешнего отчета "+ФайлОтчета,"Процедура",ИмяПроцедуры);
Иначе
флДобавитьВСписок=1;
Если Таймер3.Запущен=1 Тогда
Если спФайлыОтчетов.НайтиЗначение(КаталогВременныхФайлов()+ИмяФайла)>0 Тогда
глИнформация("# Файл внешнего отчета '"+КаталогВременныхФайлов()+ИмяФайла+"' уже ожидает перезаписи!","Процедура",ИмяПроцедуры);
флДобавитьВСписок=0;
КонецЕсли;
Иначе
Таймер3.Запустить(100);
КонецЕсли;
Если флДобавитьВСписок=1 Тогда
спФайлыОтчетов.ДобавитьЗначение(КаталогВременныхФайлов()+ИмяФайла,ФайлОтчета);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
глИнформация("# Ошибка! Нет данных по проверке внешнего отчета "+ФайлОтчета,"Процедура",ИмяПроцедуры);
КонецЕсли;
КонецЕсли;
Исключение
глИнформация("# Ошибка выполнения хранимой процедуры по внешнему отчету "+ФайлОтчета+" = "+ОписаниеОшибки(),"Процедура",ИмяПроцедуры);
КонецПопытки;
Попытка Rst.Close(); Исключение КонецПопытки;
КонецЕсли;
КонецПроцедуры // ПриЗагрузкеВнешнегоОтчета