Skip to content

Commit

Permalink
Всегда возвращается новый объект
Browse files Browse the repository at this point in the history
- исправлено Плагин Данные переиспользует состояние
  - если есть вложенные вызовы
- мелкие замечания Сонара

closes #825
  • Loading branch information
artbear committed Dec 18, 2020
1 parent 747971c commit 8c41485
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 36 deletions.
28 changes: 15 additions & 13 deletions plugins/Данные/Данные/Ext/ObjectModule.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@

Функция НачатьСоздание(ИмяМетаданных) Экспорт

ПараметрыМетаданныхСлужебный = ПараметрыМетаданныхИзПолногоИмени(ИмяМетаданных);
НовыйОбъект = ВнешниеОбработки.Создать("Данные");

ИмяМетаданныхСлужебный = ИмяМетаданных;
ПараметрыОбъектаСлужебный = Новый Структура;
НовыйОбъект.ПараметрыМетаданныхСлужебный = ПараметрыМетаданныхИзПолногоИмени(ИмяМетаданных);

Возврат ЭтотОбъект;
НовыйОбъект.ИмяМетаданныхСлужебный = ИмяМетаданных;
НовыйОбъект.ПараметрыОбъектаСлужебный = Новый Структура;

Возврат НовыйОбъект;

КонецФункции

Expand Down Expand Up @@ -125,7 +127,7 @@

Функция Создать(НеЗаписывать = Ложь) Экспорт

Возврат СоздатьОбъект(Неопределено, ПараметрыОбъектаСлужебный, НеЗаписывать);;
Возврат СоздатьОбъект(Неопределено, ПараметрыОбъектаСлужебный, НеЗаписывать);

КонецФункции

Expand Down Expand Up @@ -329,7 +331,7 @@

//{ СлужебныеПроцедурыФункции

Функция СоздатьОбъект(ИмяМетаданных, Параметры = Неопределено, НеЗаписывать)
Функция СоздатьОбъект(ИмяМетаданных, Параметры, НеЗаписывать)

Перем Объект;

Expand All @@ -348,16 +350,15 @@
Объект = СоздатьЭлементСправочникаСлужебный(ИмяМетаданных, Параметры);
ИначеЕсли ТипМетаданных = "Документы" Тогда
Объект = СоздатьДокументСлужебный(ИмяМетаданных, Параметры);
ИначеЕсли ТипМетаданных = "РегистрыНакопления" Тогда
Объект = СоздатьНаборЗаписейСлужебный(ТипМетаданных, ИмяМетаданных, Параметры);
ИначеЕсли ТипМетаданных = "РегистрыСведений" Тогда
ИначеЕсли ТипМетаданных = "РегистрыНакопления"
Или ТипМетаданных = "РегистрыСведений" Тогда
Объект = СоздатьНаборЗаписейСлужебный(ТипМетаданных, ИмяМетаданных, Параметры);
ИначеЕсли ТипМетаданных = "ПланыВидовХарактеристик" Тогда
Объект = СоздатьПланВидовХарактеристикСлужебный(ИмяМетаданных, Параметры);
ИначеЕсли ТипМетаданных = "ТаблицаЗначений" Тогда
Объект = ТаблицаЗначений("");
Иначе
ВызватьИсключение "Тип метаданных " + ТипМетаданных + " не поддреживается";
ВызватьИсключение "Тип метаданных " + ТипМетаданных + " не поддерживается";
КонецЕсли;

Если НЕ НеЗаписывать И ТипМетаданных <> "ТаблицаЗначений" Тогда
Expand Down Expand Up @@ -463,7 +464,7 @@
КонецЕсли;

Тип = Метаданные.НайтиПоТипу(Типы[0]).ПолноеИмя();
ЗначениеРеквизита = СоздатьОбъект(Тип,,Ложь);
ЗначениеРеквизита = СоздатьОбъект(Тип, Неопределено, Ложь);
Возврат ЗначениеРеквизита.Ссылка;

КонецФункции
Expand Down Expand Up @@ -521,7 +522,8 @@
КонецФункции // Тестирвоание_ВыполнитьМетодМодуля()

// { Helpers
Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, СокращатьНепечатаемыеСимволы = Ложь) Экспорт
Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено,
СокращатьНепечатаемыеСимволы = Ложь) Экспорт

Результат = Новый Массив;

Expand Down Expand Up @@ -622,7 +624,7 @@
ВыполнитьАвтозаполнениеПараметров("Документ", ИмяДокумента, ПараметрыДокумента);

Документ = Документы[ИмяДокумента].СоздатьДокумент();
Документ.Дата = ТекущаяДата();
Документ.Дата = ТекущаяДатаСеанса();
Документ.УстановитьНовыйНомер();

ЗаполнитьЗначенияСвойств(Документ, ПараметрыДокумента);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@
НаборТестов.Добавить("Тест_РеквизитСправочникаАвтоматическиЗаполнился");
НаборТестов.Добавить("Тест_ВызваноИСключениеДляСоставногоТипа");

НаборТестов.НачатьГруппу("Вложенные вызовы");
НаборТестов.Добавить("Тест_ВложенныеВызовы");

КонецПроцедуры

//}
Expand Down Expand Up @@ -83,14 +86,14 @@

// I подготовка данных

