diff --git "a/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 81138ea7..7ec50db8 100644 --- "a/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/epf/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/\320\227\320\260\320\272\321\200\321\213\321\202\321\214\320\237\321\200\320\265\320\264\320\277\321\200\320\270\321\217\321\202\320\270\320\265/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -23,37 +23,142 @@ |""ЗапрашиватьПодтверждениеПриЗавершенииПрограммы"", Ложь);"); Исключение // Данного модуля и метода может не быть в конфигурации - КонецПопытки; + КонецПопытки; + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) + Если Не ЭтоКонфигурацияНаБазеБСПСервер() Тогда ПрекратитьРаботуСистемы(); - //Сообщить("Заглушка - завершаем работу системы"); - Возврат; - КонецЕсли; + КонецЕсли; - ПараметрыЗапуска = СтрРазделить(ПараметрЗапуска, ";", Ложь); - СтрокаПоиска = "exitCodePath="; - Для каждого Стр из ПараметрыЗапуска Цикл - Если СтрНайти(Стр, СтрокаПоиска) > 0 Тогда - ПутьКФайлуРезультата = СтрЗаменить(Стр, СтрокаПоиска, ""); - Сообщить("Путь файла лога " + ПутьКФайлуРезультата); - УдалитьФайлРезультата(); - Прервать; - КонецЕсли; - КонецЦикла; + ОпределитьПутиИзПараметраЗапуска(); + Если Не ПустаяСтрока(ПутьКФайлуРезультата) Тогда + УдалитьФайлБезопасно(ПутьКФайлуРезультата); + Сообщить("Путь файла лога " + ПутьКФайлуРезультата); + КонецЕсли; + Если Не ПустаяСтрока(ПутьКФайлуСвойствКонфигурации) Тогда + УдалитьФайлБезопасно(ПутьКФайлуСвойствКонфигурации); + Сообщить("Путь файла свойств конфигурации " + ПутьКФайлуСвойствКонфигурации); + ЗаписатьСвойстваКонфигурации(); + КонецЕсли; ПодключитьОбработчикОжидания("ПроверитьНеобходимостьЗавершенияПрограммы", 10, Истина); ПодключитьОбработчикОжидания("ПроверитьЛегальностьОбновления", 2); Если СуществуетПодсистемаМультиязычность() Тогда ПодключитьОбработчикОжидания("ПроверитьРегиональныеНастройки", 2); ПроверитьРегиональныеНастройки(); - КонецЕсли; + КонецЕсли; + ПроверитьНеобходимостьЗавершенияПрограммы(); - ПроверитьЛегальностьОбновления(); -КонецПроцедуры + ПроверитьЛегальностьОбновления(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОпределитьПутиИзПараметраЗапуска() + + ОписанияПутей = Новый Структура; + ОписанияПутей.Вставить("ПутьКФайлуРезультата", "exitCodePath"); + ОписанияПутей.Вставить("ПутьКФайлуСвойствКонфигурации", "configPropsPath"); + + ПараметрыЗапуска = СтрРазделить(ПараметрЗапуска, ";", Ложь); + Для Каждого ЧастьПараметраЗапуска из ПараметрыЗапуска Цикл + + Для Каждого ЭлементОписанияПути Из ОписанияПутей Цикл + + Если Не ПустаяСтрока(ЭтаФорма[ЭлементОписанияПути.Ключ]) Тогда + Продолжить; + КонецЕсли; + + СтрокаПоиска = ЭлементОписанияПути.Значение + "="; + ПозицияКлючаПути = СтрНайти(ВРег(ЧастьПараметраЗапуска), ВРег(СтрокаПоиска)); + + Если ПозицияКлючаПути > 0 Тогда + ПутьКФайлу = Сред(ЧастьПараметраЗапуска, ПозицияКлючаПути + СтрДлина(СтрокаПоиска)); + Если СтрНачинаетсяС(ПутьКФайлу, """") Тогда + ПутьКФайлу = Сред(ПутьКФайлу, 2); + КонецЕсли; + Если СтрЗаканчиваетсяНа(ПутьКФайлу, """") Тогда + ПутьКФайлу = Лев(ПутьКФайлу, СтрДлина(ПутьКФайлу) - 1); + КонецЕсли; + ЭтаФорма[ЭлементОписанияПути.Ключ] = ПутьКФайлу; + Прервать; + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьСвойстваКонфигурации() + + Попытка + ТекстовыйФайл = Новый ТекстовыйДокумент(); + ТекстовыйФайл.УстановитьТекст(ТекстСвойствКонфигурации()); + ТекстовыйФайл.Записать(ПутьКФайлуСвойствКонфигурации, КодировкаТекста.UTF8); + Исключение + ТекстСообщения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписатьВЖурналРегистрации(ТекстСообщения); + КонецПопытки; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ТекстСвойствКонфигурации() + + ЗаписываемыеСвойства = Новый Структура; + + // Заполним часть свойств из метаданных конфигурации + ЗаписываемыеСвойства.Вставить("АвторскиеПрава"); + ЗаписываемыеСвойства.Вставить("АдресИнформацииОКонфигурации"); + ЗаписываемыеСвойства.Вставить("АдресИнформацииОПоставщике"); + ЗаписываемыеСвойства.Вставить("АдресКаталогаОбновлений"); + ЗаписываемыеСвойства.Вставить("ВариантВстроенногоЯзыка"); + ЗаписываемыеСвойства.Вставить("Версия"); + ЗаписываемыеСвойства.Вставить("Имя"); + ЗаписываемыеСвойства.Вставить("ИспользоватьОбычныеФормыВУправляемомПриложении"); + ЗаписываемыеСвойства.Вставить("ИспользоватьУправляемыеФормыВОбычномПриложении"); + ЗаписываемыеСвойства.Вставить("Комментарий"); + ЗаписываемыеСвойства.Вставить("КраткаяИнформация"); + ЗаписываемыеСвойства.Вставить("Поставщик"); + + ЗаполнитьЗначенияСвойств(ЗаписываемыеСвойства, Метаданные); + + // Дополним свойства другими данными + ЗаписываемыеСвойства.Вставить("КонфигурацияИзменена", КонфигурацияИзменена()); + + // Почистим записываемые данные + ПустыеКлючи = Новый Массив; + ДопустимыеТипы = Новый ОписаниеТипов("Булево, Строка, Дата, Число"); + + Для Каждого ЭлементСвойств Из ЗаписываемыеСвойства Цикл + Если ЭлементСвойств.Значение = Неопределено Тогда + ПустыеКлючи.Добавить(ЭлементСвойств.Ключ); + Продолжить; + КонецЕсли; + Если Не ДопустимыеТипы.СодержитТип(ТипЗнч(ЭлементСвойств.Значение)) Тогда + ЗаписываемыеСвойства.Вставить(ЭлементСвойств.Ключ, Строка(ЭлементСвойств.Значение)); + КонецЕсли; + КонецЦикла; + + Для Каждого ПустойКлюч Из ПустыеКлючи Цикл + ЗаписываемыеСвойства.Удалить(ПустойКлюч); + КонецЦикла; + + // Сериализуем свойства в JSON + ЗаписьJSON = Новый ЗаписьJSON(); + ЗаписьJSON.УстановитьСтроку(); + ЗаписатьJSON(ЗаписьJSON, ЗаписываемыеСвойства); + ТекстСвойствКонфигурации = ЗаписьJSON.Закрыть(); + + Возврат ТекстСвойствКонфигурации; + +КонецФункции &НаКлиенте Процедура ПроверитьНеобходимостьЗавершенияПрограммы() Экспорт @@ -148,7 +253,11 @@ Если НеобходимоОжидание И Не МожноЗавершатьРаботу И СчетчикОжиданияРезультатов <= МаксИтерацийОжиданияРезультатов Тогда СчетчикОжиданияРезультатов = СчетчикОжиданияРезультатов + 1; - ПодключитьОбработчикОжидания("ПроверитьНеобходимостьЗавершенияПрограммы", 10, Истина); + ПодключитьОбработчикОжидания("ПроверитьНеобходимостьЗавершенияПрограммы", 10, Истина); + Если СчетчикОжиданияРезультатов <= МаксИтерацийОжиданияРезультатов Тогда + Сообщить("Ожидание при завершении программы. Итерация " + + СчетчикОжиданияРезультатов + " из " + МаксИтерацийОжиданияРезультатов); + КонецЕсли; КонецЕсли; МожемЗавершатьРаботу = Ложь; @@ -161,10 +270,8 @@ КонецЕсли; Если МожемЗавершатьРаботу И НеобходимоОжидание Тогда - Сообщить(""+ТекущаяДата() + " - "+"Завершаем работу"); - + Сообщить("" + ТекущаяДата() + " - " + "Завершаем работу"); ПодключитьОбработчикОжидания("ЗавершитьРаботу", 1, Истина); - КонецЕсли; КонецПроцедуры @@ -252,21 +359,26 @@ Возврат; КонецЕсли; - ТекстовыйФайл = Новый ТекстовыйДокумент; - ТекстовыйФайл.УстановитьТекст("0"); - ТекстовыйФайл.Записать(ПутьКФайлуРезультата, КодировкаТекста.UTF8); + Попытка + ТекстовыйФайл = Новый ТекстовыйДокумент; + ТекстовыйФайл.УстановитьТекст("0"); + ТекстовыйФайл.Записать(ПутьКФайлуРезультата, КодировкаТекста.UTF8); + Исключение + ТекстСообщения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписатьВЖурналРегистрации(ТекстСообщения); + КонецПопытки; КонецПроцедуры &НаКлиенте -Процедура УдалитьФайлРезультата() +Процедура УдалитьФайлБезопасно(ПутьКФайлу = Неопределено) - Если ПутьКФайлуРезультата = "" Тогда + Если ПустаяСтрока(ПутьКФайлу) Тогда Возврат; КонецЕсли; Попытка - УдалитьФайлы(ПутьКФайлуРезультата); + УдалитьФайлы(ПутьКФайлу); Исключение ТекстСообщения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписатьВЖурналРегистрации(ТекстСообщения);