diff --git "a/epf/xddTestRunner/xddTestRunner/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/epf/xddTestRunner/xddTestRunner/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index ecd127643..29baac29e 100644 --- "a/epf/xddTestRunner/xddTestRunner/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/epf/xddTestRunner/xddTestRunner/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -32,7 +32,7 @@ // Поле в котором можно хранить клиентский контекст на протяжении сеанса // данный контекст можно использовать для передачи данных между тестами -&НаКлиенте +&НаКлиенте Перем ГлобальныйКонтекст; // { События формы @@ -1272,13 +1272,13 @@ КонецФункции // } История загрузки тестов + // { Пакетный запуск &НаКлиенте Процедура ВыполнитьПакетныйЗапуск(Знач ПараметрЗапуска) Перем РезультатыТестирования; Попытка - ПарсерКоманднойСтроки = Плагин("ПарсерКоманднойСтроки"); ПараметрыЗапуска = ПарсерКоманднойСтроки.Разобрать(ПараметрЗапуска); @@ -1339,6 +1339,12 @@ СобратьНастройкиОтчетовТестирования(НастройкиШагов, ПараметрыЗапуска); + Область = ПолучитьОбластьДанных(); + Если Область <> Неопределено Тогда + ВходВОбластьНаСервере(Область); + КонецЕсли; + + Если Не ЕстьПоддержкаАсинхронныхВызовов Тогда ВыполнитьПакетныйЗапускСинхронно(НастройкиШагов); Иначе @@ -2950,6 +2956,40 @@ КонецФункции + +&НаСервереБезКонтекста +Процедура ВходВОбластьНаСервере(Знач ОбластьДанных) + МОбщегоНазначения = Неопределено; + Попытка + МОбщегоНазначения = Вычислить("ОбщегоНазначения"); + Исключение + Возврат; + КонецПопытки; + + МРаботаВМоделиСервиса = МОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); // мало ли модуля может не быть (если конфы самописные) + МСтроковыеФункцииКлиентСервер = МОбщегоНазначения.ОбщийМодуль("СтроковыеФункцииКлиентСервер"); + + Если МСтроковыеФункцииКлиентСервер <> Неопределено И ТипЗнч(ОбластьДанных) <> Тип("Число") Тогда + ОбластьДанных = МСтроковыеФункцииКлиентСервер.СтрокаВЧисло(ОбластьДанных); + КонецЕсли; + + Если ОбластьДанных <> Неопределено И МРаботаВМоделиСервиса <> Неопределено И МРаботаВМоделиСервиса.СеансЗапущенБезРазделителей() Тогда + МРаботаВМоделиСервиса.ВойтиВОбластьДанных(ОбластьДанных); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьОбластьДанных() + Перем ОбластьДанныхМенеджера, ПлагинНастроек; + + ПлагинНастроек = Плагин("Настройки"); + ПлагинНастроек.Обновить(); + + ПлагинНастроек.ПолучитьНастройки().Свойство("ОбластьДанныхМенеджера", ОбластьДанныхМенеджера); + + Возврат ОбластьДанныхМенеджера; +КонецФункции + // } Вспомогательные методы #Область Глобальный_контекст diff --git "a/plugins/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/plugins/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 9a807534b..e72f3d739 100644 --- "a/plugins/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/plugins/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -98,6 +98,7 @@ КонецПроцедуры + // Подключить тест-клиент // // Параметры: @@ -120,31 +121,31 @@ Порт = ПолучитьПорт(Порт); Порт = НайтиСвободныйПортЕслиТекущийЗанят(Порт); - + Если Не ЗначениеЗаполнено(СписокПропускаемыхФорм) Тогда СписокПропускаемыхФорм = Новый СписокЗначений; КонецЕсли; - + ПодключенныйТестКлиент = Неопределено; - + Попытка Выполнить "ПодключенныйТестКлиент = Новый ТестируемоеПриложение(, XMLСтрока(Порт));"; Исключение Инфо = ИнформацияОбОшибке(); ОписаниеОшибки = "Ошибка подключения тест-клиента по порту " + Порт + " |" + ПодробноеПредставлениеОшибки(Инфо); - + ЗаписатьПредупреждениеВЖурналРегистрации(ОписаниеОшибки); ПодключенныйТестКлиент = Неопределено; КонецПопытки; - + Если ПодключенныйТестКлиент = Неопределено Тогда ВызватьИсключение "Не удалось создать объект ТестируемоеПриложение. |Возможно, что 1С:Предприятие 8 не было запущено в режиме Менеджера тестирования (ключ командной строки /TESTMANAGER) |При запуске Предприятия через Конфигуратор можно включить этот режим в параметрах конфигуратора Сервис -> Параметры -> Запуск 1С:Предприятия -> Дополнительные -> Автоматизированное тестирование -> пункт ""Запускать как менеджер тестирования""."; КонецЕсли; - + // Попытка подключиться к уже запущенному приложению. Подключен = Ложь; Попытка @@ -154,12 +155,12 @@ Инфо = ИнформацияОбОшибке(); ОписаниеОшибки = "Ошибка соединения с тест-клиентом. Порт " + Порт + " |" + ПодробноеПредставлениеОшибки(Инфо); - + ЗаписатьПредупреждениеВЖурналРегистрации(ОписаниеОшибки); Подключен = Ложь; КонецПопытки; - + Если Подключен Тогда Результат.Вставить("Клиент", ПодключенныйТестКлиент); Результат.Вставить("Порт", Порт); @@ -168,30 +169,36 @@ КонецЕсли; СтрокаЗапуска = СтрокаЗапускаТестКлиента(ИмяПользователя, Пароль, Порт, ДопПараметры); - + УправлениеПриложениями = КонтекстЯдра.Плагин("УправлениеПриложениями"); УправлениеПриложениями.ВыполнитьКомандуОСБезПоказаЧерногоОкна(СтрокаЗапуска, Ложь, Ложь); - + ВремяОкончанияОжидания = ТекущаяДата() + ТаймаутВСекундах(); ОписаниеОшибкиСоединения = ""; + СчетчикПопыток = 0; Пока Не ТекущаяДата() >= ВремяОкончанияОжидания Цикл Попытка + СчетчикПопыток = СчетчикПопыток + 1; + ПодключенныйТестКлиент.УстановитьСоединение(); Подключен = Истина; + + ЗаписатьИнформациюВЖурналРегистрации(СтрШаблон("Тест-клиент подключен успешно. Порт %1", Порт)); Прервать; Исключение - Инфо = ИнформацияОбОшибке(); - ОписаниеОшибки = "Ошибка подключения тест-клиента. Порт " + Порт + " - |" + ПодробноеПредставлениеОшибки(Инфо); - - ЗаписатьПредупреждениеВЖурналРегистрации(ОписаниеОшибки); - + Инфо = ИнформацияОбОшибке(); + ОписаниеОшибки = СтрШаблон("Попытка %1. Ошибка подключения тест-клиента. Порт %2 + |%3", СчетчикПопыток, Порт, ПодробноеПредставлениеОшибки(Инфо)); + + ЗаписатьПредупреждениеВЖурналРегистрации(ОписаниеОшибки); + КонецПопытки; КонецЦикла; - + Если Не Подключен Тогда Попытка ПодключенныйТестКлиент.УстановитьСоединение(); + ЗаписатьИнформациюВЖурналРегистрации(СтрШаблон("Тест-клиент подключен успешно. Порт %1", Порт)); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ОписаниеОшибкиСоединения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); @@ -200,12 +207,12 @@ ЗаписатьПредупреждениеВЖурналРегистрации(ПолныйТекстСообщения); ВызватьИсключение СтрШаблон( - "Не смогли установить соединение с тестовым приложением для пользователя %1! - |%2", - ИмяПользователя, ОписаниеОшибкиСоединения); + "Не смогли установить соединение с тестовым приложением для пользователя %1! + |%2", + ИмяПользователя, ОписаниеОшибкиСоединения); КонецПопытки; КонецЕсли; - + Если Подключен И ОсновноеОкно(ПодключенныйТестКлиент) = Неопределено Тогда Таймаут = 5; ДлительностьОжидания = 0; @@ -225,10 +232,10 @@ ЗаписатьПредупреждениеВЖурналРегистрации(ПолныйТекстСообщения); ВызватьИсключение КонтекстЯдра.СтрШаблон_( - "ru = 'Не смогли установить соединение с тестовым приложением для пользователя %1 - |%2!", - ИмяПользователя, ОписаниеОшибкиСоединения); - + "ru = 'Не смогли установить соединение с тестовым приложением для пользователя %1 + |%2!", + ИмяПользователя, ОписаниеОшибкиСоединения); + КонецПопытки; Если ОсновноеОкно(ПодключенныйТестКлиент) = Неопределено Тогда ПодключенныйТестКлиент.НайтиОбъект(Тип("ТестируемаяКнопкаФормы"), "Отмена").Нажать(); @@ -237,12 +244,12 @@ ВызватьИсключение НСтр("ru = 'Превышено время ожидания ввода пароля.'"); КонецЕсли; КонецЕсли; - + Результат.Вставить("Клиент", ПодключенныйТестКлиент); Результат.Вставить("Порт", Порт); Возврат Результат; - + КонецФункции &НаКлиенте @@ -278,18 +285,22 @@ &НаКлиенте Функция ТестКлиентПоУмолчанию() Экспорт - + Если ЗначениеЗаполнено(ЗапущенныеТестКлиенты) Тогда + ЗаписатьПримечаниеВЖурналРегистрации(СтрШаблон("Был использован один из запущенных ранее тест клиентов. + |ИмяПользователя: %1 + |Порт: %2 + |ДопПараметры: %3", ЗапущенныеТестКлиенты[0].ИмяПользователя, ЗапущенныеТестКлиенты[0].Порт, ЗапущенныеТестКлиенты[0].ДопПараметры)); Возврат ЗапущенныеТестКлиенты[0].ТестКлиент; КонецЕсли; - + ОписаниеТестКлиента = ПодключитьТестКлиент(); Результат = ОписаниеТестКлиента.Клиент; ЗапомнитьДанныеТестКлиента(Результат, "", ОписаниеТестКлиента.Порт, ""); - + Возврат Результат; - + КонецФункции &НаКлиенте @@ -643,14 +654,14 @@ // &НаКлиенте Функция НайтиСвободныйПортЕслиТекущийЗанят(Знач Порт = 1538, Знач НачалоДиапазонаПортов = 48000, Знач ОкончаниеДиапазонаПортов = 50000) Экспорт - + Если Порт <= 0 Или Порт > 65536 Тогда Порт = 1538; КонецЕсли; - + //НачалоДиапазонаПортов = 48000; //ОкончаниеДиапазонаПортов = 50000; - + //Если ЗначениеЗаполнено(Объект.ДиапазонПортовTestclient) Тогда // //там должна быть строка вида 48000-48020 // МассивЗначений = СтрРазделить(Объект.ДиапазонПортовTestclient, "-"); @@ -662,21 +673,23 @@ // НачалоДиапазонаПортов = Число(МассивЗначений[0]); // ОкончаниеДиапазонаПортов = Число(МассивЗначений[1]); //КонецЕсли; - - МассивЗанятыхПортов = МассивЗанятыхПортов(); + + ПортПид = Новый Соответствие(); + МассивЗанятыхПортов = МассивЗанятыхПортов(ПортПид); Если МассивЗанятыхПортов.Найти(Порт) <> Неопределено Тогда - + ЗаписатьПредупреждениеВЖурналРегистрации(СтрШаблон("Порт ""%1"" занят процессом pid: ""%2"" ", Порт, ПортПид[Порт])); + Для СвободныйПорт = НачалоДиапазонаПортов По ОкончаниеДиапазонаПортов Цикл Если МассивЗанятыхПортов.Найти(СвободныйПорт) = Неопределено Тогда + ЗаписатьИнформациюВЖурналРегистрации(СтрШаблон("Будет использован свободный порт: ""%1""", СвободныйПорт)); Возврат СвободныйПорт; - КонецЕсли; КонецЦикла; КонецЕсли; - + Возврат Порт; - + КонецФункции // } Plugin interface @@ -796,6 +809,16 @@ КонецПроцедуры +&НаСервереБезКонтекста +Процедура ЗаписатьИнформациюВЖурналРегистрации(Знач Текст) + ЗаписьЖурналаРегистрации(ИмяСобытияЖР(), УровеньЖурналаРегистрации.Информация,,, Текст); +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗаписатьПримечаниеВЖурналРегистрации(Знач Текст) + ЗаписьЖурналаРегистрации(ИмяСобытияЖР(), УровеньЖурналаРегистрации.Примечание,,, Текст); +КонецПроцедуры + &НаСервереБезКонтекста Функция ИмяСобытияЖР() @@ -841,10 +864,12 @@ Если Не ЗначениеЗаполнено(Порт) Тогда Порт = ПортПоУмолчанию(); КонецЕсли; + Если ТипЗнч(Порт) <> Тип("Число") Тогда Порт = Число(Порт); КонецЕсли; + ЗаписатьИнформациюВЖурналРегистрации(СтрШаблон("Будет использован порт: ""%1""", Порт)); Возврат Порт; КонецФункции @@ -1093,35 +1118,45 @@ КонецПроцедуры &НаКлиенте -Функция МассивЗанятыхПортов() - +Функция МассивЗанятыхПортов(ПортПид = Неопределено) + Результат = Новый Массив; ИмяВременногоФайла = ПолучитьИмяВременногоФайла("txt"); Если НЕ ЭтоLinux() Тогда - + СтрокаЗапуска = "netstat -ano > """ + ИмяВременногоФайла + """"; //TODO проверить быстрое использование ВыполнитьКомандуОСБезПоказаЧерногоОкна(..., Истина, Ложь); //ВыполнитьКомандуОСБезПоказаЧерногоОкна(ТекстКоманды, Истина, Истина); УправлениеПриложениями = КонтекстЯдра.Плагин("УправлениеПриложениями"); - УправлениеПриложениями.ВыполнитьКомандуОСБезПоказаЧерногоОкна(СтрокаЗапуска); - + КодОтвета = УправлениеПриложениями.ВыполнитьКомандуОСБезПоказаЧерногоОкна(СтрокаЗапуска); + Если КодОтвета <> 0 Тогда + ЗаписатьОшибкуВЖурналеРегистрации(СтрШаблон("Не удалось выполнить команду ""%1"", код ответа = %2", СтрокаЗапуска, КодОтвета)); + Возврат Результат; + КонецЕсли; + Текст = Новый ЧтениеТекста; Текст.Открыть(ИмяВременногоФайла, "UTF-8"); - + Пока Истина Цикл Стр = Текст.ПрочитатьСтроку(); Если Стр = Неопределено Тогда Прервать; КонецЕсли; - + Если Стр = "" Тогда Продолжить; КонецЕсли; - - Порт_ = Сред(Сред(СокрЛП(Стр), 8), 1, Найти(Сред(СокрЛП(Стр), 8), " ")); + + Разбивка = СтрРазделить(Стр, " ", Ложь); + Если Разбивка.Количество() <> 5 Тогда + Продолжить; + КонецЕсли; + Порт_ = Разбивка[1]; + PID = Разбивка[Разбивка.ВГраница()]; + Порт = ""; Для НомерСимвола = 0 По СтрДлина(Порт_) - 1 Цикл СимволСтроки = Сред(Порт_, СтрДлина(Порт_) - НомерСимвола, 1); @@ -1132,10 +1167,13 @@ Порт = СимволСтроки + Порт; КонецЕсли; КонецЦикла; - + Попытка Порт = Число(Порт); Результат.Добавить(Порт); + Если ПортПид <> Неопределено Тогда + ПортПид.Вставить(Порт, PID); + КонецЕсли; Исключение Продолжить; КонецПопытки; @@ -1152,17 +1190,17 @@ Текст = Новый ЧтениеТекста; Текст.Открыть(ИмяВременногоФайла, "UTF-8"); - + Пока Истина Цикл Стр = Текст.ПрочитатьСтроку(); Если Стр = Неопределено Тогда Прервать; КонецЕсли; - + Если Стр = "" Тогда Продолжить; КонецЕсли; - + Порт = СокрЛП(Стр); Попытка Порт = Число(Порт); @@ -1174,13 +1212,14 @@ Текст.Закрыть(); КонецЕсли; - + //Для каждого СтрокаДанныеКлиентовТестирования Из ДанныеКлиентовТестирования Цикл // TODO // Результат.Добавить(СтрокаДанныеКлиентовТестирования.ПортЗапускаТестКлиента); //КонецЦикла; - + + УдалитьФайлы(ИмяВременногоФайла); Возврат Результат; - + КонецФункции Функция НовоеОписаниеТестКлиента() diff --git "a/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\242\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Ext/ObjectModule.bsl" "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\242\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Ext/ObjectModule.bsl" index 702cad905..685c2e72a 100644 --- "a/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\242\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Ext/ObjectModule.bsl" +++ "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\242\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Ext/ObjectModule.bsl" @@ -1324,6 +1324,12 @@ ВызватьИсключение СтрШаблон_(НСтр("ru = 'Не удалось найти объект метаданных по имени ""%1"".'"), ИД); КонецЕсли; Мета = Элем.Метаданные(); + + Если Не РазрешеноИзменятьОбъект(Мета) Тогда + ЗаписьЖурналаРегистрации(Метаданные().Синоним, УровеньЖурналаРегистрации.Информация, Мета, , СтрШаблон("Метаданные ""%1"" пропущены", Мета.ПолноеИмя())); + Возврат Неопределено; + КонецЕсли; + Если ПроверяемоеПравоДоступа <> Неопределено И НЕ ПравоДоступа(ПроверяемоеПравоДоступа, Мета) Тогда Возврат Неопределено; @@ -1361,6 +1367,31 @@ КонецФункции +Функция РазрешеноИзменятьОбъект(МетаОбъект) + МОбщегоНазначения = Неопределено; + Попытка + МОбщегоНазначения = Вычислить("ОбщегоНазначения"); + Исключение + Возврат Истина; // Если нет модуля ОбщегоНазначения, врядли там включено разделение по областям + КонецПопытки; + + Если МОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + МодульРаботаВМоделиСервиса = МОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + + // В сеансе без разделителей меняем только общие МД, в сеансе с разделителем меняет только разделенные + // в базе где вообще не включено разделение меняем все подряд + Возврат Не МодульРаботаВМоделиСервиса.РазделениеВключено() ИЛИ + (Не МодульРаботаВМоделиСервиса.ИспользованиеРазделителяСеанса() И + Не МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(МетаОбъект)) + ИЛИ (МодульРаботаВМоделиСервиса.ИспользованиеРазделителяСеанса() И + МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(МетаОбъект)); + Иначе + Возврат Истина; + КонецЕсли; +КонецФункции + + + Функция СоздатьЭлементИВернутьСсылку(ИД, Наименование, ПроверяемоеПравоДоступа = Неопределено) Экспорт Элем = СоздатьЭлемент(ИД, Наименование, ПроверяемоеПравоДоступа); Возврат ?(Элем = Неопределено, Неопределено, Элем.Ссылка); diff --git "a/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\242\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\242\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index c04c58fac..6d5573fda 100644 --- "a/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\242\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\242\320\265\321\201\321\202\321\213_\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\265\320\244\320\276\321\200\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -1392,30 +1392,32 @@ #Область ВспомогательныеМетоды &НаСервереБезКонтекста -Процедура УдалитьСозданныеОбъекты(СоздаваемыйЭлемент) +Процедура УдалитьСозданныеОбъекты(Знач СоздаваемыйЭлемент) + Перем Владелец; - Если СоздаваемыйЭлемент = Неопределено Тогда + Если Не ЗначениеЗаполнено(СоздаваемыйЭлемент) Тогда Возврат; КонецЕсли; Попытка + // не у всех метаданных есть свойство Владельцы, например у ПВХ нет и тогда получим ошибку поле объекта не обноркжено, а ПВХ может выступать владельцем у справочника + // лучше проверять через реквизиты + // у СтандартныеРеквизиты нет метода Найти. В попытке, это принцип EAFP + Попытка + Владелец = СоздаваемыйЭлемент.Метаданные().СтандартныеРеквизиты["Владелец"]; + Исключение + КонецПопытки; - СозданныйОбъект = СоздаваемыйЭлемент.ПолучитьОбъект(); - - Если ЗначениеЗаполнено(СоздаваемыйЭлемент.Владелец) Тогда - - Если СоздаваемыйЭлемент.Метаданные().Владельцы.Количество() > 0 - И Не СоздаваемыйЭлемент.Владелец.Пустая() Тогда - УдалитьСозданныеОбъекты(СозданныйОбъект.Владелец); - Возврат; - КонецЕсли; - + Если Владелец <> Неопределено Тогда + УдалитьСозданныеОбъекты(СоздаваемыйЭлемент.Владелец); КонецЕсли; - СозданныйОбъект.Удалить(); - - Исключение + СозданныйОбъект = СоздаваемыйЭлемент.ПолучитьОбъект(); // обязательно объект нужно получить непосредственно перед удалением + Если СозданныйОбъект <> Неопределено Тогда + СозданныйОбъект.Удалить(); + КонецЕсли; + Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ЗаписьЖурналаРегистрации( ИмяТеста(), @@ -1425,11 +1427,7 @@ ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); ВызватьИсключение КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - КонецПопытки; - - СоздаваемыйЭлемент = Неопределено; - КонецПроцедуры &НаСервере @@ -1589,7 +1587,8 @@ &НаСервереБезКонтекста Функция ИмяТеста() - Возврат "Тесты_ОткрытиеФормКонфигурации"; + // в модуле объекта для имени события используется Метаданные().Синоним, логично что бы и тут был синоним, все должно быть единообразно, а то в ЖР 2 события создаются. + Возврат "Тесты ""Открытие форм конфигурации"""; КонецФункции #КонецОбласти