Данные.НачатьСоздание("РегистрНакопления.РегистрНакопленияОстатки")
Набор = Данные.НачатьСоздание("РегистрНакопления.РегистрНакопленияОстатки")
.Реквизит("_ОтборРегистратор", Данные.СоздатьДокумент("ДокументСДвижениями"))
.Реквизит("Период", НачалоДня(ТекущаяДата()))
.Реквизит("ВидДвижения", ВидДвиженияНакопления.Приход)
.ШапкаНабора("Измерение1", "РесурсЧисло1")
.ЗаписьНабора("Тестовое1", 100)
.ЗаписьНабора("Тестовое2", 120);
Набор = Данные.Создать();
.ЗаписьНабора("Тестовое2", 120)
.Создать();

// II подготовка к вызову и вызов проверяемой функции

Expand Down Expand Up @@ -122,14 +125,14 @@

Процедура Тест_СозданиеЭлементовСправочников_НовыйИнтерфейс() Экспорт

Данные.НачатьСоздание("Справочник.Справочник1")
.Реквизит("Реквизит1", Перечисления.Перечисление1.ЗначениеПеречисления1)
.Реквизит("РеквизитСтрока", "Строка")
.ШапкаТабличнойЧасти("ТабличнаяЧасть1",
"РеквизитЧисло", "РеквизитДата")
.СтрокаТЧ(10, Дата(2,1,1))
.СтрокаТЧ(20, Дата(3,1,1));
ЭлементСправочника = Данные.Создать();
ЭлементСправочника = Данные.НачатьСоздание("Справочник.Справочник1")
.Реквизит("Реквизит1", Перечисления.Перечисление1.ЗначениеПеречисления1)
.Реквизит("РеквизитСтрока", "Строка")
.ШапкаТабличнойЧасти("ТабличнаяЧасть1",
"РеквизитЧисло", "РеквизитДата")
.СтрокаТЧ(10, Дата(2,1,1))
.СтрокаТЧ(20, Дата(3,1,1))
.Создать();

Утверждения.ПроверитьРавенство(Перечисления.Перечисление1.ЗначениеПеречисления1,ЭлементСправочника.Реквизит1);
Утверждения.ПроверитьРавенство("Строка",ЭлементСправочника.РеквизитСтрока);
Expand Down Expand Up @@ -175,13 +178,13 @@

ПростойСправочник = Данные.СоздатьЭлементСправочника("ПростойСправочник");

Данные.НачатьСоздание("Документ.ДокументСДвижениями")
Док = Данные.НачатьСоздание("Документ.ДокументСДвижениями")
.Реквизит("РеквизитПростойСправочник", ПростойСправочник)
.ШапкаТабличнойЧасти("ТЧ","Реквизит1", "РесурсЧисло")
.СтрокаТЧ("Элемент1", 10)
.СтрокаТЧ("Элемент2", 15);
Док = Данные.Создать();
.СтрокаТЧ("Элемент2", 15)
.Создать();

Утверждения.ПроверитьРавенство(ПростойСправочник,Док.РеквизитПростойСправочник);

Утверждения.ПроверитьРавенство(2,Док.ТЧ.Количество());
Expand Down Expand Up @@ -225,9 +228,9 @@

Процедура Тест_СозданиеЭлементовПлановВидовХарактеристик_НовыйИнтерфейс() Экспорт

Данные.НачатьСоздание("ПланВидовХарактеристик.ВидыСубконто1")
.Реквизит("РеквизитБулево", Истина);
ЭлементСправочника = Данные.Создать();
ЭлементСправочника = Данные.НачатьСоздание("ПланВидовХарактеристик.ВидыСубконто1")
.Реквизит("РеквизитБулево", Истина)
.Создать();

Утверждения.ПроверитьРавенство(Истина,ЭлементСправочника.РеквизитБулево);

Expand Down Expand Up @@ -259,18 +262,18 @@

Процедура Тест_РеквизитСправочникаАвтоматическиЗаполнился() Экспорт

Данные.НачатьСоздание("Справочники.Справочник1")
.Реквизит("Реквизит2");
Объект = Данные.Создать();
Объект = Данные.НачатьСоздание("Справочники.Справочник1")
.Реквизит("Реквизит2")
.Создать();
Утверждения.ПроверитьЗаполненность(Объект.Реквизит2);

КонецПроцедуры

Процедура Тест_ВызваноИСключениеДляСоставногоТипа() Экспорт

Данные.НачатьСоздание("Справочники.Справочник1")
ОбъектДанных = Данные.НачатьСоздание("Справочники.Справочник1")
.Реквизит("СоставнойРеквизит");
Утверждения.ПроверитьМетодНеВыполнился(Данные, "Создать", "Автозаполнение не поддерживается в составных типах");
Утверждения.ПроверитьМетодНеВыполнился(ОбъектДанных, "Создать", "Автозаполнение не поддерживается в составных типах");

КонецПроцедуры

Expand Down Expand Up @@ -313,6 +316,20 @@

КонецПроцедуры

Процедура Тест_ВложенныеВызовы() Экспорт
Справочник1 = Данные.НачатьСоздание("Справочник.Справочник1")
.Реквизит("Реквизит2", НовыйСправочник2())
.Создать();

Ожидаем.Что(Справочник1, "Справочник1").ИмеетТип("СправочникСсылка.Справочник1");
Ожидаем.Что(Справочник1.Реквизит2, "Справочник2").ИмеетТип("СправочникСсылка.Справочник2");
КонецПроцедуры

Функция НовыйСправочник2()
Справочник2 = Данные.НачатьСоздание("Справочник.Справочник2")
.Создать();
Возврат Справочник2;
КонецФункции

//}
Кеш = Новый Структура;

0 comments on commit 8c41485

Please sign in to comment.