mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2025-02-13 19:42:02 +02:00
Merge pull request #83 from bia-technologies/feature/74
Удаление созданных тестовых данных
This commit is contained in:
commit
04e3e41c89
96
documentation/docs/user-api/test-data/test-data-deletion.md
Normal file
96
documentation/docs/user-api/test-data/test-data-deletion.md
Normal file
@ -0,0 +1,96 @@
|
||||
---
|
||||
tags: [Getting started, Test data]
|
||||
---
|
||||
|
||||
# Удаление тестовых данных
|
||||
|
||||
При использовании тестовых данных нередко необходимо удалять созданные объекты.
|
||||
|
||||
Для этого вы можете использовать
|
||||
|
||||
## Автоматические транзакции
|
||||
|
||||
Для включения нужно при регистрации теста вызвать метод `ВТранзакции()`
|
||||
|
||||
```bsl title=ВТранзакции.bsl
|
||||
ЮТТесты
|
||||
.ДобавитьТест("Фикция").ВТранзакции() // Использование транзакции для конкретного теста
|
||||
|
||||
ЮТТесты
|
||||
.ДобавитьТестовыйНабор("Основной).ВТранзакции() // Использование транзакции для набора тестов
|
||||
.ДобавитьТест("Фикция")
|
||||
|
||||
ЮТТесты.ВТранзакции() // Использование транзакции для тестов модуля
|
||||
.ДобавитьТест("Фикция")
|
||||
|
||||
```
|
||||
|
||||
И тогда тестовый движок будет оборачивать в транзакцию каждый серверный тест (для клиентских будет игнорироваться)
|
||||
|
||||
:::caution Учитывайте
|
||||
В транзакцию оборачивается тест, а не модуль или набор, поэтому данные созданные вне теста не будут удалены.
|
||||
Такие данные необходимо удалять самостоятельно при необходимости.
|
||||
:::
|
||||
|
||||
## Механизма удаления тестовых данных
|
||||
|
||||
Для включения нужно при регистрации теста вызвать метод `УдалениеТестовыхДанных()`
|
||||
|
||||
```bsl title=УдалениеТестовыхДанных.bsl
|
||||
ЮТТесты
|
||||
.ДобавитьТест("Фикция").УдалениеТестовыхДанных() // Использование для конкретного теста
|
||||
|
||||
ЮТТесты
|
||||
.ДобавитьТестовыйНабор("Основной).УдалениеТестовыхДанных() // Использование для всех тестов набора
|
||||
.ДобавитьТест("Фикция")
|
||||
|
||||
ЮТТесты.УдалениеТестовыхДанных() // Использование для всех тестов модуля
|
||||
.ДобавитьТест("Фикция")
|
||||
|
||||
ЮТТесты.ВТранзакции().УдалениеТестовыхДанных() // Совместно с транзакцией
|
||||
.ДобавитьТест("Фикция")
|
||||
|
||||
```
|
||||
|
||||
Механизм не используется транзакции, а запоминает в контексте все созданные с помощью API объекты и записи регистров сведений.
|
||||
Позволяет:
|
||||
|
||||
* Удалять данные созданные с клиента
|
||||
* Удалять данные созданные вне теста (в обработчиках событий)
|
||||
|
||||
:::tip
|
||||
Механизм понимает в рамках какого контекста исполнения (тест, набор, модуль) были созданы данные и удаляет их по выходу из него.
|
||||
:::
|
||||
|
||||
Рассмотрим время жизни объектов созданных на разных этапах тестирования, например имеем такой модуль.
|
||||
|
||||
```bsl title=УдалениеТестовыхДанныхВремяЖизни.bsl
|
||||
Процедура ПередВсемиТестами() Экспорт
|
||||
ДанныеМодуля = ЮТест.Данные().СоздатьЭлемент(); // Не будет удалена
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередТестовымНабором() Экспорт
|
||||
ДанныеНабора = ЮТест.Данные().СоздатьЭлемент();
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеВсехТестов() Экспорт
|
||||
ДанныеТеста = ЮТест.Данные().СоздатьЭлемент();
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Тест() Экспорт
|
||||
Ссылка = ЮТест.Данные().СоздатьЭлемент();
|
||||
КонецПроцедуры
|
||||
```
|
||||
|
||||
Для переменных получим разное время жизни
|
||||
|
||||
* `ДанныеМодуля` - Не будет удалена, проблема будет решена в ближайшем будущем.
|
||||
* `ДанныеНабора` - Живет, пока исполняются тесты набора.
|
||||
* `ДанныеТеста` и `Ссылка`- Живут, пока исполняется тест.
|
||||
|
||||
:::caution Механизм имеет ряд ограничений и не работает для следующих кейсов:
|
||||
|
||||
* Данные создан не через API
|
||||
* Данные созданы в событии "ПередВсемиТестами" (работает для "ПередТестовымНабором")
|
||||
* Данные созданы в клиентском модуле через вызов своего серверного модуля, даже если он использует API тестового движка
|
||||
:::
|
@ -22,12 +22,13 @@ tags: [Getting started, Test data]
|
||||
Если грамотно распределить тестовые данные на способы создания, мы можем добиться оптимального результата.
|
||||
Например, можно статичные данные создать вручную, сложные кейсы данных засунуть в макеты, а для программного создания реализовать методы-конструкторы, которые будем переиспользовать. Таким образом, сможем уйти от минусов данного подхода или минимизировать их вред.
|
||||
|
||||
В текущей версии тестовый движок предоставляет api для программного создания тестовых данных. За это отвечает общий модуль `ЮТТестовыеДанные`, к которому можно обратиться через метод `ЮТест.Данные`.
|
||||
В текущей версии тестовый движок предоставляет api для программного создания тестовых данных. За это отвечает общий модуль `ЮТТестовыеДанные`, к которому можно обратиться через метод `ЮТест.Данные()`.
|
||||
|
||||
Сейчас это минимальный набор методов, который в дальнейшем будет развиваться. Он позволяет:
|
||||
|
||||
* Создавать данные информационной базы
|
||||
* Генерировать случайные значения
|
||||
* Автоматически удалять созданные данные (для этого необходимо включить настройку теста `УдалениеТестовыхДанных()`)
|
||||
* Работать с файлами
|
||||
* Использовать таблицы markdown в качестве макетов данных
|
||||
|
@ -31,9 +31,6 @@
|
||||
Возврат Наборы;
|
||||
КонецЕсли;
|
||||
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.Модуль;
|
||||
|
||||
ЮТСобытия.ПередВсемиТестамиМодуля(ТестовыйМодуль);
|
||||
|
||||
Если ЕстьОшибки(ТестовыйМодуль) Тогда
|
||||
@ -51,8 +48,6 @@
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.Модуль;
|
||||
|
||||
ЮТСобытия.ПослеВсехТестовМодуля(ТестовыйМодуль);
|
||||
|
||||
Если ЕстьОшибки(ТестовыйМодуль) Тогда
|
||||
@ -71,9 +66,6 @@
|
||||
|
||||
Функция ВыполнитьНаборТестов(Набор, ТестовыйМодуль)
|
||||
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.НаборТестов;
|
||||
|
||||
Набор.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах();
|
||||
ЮТСобытия.ПередТестовымНабором(ТестовыйМодуль, Набор);
|
||||
|
||||
@ -82,7 +74,6 @@
|
||||
КонецЕсли;
|
||||
|
||||
Результаты = Новый Массив();
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.Тест;
|
||||
|
||||
Для Каждого Тест Из Набор.Тесты Цикл
|
||||
|
||||
@ -98,7 +89,6 @@
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.НаборТестов;
|
||||
ЮТСобытия.ПослеТестовогоНабора(ТестовыйМодуль, Набор);
|
||||
|
||||
Набор.Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Набор.ДатаСтарта;
|
||||
|
@ -148,7 +148,11 @@
|
||||
ПараметрыЗаписи.ДополнительныеСвойства = Контекст.ДополнительныеСвойства;
|
||||
ПараметрыЗаписи.ОбменДаннымиЗагрузка = ОбменДаннымиЗагрузка;
|
||||
|
||||
Возврат ЮТТестовыеДанныеВызовСервера.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект);
|
||||
Ссылка = ЮТТестовыеДанныеВызовСервера.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект);
|
||||
|
||||
ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(Ссылка);
|
||||
|
||||
Возврат Ссылка;
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -170,7 +174,11 @@
|
||||
ПараметрыЗаписи.ДополнительныеСвойства = Контекст.ДополнительныеСвойства;
|
||||
ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение;
|
||||
|
||||
Возврат ЮТТестовыеДанныеВызовСервера.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект);
|
||||
Ссылка = ЮТТестовыеДанныеВызовСервера.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект);
|
||||
|
||||
ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(Ссылка);
|
||||
|
||||
Возврат Ссылка;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
@ -222,21 +222,21 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьКонтекстНабораТестов(Знач ДанныеКонтекста) Экспорт
|
||||
Процедура УстановитьКонтекстНабораТестов() Экспорт
|
||||
|
||||
УстановитьЗначениеКонтекста(ИмяКонтекстаНабораТестов(), ДанныеКонтекста);
|
||||
УстановитьЗначениеКонтекста(ИмяКонтекстаНабораТестов(), Новый Структура);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьКонтекстМодуля(Знач ДанныеКонтекста) Экспорт
|
||||
Процедура УстановитьКонтекстМодуля() Экспорт
|
||||
|
||||
УстановитьЗначениеКонтекста(ИмяКонтекстаМодуля(), ДанныеКонтекста);
|
||||
УстановитьЗначениеКонтекста(ИмяКонтекстаМодуля(), Новый Структура);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьКонтекстТеста(Знач ДанныеКонтекста) Экспорт
|
||||
Процедура УстановитьКонтекстТеста() Экспорт
|
||||
|
||||
УстановитьЗначениеКонтекста(ИмяКонтекстаТеста(), ДанныеКонтекста);
|
||||
УстановитьЗначениеКонтекста(ИмяКонтекстаТеста(), Новый Структура);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
@ -30,19 +30,26 @@
|
||||
Уровень = ЮТКонтекст.КонтекстИсполнения().Уровень;
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
|
||||
Если Уровень = Уровни.Тест И ЮТКонтекст.КонтекстТеста().Свойство(ИмяЗначения) Тогда
|
||||
КонтекстТеста = ЮТКонтекст.КонтекстТеста();
|
||||
Если Уровень = Уровни.Тест И КонтекстТеста <> Неопределено И КонтекстТеста.Свойство(ИмяЗначения) Тогда
|
||||
|
||||
Возврат ЮТКонтекст.КонтекстТеста()[ИмяЗначения];
|
||||
Возврат КонтекстТеста[ИмяЗначения];
|
||||
|
||||
ИначеЕсли (Уровень = Уровни.Тест ИЛИ Уровень = Уровни.НаборТестов)
|
||||
И ЮТКонтекст.КонтекстНабора().Свойство(ИмяЗначения) Тогда
|
||||
КонецЕсли;
|
||||
|
||||
КонтекстНабора = ЮТКонтекст.КонтекстНабора();
|
||||
Если (Уровень = Уровни.НаборТестов ИЛИ Уровень = Уровни.Тест)
|
||||
И КонтекстНабора <> Неопределено И КонтекстНабора.Свойство(ИмяЗначения) Тогда
|
||||
|
||||
Возврат ЮТКонтекст.КонтекстНабора()[ИмяЗначения];
|
||||
Возврат КонтекстНабора[ИмяЗначения];
|
||||
|
||||
ИначеЕсли (Уровень = Уровни.Тест ИЛИ Уровень = Уровни.НаборТестов ИЛИ Уровень = Уровни.Модуль)
|
||||
И ЮТКонтекст.КонтекстМодуля().Свойство(ИмяЗначения) Тогда
|
||||
КонецЕсли;
|
||||
|
||||
КонтекстМодуля = ЮТКонтекст.КонтекстМодуля();
|
||||
Если (Уровень = Уровни.Модуль ИЛИ Уровень = Уровни.Тест ИЛИ Уровень = Уровни.НаборТестов)
|
||||
И КонтекстМодуля <> Неопределено И КонтекстМодуля.Свойство(ИмяЗначения) Тогда
|
||||
|
||||
Возврат ЮТКонтекст.КонтекстМодуля()[ИмяЗначения];
|
||||
Возврат КонтекстМодуля[ИмяЗначения];
|
||||
|
||||
Иначе
|
||||
|
||||
@ -63,20 +70,53 @@
|
||||
Уровень = ЮТКонтекст.КонтекстИсполнения().Уровень;
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
|
||||
Если Уровень = Уровни.Тест Тогда
|
||||
Контекст = ТекущийКонтекст();
|
||||
|
||||
Если Контекст = Неопределено Тогда
|
||||
|
||||
ЮТКонтекст.КонтекстТеста().Вставить(ИмяЗначения, Значение);
|
||||
Если Уровень = Уровни.Тест Тогда
|
||||
ЮТКонтекст.УстановитьКонтекстТеста();
|
||||
ИначеЕсли Уровень = Уровни.НаборТестов Тогда
|
||||
ЮТКонтекст.УстановитьКонтекстНабораТестов();
|
||||
ИначеЕсли Уровень = Уровни.Модуль Тогда
|
||||
ЮТКонтекст.УстановитьКонтекстМодуля();
|
||||
Иначе
|
||||
ВызватьИсключение СтрШаблон("Неизвестный уровень исполнения `%1`", Уровень);
|
||||
КонецЕсли;
|
||||
|
||||
ИначеЕсли Уровень = Уровни.НаборТестов Тогда
|
||||
|
||||
ЮТКонтекст.КонтекстНабора().Вставить(ИмяЗначения, Значение);
|
||||
|
||||
ИначеЕсли Уровень = Уровни.Модуль Тогда
|
||||
|
||||
ЮТКонтекст.КонтекстМодуля().Вставить(ИмяЗначения, Значение);
|
||||
Контекст = ТекущийКонтекст();
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Контекст.Вставить(ИмяЗначения, Значение);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ТекущийКонтекст() Экспорт
|
||||
|
||||
Уровень = ЮТКонтекст.КонтекстИсполнения().Уровень;
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
|
||||
Если Уровень = Уровни.Тест Тогда
|
||||
|
||||
Контекст = ЮТКонтекст.КонтекстТеста();
|
||||
|
||||
ИначеЕсли Уровень = Уровни.НаборТестов Тогда
|
||||
|
||||
Контекст = ЮТКонтекст.КонтекстНабора();
|
||||
|
||||
ИначеЕсли Уровень = Уровни.Модуль Тогда
|
||||
|
||||
Контекст = ЮТКонтекст.КонтекстМодуля();
|
||||
|
||||
Иначе
|
||||
|
||||
Контекст = Неопределено;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Контекст;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -110,66 +110,44 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОписаниеОбъектМетаданных(Знач Значение) Экспорт
|
||||
Функция ОписаниеОбъектМетаданных(Знач Значение, ЗаполнятьРеквизиты = Истина) Экспорт
|
||||
|
||||
ТипЗначение = ТипЗнч(Значение);
|
||||
|
||||
Если ТипЗначение = Тип("Тип") Тогда
|
||||
|
||||
МетаданныеОбъекта = Метаданные.НайтиПоТипу(Значение);
|
||||
ОписаниеТипа = ОписаниеТипаМетаданных(МетаданныеОбъекта);
|
||||
|
||||
ИначеЕсли ТипЗначение = Тип("ОбъектМетаданных") Тогда
|
||||
|
||||
МетаданныеОбъекта = Значение;
|
||||
ОписаниеТипа = ОписаниеТипаМетаданных(МетаданныеОбъекта);
|
||||
|
||||
ИначеЕсли ТипЗначение = Тип("Строка") Тогда
|
||||
|
||||
ЧастиСтроки = СтрРазделить(Значение, ".");
|
||||
Если ЧастиСтроки.Количество() = 2 Тогда
|
||||
ТипыМетаданных = ЮТМетаданные.ТипыМетаданных();
|
||||
ОписаниеТипа = ТипыМетаданных[ЧастиСтроки[0]];
|
||||
Если ОписаниеТипа <> Неопределено Тогда
|
||||
МетаданныеОбъекта = Метаданные[ОписаниеТипа.ИмяКоллекции][ЧастиСтроки[1]];
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если МетаданныеОбъекта = Неопределено ИЛИ ОписаниеТипа = Неопределено Тогда
|
||||
Сообщение = СтрШаблон("Не удалось получить описание метаданных для `%1` (%2)", Значение, ТипЗначение);
|
||||
ВызватьИсключение Сообщение;
|
||||
КонецЕсли;
|
||||
МетаданныеОбъекта = ОбъектМетаданных(Значение);
|
||||
ОписаниеТипа = ОписаниеТипаМетаданных(МетаданныеОбъекта);
|
||||
|
||||
ОписаниеОбъект = Новый Структура;
|
||||
ОписаниеОбъект.Вставить("Имя", МетаданныеОбъекта.Имя);
|
||||
ОписаниеОбъект.Вставить("ОписаниеТипа", ОписаниеТипа);
|
||||
ОписаниеОбъект.Вставить("Реквизиты", Новый Структура());
|
||||
ОписаниеОбъект.Вставить("ТабличныеЧасти", Новый Структура());
|
||||
|
||||
ДобавитьОписанияРеквизитов(МетаданныеОбъекта.СтандартныеРеквизиты, ОписаниеОбъект.Реквизиты);
|
||||
Если НЕ ЗаполнятьРеквизиты Тогда
|
||||
Возврат ОписаниеОбъект;
|
||||
КонецЕсли;
|
||||
|
||||
ДобавитьОписанияРеквизитов(МетаданныеОбъекта.СтандартныеРеквизиты, ОписаниеОбъект.Реквизиты, "Ссылка, Период");
|
||||
|
||||
Если ОписаниеТипа.Измерения Тогда
|
||||
ДобавитьОписанияРеквизитов(МетаданныеОбъекта.Измерения, ОписаниеОбъект.Реквизиты);
|
||||
ДобавитьОписанияРеквизитов(МетаданныеОбъекта.Измерения, ОписаниеОбъект.Реквизиты, Истина);
|
||||
КонецЕсли;
|
||||
|
||||
Если ОписаниеТипа.Реквизиты Тогда
|
||||
ДобавитьОписанияРеквизитов(МетаданныеОбъекта.Реквизиты, ОписаниеОбъект.Реквизиты);
|
||||
ДобавитьОписанияРеквизитов(МетаданныеОбъекта.Реквизиты, ОписаниеОбъект.Реквизиты, Ложь);
|
||||
КонецЕсли;
|
||||
|
||||
Если ОписаниеТипа.Ресурсы Тогда
|
||||
ДобавитьОписанияРеквизитов(МетаданныеОбъекта.Ресурсы, ОписаниеОбъект.Реквизиты);
|
||||
ДобавитьОписанияРеквизитов(МетаданныеОбъекта.Ресурсы, ОписаниеОбъект.Реквизиты, Ложь);
|
||||
КонецЕсли;
|
||||
|
||||
Если ОписаниеТипа.РеквизитыАдресации Тогда
|
||||
ДобавитьОписанияРеквизитов(МетаданныеОбъекта.РеквизитыАдресации, ОписаниеОбъект.Реквизиты);
|
||||
ДобавитьОписанияРеквизитов(МетаданныеОбъекта.РеквизитыАдресации, ОписаниеОбъект.Реквизиты, Ложь);
|
||||
КонецЕсли;
|
||||
|
||||
Если ОписаниеТипа.ТабличныеЧасти Тогда
|
||||
|
||||
Для Каждого ТабличнаяЧасть Из МетаданныеОбъекта.ТабличныеЧасти Цикл
|
||||
РеквизитыТабличнойЧасти = Новый Структура();
|
||||
ДобавитьОписанияРеквизитов(ТабличнаяЧасть.Реквизиты, РеквизитыТабличнойЧасти);
|
||||
ДобавитьОписанияРеквизитов(ТабличнаяЧасть.Реквизиты, РеквизитыТабличнойЧасти, Ложь);
|
||||
|
||||
ОписаниеОбъект.ТабличныеЧасти.Вставить(ТабличнаяЧасть.Имя, РеквизитыТабличнойЧасти);
|
||||
КонецЦикла;
|
||||
@ -245,22 +223,69 @@
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ДобавитьОписанияРеквизитов(КоллекцияРеквизитов, КоллекцияОписаний)
|
||||
Функция ОбъектМетаданных(Значение)
|
||||
|
||||
ТипЗначение = ТипЗнч(Значение);
|
||||
|
||||
Если ТипЗначение = Тип("Тип") Тогда
|
||||
|
||||
ОбъектМетаданных = Метаданные.НайтиПоТипу(Значение);
|
||||
|
||||
ИначеЕсли ТипЗначение = Тип("ОбъектМетаданных") Тогда
|
||||
|
||||
ОбъектМетаданных = Значение;
|
||||
|
||||
ИначеЕсли ТипЗначение = Тип("Строка") Тогда
|
||||
|
||||
ЧастиСтроки = СтрРазделить(Значение, ".");
|
||||
Если ЧастиСтроки.Количество() = 2 Тогда
|
||||
ТипыМетаданных = ЮТМетаданные.ТипыМетаданных();
|
||||
ОписаниеТипа = ТипыМетаданных[ЧастиСтроки[0]];
|
||||
Если ОписаниеТипа <> Неопределено Тогда
|
||||
ОбъектМетаданных = Метаданные[ОписаниеТипа.ИмяКоллекции][ЧастиСтроки[1]];
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Иначе
|
||||
|
||||
ОбъектМетаданных = Неопределено;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ОбъектМетаданных = Неопределено Тогда
|
||||
Сообщение = ЮТОбщий.НеподдерживаемыйПараметрМетода("ЮТМетаданныеСервер.ОбъектМетаданных", Значение);
|
||||
ВызватьИсключение Сообщение;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ОбъектМетаданных;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ДобавитьОписанияРеквизитов(КоллекцияРеквизитов, КоллекцияОписаний, Знач ЭтоКлюч)
|
||||
|
||||
Если ТипЗнч(ЭтоКлюч) = Тип("Строка") Тогда
|
||||
ИменаКлючевыхПолей = СтрРазделить(ЭтоКлюч, ", ");
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Реквизит Из КоллекцияРеквизитов Цикл
|
||||
|
||||
КоллекцияОписаний.Вставить(Реквизит.Имя, ОписаниеРеквизита(Реквизит));
|
||||
Если ИменаКлючевыхПолей <> Неопределено Тогда
|
||||
ЭтоКлюч = ИменаКлючевыхПолей.Найти(Реквизит.Имя) <> Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
КоллекцияОписаний.Вставить(Реквизит.Имя, ОписаниеРеквизита(Реквизит, ЭтоКлюч));
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ОписаниеРеквизита(Реквизит) Экспорт
|
||||
Функция ОписаниеРеквизита(Реквизит, ЭтоКлюч) Экспорт
|
||||
|
||||
Описание = Новый Структура();
|
||||
Описание.Вставить("Имя", Реквизит.Имя);
|
||||
Описание.Вставить("Тип", Реквизит.Тип);
|
||||
Описание.Вставить("Обязательный", Реквизит.ПроверкаЗаполнения = ПроверкаЗаполнения.ВыдаватьОшибку);
|
||||
Описание.Вставить("ЭтоКлюч", ЭтоКлюч);
|
||||
|
||||
Возврат Описание;
|
||||
|
||||
|
@ -18,17 +18,39 @@
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Функция ЗначениеНастройкиТеста(ИмяНастройки, ОписаниеТеста, ОписаниеТестовогоНабора, ЗначениеПоУмолчанию) Экспорт
|
||||
Функция ВТранзакции() Экспорт
|
||||
|
||||
ИмяПараметра = ЮТФабрика.ПараметрыИсполненияТеста().ВТранзакции;
|
||||
|
||||
Возврат ЗначениеНастройкиТеста(ИмяПараметра, Ложь);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция УдалениеТестовыхДанных() Экспорт
|
||||
|
||||
ИмяПараметра = ЮТФабрика.ПараметрыИсполненияТеста().УдалениеТестовыхДанных;
|
||||
|
||||
Возврат ЗначениеНастройкиТеста(ИмяПараметра, Ложь);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗначениеНастройкиТеста(ИмяНастройки, ЗначениеПоУмолчанию) Экспорт
|
||||
|
||||
Значение = ЗначениеПоУмолчанию;
|
||||
КонтекстИсполнения = ЮТКонтекст.КонтекстИсполнения();
|
||||
|
||||
Если ОписаниеТеста.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда
|
||||
Значение = ОписаниеТеста.НастройкиВыполнения[ИмяНастройки];
|
||||
ИначеЕсли ОписаниеТестовогоНабора.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда
|
||||
Значение = ОписаниеТестовогоНабора.НастройкиВыполнения[ИмяНастройки];
|
||||
Если КонтекстИсполнения.Тест <> Неопределено И КонтекстИсполнения.Тест.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда
|
||||
|
||||
Значение = КонтекстИсполнения.Тест.НастройкиВыполнения[ИмяНастройки];
|
||||
|
||||
ИначеЕсли КонтекстИсполнения.Набор <> Неопределено И КонтекстИсполнения.Набор.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда
|
||||
|
||||
Значение = КонтекстИсполнения.Набор.НастройкиВыполнения[ИмяНастройки];
|
||||
|
||||
Иначе
|
||||
|
||||
ГлобальныеНастройки = ЮТКонтекст.ГлобальныеНастройкиВыполнения();
|
||||
|
||||
Если ГлобальныеНастройки.Свойство(ИмяНастройки) Тогда
|
||||
Значение = ГлобальныеНастройки[ИмяНастройки];
|
||||
КонецЕсли;
|
||||
|
@ -790,6 +790,12 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция НеподдерживаемыйПараметрМетода(ИмяМетода, ЗначениеПараметра) Экспорт
|
||||
|
||||
Возврат СтрШаблон("Неподдерживаемый параметры метода `%1` `%2`(%3)", ИмяМетода, ЗначениеПараметра, ТипЗнч(ЗначениеПараметра));
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция УстановленБезопасныйРежим() Экспорт
|
||||
|
||||
Возврат ЮТОбщийВызовСервера.УстановленБезопасныйРежим();
|
||||
|
@ -33,7 +33,12 @@
|
||||
// ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля
|
||||
Процедура ПередВсемиТестамиМодуля(ТестовыйМодуль) Экспорт
|
||||
|
||||
ЮТКонтекст.УстановитьКонтекстМодуля(Новый Структура());
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
КонтекстИсполнения = ЮТКонтекст.КонтекстИсполнения();
|
||||
КонтекстИсполнения.Уровень = Уровни.Модуль;
|
||||
КонтекстИсполнения.Модуль = ТестовыйМодуль;
|
||||
|
||||
ЮТКонтекст.УстановитьКонтекстМодуля();
|
||||
|
||||
ОписаниеСобытия = ЮТФабрика.ОписаниеСобытияИсполненияТестов(ТестовыйМодуль);
|
||||
ВызватьОбработкуСобытия("ПередВсемиТестами", ОписаниеСобытия);
|
||||
@ -47,7 +52,12 @@
|
||||
// Набор - см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
Процедура ПередТестовымНабором(ТестовыйМодуль, Набор) Экспорт
|
||||
|
||||
ЮТКонтекст.УстановитьКонтекстНабораТестов(Новый Структура());
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
КонтекстИсполнения = ЮТКонтекст.КонтекстИсполнения();
|
||||
КонтекстИсполнения.Уровень = Уровни.НаборТестов;
|
||||
КонтекстИсполнения.Набор = Набор;
|
||||
|
||||
ЮТКонтекст.УстановитьКонтекстНабораТестов();
|
||||
|
||||
ОписаниеСобытия = ЮТФабрика.ОписаниеСобытияИсполненияТестов(ТестовыйМодуль, Набор);
|
||||
ВызватьОбработкуСобытия("ПередТестовымНабором", ОписаниеСобытия);
|
||||
@ -62,15 +72,20 @@
|
||||
// Тест - см. ЮТФабрика.ОписаниеИсполняемогоТеста
|
||||
Процедура ПередКаждымТестом(ТестовыйМодуль, Набор, Тест) Экспорт
|
||||
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
КонтекстИсполнения = ЮТКонтекст.КонтекстИсполнения();
|
||||
КонтекстИсполнения.Уровень = Уровни.Тест;
|
||||
КонтекстИсполнения.Тест = Тест;
|
||||
|
||||
ОписаниеСобытия = ЮТФабрика.ОписаниеСобытияИсполненияТестов(ТестовыйМодуль, Набор, Тест);
|
||||
ЮТКонтекст.УстановитьКонтекстТеста(Новый Структура());
|
||||
ЮТКонтекст.УстановитьКонтекстТеста();
|
||||
|
||||
#Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
|
||||
ПолучитьСообщенияПользователю(Истина);
|
||||
#КонецЕсли
|
||||
|
||||
#Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
|
||||
Если ВТранзакции(ОписаниеСобытия) Тогда
|
||||
Если ЮТНастройкиВыполнения.ВТранзакции() Тогда
|
||||
НачатьТранзакцию();
|
||||
КонецЕсли;
|
||||
#КонецЕсли
|
||||
@ -94,7 +109,7 @@
|
||||
ВызватьОбработкуСобытия("ПослеКаждогоТеста", ОписаниеСобытия);
|
||||
|
||||
#Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
|
||||
Если ВТранзакции(ОписаниеСобытия) Тогда
|
||||
Если ЮТНастройкиВыполнения.ВТранзакции() Тогда
|
||||
ОтменитьТранзакцию();
|
||||
Пока ТранзакцияАктивна() Цикл
|
||||
ОтменитьТранзакцию();
|
||||
@ -103,6 +118,11 @@
|
||||
КонецЕсли;
|
||||
#КонецЕсли
|
||||
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
КонтекстИсполнения = ЮТКонтекст.КонтекстИсполнения();
|
||||
КонтекстИсполнения.Уровень = Уровни.НаборТестов;
|
||||
КонтекстИсполнения.Тест = Неопределено;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Обработчик события "ПослеТестовогоНабора"
|
||||
@ -115,6 +135,11 @@
|
||||
ОписаниеСобытия = ЮТФабрика.ОписаниеСобытияИсполненияТестов(ТестовыйМодуль, Набор);
|
||||
ВызватьОбработкуСобытия("ПослеТестовогоНабора", ОписаниеСобытия);
|
||||
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
КонтекстИсполнения = ЮТКонтекст.КонтекстИсполнения();
|
||||
КонтекстИсполнения.Уровень = Уровни.Модуль;
|
||||
КонтекстИсполнения.Набор = Неопределено;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Обработчик события "ПослеВсехТестовМодуля"
|
||||
@ -126,6 +151,10 @@
|
||||
ОписаниеСобытия = ЮТФабрика.ОписаниеСобытияИсполненияТестов(ТестовыйМодуль);
|
||||
ВызватьОбработкуСобытия("ПослеВсехТестов", ОписаниеСобытия);
|
||||
|
||||
КонтекстИсполнения = ЮТКонтекст.КонтекстИсполнения();
|
||||
КонтекстИсполнения.Уровень = Неопределено;
|
||||
КонтекстИсполнения.Модуль = Неопределено;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
@ -253,12 +282,4 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ВТранзакции(ОписаниеСобытия)
|
||||
|
||||
ИмяПараметра = ЮТФабрика.ПараметрыИсполненияТеста().ВТранзакции;
|
||||
|
||||
Возврат ЮТНастройкиВыполнения.ЗначениеНастройкиТеста(ИмяПараметра, ОписаниеСобытия.Тест, ОписаниеСобытия.Набор, Ложь);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -29,7 +29,9 @@
|
||||
// ЛюбаяСсылка - Ссылка на созданный объект
|
||||
Функция СоздатьЭлемент(Менеджер, Наименование = Неопределено, Реквизиты = Неопределено) Экспорт
|
||||
|
||||
Возврат ЮТТестовыеДанныеВызовСервера.СоздатьЭлемент(Менеджер, Наименование, Реквизиты);
|
||||
Ссылка = ЮТТестовыеДанныеВызовСервера.СоздатьЭлемент(Менеджер, Наименование, Реквизиты);
|
||||
ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(Ссылка);
|
||||
Возврат Ссылка;
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -43,7 +45,9 @@
|
||||
// ДокументСсылка - Ссылка на созданный объект
|
||||
Функция СоздатьДокумент(Менеджер, Реквизиты = Неопределено) Экспорт
|
||||
|
||||
Возврат ЮТТестовыеДанныеВызовСервера.СоздатьДокумент(Менеджер, Реквизиты);
|
||||
Ссылка = ЮТТестовыеДанныеВызовСервера.СоздатьДокумент(Менеджер, Реквизиты);
|
||||
ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(Ссылка);
|
||||
Возврат Ссылка;
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -259,9 +263,7 @@
|
||||
// Строка
|
||||
Функция НовоеИмяВременногоФайла(Расширение = Неопределено) Экспорт
|
||||
|
||||
Результат = ПолучитьИмяВременногоФайла(Расширение);
|
||||
ЮТКонтекст.КонтекстТеста().ВременныеФайлы.Добавить(Результат);
|
||||
Возврат Результат;
|
||||
Возврат ЮТТестовыеДанныеСлужебный.НовоеИмяВременногоФайла(Расширение);
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -392,7 +394,9 @@
|
||||
// Ссылки - Массив из ЛюбаяСсылка
|
||||
Процедура Удалить(Ссылки) Экспорт
|
||||
|
||||
ЮТТестовыеДанныеВызовСервера.Удалить(Ссылки);
|
||||
Если ЗначениеЗаполнено(Ссылки) Тогда
|
||||
ЮТТестовыеДанныеВызовСервера.Удалить(Ссылки);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@ -409,84 +413,3 @@
|
||||
#КонецЕсли
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// Обработчик события "ПередКаждымТестом"
|
||||
//
|
||||
// Параметры:
|
||||
// ОписаниеСобытия - см. ЮТФабрика.ОписаниеСобытияИсполненияТестов
|
||||
Процедура ПередКаждымТестом(ОписаниеСобытия) Экспорт
|
||||
|
||||
ЮТКонтекст.КонтекстТеста().Вставить("ВременныеФайлы", Новый Массив);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Обработчик события "ПослеКаждогоТеста"
|
||||
//
|
||||
// Параметры:
|
||||
// ОписаниеСобытия - см. ЮТФабрика.ОписаниеСобытияИсполненияТестов
|
||||
Процедура ПослеКаждогоТеста(ОписаниеСобытия) Экспорт
|
||||
|
||||
ВременныеФайлы = ЮТКонтекст.КонтекстТеста().ВременныеФайлы;
|
||||
|
||||
Если ВременныеФайлы.Количество() = 0 Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Ошибки = Новый Массив();
|
||||
|
||||
Для Каждого УдаляемыйФайл Из ВременныеФайлы Цикл
|
||||
|
||||
Если ТипЗнч(УдаляемыйФайл) = Тип("Строка") Тогда
|
||||
УдаляемыйФайл = Новый Файл(УдаляемыйФайл);
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
Если УдаляемыйФайл.Существует() Тогда
|
||||
|
||||
Если УдаляемыйФайл.ПолучитьТолькоЧтение() Тогда
|
||||
УдаляемыйФайл.УстановитьТолькоЧтение(Ложь);
|
||||
КонецЕсли;
|
||||
|
||||
УдалитьФайлы(УдаляемыйФайл.ПолноеИмя);
|
||||
|
||||
КонецЕсли;
|
||||
Исключение
|
||||
|
||||
Ошибки.Добавить(ЮТРегистрацияОшибок.ПредставлениеОшибки("Удаление файла " + УдаляемыйФайл, ИнформацияОбОшибке()));
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если ЗначениеЗаполнено(Ошибки) Тогда
|
||||
ВызватьИсключение СтрСоединить(Ошибки, Символы.ПС);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ДобавитьВарианты(Варианты, БазоваяСтруктура, ЗначенияПараметров, Ключи, Инд)
|
||||
|
||||
Если Инд > Ключи.ВГраница() Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Ключ = Ключи[Инд];
|
||||
Для Каждого Значение Из ЗначенияПараметров[Ключ] Цикл
|
||||
|
||||
Вариант = ЮТОбщий.СкопироватьСтруктуру(БазоваяСтруктура);
|
||||
Вариант[Ключ] = Значение;
|
||||
Варианты.Добавить(Вариант);
|
||||
|
||||
ДобавитьВарианты(Варианты, Вариант, ЗначенияПараметров, Ключи, Инд + 1);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -18,16 +18,7 @@
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// СоздатьЭлемент
|
||||
// Создает новый элемент и возвращает его ссылку
|
||||
// Параметры:
|
||||
// Менеджер - Произвольный - Менеджер справочника/ПВХ и тд.
|
||||
// Наименование - Строка, Неопределено - Наименование элемента
|
||||
// Реквизиты - Структура, Неопределено - Значения реквизитов элемента
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ЛюбаяСсылка - Ссылка на созданный объект
|
||||
Функция СоздатьЭлемент(Знач Менеджер, Знач Наименование = Неопределено, Знач Реквизиты = Неопределено) Экспорт
|
||||
Функция СоздатьЭлемент(Знач Менеджер, Знач Наименование, Знач Реквизиты) Экспорт
|
||||
|
||||
Менеджер = ЮТОбщий.Менеджер(Менеджер);
|
||||
|
||||
@ -47,21 +38,11 @@
|
||||
Объект.УстановитьНовыйКод();
|
||||
КонецЕсли;
|
||||
|
||||
ЗаписатьОбъект(Объект);
|
||||
|
||||
Возврат Объект.Ссылка;
|
||||
Возврат ЗаписатьОбъект(Объект);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// СоздатьДокумент
|
||||
// Создает новый документ и возвращает его ссылку
|
||||
// Параметры:
|
||||
// Менеджер - Произвольный - Менеджер справочника/ПВХ и тд.
|
||||
// Реквизиты - Структура, Неопределено - Значения реквизитов элемента
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ДокументСсылка - Ссылка на созданный объект
|
||||
Функция СоздатьДокумент(Знач Менеджер, Знач Реквизиты = Неопределено) Экспорт
|
||||
Функция СоздатьДокумент(Знач Менеджер, Знач Реквизиты) Экспорт
|
||||
|
||||
РежимЗаписи = РежимЗаписиДокумента.Запись;
|
||||
|
||||
@ -76,23 +57,11 @@
|
||||
РежимЗаписи = ЮТОбщий.ЗначениеСтруктуры(Реквизиты, "РежимЗаписи", РежимЗаписи);
|
||||
КонецЕсли;
|
||||
|
||||
ЗаписатьОбъект(Объект, , РежимЗаписи);
|
||||
|
||||
Возврат Объект.Ссылка;
|
||||
Возврат ЗаписатьОбъект(Объект, , РежимЗаписи);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Создать запись.
|
||||
//
|
||||
// Параметры:
|
||||
// Менеджер - Произвольный
|
||||
// Данные - Структура - Данные заполнения объекта
|
||||
// ПараметрыЗаписи - см. ЮТОбщий.
|
||||
// ВернутьОбъект - Булево - Вернуть объект
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Произвольный - Создать запись
|
||||
Функция СоздатьЗапись(Знач Менеджер, Знач Данные, Знач ПараметрыЗаписи = Неопределено, Знач ВернутьОбъект = Ложь) Экспорт
|
||||
Функция СоздатьЗапись(Знач Менеджер, Знач Данные, Знач ПараметрыЗаписи, Знач ВернутьОбъект) Экспорт
|
||||
|
||||
Менеджер = ЮТОбщий.Менеджер(Менеджер);
|
||||
|
||||
@ -135,15 +104,12 @@
|
||||
КонецЕсли;
|
||||
|
||||
РежимЗаписи = ?(СтрСравнить(ОписаниеОбъектаМетаданных.ОписаниеТипа.Имя, "Документ") = 0, ПараметрыЗаписи.РежимЗаписи, Неопределено);
|
||||
ЗаписатьОбъект(Объект, ПараметрыЗаписи.ОбменДаннымиЗагрузка, РежимЗаписи);
|
||||
КлючЗаписи = ЗаписатьОбъект(Объект, ПараметрыЗаписи.ОбменДаннымиЗагрузка, РежимЗаписи);
|
||||
|
||||
Если ВернутьОбъект Тогда
|
||||
Возврат Объект;
|
||||
ИначеЕсли ЭтоСсылочный Тогда
|
||||
Возврат Объект.Ссылка;
|
||||
Иначе
|
||||
ЮТОбщий.СообщитьПользователю("Я пока не умею возвращать ключи регистра");
|
||||
Возврат Неопределено;
|
||||
Возврат КлючЗаписи;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
@ -154,12 +120,43 @@
|
||||
Ссылки = ЮТОбщий.ЗначениеВМассиве(Ссылки);
|
||||
КонецЕсли;
|
||||
|
||||
СсылочныеТипы = ЮТОбщий.ОписаниеТиповЛюбаяСсылка();
|
||||
Ошибки = Новый Массив;
|
||||
|
||||
Для Каждого Ссылка Из Ссылки Цикл
|
||||
|
||||
Ссылка.ПолучитьОбъект().Удалить();
|
||||
ТипЗначения = ТипЗнч(Ссылка);
|
||||
Если Ссылка = Неопределено ИЛИ СтрНачинаетсяС(ЮТОбщий.ПредставлениеТипа(ТипЗначения), "Enum") Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
Если СсылочныеТипы.СодержитТип(ТипЗначения) Тогда
|
||||
Объект = Ссылка.ПолучитьОбъект();
|
||||
Если Объект <> Неопределено Тогда
|
||||
Объект.Удалить();
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
Менеджер = Менеджер(ЮТМетаданныеСервер.ОписаниеОбъектМетаданных(ТипЗначения, Ложь));
|
||||
Запись = Менеджер.СоздатьМенеджерЗаписи();
|
||||
ЗаполнитьЗначенияСвойств(Запись, Ссылка);
|
||||
Запись.Прочитать();
|
||||
Запись.Удалить();
|
||||
КонецЕсли;
|
||||
Исключение
|
||||
|
||||
Ошибки.Добавить(ЮТРегистрацияОшибок.ПредставлениеОшибки("Удаление " + Ссылка, ИнформацияОбОшибке()));
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ОбновитьНумерациюОбъектов();
|
||||
|
||||
Если ЗначениеЗаполнено(Ошибки) Тогда
|
||||
ВызватьИсключение СтрСоединить(Ошибки, Символы.ПС);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ФикцияЗначенияБазы(Знач ТипЗначения) Экспорт
|
||||
@ -188,9 +185,7 @@
|
||||
|
||||
ЗаполнитьБазовыеРеквизиты(Объект, ОписаниеОбъектаМетаданных);
|
||||
|
||||
ЗаписатьОбъект(Объект);
|
||||
|
||||
Возврат Объект.Ссылка;
|
||||
Возврат ЗаписатьОбъект(Объект);
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -235,7 +230,7 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаписатьОбъект(Объект, ОбменДаннымиЗагрузка = Ложь, РежимЗаписи = Неопределено)
|
||||
Функция ЗаписатьОбъект(Объект, ОбменДаннымиЗагрузка = Ложь, РежимЗаписи = Неопределено)
|
||||
|
||||
Если ОбменДаннымиЗагрузка Тогда
|
||||
Объект.ОбменДанными.Загрузка = Истина;
|
||||
@ -249,6 +244,8 @@
|
||||
Объект.Записать();
|
||||
КонецЕсли;
|
||||
|
||||
Возврат КлючЗаписи(Объект);
|
||||
|
||||
Исключение
|
||||
|
||||
Сообщение = СтрШаблон("Не удалось записать объект `%1` (%2)
|
||||
@ -257,7 +254,7 @@
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаполнитьБазовыеРеквизиты(Объект, ОписаниеОбъектаМетаданных)
|
||||
|
||||
@ -285,4 +282,38 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция КлючЗаписи(Объект)
|
||||
|
||||
ПредставлениеТипа = ЮТОбщий.ПредставлениеТипа(ТипЗнч(Объект));
|
||||
Если СтрНайти(ПредставлениеТипа, "Object.") Тогда
|
||||
|
||||
Возврат Объект.Ссылка;
|
||||
|
||||
ИначеЕсли СтрНайти(ПредставлениеТипа, "менеджер записи:") Тогда // TODO
|
||||
|
||||
Описание = ЮТМетаданныеСервер.ОписаниеОбъектМетаданных(ТипЗнч(Объект));
|
||||
|
||||
КлючевыеРеквизиты = Новый Структура();
|
||||
Для Каждого Реквизит Из Описание.Реквизиты Цикл
|
||||
Если Реквизит.Значение.ЭтоКлюч Тогда
|
||||
КлючевыеРеквизиты.Вставить(Реквизит.Ключ, Объект[Реквизит.Ключ]);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Менеджер = Менеджер(Описание);
|
||||
Возврат Менеджер.СоздатьКлючЗаписи(КлючевыеРеквизиты);
|
||||
|
||||
Иначе
|
||||
|
||||
Сообщение = ЮТОбщий.НеподдерживаемыйПараметрМетода("ЮТТестовыеДанныеВызовСервера.КлючЗаписи", Объект);
|
||||
ВызватьИсключение Сообщение;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция Менеджер(ОписаниеОбъектМетаданных)
|
||||
Возврат Новый(СтрШаблон("%1Менеджер.%2", ОписаниеОбъектМетаданных.ОписаниеТипа.Имя, ОписаниеОбъектМетаданных.Имя));
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -66,20 +66,83 @@
|
||||
ИначеЕсли ЭтоСистемноеПеречисление(Тип) Тогда
|
||||
|
||||
Значение = СлучайноЗначениеСистемногоПеречисления(Тип);
|
||||
|
||||
Иначе
|
||||
|
||||
Значение = ЮТТестовыеДанныеВызовСервера.ФикцияЗначенияБазы(Тип);
|
||||
ДобавитьТестовуюЗапись(Значение);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Значение = Неопределено Тогда
|
||||
ВызватьИсключение СтрШаблон("Создание фейковых значений для `%1` не поддерживается", ОписаниеТипа);
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Возврат ОписаниеТипа.ПривестиЗначение(Значение);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// см. ЮТТестовыеДанные.НовоеИмяВременногоФайла
|
||||
Функция НовоеИмяВременногоФайла(Расширение = Неопределено) Экспорт
|
||||
|
||||
//@skip-check missing-temporary-file-deletion
|
||||
Результат = ПолучитьИмяВременногоФайла(Расширение); // BSLLS:MissingTemporaryFileDeletion-off
|
||||
ДобавитьВременныйФайл(Результат);
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ДобавитьВременныйФайл(Файл) Экспорт
|
||||
|
||||
БуферВременныеФайлы().Добавить(Файл);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьТестовуюЗапись(Запись) Экспорт
|
||||
|
||||
#Если Сервер Тогда
|
||||
Если ТранзакцияАктивна() И ЮТНастройкиВыполнения.ВТранзакции() Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
#КонецЕсли
|
||||
Если ЮТНастройкиВыполнения.УдалениеТестовыхДанных() Тогда
|
||||
БуферТестовыеДанные().Добавить(Запись);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УдалитьТестовыеДанные() Экспорт
|
||||
|
||||
ЮТФайлы.УдалитьВременныеФайлы(БуферВременныеФайлы());
|
||||
|
||||
Если ЮТНастройкиВыполнения.УдалениеТестовыхДанных() Тогда
|
||||
ЮТТестовыеДанные.Удалить(БуферТестовыеДанные());
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#Область ОбработчикиСобытий
|
||||
|
||||
Процедура ПослеКаждогоТеста(ОписаниеСобытия) Экспорт
|
||||
|
||||
УдалитьТестовыеДанные(); // Очистка тестовых данных на уровне теста
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеТестовогоНабора(ОписаниеСобытия) Экспорт
|
||||
|
||||
УдалитьТестовыеДанные(); // Очистка тестовых данных на уровне теста
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеВсехТестов(ОписаниеСобытия) Экспорт
|
||||
|
||||
УдалитьТестовыеДанные(); // Очистка тестовых данных на уровне теста
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
@ -129,4 +192,31 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция БуферВременныеФайлы()
|
||||
|
||||
Возврат Буфер("ВременныеФайлы");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция БуферТестовыеДанные()
|
||||
|
||||
Возврат Буфер("ТестовыеДанные");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция Буфер(Ключ)
|
||||
|
||||
ТекущийКонтекст = ЮТест.Контекст().ТекущийКонтекст();
|
||||
|
||||
Если ТекущийКонтекст.Свойство(Ключ) Тогда
|
||||
Буфер = ТекущийКонтекст[Ключ];
|
||||
Иначе
|
||||
Буфер = Новый Массив();
|
||||
ТекущийКонтекст.Вставить(Ключ, Буфер);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Буфер;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -163,6 +163,27 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Устанавливает настройку удаления созданных тестовых данных
|
||||
// В отличии от использования транзакции:
|
||||
//
|
||||
// * Умеет работь с данными созданными на клиенте
|
||||
// * Только удаляет созданные данные и не откатывает изменения объектов
|
||||
// * Работает с данными созданными через API работы с тестовыми данными
|
||||
// * Удаляет данные созданные вне теста (в обработчиках событий, например, ПередТестовымНабором)
|
||||
//
|
||||
// Параметры:
|
||||
// УдалятьСозданныеДанные - Булево
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбщийМодуль - Этот же модуль, для замыкания
|
||||
Функция УдалениеТестовыхДанных(УдалятьСозданныеДанные = Истина) Экспорт
|
||||
|
||||
НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().УдалениеТестовыхДанных, УдалятьСозданныеДанные);
|
||||
|
||||
Возврат ЮТТесты;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Устанавливает параметры вызова теста.
|
||||
//
|
||||
// * Если метод вызывается первый раз, то он устанавливает параметры теста.
|
||||
|
@ -63,11 +63,13 @@
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ФиксированнаяСтруктура - Параметры исполнения теста:
|
||||
// * ВТранзакции - Строка - Тест должен выполняться в транзакции
|
||||
// * ВТранзакции - Строка - Тест должен выполняться в транзакции
|
||||
// * УдалениеТестовыхДанных - Строка - Тест должен удалить созданные тестовые данные
|
||||
Функция ПараметрыИсполненияТеста() Экспорт
|
||||
|
||||
Параметры = Новый Структура();
|
||||
Параметры.Вставить("ВТранзакции", "ВТранзакции");
|
||||
Параметры.Вставить("УдалениеТестовыхДанных", "УдалениеТестовыхДанных");
|
||||
|
||||
Возврат Новый ФиксированнаяСтруктура(Параметры);
|
||||
|
||||
@ -592,11 +594,20 @@
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Данные контекста исполнения:
|
||||
// * Уровень - Строка
|
||||
// * Уровень - Строка - Возможные значения см. УровниИсполнения
|
||||
// * Модуль - Неопределено - Нет исполняемого модуля
|
||||
// - см. ОписаниеТестовогоМодуля
|
||||
// * Набор - Неопределено - Нет исполняемого тестового набора
|
||||
// - см. ОписаниеИсполняемогоНабораТестов
|
||||
// * Тест - Неопределено - Нет исполняемого теста
|
||||
// - см. ОписаниеИсполняемогоТеста
|
||||
Функция НовыйКонтекстИсполнения() Экспорт
|
||||
|
||||
Контекст = Новый Структура();
|
||||
Контекст.Вставить("Уровень", "");
|
||||
Контекст.Вставить("Модуль", Неопределено);
|
||||
Контекст.Вставить("Набор", Неопределено);
|
||||
Контекст.Вставить("Тест", Неопределено);
|
||||
|
||||
Возврат Контекст;
|
||||
|
||||
|
@ -103,6 +103,49 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Удаляет файлы
|
||||
//
|
||||
// Параметры:
|
||||
// Файлы - Массив из Файл
|
||||
// - Массив из Строка
|
||||
Процедура УдалитьВременныеФайлы(Файлы) Экспорт
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Файлы) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Ошибки = Новый Массив();
|
||||
|
||||
Для Каждого УдаляемыйФайл Из Файлы Цикл
|
||||
|
||||
Если ТипЗнч(УдаляемыйФайл) = Тип("Строка") Тогда
|
||||
УдаляемыйФайл = Новый Файл(УдаляемыйФайл);
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
Если УдаляемыйФайл.Существует() Тогда
|
||||
|
||||
Если УдаляемыйФайл.ПолучитьТолькоЧтение() Тогда
|
||||
УдаляемыйФайл.УстановитьТолькоЧтение(Ложь);
|
||||
КонецЕсли;
|
||||
|
||||
УдалитьФайлы(УдаляемыйФайл.ПолноеИмя);
|
||||
|
||||
КонецЕсли;
|
||||
Исключение
|
||||
|
||||
Ошибки.Добавить(ЮТРегистрацияОшибок.ПредставлениеОшибки("Удаление файла " + УдаляемыйФайл, ИнформацияОбОшибке()));
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если ЗначениеЗаполнено(Ошибки) Тогда
|
||||
ВызватьИсключение СтрСоединить(Ошибки, Символы.ПС);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
@ -9,7 +9,7 @@
|
||||
<includeInCommandInterface>true</includeInCommandInterface>
|
||||
<content>CommonModule.МокитоСлужебный</content>
|
||||
<content>CommonModule.ЮТЛогирование</content>
|
||||
<content>CommonModule.ЮТТестовыеДанные</content>
|
||||
<content>CommonModule.ЮТТестовыеДанныеСлужебный</content>
|
||||
<content>CommonModule.ЮТУтверждения</content>
|
||||
<parentSubsystem>Subsystem.ЮТФункциональность</parentSubsystem>
|
||||
</mdclass:Subsystem>
|
||||
|
@ -25,7 +25,7 @@
|
||||
.ДобавитьТест("Обучение_ЦепочкаВызовов")
|
||||
.ДобавитьТест("Проверить")
|
||||
.ДобавитьТест("Прогон_НакоплениеСтатистики").СПараметрами(Истина).СПараметрами(Ложь)
|
||||
.ДобавитьСерверныйТест("МокированиеМетодовСсылочныхОбъектов")
|
||||
.ДобавитьСерверныйТест("МокированиеМетодовСсылочныхОбъектов").ВТранзакции()
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
|
@ -20,7 +20,7 @@
|
||||
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
ЮТТесты.ВТранзакции()
|
||||
ЮТТесты.ВТранзакции().УдалениеТестовыхДанных()
|
||||
.ДобавитьТест("ЗначенияРеквизитов")
|
||||
.ДобавитьТест("ЗначениеРеквизита")
|
||||
.ДобавитьТест("ТаблицаСодержитЗаписи")
|
||||
|
@ -20,7 +20,7 @@
|
||||
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
ЮТТесты.ВТранзакции()
|
||||
ЮТТесты.ВТранзакции().УдалениеТестовыхДанных()
|
||||
.ДобавитьТест("ЗаполнитьСправочник")
|
||||
.ДобавитьТест("ЗаполнитьДокумент")
|
||||
;
|
||||
|
@ -21,6 +21,8 @@
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
ЮТТесты
|
||||
.ВТранзакции()
|
||||
.УдалениеТестовыхДанных()
|
||||
.ДобавитьТест("Удалить");
|
||||
;
|
||||
|
||||
|
@ -20,7 +20,12 @@
|
||||
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
КодТовара = ЮТОбщий.ЧислоВСтроку(ЮТест.Данные().СлучайноеПоложительноеЧисло(999999999));
|
||||
Период = ТекущаяДата();
|
||||
|
||||
ЮТТесты
|
||||
.ВТранзакции()
|
||||
.УдалениеТестовыхДанных()
|
||||
.ДобавитьТест("Фикция")
|
||||
.СПараметрами(Новый ОписаниеТипов("Число"))
|
||||
.СПараметрами(Новый ОписаниеТипов("Строка"))
|
||||
@ -35,6 +40,16 @@
|
||||
.СПараметрами(Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ВидыХарактеристик"))
|
||||
.СПараметрами(Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ВидыХарактеристик, СправочникСсылка.Банки, ПеречислениеСсылка.СостоянияЗаказов"))
|
||||
.СПараметрами(Новый ОписаниеТипов("ВидДвиженияНакопления"))
|
||||
.ДобавитьТест("УдалениеТестовыхДанныхСправочник")
|
||||
.СПараметрами(КодТовара)
|
||||
.СПараметрами(КодТовара)
|
||||
.ДобавитьТест("УдалениеТестовыхДанныхДокумент")
|
||||
.СПараметрами(КодТовара)
|
||||
.СПараметрами(КодТовара)
|
||||
.ДобавитьТест("УдалениеТестовыхДанныхРегистрСведений")
|
||||
.СПараметрами(Период)
|
||||
.СПараметрами(Период)
|
||||
.ДобавитьТест("НеУдалениеТестовыхДанныхВызовСервера")
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
@ -49,5 +64,100 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УдалениеТестовыхДанныхСправочник(Код) Экспорт
|
||||
|
||||
СоздатьСсылку("Тест", Код);
|
||||
|
||||
Ссылки = ЮТест.Контекст().Значение("Ссылки");
|
||||
СсылкаСуществует(Ссылки.Набор, "Набор");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура НеУдалениеТестовыхДанныхВызовСервера() Экспорт
|
||||
|
||||
Ссылка = ПомощникТестированияВызовСервера.НовыйТовар();
|
||||
ЮТест.Контекст().Значение("Ссылки").Вставить("ТестВызовСервера", Ссылка);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УдалениеТестовыхДанныхДокумент(НомерДокумента) Экспорт
|
||||
|
||||
ЮТест.Данные().КонструкторОбъекта("Документы.ПриходТовара")
|
||||
.Установить("Номер", НомерДокумента)
|
||||
.Провести();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УдалениеТестовыхДанныхРегистрСведений(Период) Экспорт
|
||||
|
||||
ЮТест.ОжидаетЧтоТаблицаБазы("РегистрСведений.КурсыВалют").НеСодержитЗаписи(ЮТест.Предикат().Реквизит("Период").Равно(Период));
|
||||
ЮТест.Данные().КонструкторОбъекта("РегистрыСведений.КурсыВалют")
|
||||
.Фикция("Валюта")
|
||||
.Фикция("Курс")
|
||||
.Установить("Период", Период)
|
||||
.Записать();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ПередВсемиТестами() Экспорт
|
||||
|
||||
Ссылки = Новый Структура("Набор, Тест");
|
||||
ЮТест.Контекст().УстановитьЗначение("Ссылки", Ссылки);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередТестовымНабором() Экспорт
|
||||
|
||||
СоздатьСсылку("Набор");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеВсехТестов() Экспорт
|
||||
|
||||
Ссылки = ЮТест.Контекст().Значение("Ссылки");
|
||||
СсылкаНеСуществует(Ссылки.Набор, "Набор");
|
||||
Если Ссылки.Тест <> Неопределено Тогда
|
||||
СсылкаНеСуществует(Ссылки.Тест, "Тест");
|
||||
КонецЕсли;
|
||||
|
||||
#Если Сервер Тогда
|
||||
СсылкаНеСуществует(Ссылки.ТестВызовСервера, "ТестВызовСервера");
|
||||
#Иначе
|
||||
СсылкаСуществует(Ссылки.ТестВызовСервера, "ТестВызовСервера");
|
||||
#КонецЕсли
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СоздатьСсылку(ИмяПеременной, Знач Код = Неопределено)
|
||||
|
||||
Если Код = Неопределено Тогда
|
||||
Код = ЮТОбщий.ЧислоВСтроку(ЮТест.Данные().СлучайноеПоложительноеЧисло(999999999));
|
||||
КонецЕсли;
|
||||
|
||||
Ссылка = ЮТест.Данные().КонструкторОбъекта("Справочники.Товары")
|
||||
.Установить("Наименование", Код)
|
||||
.Установить("Код", Код)
|
||||
.Записать();
|
||||
ЮТест.Контекст().Значение("Ссылки").Вставить(ИмяПеременной, Ссылка);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СсылкаСуществует(Ссылка, Описание)
|
||||
|
||||
ЮТест.ОжидаетЧто(Ссылка, Описание).ИмеетТип("СправочникСсылка.Товары");
|
||||
ЮТест.ОжидаетЧтоТаблицаБазы("Справочник.Товары", Описание).СодержитЗаписи(ЮТест.Предикат().Реквизит("Ссылка").Равно(Ссылка));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СсылкаНеСуществует(Ссылка, Описание)
|
||||
|
||||
ЮТест.ОжидаетЧто(Ссылка, Описание).ИмеетТип("СправочникСсылка.Товары");
|
||||
ЮТест.ОжидаетЧтоТаблицаБазы("Справочник.Товары", Описание).НеСодержитЗаписи(ЮТест.Предикат().Реквизит("Ссылка").Равно(Ссылка));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -20,7 +20,7 @@
|
||||
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
ЮТТесты.ВТранзакции()
|
||||
ЮТТесты.ВТранзакции().УдалениеТестовыхДанных()
|
||||
.ДобавитьТест("СодержитЗаписи")
|
||||
.ДобавитьТест("НеСодержитЗаписи")
|
||||
.ДобавитьТест("СообщенияОбОшибках")
|
||||
|
@ -16,11 +16,7 @@
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// ПрограммныйИнтерфейс
|
||||
// Экспортные процедуры и функции для прикладного использования
|
||||
///////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// Проверяет существование ссылки в информационной базе
|
||||
//
|
||||
@ -54,4 +50,17 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция НовыйТовар(Знач Код = Неопределено) Экспорт
|
||||
|
||||
Если Код = Неопределено Тогда
|
||||
Код = ЮТОбщий.ЧислоВСтроку(ЮТест.Данные().СлучайноеПоложительноеЧисло(999999999));
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ЮТест.Данные().КонструкторОбъекта("Справочники.Товары")
|
||||
.Установить("Наименование", Код)
|
||||
.Установить("Код", Код)
|
||||
.Записать();
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
Loading…
x
Reference in New Issue
Block a user