Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавлена возможность установки доп. свойств объекта при удалении данных для метода "УдалитьСозданныеДанные" #853

Merged
merged 2 commits into from
Apr 7, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,19 @@
Возврат ДеревоТестов;
КонецФункции

&НаКлиенте
Процедура НачатьЗагрузку(ОбработкаОповещения, КонтекстЯдра, Путь) Экспорт
ПолноеИмяБраузераТестов = КонтекстЯдра.Объект.ПолноеИмяБраузераТестов;

СтруктураМетаданных = СтруктураМетаданныхПоПереданномуПути(Путь);
ПостроительДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов");
ДеревоТестов = Неопределено;
ОбработатьОбъектМетаданных(СтруктураМетаданных, ДеревоТестов);

ВыполнитьОбработкуОповещения(ОбработкаОповещения, ДеревоТестов);

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

Функция ПолучитьКонтекстПоПути(КонтекстЯдра, Путь) Экспорт
ОбъектМетаданных = ПолучитьОбъектМетаданныхПоПути(Путь);
Контекст = СоздатьОбработкуПоМетаданным(ОбъектМетаданных);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
Перем АнглийскоеСоответствие;
Перем мТЗКэшОбъектов;

Перем ДопСвойстваУдаляемыхДанных;

Функция Версия() Экспорт
Версия = "6.7.0";
Возврат Версия;
Expand All @@ -42,6 +44,60 @@

Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
КонецПроцедуры

// Устанавливает значение переменной ДопСвойстваУдаляемыхДанных
// Параметры:
// ДопСвойства - Соответствие -
Процедура УстановитьДопСвойстваУдаляемыхДанных(Знач ДопСвойства) Экспорт

ДопСвойстваУдаляемыхДанных = ДопСвойства;

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

// Удаляет созданные элементы (Справочники, Документы, Пользователи ИБ), регистры сведений не чистит - есть тесты
//
// Параметры:
// Данные - Структура - Структура, соджержащая в себе созданные ранее данные, где ключом является присовенное имя,
// а значением собственно значение созданного объекта - ссылка, примитивный тип и т.д.
//
// Возвращаемое значение:
// Число - Количество удаленных объектов
//
Функция УдалитьСозданныеДанные(Данные) Экспорт

// Обратный порядок нужен для получения правильного количества удаленных элементов,
// т.к например, Владелец.Удалить удаляет и подчиненные элементы из подчиненных справочников
МассивУдаляемыхДанныхВОбратномПорядке = Новый Массив;
Для Каждого КлючЗначение Из Данные Цикл
МассивУдаляемыхДанныхВОбратномПорядке.Вставить(0, КлючЗначение.Значение);
КонецЦикла;

КоличествоУдаленных = 0;
Для Каждого УдаляемыйЭлемент Из МассивУдаляемыхДанныхВОбратномПорядке Цикл

ТипЗнчУдаляемыйЭлемент = ТипЗнч(УдаляемыйЭлемент);

Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнчУдаляемыйЭлемент)
ИЛИ Документы.ТипВсеСсылки().СодержитТип(ТипЗнчУдаляемыйЭлемент) Тогда

УдаляемыйОбъект = УдаляемыйЭлемент.ПолучитьОбъект();
Если УдаляемыйОбъект = Неопределено Тогда
Продолжить;
КонецЕсли;

УстановитьДопСвойстваУдаляемогоОбъекта(УдаляемыйОбъект);
УдалитьОбъектВПопыткеИсключение(УдаляемыйОбъект, КоличествоУдаленных);

ИначеЕсли ТипЗнчУдаляемыйЭлемент = Тип("ПользовательИнформационнойБазы") Тогда
УдалитьОбъектВПопыткеИсключение(УдаляемыйЭлемент, КоличествоУдаленных);
КонецЕсли;

КонецЦикла;

Возврат КоличествоУдаленных;

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

// } Plugin interface

//{ Десериализация тестовых данных
Expand Down Expand Up @@ -212,49 +268,6 @@

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

// удаляет созданные элементы (Справочники, Документы, Пользователи ИБ), регистры сведений не чистит - есть тесты
Функция УдалитьСозданныеДанные(Данные) Экспорт
// обратный порядок нужен для получения правильного количества удаленных элементов, т.к Владелец.Удалить удаляет и подчиненные элементы из подчиненных справочников
массивВОбратномПорядке = Новый Массив;
Для каждого ключЗначение Из Данные Цикл
массивВОбратномПорядке.Вставить(0, КлючЗначение.Значение);
КонецЦикла;

количествоУдаленных = 0;
Для каждого элем Из массивВОбратномПорядке Цикл
типЭлемента = ТипЗнч(элем);
Если Справочники.ТипВсеСсылки().СодержитТип(типЭлемента) Тогда
объект = элем.ПолучитьОбъект();
Если объект <> Неопределено Тогда
Попытка
объект.Удалить();
количествоУдаленных = количествоУдаленных + 1;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(типЭлемента) Тогда
объект = элем.ПолучитьОбъект();
Если объект <> Неопределено Тогда
Попытка
объект.Удалить();
количествоУдаленных = количествоУдаленных + 1;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
ИначеЕсли типЭлемента = Тип("ПользовательИнформационнойБазы") Тогда
Попытка
элем.Удалить();
количествоУдаленных = количествоУдаленных + 1;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
Возврат количествоУдаленных;
КонецФункции

Функция ПолучитьКлючиЗаписиРСПоНаборуЗаписейРС(НаборЗаписей,ИмяРС)

Результат = Новый Массив;
Expand Down Expand Up @@ -2094,6 +2107,49 @@

// } Десериализация тестовых данных

// { Методы удаления созданных данных

Процедура УстановитьДопСвойстваУдаляемогоОбъекта(УдаляемыйОбъект, ЭтоСсылочныйОбъект = Ложь)

Если ДопСвойстваУдаляемыхДанных = Неопределено Тогда
Возврат;
КонецЕсли;

ДопСвойстваУдаляемыйОбъект = УдаляемыйОбъект.ДополнительныеСвойства;

ЗаполнитьСтруктуруПоСтруктуре(ДопСвойстваУдаляемыхДанных.Получить("Общие"), ДопСвойстваУдаляемыйОбъект);
Если ЭтоСсылочныйОбъект Тогда
ЗаполнитьСтруктуруПоСтруктуре(ДопСвойстваУдаляемыхДанных.Получить(УдаляемыйОбъект["Ссылка"]),
ДопСвойстваУдаляемыйОбъект);
КонецЕсли;

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

Процедура ЗаполнитьСтруктуруПоСтруктуре(Источник, Приемник)

Если Источник = Неопределено ИЛИ Приемник = Неопределено Тогда
Возврат;
КонецЕсли;

Для Каждого КлючЗначение Из Источник Цикл
Приемник.Вставить(КлючЗначение.Ключ, КлючЗначение.Значение);
КонецЦикла;

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

Процедура УдалитьОбъектВПопыткеИсключение(Объект, Счетчик)

Попытка
Объект.Удалить();
Счетчик = Счетчик + 1;
Исключение
Сообщить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;

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

// } Методы удаления созданных данных

// { Методы проверки таблиц метаданных
Функция ПолучитьКоличествоДокументовПоОтбору(видДокумента, Дата1, дата2, структураОтбора = Неопределено) Экспорт
Если Не ЗначениеЗаполнено(видДокумента) Тогда
Expand Down